mirror of
				https://github.com/Z3Prover/z3
				synced 2025-11-03 21:09:11 +00:00 
			
		
		
		
	Added ml component
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
		
							parent
							
								
									454fa7dcdd
								
							
						
					
					
						commit
						bcca613cb2
					
				
					 60 changed files with 40332 additions and 16 deletions
				
			
		
							
								
								
									
										361
									
								
								ml/x3V3.mli
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										361
									
								
								ml/x3V3.mli
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,361 @@
 | 
			
		|||
 | 
			
		||||
quote (mli,"
 | 
			
		||||
 | 
			
		||||
(** {2 {L ML Extensions}} *)
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ mk_context_x configs] \] is a shorthand for the context with configurations in [configs].
 | 
			
		||||
*)
 | 
			
		||||
val mk_context_x: (string * string) array -> context;;
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ get_app_args c a ] \] is the array of arguments of an application. If [t] is a constant, then the array is empty.
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.get_app_num_args}
 | 
			
		||||
  - {b See also}: {!Z3.get_app_arg}
 | 
			
		||||
*)
 | 
			
		||||
val get_app_args:  context -> app -> ast array
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ get_app_args c d ] \] is the array of parameters of [d].
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.get_domain_size}
 | 
			
		||||
  - {b See also}: {!Z3.get_domain}
 | 
			
		||||
*)
 | 
			
		||||
val get_domains: context -> func_decl -> sort array
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ get_array_sort c t ] \] is the domain and the range of [t].
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.get_array_sort_domain}
 | 
			
		||||
  - {b See also}: {!Z3.get_array_sort_range}
 | 
			
		||||
*)
 | 
			
		||||
val get_array_sort: context -> sort -> sort * sort
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ get_tuple_sort c ty ] \] is the pair [(mk_decl, fields)] where [mk_decl] is the constructor declaration of [ty], and [fields] is the array of fields in [ty].
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.get_tuple_sort_mk_decl}
 | 
			
		||||
  - {b See also}: {!Z3.get_tuple_sort_num_fields}
 | 
			
		||||
  - {b See also}: {!Z3.get_tuple_sort_field_decl}
 | 
			
		||||
*)
 | 
			
		||||
val get_tuple_sort: context -> sort -> (func_decl * func_decl array)
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ datatype_constructor_refined ] \] is the refinement of a datatype constructor.
 | 
			
		||||
  
 | 
			
		||||
  It contains the constructor declaration, recognizer, and list of accessor functions.
 | 
			
		||||
*)
 | 
			
		||||
type datatype_constructor_refined = { 
 | 
			
		||||
   constructor : func_decl; 
 | 
			
		||||
   recognizer : func_decl; 
 | 
			
		||||
   accessors : func_decl array 
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ get_datatype_sort c ty ] \] is the array of triples [(constructor, recognizer, fields)] where [constructor] is the constructor declaration of [ty], [recognizer] is the recognizer for the [constructor], and [fields] is the array of fields in [ty].
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.get_datatype_sort_num_constructors}
 | 
			
		||||
  - {b See also}: {!Z3.get_datatype_sort_constructor}
 | 
			
		||||
  - {b See also}: {!Z3.get_datatype_sort_recognizer}
 | 
			
		||||
  - {b See also}: {!Z3.get_datatype_sort_constructor_accessor}
 | 
			
		||||
*)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
val get_datatype_sort: context -> sort -> datatype_constructor_refined array
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ get_model_constants c m ] \] is the array of constants in the model [m].
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.get_model_num_constants}
 | 
			
		||||
  - {b See also}: {!Z3.get_model_constant}
 | 
			
		||||
*)
 | 
			
		||||
val get_model_constants: context -> model -> func_decl array
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ get_model_func_entry c m i j ] \] is the [j]'th entry in the [i]'th function in the model [m].
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.get_model_func_entry_num_args}
 | 
			
		||||
  - {b See also}: {!Z3.get_model_func_entry_arg}
 | 
			
		||||
  - {b See also}: {!Z3.get_model_func_entry_value}
 | 
			
		||||
*)
 | 
			
		||||
val get_model_func_entry: context -> model -> int -> int -> (ast array * ast);;
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ get_model_func_entries c m i ] \] is the array of entries in the [i]'th function in the model [m].
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.get_model_func_num_entries}
 | 
			
		||||
  - {b See also}: {!Z3.get_model_func_entry}
 | 
			
		||||
*)
 | 
			
		||||
val get_model_func_entries: context -> model -> int -> (ast array * ast) array;;
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ get_model_funcs c m ] \] is the array of functions in the model [m]. Each function is represented by the triple [(decl, entries, else)], where [decl] is the declaration name for the function, [entries] is the array of entries in the function, and [else] is the default (else) value for the function.
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.get_model_num_funcs}
 | 
			
		||||
  - {b See also}: {!Z3.get_model_func_decl}
 | 
			
		||||
  - {b See also}: {!Z3.get_model_func_entries}
 | 
			
		||||
  - {b See also}: {!Z3.get_model_func_else}
 | 
			
		||||
*)
 | 
			
		||||
val get_model_funcs: context -> model -> 
 | 
			
		||||
  (symbol *
 | 
			
		||||
   (ast array * ast) array * 
 | 
			
		||||
   ast) array
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ get_smtlib_formulas c ] \] is the array of formulas created by a preceding call to {!Z3.parse_smtlib_string} or {!Z3.parse_smtlib_file}.
 | 
			
		||||
 | 
			
		||||
  Recommend use {!Z3.parse_smtlib_string_x} or {!Z3.parse_smtlib_file_x} for functional style interface to the SMT-LIB parser.
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_string_x}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_file_x}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_string}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_file}
 | 
			
		||||
  - {b See also}: {!Z3.get_smtlib_num_formulas}
 | 
			
		||||
  - {b See also}: {!Z3.get_smtlib_formula}
 | 
			
		||||
*)
 | 
			
		||||
val get_smtlib_formulas: context -> ast array
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [get_smtlib_assumptions c] \] is the array of assumptions created by a preceding call to {!Z3.parse_smtlib_string} or {!Z3.parse_smtlib_file}.
 | 
			
		||||
 | 
			
		||||
  Recommend use {!Z3.parse_smtlib_string_x} or {!Z3.parse_smtlib_file_x} for functional style interface to the SMT-LIB parser.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_string_x}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_file_x}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_string}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_file}
 | 
			
		||||
  - {b See also}: {!Z3.get_smtlib_num_assumptions}
 | 
			
		||||
  - {b See also}: {!Z3.get_smtlib_assumption}
 | 
			
		||||
*)
 | 
			
		||||
val get_smtlib_assumptions: context -> ast array
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ get_smtlib_decls c ] \] is the array of declarations created by a preceding call to {!Z3.parse_smtlib_string} or {!Z3.parse_smtlib_file}.
 | 
			
		||||
 | 
			
		||||
  Recommend use {!Z3.parse_smtlib_string_x} or {!Z3.parse_smtlib_file_x} for functional style interface to the SMT-LIB parser.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_string_x}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_file_x}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_string}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_file}
 | 
			
		||||
  - {b See also}: {!Z3.get_smtlib_num_decls}
 | 
			
		||||
  - {b See also}: {!Z3.get_smtlib_decl}
 | 
			
		||||
*)
 | 
			
		||||
val get_smtlib_decls: context -> func_decl array
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ get_smtlib_parse_results c ] \] is the triple [(get_smtlib_formulas c, get_smtlib_assumptions c, get_smtlib_decls c)].
 | 
			
		||||
 | 
			
		||||
  Recommend use {!Z3.parse_smtlib_string_x} or {!Z3.parse_smtlib_file_x} for functional style interface to the SMT-LIB parser.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_string_x}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_file_x}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_string}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_file}
 | 
			
		||||
  - {b See also}: {!Z3.get_smtlib_formulas}
 | 
			
		||||
  - {b See also}: {!Z3.get_smtlib_assumptions}
 | 
			
		||||
  - {b See also}: {!Z3.get_smtlib_decls}
 | 
			
		||||
*)
 | 
			
		||||
val get_smtlib_parse_results: context -> (ast array * ast array * func_decl array)
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ parse_smtlib_string_formula c ... ] \] calls [(parse_smtlib_string c ...)] and returns the single formula produced. 
 | 
			
		||||
 | 
			
		||||
  Recommended for functional style interface to the SMT-LIB parser.
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_file_formula}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_string_x}
 | 
			
		||||
*)
 | 
			
		||||
val parse_smtlib_string_formula: context -> string -> symbol array -> sort array -> symbol array -> func_decl array -> ast
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ parse_smtlib_file_formula c ... ] \] calls [(parse_smtlib_file c ...)] and returns the single formula produced. 
 | 
			
		||||
 | 
			
		||||
  Recommended for functional style interface to the SMT-LIB parser.
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_file_formula}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_file_x}
 | 
			
		||||
*)
 | 
			
		||||
val parse_smtlib_file_formula: context -> string -> symbol array -> sort array -> symbol array -> func_decl array -> ast
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ parse_smtlib_string_x c ... ] \] is [(parse_smtlib_string c ...; get_smtlib_parse_results c)]
 | 
			
		||||
 | 
			
		||||
  Recommended for functional style interface to the SMT-LIB parser.
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_file_x}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_string}
 | 
			
		||||
  - {b See also}: {!Z3.get_smtlib_parse_results}
 | 
			
		||||
*)
 | 
			
		||||
val parse_smtlib_string_x: context -> string -> symbol array -> sort array -> symbol array -> func_decl array -> (ast array * ast array * func_decl array)
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ parse_smtlib_file_x c ... ] \] is [(parse_smtlib_file c ...; get_smtlib_parse_results c)]
 | 
			
		||||
 | 
			
		||||
  Recommended for functional style interface to the SMT-LIB parser.
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_string_x}
 | 
			
		||||
  - {b See also}: {!Z3.parse_smtlib_file}
 | 
			
		||||
  - {b See also}: {!Z3.get_smtlib_parse_results}
 | 
			
		||||
*)
 | 
			
		||||
val parse_smtlib_file_x: context -> string -> symbol array -> sort array -> symbol array -> func_decl array -> (ast array * ast array * func_decl array)
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ symbol_refined ] \] is the refinement of a {!Z3.symbol} .
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.symbol_refine}
 | 
			
		||||
  - {b See also}: {!Z3.get_symbol_kind}
 | 
			
		||||
*)
 | 
			
		||||
type symbol_refined =
 | 
			
		||||
  | Symbol_int of int
 | 
			
		||||
  | Symbol_string of string
 | 
			
		||||
  | Symbol_unknown;;
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ symbol_refine c s ] \] is the refined symbol of [s].
 | 
			
		||||
 | 
			
		||||
  - {b See also}:  {!Z3.symbol_refined}
 | 
			
		||||
  - {b See also}: {!Z3.get_symbol_kind}
 | 
			
		||||
*)
 | 
			
		||||
val symbol_refine: context -> symbol -> symbol_refined;;
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ sort_refined ] \] is the refinement of a {!Z3.sort} .
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.sort_refine}
 | 
			
		||||
  - {b See also}: {!Z3.get_sort_kind}
 | 
			
		||||
*)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
type sort_refined =
 | 
			
		||||
  | Sort_uninterpreted of symbol
 | 
			
		||||
  | Sort_bool
 | 
			
		||||
  | Sort_int
 | 
			
		||||
  | Sort_real
 | 
			
		||||
  | Sort_bv of int
 | 
			
		||||
  | Sort_array of (sort * sort)
 | 
			
		||||
  | Sort_datatype of datatype_constructor_refined array
 | 
			
		||||
  | Sort_relation
 | 
			
		||||
  | Sort_finite_domain
 | 
			
		||||
  | Sort_unknown of symbol
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ sort_refine c t ] \] is the refined sort of [t].
 | 
			
		||||
 | 
			
		||||
  - {b See also}:  {!Z3.sort_refined}
 | 
			
		||||
  - {b See also}: {!Z3.get_sort_kind}
 | 
			
		||||
*)
 | 
			
		||||
val sort_refine: context -> sort -> sort_refined;;
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ binder_type ] \] is a universal or existential quantifier.
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.term_refined}
 | 
			
		||||
*)
 | 
			
		||||
type binder_type = | Forall | Exists 
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ numeral_refined ] \] is the refinement of a numeral .
 | 
			
		||||
 | 
			
		||||
  Numerals whose fractional representation can be fit with
 | 
			
		||||
  64 bit integers are treated as small.
 | 
			
		||||
 | 
			
		||||
*)
 | 
			
		||||
type numeral_refined = 
 | 
			
		||||
  | Numeral_small  of int64 * int64
 | 
			
		||||
  | Numeral_large  of string
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ term_refined ] \] is the refinement of a {!Z3.ast} .
 | 
			
		||||
 | 
			
		||||
  - {b See also}: {!Z3.term_refine}
 | 
			
		||||
*)
 | 
			
		||||
type term_refined = 
 | 
			
		||||
  | Term_app        of decl_kind * func_decl * ast array
 | 
			
		||||
  | Term_quantifier of binder_type * int * ast array array * (symbol * sort) array * ast
 | 
			
		||||
  | Term_numeral    of numeral_refined * sort
 | 
			
		||||
  | Term_var        of int * sort
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [ term_refine c a ] \] is the refined term of [a].
 | 
			
		||||
 | 
			
		||||
  - {b See also}:  {!Z3.term_refined}
 | 
			
		||||
*)
 | 
			
		||||
val term_refine : context -> ast -> term_refined
 | 
			
		||||
 | 
			
		||||
(** 
 | 
			
		||||
  \[ [mk_theory c name ] \] create a custom theory.
 | 
			
		||||
 | 
			
		||||
*)
 | 
			
		||||
val mk_theory : context -> string -> theory
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [set_delete_callback th cb] \] set callback when theory gets deleted.
 | 
			
		||||
*)
 | 
			
		||||
val set_delete_callback : theory -> (unit -> unit) -> unit
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [set_reduce_app_callback th cb] \] set callback for simplifying theory terms.
 | 
			
		||||
*)
 | 
			
		||||
val set_reduce_app_callback : theory -> (func_decl -> ast array -> ast option) -> unit
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [set_reduce_eq_callback th cb] \] set callback for simplifying equalities over theory terms.
 | 
			
		||||
*)
 | 
			
		||||
val set_reduce_eq_callback : theory -> (ast -> ast -> ast option) -> unit
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [set_reduce_distinct_callback th cb] \] set callback for simplifying disequalities over theory terms.
 | 
			
		||||
*)
 | 
			
		||||
val set_reduce_distinct_callback : theory -> (ast array -> ast option) -> unit
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [set_new_app_callback th cb] \] set callback for registering new application.
 | 
			
		||||
*)
 | 
			
		||||
val set_new_app_callback : theory -> (ast -> unit) -> unit
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [set_new_elem_callback th cb] \] set callback for registering new element.
 | 
			
		||||
 | 
			
		||||
  - {b See also}: the help for the corresponding C API function.  
 | 
			
		||||
*)
 | 
			
		||||
val set_new_elem_callback : theory -> (ast -> unit) -> unit
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [set_init_search_callback th cb] \] set callback when Z3 starts searching for a satisfying assignment.
 | 
			
		||||
*)
 | 
			
		||||
val set_init_search_callback : theory -> (unit -> unit) -> unit
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [set_push_callback th cb] \] set callback for a logical context push.
 | 
			
		||||
*)
 | 
			
		||||
val set_push_callback : theory -> (unit -> unit) -> unit
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [set_pop_callback th cb] \] set callback for a logical context pop.
 | 
			
		||||
*)
 | 
			
		||||
val set_pop_callback : theory -> (unit -> unit) -> unit
 | 
			
		||||
 | 
			
		||||
(**
 | 
			
		||||
  \[ [set_restart_callback th cb] \] set callback for search restart.
 | 
			
		||||
*)
 | 
			
		||||
val set_restart_callback : theory -> (unit -> unit) -> unit
 | 
			
		||||
 | 
			
		||||
val set_reset_callback : theory -> (unit -> unit) -> unit
 | 
			
		||||
 | 
			
		||||
val set_final_check_callback : theory -> (unit -> bool) -> unit
 | 
			
		||||
 | 
			
		||||
val set_new_eq_callback : theory -> (ast -> ast -> unit) -> unit
 | 
			
		||||
 | 
			
		||||
val set_new_diseq_callback : theory -> (ast -> ast -> unit) -> unit
 | 
			
		||||
 | 
			
		||||
val set_new_assignment_callback : theory -> (ast -> bool -> unit) -> unit
 | 
			
		||||
 | 
			
		||||
val set_new_relevant_callback : theory -> (ast -> unit) -> unit
 | 
			
		||||
 | 
			
		||||
");
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue