123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974(**************************************************************************)(* Bitwuzla: Satisfiability Modulo Theories (SMT) solver. *)(* *)(* Copyright (C) 2023 by the authors listed in the AUTHORS file at *)(* https://github.com/bitwuzla/bitwuzla/blob/main/AUTHORS *)(* *)(* This file is part of Bitwuzla under the MIT license. *)(* See COPYING for more information at *)(* https://github.com/bitwuzla/bitwuzla/blob/main/COPYING *)(**************************************************************************)externalcopyright:unit->string="ocaml_bitwuzla_cxx_copyright"externalversion:unit->string="ocaml_bitwuzla_cxx_version"externalinit_format:unit->unit="ocaml_bitwuzla_cxx_init_format"let()=Callback.register"Format.pp_open_vbox"Format.pp_open_vbox;Callback.register"Format.pp_print_string"Format.pp_print_string;Callback.register"Format.pp_print_char"Format.pp_print_char;Callback.register"Format.pp_print_space"Format.pp_print_space;Callback.register"Format.pp_close_box"Format.pp_close_box;init_format()externalmk_array_sort:Manager.t->Sort.t->Sort.t->Sort.t="ocaml_bitwuzla_cxx_mk_array_sort"externalmk_bool_sort:Manager.t->Sort.t="ocaml_bitwuzla_cxx_mk_bool_sort"externalmk_bv_sort:Manager.t->(int[@untagged])->Sort.t="ocaml_bitwuzla_cxx_mk_bv_sort""native_bitwuzla_cxx_mk_bv_sort"externalmk_fp_sort:Manager.t->(int[@untagged])->(int[@untagged])->Sort.t="ocaml_bitwuzla_cxx_mk_fp_sort""native_bitwuzla_cxx_mk_fp_sort"externalmk_fun_sort:Manager.t->Sort.tarray->Sort.t->Sort.t="ocaml_bitwuzla_cxx_mk_fun_sort"externalmk_rm_sort:Manager.t->Sort.t="ocaml_bitwuzla_cxx_mk_rm_sort"externalmk_uninterpreted_sort:Manager.t->?symbol:string->unit->Sort.t="ocaml_bitwuzla_cxx_mk_uninterpreted_sort"externalmk_true:Manager.t->Term.t="ocaml_bitwuzla_cxx_mk_true"externalmk_false:Manager.t->Term.t="ocaml_bitwuzla_cxx_mk_false"externalmk_bv_zero:Manager.t->Sort.t->Term.t="ocaml_bitwuzla_cxx_mk_bv_zero"externalmk_bv_one:Manager.t->Sort.t->Term.t="ocaml_bitwuzla_cxx_mk_bv_one"externalmk_bv_ones:Manager.t->Sort.t->Term.t="ocaml_bitwuzla_cxx_mk_bv_ones"externalmk_bv_min_signed:Manager.t->Sort.t->Term.t="ocaml_bitwuzla_cxx_mk_bv_min_signed"externalmk_bv_max_signed:Manager.t->Sort.t->Term.t="ocaml_bitwuzla_cxx_mk_bv_max_signed"externalmk_bv_value:Manager.t->Sort.t->string->(int[@untagged])->Term.t="ocaml_bitwuzla_cxx_mk_bv_value""native_bitwuzla_cxx_mk_bv_value"externalmk_bv_value_int:Manager.t->Sort.t->(int[@untagged])->Term.t="ocaml_bitwuzla_cxx_mk_bv_value_int""native_bitwuzla_cxx_mk_bv_value_int64"externalmk_bv_value_int64:Manager.t->Sort.t->(int64[@unboxed])->Term.t="ocaml_bitwuzla_cxx_mk_bv_value_int64""native_bitwuzla_cxx_mk_bv_value_int64"externalmk_fp_pos_zero:Manager.t->Sort.t->Term.t="ocaml_bitwuzla_cxx_mk_fp_pos_zero"externalmk_fp_neg_zero:Manager.t->Sort.t->Term.t="ocaml_bitwuzla_cxx_mk_fp_neg_zero"externalmk_fp_pos_inf:Manager.t->Sort.t->Term.t="ocaml_bitwuzla_cxx_mk_fp_pos_inf"externalmk_fp_neg_inf:Manager.t->Sort.t->Term.t="ocaml_bitwuzla_cxx_mk_fp_neg_inf"externalmk_fp_nan:Manager.t->Sort.t->Term.t="ocaml_bitwuzla_cxx_mk_fp_nan"externalmk_fp_value:Manager.t->Term.t->Term.t->Term.t->Term.t="ocaml_bitwuzla_cxx_mk_fp_value"externalmk_fp_value_from_real:Manager.t->Sort.t->Term.t->string->Term.t="ocaml_bitwuzla_cxx_mk_fp_value_from_real"externalmk_fp_value_from_rational:Manager.t->Sort.t->Term.t->string->string->Term.t="ocaml_bitwuzla_cxx_mk_fp_value_from_rational"externalmk_rm_value:Manager.t->(int[@untagged])->Term.t="ocaml_bitwuzla_cxx_mk_rm_value""native_bitwuzla_cxx_mk_rm_value"externalmk_term1:Manager.t->(int[@untagged])->Term.t->Term.t="ocaml_bitwuzla_cxx_mk_term1""native_bitwuzla_cxx_mk_term1"externalmk_term2:Manager.t->(int[@untagged])->Term.t->Term.t->Term.t="ocaml_bitwuzla_cxx_mk_term2""native_bitwuzla_cxx_mk_term2"externalmk_term3:Manager.t->(int[@untagged])->Term.t->Term.t->Term.t->Term.t="ocaml_bitwuzla_cxx_mk_term3""native_bitwuzla_cxx_mk_term3"externalmk_term1_indexed1:Manager.t->(int[@untagged])->Term.t->(int[@untagged])->Term.t="ocaml_bitwuzla_cxx_mk_term1_indexed1""native_bitwuzla_cxx_mk_term1_indexed1"externalmk_term1_indexed2:Manager.t->(int[@untagged])->Term.t->(int[@untagged])->(int[@untagged])->Term.t="ocaml_bitwuzla_cxx_mk_term1_indexed2""native_bitwuzla_cxx_mk_term1_indexed2"externalmk_term2_indexed1:Manager.t->(int[@untagged])->Term.t->Term.t->(int[@untagged])->Term.t="ocaml_bitwuzla_cxx_mk_term2_indexed1""native_bitwuzla_cxx_mk_term2_indexed1"externalmk_term2_indexed2:Manager.t->(int[@untagged])->Term.t->Term.t->(int[@untagged])->(int[@untagged])->Term.t="ocaml_bitwuzla_cxx_mk_term2_indexed2""native_bitwuzla_cxx_mk_term2_indexed2"externalmk_term:Manager.t->(int[@untagged])->Term.tarray->intarray->Term.t="ocaml_bitwuzla_cxx_mk_term""native_bitwuzla_cxx_mk_term"externalmk_const:Manager.t->?symbol:string->Sort.t->Term.t="ocaml_bitwuzla_cxx_mk_const"externalmk_const_array:Manager.t->Sort.t->Term.t->Term.t="ocaml_bitwuzla_cxx_mk_const_array"externalmk_var:Manager.t->?symbol:string->Sort.t->Term.t="ocaml_bitwuzla_cxx_mk_var"externalsubstitute_term:Manager.t->Term.t->(Term.t*Term.t)array->Term.t="ocaml_bitwuzla_cxx_substitute_term"externalsubstitute_terms:Manager.t->Term.tarray->(Term.t*Term.t)array->unit="ocaml_bitwuzla_cxx_substitute_terms"moduleOptions=OptionsmoduletypeS=sigmoduleSort:sig(** {1:sort Sort} *)typet(** A Bitwuzla sort. *)(** {2:sort_util Util} *)valhash:t->int(**
[hash t]
compute the hash value for a sort.
@param t The sort.
@return The hash value of the sort.
*)valequal:t->t->bool(**
[equal a b]
Syntactical equality operator.
@param a The first sort.
@param b The second sort.
@return True if the given sorts are equal.
*)valcompare:t->t->int(**
[compare a b]
Syntactical comparison operator.
@param a The first sort.
@param b The second sort.
@return Zero if the given sorts are equal,
a positive number if [a] > [b],
a negative number otherwise.
*)valpp:Format.formatter->t->unit(**
[pp formatter t]
print sort.
@param t The sort.
@param formatter The outpout formatter.
*)valto_string:t->string(**
[to_string t]
get string representation of this sort.
@return String representation of this sort.
*)(** {2:sort_query Query} *)valid:t->int64(**
[id t]
get the id of this sort.
@param t The sort.
@return The id value of the sort.
*)valbv_size:t->int(**
[bv_size t]
get the size of a bit-vector sort.
Requires that given sort is a bit-vector sort.
@param t The sort.
@return The size of the bit-vector sort.
*)valfp_exp_size:t->int(**
[fp_exp_size sort]
get the exponent size of a floating-point sort.
Requires that given sort is a floating-point sort.
@param t The sort.
@return The exponent size of the floating-point sort.
*)valfp_sig_size:t->int(**
[fp_sig_size t]
get the significand size of a floating-point sort.
Requires that given sort is a floating-point sort.
@param t The sort.
@return The significand size of the floating-point sort.
*)valarray_index:t->t(**
[array_index t]
get the index sort of an array sort.
Requires that given sort is an array sort.
@param t The sort.
@return The index sort of the array sort.
*)valarray_element:t->t(**
[array_element t]
get the element sort of an array sort.
Requires that given sort is an array sort.
@param t The sort.
@return The element sort of the array sort.
*)valfun_domain:t->tarray(**
[fun_domain_sorts t]
get the domain sorts of a function sort.
Requires that given sort is a function sort.
@param t The sort.
@return The domain sorts of the function sort as an array of sort.
*)valfun_codomain:t->t(**
[fun_codomain t]
get the codomain sort of a function sort.
Requires that given sort is a function sort.
@param t The sort.
@return The codomain sort of the function sort.
*)valfun_arity:t->int(**
[fun_arity t]
get the arity of a function sort.
@param t The sort.
@return The number of arguments of the function sort.
*)valuninterpreted_symbol:t->string(**
[uninterpreted_symbol t]
get the symbol of an uninterpreted sort.
@param t The sort.
@return The symbol.
@raise Not_found if no symbol is defined.
*)valis_array:t->bool(**
[is_array t]
determine if a sort is an array sort.
@param t The sort.
@return [true] if [t] is an array sort.
*)valis_bool:t->bool(**
[is_bool t]
determine if a sort is a Boolean sort.
@param t The sort.
@return [true] if [t] is a Boolean sort.
*)valis_bv:t->bool(**
[is_bv t]
determine if a sort is a bit-vector sort.
@param t The sort.
@return [true] if [t] is a bit-vector sort.
*)valis_fp:t->bool(**
[is_fp t]
determine if a sort is a floating-point sort.
@param t The sort.
@return [true] if [t] is a floating-point sort.
*)valis_fun:t->bool(**
[is_fun t]
determine if a sort is a function sort.
@param t The sort.
@return [true] if [t] is a function sort.
*)valis_rm:t->bool(**
[is_rm t]
determine if a sort is a Roundingmode sort.
@param t The sort.
@return [true] if [t] is a Roundingmode sort.
*)valis_uninterpreted:t->bool(**
[is_uninterpreted t]
determine if a sort is an uninterpreted sort.
@param t The sort.
@return [true] if [t] is an uninterpreted sort.
*)endmoduleRoundingMode:sig(**
Rounding mode for floating-point operations.
For some floating-point operations, infinitely precise results may not be
representable in a given format. Hence, they are rounded modulo one of five
rounding modes to a representable floating-point number.
The following rounding modes follow the SMT-LIB theory for floating-point
arithmetic, which in turn is based on IEEE Standard 754.
The rounding modes are specified in Sections 4.3.1 and 4.3.2 of the IEEE
Standard 754.
*)typet=|Rne(** Round to the nearest even number.
If the two nearest floating-point numbers bracketing an unrepresentable
infinitely precise result are equally near, the one with an even least
significant digit will be delivered.
SMT-LIB: [RNE] roundNearestTiesToEven
*)|Rna(** Round to the nearest number away from zero.
If the two nearest floating-point numbers bracketing an unrepresentable
infinitely precise result are equally near, the one with larger
magnitude will be selected.
SMT-LIB: [RNA] roundNearestTiesToAway
*)|Rtn(** Round towards negative infinity (-oo).
The result shall be the format’s floating-point number (possibly -oo)
closest to and no less than the infinitely precise result.
SMT-LIB: [RTN] roundTowardNegative
*)|Rtp(** Round towards positive infinity (+oo).
The result shall be the format’s floating-point number (possibly +oo)
closest to and no less than the infinitely precise result.
SMT-LIB: [RTP] roundTowardPositive
*)|Rtz(** Round towards zero.
The result shall be the format’s floating-point number closest to and no
greater in magnitude than the infinitely precise result.
SMT-LIB: [RTZ] roundTowardZero
*)valto_string:t->string(**
[to_string t]
get string representation of this rounding mode.
@return String representation of this rounding mode.
*)endmoduleKind:sig(** The term kind. *)typet=|Constant(** First order constant. *)|Const_array(** Constant array. *)|Value(** Value. *)|Variable(** Bound variable. *)|And(** Boolean and.
SMT-LIB: [and] *)|Distinct(** Disequality.
SMT-LIB: [distinct] *)|Equal(** Equality.
SMT-LIB: [=] *)|Iff(** Boolean if and only if.
SMT-LIB: [=] *)|Implies(** Boolean implies.
SMT-LIB: [=>] *)|Not(** Boolean not.
SMT-LIB: [not] *)|Or(** Boolean or.
SMT-LIB: [or] *)|Xor(** Boolean xor.
SMT-LIB: [xor] *)|Ite(** If-then-else.
SMT-LIB: [ite] *)|Exists(** Existential quantification.
SMT-LIB: [exists] *)|Forall(** Universal quantification.
SMT-LIB: [forall] *)|Apply(** Function application. *)|Lambda(** Lambda. *)|Select(** Array select.
SMT-LIB: [select] *)|Store(** Array store.
SMT-LIB: [store] *)|Bv_add(** Bit-vector addition.
SMT-LIB: [bvadd] *)|Bv_and(** Bit-vector and.
SMT-LIB: [bvand] *)|Bv_ashr(** Bit-vector arithmetic right shift.
SMT-LIB: [bvashr] *)|Bv_comp(** Bit-vector comparison.
SMT-LIB: [bvcomp] *)|Bv_concat(** Bit-vector concat.
SMT-LIB: [concat] *)|Bv_dec(** Bit-vector decrement.
Decrement by one. *)|Bv_inc(** Bit-vector increment.
Increment by one. *)|Bv_mul(** Bit-vector multiplication.
SMT-LIB: [bvmul] *)|Bv_nand(** Bit-vector nand.
SMT-LIB: [bvnand] *)|Bv_neg(** Bit-vector negation (two's complement).
SMT-LIB: [bvneg] *)|Bv_nego(** Bit-vector negation overflow test.
Predicate indicating if bit-vector negation produces an overflow.
SMT-LIB: [bvnego] *)|Bv_nor(** Bit-vector nor.
SMT-LIB: [bvnor] *)|Bv_not(** Bit-vector not (one's complement).
SMT-LIB: [bvnot] *)|Bv_or(** Bit-vector or.
SMT-LIB: [bvor] *)|Bv_redand(** Bit-vector and reduction.
Bit-wise {b and} reduction, all bits are {b and}'ed together into a single
bit.
This corresponds to bit-wise {b and} reduction as known from Verilog. *)|Bv_redor(** Bit-vector reduce or.
Bit-wise {b or} reduction, all bits are {b or}'ed together into a single
bit.
This corresponds to bit-wise {b or} reduction as known from Verilog. *)|Bv_redxor(** Bit-vector reduce xor.
Bit-wise {b xor} reduction, all bits are {b xor}'ed together into a
single bit.
This corresponds to bit-wise {b xor} reduction as known from Verilog. *)|Bv_rol(** Bit-vector rotate left (not indexed).
This is a non-indexed variant of SMT-LIB [rotate_left]. *)|Bv_ror(** Bit-vector rotate right.
This is a non-indexed variant of SMT-LIB [rotate_right]. *)|Bv_saddo(** Bit-vector signed addition overflow test.
Single bit to indicate if signed addition produces an overflow. *)|Bv_sdivo(** Bit-vector signed division overflow test.
Single bit to indicate if signed division produces an overflow. *)|Bv_sdiv(** Bit-vector signed division.
SMT-LIB: [bvsdiv] *)|Bv_sge(** Bit-vector signed greater than or equal.
SMT-LIB: [bvsge] *)|Bv_sgt(** Bit-vector signed greater than.
SMT-LIB: [bvsgt] *)|Bv_shl(** Bit-vector logical left shift.
SMT-LIB: [bvshl] *)|Bv_shr(** Bit-vector logical right shift.
SMT-LIB: [bvshr] *)|Bv_sle(** Bit-vector signed less than or equal.
SMT-LIB: [bvsle] *)|Bv_slt(** Bit-vector signed less than.
SMT-LIB: [bvslt] *)|Bv_smod(** Bit-vector signed modulo.
SMT-LIB: [bvsmod] *)|Bv_smulo(** Bit-vector signed multiplication overflow test.
SMT-LIB: [bvsmod] *)|Bv_srem(** Bit-vector signed remainder.
SMT-LIB: [bvsrem] *)|Bv_ssubo(** Bit-vector signed subtraction overflow test.
Single bit to indicate if signed subtraction produces an overflow. *)|Bv_sub(** Bit-vector subtraction.
SMT-LIB: [bvsub] *)|Bv_uaddo(** Bit-vector unsigned addition overflow test.
Single bit to indicate if unsigned addition produces an overflow. *)|Bv_udiv(** Bit-vector unsigned division.
SMT-LIB: [bvudiv] *)|Bv_uge(** Bit-vector unsigned greater than or equal.
SMT-LIB: [bvuge] *)|Bv_ugt(** Bit-vector unsigned greater than.
SMT-LIB: [bvugt] *)|Bv_ule(** Bit-vector unsigned less than or equal.
SMT-LIB: [bvule] *)|Bv_ult(** Bit-vector unsigned less than.
SMT-LIB: [bvult] *)|Bv_umulo(** Bit-vector unsigned multiplication overflow test.
Single bit to indicate if unsigned multiplication produces
an overflow. *)|Bv_urem(** Bit-vector unsigned remainder.
SMT-LIB: [bvurem] *)|Bv_usubo(** Bit-vector unsigned subtraction overflow test.
Single bit to indicate if unsigned subtraction produces an overflow. *)|Bv_xnor(** Bit-vector xnor.
SMT-LIB: [bvxnor] *)|Bv_xor(** Bit-vector xor.
SMT-LIB: [bvxor] *)|Bv_extract(** Bit-vector extract.
SMT-LIB: [extract] (indexed) *)|Bv_repeat(** Bit-vector repeat.
SMT-LIB: [repeat] (indexed) *)|Bv_roli(** Bit-vector rotate left by integer.
SMT-LIB: [rotate_left] (indexed) *)|Bv_rori(** Bit-vector rotate right by integer.
SMT-LIB: [rotate_right] (indexed) *)|Bv_sign_extend(** Bit-vector sign extend.
SMT-LIB: [sign_extend] (indexed) *)|Bv_zero_extend(** Bit-vector zero extend.
SMT-LIB: [zero_extend] (indexed) *)|Fp_abs(** Floating-point absolute value.
SMT-LIB: [fp.abs] *)|Fp_add(** Floating-point addition.
SMT-LIB: [fp.add] *)|Fp_div(** Floating-point division.
SMT-LIB: [fp.div] *)|Fp_equal(** Floating-point equality.
SMT-LIB: [fp.eq] *)|Fp_fma(** Floating-point fused multiplcation and addition.
SMT-LIB: [fp.fma] *)|Fp_fp(** Floating-point IEEE 754 value.
SMT-LIB: [fp] *)|Fp_geq(** Floating-point greater than or equal.
SMT-LIB: [fp.geq] *)|Fp_gt(** Floating-point greater than.
SMT-LIB: [fp.gt] *)|Fp_is_inf(** Floating-point is infinity tester.
SMT-LIB: [fp.isInfinite] *)|Fp_is_nan(** Floating-point is Nan tester.
SMT-LIB: [fp.isNaN] *)|Fp_is_neg(** Floating-point is negative tester.
SMT-LIB: [fp.isNegative] *)|Fp_is_normal(** Floating-point is normal tester.
SMT-LIB: [fp.isNormal] *)|Fp_is_pos(** Floating-point is positive tester.
SMT-LIB: [fp.isPositive] *)|Fp_is_subnormal(** Floating-point is subnormal tester.
SMT-LIB: [fp.isSubnormal] *)|Fp_is_zero(** Floating-point is zero tester.
SMT-LIB: [fp.isZero] *)|Fp_leq(** Floating-point less than or equal.
SMT-LIB: [fp.leq] *)|Fp_lt(** Floating-point less than.
SMT-LIB: [fp.lt] *)|Fp_max(** Floating-point max.
SMT-LIB: [fp.max] *)|Fp_min(** Floating-point min.
SMT-LIB: [fp.min] *)|Fp_mul(** Floating-point multiplcation.
SMT-LIB: [fp.mul] *)|Fp_neg(** Floating-point negation.
SMT-LIB: [fp.neg] *)|Fp_rem(** Floating-point remainder.
SMT-LIB: [fp.rem] *)|Fp_rti(** Floating-point round to integral.
SMT-LIB: [fp.roundToIntegral] *)|Fp_sqrt(** Floating-point round to square root.
SMT-LIB: [fp.sqrt] *)|Fp_sub(** Floating-point round to subtraction.
SMT-LIB: [fp.sqrt] *)|Fp_to_fp_from_bv(** Floating-point to_fp from IEEE 754 bit-vector.
SMT-LIB: [to_fp] (indexed) *)|Fp_to_fp_from_fp(** Floating-point to_fp from floating-point.
SMT-LIB: [to_fp] (indexed) *)|Fp_to_fp_from_sbv(** Floating-point to_fp from signed bit-vector value.
SMT-LIB: [to_fp] (indexed) *)|Fp_to_fp_from_ubv(** Floating-point to_fp from unsigned bit-vector value.
SMT-LIB: [to_fp_unsigned] (indexed) *)|Fp_to_sbv(** Floating-point to_sbv.
SMT-LIB: [fp.to_sbv] (indexed) *)|Fp_to_ubv(** Floating-point to_ubv.
SMT-LIB: [fp.to_ubv] (indexed) *)valto_string:t->string(**
[to_string t]
get string representation of this kind.
@return String representation of this kind.
*)endmoduleTerm:sig(** {1:term Term} *)typet(** A Bitwuzla term. *)(** {2:sort_util Util} *)valhash:t->int(**
[hash t]
compute the hash value for a term.
@param t The term.
@return The hash value of the term.
*)valequal:t->t->bool(**
[equal a b]
Syntactical equality operator.
@param a The first term.
@param b The second term.
@return True if the given terms are equal.
*)valcompare:t->t->int(**
[compare a b]
Syntactical comparison operator.
@param a The first term.
@param b The second term.
@return Zero if the given term are equal,
a positive number if [a] > [b],
a negative number otherwise.
*)valpp:Format.formatter->t->unit(**
[pp formatter t]
print term.
(alias for {!val:pp_smt2}[ 2])
@param formatter The outpout formatter.
@param t The term.
*)valpp_smt2:bv_format:int->Format.formatter->t->unit(**
[pp_smt2 base formatter t]
print term in SMTlib format.
@param bv_format The bit-vector number format:
[2] for binary, [10] for decimal and [16] for hexadecimal.
@param formatter The output formatter.
@param t The term.
*)valto_string:?bv_format:int->t->string(**
[to_string t ~bv_format]
get string representation of this term.
@param t The term.
@param bv_format The bit-vector number format:
[2] for binary \[{b default}\],
[10] for decimal and [16] for hexadecimal.
@return String representation of this term.
*)(** {2:term_query Query} *)valid:t->int64(**
[id t]
get the id of this term.
@param t The term.
@return The id value of the term.
*)valkind:t->Kind.t(**
[kind t]
get the kind of a term.
@param t The term.
@return The kind of the given term.
*)valsort:t->Sort.t(**
[sort t]
get the sort of a term.
@param t The term.
@return The sort of the term.
*)valnum_children:t->int(**
[num_children t]
get the number of child terms of a term.
@param t The term.
@return The number children of [t].
*)valchildren:t->tarray(**
[children t]
get the child terms of a term.
@param t The term.
@return The children of [t] as an array of terms.
*)valget:t->int->t(**
[get t i]
return child at position [i].
Only valid to call if [num_children t > 0].
@param i The position of the child.
@return The child node at position [i].
*)valnum_indices:t->int(**
[num_indices t]
get the number of indices of an indexed term.
Requires that given term is an indexed term.
@param t The term.
@return The number of indices of [t].
*)valindices:t->intarray(**
[indices t]
get the indices of an indexed term.
Requires that given term is an indexed term.
@param t The term.
@return The children of [t] as an array of terms.
*)valsymbol:t->string(**
[symbol t]
get the symbol of a term.
@param t The term.
@return The symbol of [t].
@raise Not_found if no symbol is defined.
*)valis_const:t->bool(**
[is_const t]
determine if a term is a constant.
@param t The term.
@return [true] if [t] is a constant.
*)valis_variable:t->bool(**
[is_variable t]
determine if a term is a variable.
@param t The term.
@return [true] if [t] is a variable.
*)valis_value:t->bool(**
[is_value t]
determine if a term is a value.
@param t The term.
@return [true] if [t] is a value.
*)valis_bv_value_zero:t->bool(**
[is_bv_value_zero t]
determine if a term is a bit-vector value representing zero.
@param t The term.
@return [true] if [t] is a bit-vector zero value.
*)valis_bv_value_one:t->bool(**
[is_bv_value_one t]
determine if a term is a bit-vector value representing one.
@param t The term.
@return [true] if [t] is a bit-vector one value.
*)valis_bv_value_ones:t->bool(**
[is_bv_value_ones t]
determine if a term is a bit-vector value with all bits set to one.
@param t The term.
@return [true] if [t] is a bit-vector value with all bits set to one.
*)valis_bv_value_min_signed:t->bool(**
[is_bv_value_min_signed t]
determine if a term is a bit-vector minimum signed value.
@param t The term.
@return [true] if [t] is a bit-vector value with the most significant bit
set to 1 and all other bits set to 0.
*)valis_bv_value_max_signed:t->bool(**
[is_bv_value_max_signed t]
determine if a term is a bit-vector maximum signed value.
@param t The term.
@return [true] if [t] is a bit-vector value with the most significant bit
set to 0 and all other bits set to 1.
*)valis_fp_value_pos_zero:t->bool(**
[is_fp_value_pos_zero t]
determine if a term is a floating-point positive zero (+zero) value.
@param t The term.
@return [true] if [t] is a floating-point +zero value.
*)valis_fp_value_neg_zero:t->bool(**
[is_fp_value_neg_zero t]
determine if a term is a floating-point value negative zero (-zero).
@param t The term.
@return [true] if [t] is a floating-point value negative zero.
*)valis_fp_value_pos_inf:t->bool(**
[is_fp_value_pos_inf t]
determine if a term is a floating-point positive infinity (+oo) value.
@param t The term.
@return [true] if [t] is a floating-point +oo value.
*)valis_fp_value_neg_inf:t->bool(**
[is_fp_value_neg_inf t]
determine if a term is a floating-point negative infinity (-oo) value.
@param t The term.
@return [true] if [t] is a floating-point -oo value.
*)valis_fp_value_nan:t->bool(**
[is_fp_value_nan t]
determine if a term is a floating-point NaN value.
@param t The term.
@return [true] if [t] is a floating-point NaN value.
*)valis_rm_value_rna:t->bool(**
[is_rm_value_rna t]
determine if a term is a rounding mode RNA value.
@param t The term.
@return [true] if [t] is a rounding mode RNA value.
*)valis_rm_value_rne:t->bool(**
[is_rm_value_rna t]
determine if a term is a rounding mode RNE value.
@param t The term.
@return [true] if [t] is a rounding mode RNE value.
*)valis_rm_value_rtn:t->bool(**
[is_rm_value_rna t]
determine if a term is a rounding mode RTN value.
@param t The term.
@return [true] if [t] is a rounding mode RTN value.
*)valis_rm_value_rtp:t->bool(**
[is_rm_value_rna t]
determine if a term is a rounding mode RTP value.
@param t The term.
@return [true] if [t] is a rounding mode RTP value.
*)valis_rm_value_rtz:t->bool(**
[is_rm_value_rna t]
determine if a term is a rounding mode RTZ value.
@param t The term.
@return [true] if [t] is a rounding mode RTZ value.
*)type_cast=|Bool:boolcast(** for Boolean values *)|RoundingMode:RoundingMode.tcast(** for rounding mode values *)|String:{base:int}->stringcast(** for any value
(Boolean, RoundingMode, bit-vector and floating-point) *)|IEEE_754:(string*string*string)cast(** for floating-point values as strings
for sign bit, exponent and significand *)|Z:Z.tcast(** for bit-vector *)valvalue:'acast->t->'a(**
[value kind t]
get value from value term.
@param kind The type of the value representation.
@return The value of [t] in a given representation.
*)endmoduleResult:sig(** A satisfiability result. *)typet=Sat(** sat *)|Unsat(** unsat *)|Unknown(** unknown *)valto_string:t->string(**
[to_string t]
get string representation of this result.
@return String representation of this result.
*)endmoduleSolver:sig(** {1 Solver} *)typet(** The Bitwuzla solver. *)valconfigure_terminator:t->(unit->bool)option->unit(**
[configure_terminator t f]
configure a termination callback function.
If terminator has been connected, Bitwuzla calls this function periodically
to determine if the connected instance should be terminated.
@param t The Bitwuzla instance.
@param f The callback function, returns [true] if [t] should be terminated.
*)valcreate:Options.t->t(**
[create options]
create a new Bitwuzla instance.
The returned instance can be deleted earlier via {!val:unsafe_delete}.
@param options The associated options instance.
Options must be configured at this point.
@return The created Bitwuzla instance.
*)(** {2 Formula} *)valpush:t->int->unit(**
[push t nlevels]
push context levels.
@param t The Bitwuzla instance.
@param nlevels The number of context levels to push.
*)valpop:t->int->unit(**
[pop t nlevels]
pop context levels.
@param t The Bitwuzla instance.
@param nlevels The number of context levels to pop.
*)valassert_formula:t->Term.t->unit(**
[mk_assert t term]
assert formula.
@param t The Bitwuzla instance.
@param term The formula to assert.
*)valget_assertions:t->Term.tarray(**
[get_assertions t]
get the set of currently asserted formulas.
@return The assertion formulas.
*)valpp_formula:Format.formatter->t->unit(**
[pp_formula formatter t]
print the current input formula.
@param formatter The output formatter.
@param t The Bitwuzla instance.
*)(** {2 Check} *)valsimplify:t->unit(**
[simplify t]
simplify the current input formula.
@param t The Bitwuzla instance.
*)valcheck_sat:?assumptions:Term.tarray->t->Result.t(**
[check_sat ~assumptions t]
check satisfiability of current input formula.
An input formula consists of assertions added via {!val:assert_formula}.
The search for a solution can by guided by making assumptions via
[assumptions].
Assertions and assumptions are combined via Boolean [and].
@param t The Bitwuzla instance.
@return {!constructor:Sat} if the input formula is satisfiable and
{!constructor:Unsat} if it is unsatisfiable, and {!constructor:Unknown}
when neither satisfiability nor unsatisfiability was determined.
This can happen when [t] was terminated via a termination callback.
*)(** {2 Sat} *)valget_value:t->Term.t->Term.t(**
[get_value t term]
get a term representing the model value of a given term.
Requires that the last {!val:check_sat} query returned [Sat].
@param t The Bitwuzla instance.
@param term The term to query a model value for.
@return A term representing the model value of term [term].
*)(** {2 Unsat} *)valis_unsat_assumption:t->Term.t->bool(**
[is_unsat_assumption t term]
determine if an assumption is an unsat assumption.
Unsat assumptions are assumptions that force an input formula to become
unsatisfiable. Unsat assumptions handling in Bitwuzla is analogous to
failed assumptions in MiniSAT.
Requires that unsat assumption generation has been enabled via
{!val:Options.set}.
Requires that the last {!val:check_sat} query returned [Unsat].
@param t The Bitwuzla instance.
@param term The assumption to check for.
@return [true] if given assumption is an unsat assumption.
*)valget_unsat_assumptions:t->Term.tarray(**
[get_unsat_assumptions t]
get the set of unsat assumptions.
Unsat assumptions are assumptions that force an input formula to become
unsatisfiable. Unsat assumptions handling in Bitwuzla is analogous to
failed assumptions in MiniSAT.
Requires that unsat assumption generation has been enabled via
{!val:Options.set}.
Requires that the last {!val:check_sat} query returned [Unsat].
@param t The Bitwuzla instance.
@return An array with unsat assumptions.
*)valget_unsat_core:t->Term.tarray(**
[get_unsat_core t]
get the set unsat core (unsat assertions).
The unsat core consists of the set of assertions that force
an input formula to become unsatisfiable.
Requires that unsat core generation has been enabled via {!val:Options.set}.
Requires that the last {!val:check_sat} query returned [Unsat].
@param t The Bitwuzla instance.
@return An array with unsat assertions.
*)(** {2 Expert} *)valunsafe_delete:t->unit(**
[delete t]
delete a Bitwuzla instance.
UNSAFE: call this ONLY to release the resources earlier
if the instance is about to be garbage collected.
@param t The Bitwuzla instance to delete.
*)valpp_statistics:Format.formatter->t->unitend(** {2:sort_constructor Sort constructor} *)valmk_array_sort:Sort.t->Sort.t->Sort.t(**
[mk_array_sort index element]
create an array sort.
@param index The index sort of the array sort.
@param element The element sort of the array sort.
@return An array sort which maps sort [index] to sort [element].
*)valmk_bool_sort:unit->Sort.t(**
[mk_bool_sort ()]
create a Boolean sort.
A Boolean sort is a bit-vector sort of size 1.
@return A Boolean sort.
*)valmk_bv_sort:int->Sort.t(**
[mk_bv_sort size]
create a bit-vector sort of given size.
@param size The size of the bit-vector sort.
@return A bit-vector sort of given size.
*)valmk_fp_sort:int->int->Sort.t(**
[mk_fp_sort exp_size sig_size]
create a floating-point sort of given exponent and significand size.
@param exp_size The size of the exponent.
@param sig_size The size of the significand (including sign bit).
@return A floating-point sort of given format.
*)valmk_fun_sort:Sort.tarray->Sort.t->Sort.t(**
[mk_fun_sort domain codomain]
create a function sort.
@param domain The domain sorts (the sorts of the arguments).
@param codomain The codomain sort (the sort of the return value).
@return A function sort of given domain and codomain sorts.
*)valmk_rm_sort:unit->Sort.t(**
[mk_rm_sort ()]
create a Roundingmode sort.
@return A Roundingmode sort.
*)valmk_uninterpreted_sort:?symbol:string->unit->Sort.t(**
[mk_uninterpreted_sort name]
create an uninterpreted sort.
Only 0-arity uninterpreted sorts are supported.
@param symbol The symbol of the sort.
@return An uninterpreted sort.
*)(** {2:term_constructor Term constructor} *)(** {3 Value} *)valmk_true:unit->Term.t(**
[mk_true ()]
create a true value.
This creates a bit-vector value 1 of size 1.
@return A term representing the bit-vector value 1 of size 1.
*)valmk_false:unit->Term.t(**
[mk_false ()]
create a false value.
This creates a bit-vector value 0 of size 1.
@return A term representing the bit-vector value 0 of size 1.
*)valmk_bv_zero:Sort.t->Term.t(**
[mk_bv_zero sort]
create a bit-vector value zero.
@param sort The sort of the value.
@return A term representing the bit-vector value 0 of given sort.
*)valmk_bv_one:Sort.t->Term.t(**
[mk_bv_one sort]
create a bit-vector value one.
@param sort The sort of the value.
@return A term representing the bit-vector value 1 of given sort.
*)valmk_bv_ones:Sort.t->Term.t(**
[mk_bv_ones sort]
create a bit-vector value where all bits are set to 1.
@param sort The sort of the value.
@return A term representing the bit-vector value of given sort
where all bits are set to 1.
*)valmk_bv_min_signed:Sort.t->Term.t(**
[mk_bv_min_signed sort]
create a bit-vector minimum signed value.
@param sort The sort of the value.
@return A term representing the bit-vector value of given sort where the MSB
is set to 1 and all remaining bits are set to 0.
*)valmk_bv_max_signed:Sort.t->Term.t(**
[mk_bv_max_signed sort]
create a bit-vector maximum signed value.
@param sort The sort of the value.
@return A term representing the bit-vector value of given sort where the MSB
is set to 0 and all remaining bits are set to 1.
*)valmk_bv_value:Sort.t->string->int->Term.t(**
[mk_bv_value sort value base]
create a bit-vector value from its string representation.
Parameter [base] determines the base of the string representation.
Given value must fit into a bit-vector of given size (sort).
@param sort The sort of the value.
@param value A string representing the value.
@param base The base in which the string is given.
@return A term representing the bit-vector value of given sort.
*)valmk_bv_value_int:Sort.t->int->Term.t(**
[mk_bv_value_int sort value]
create a bit-vector value from its unsigned integer representation.
If given value does not fit into a bit-vector of given size (sort),
the value is truncated to fit.
@param sort The sort of the value.
@param value The unsigned integer representation of the bit-vector value.
@return A term representing the bit-vector value of given sort.
*)valmk_bv_value_int64:Sort.t->int64->Term.t(**
[mk_bv_value_int64 sort value]
create a bit-vector value from its unsigned integer representation.
If given value does not fit into a bit-vector of given size (sort),
the value is truncated to fit.
@param sort The sort of the value.
@param value The unsigned integer representation of the bit-vector value.
@return A term representing the bit-vector value of given sort.
*)valmk_fp_pos_zero:Sort.t->Term.t(**
[mk_fp_pos_zero sort]
create a floating-point positive zero value (SMT-LIB: [+zero]).
@param sort The sort of the value.
@return A term representing the floating-point positive zero value of given
floating-point sort.
*)valmk_fp_neg_zero:Sort.t->Term.t(**
[mk_fp_neg_zero sort]
create a floating-point negative zero value (SMT-LIB: [-zero]).
@param sort The sort of the value.
@return A term representing the floating-point negative zero value of given
floating-point sort.
*)valmk_fp_pos_inf:Sort.t->Term.t(**
[mk_fp_pos_inf sort]
create a floating-point positive infinity value (SMT-LIB: [+oo]).
@param sort The sort of the value.
@return A term representing the floating-point positive infinity value of
given floating-point sort.
*)valmk_fp_neg_inf:Sort.t->Term.t(**
[mk_fp_neg_inf sort]
create a floating-point negative infinity value (SMT-LIB: [-oo]).
@param sort The sort of the value.
@return A term representing the floating-point negative infinity value of
given floating-point sort.
*)valmk_fp_nan:Sort.t->Term.t(**
[mk_fp_nan sort]
create a floating-point NaN value.
@param sort The sort of the value.
@return A term representing the floating-point NaN value of given
floating-point sort.
*)valmk_fp_value:Term.t->Term.t->Term.t->Term.t(**
[mk_fp_value bv_sign bv_exponent bv_significand]
create a floating-point value from its IEEE 754 standard representation
given as three bitvectors representing the sign bit, the exponent and the
significand.
@param bv_sign The sign bit.
@param bv_exponent The exponent bit-vector.
@param bv_significand The significand bit-vector.
@return A term representing the floating-point value.
*)valmk_fp_value_from_real:Sort.t->Term.t->string->Term.t(**
[mk_fp_value_from_real t sort rm real]
create a floating-point value from its real representation, given as a
decimal string, with respect to given rounding mode.
@param sort The sort of the value.
@param rm The rounding mode.
@param real The decimal string representing a real value.
@return A term representing the floating-point value of given sort.
*)valmk_fp_value_from_rational:Sort.t->Term.t->string->string->Term.t(**
[mk_fp_value_from_rational sort rm num den]
create a floating-point value from its rational representation, given as a
two decimal strings representing the numerator and denominator, with respect
to given rounding mode.
@param sort The sort of the value.
@param rm The rounding mode.
@param num The decimal string representing the numerator.
@param den The decimal string representing the denominator.
@return A term representing the floating-point value of given sort.
*)valmk_rm_value:RoundingMode.t->Term.t(**
[mk_rm_value rm]
create a rounding mode value.
@param rm The rounding mode value.
@return A term representing the rounding mode value.
*)(** {3 Expression} *)valmk_term1:Kind.t->Term.t->Term.t(**
[mk_term1 kind arg]
create a term of given kind with one argument term.
@param kind The operator kind.
@param arg The argument to the operator.
@return A term representing an operation of given kind.
*)valmk_term2:Kind.t->Term.t->Term.t->Term.t(**
[mk_term2 kind arg0 arg1]
create a term of given kind with two argument terms.
@param kind The operator kind.
@param arg0 The first argument to the operator.
@param arg1 The second argument to the operator.
@return A term representing an operation of given kind.
*)valmk_term3:Kind.t->Term.t->Term.t->Term.t->Term.t(**
[mk_term3 kind arg0 arg1 arg2]
create a term of given kind with three argument terms.
@param kind The operator kind.
@param arg0 The first argument to the operator.
@param arg1 The second argument to the operator.
@param arg2 The third argument to the operator.
@return A term representing an operation of given kind.
*)valmk_term1_indexed1:Kind.t->Term.t->int->Term.t(**
[mk_term1_indexed1 kind arg idx]
create an indexed term of given kind with one argument term and one index.
@param kind The operator kind.
@param arg The argument term.
@param idx The index.
@return A term representing an indexed operation of given kind.
*)valmk_term1_indexed2:Kind.t->Term.t->int->int->Term.t(**
[mk_term1_indexed2 kind arg idx0 idx1]
create an indexed term of given kind with one argument term and two indices.
@param kind The operator kind.
@param arg The argument term.
@param idx0 The first index.
@param idx1 The second index.
@return A term representing an indexed operation of given kind.
*)valmk_term2_indexed1:Kind.t->Term.t->Term.t->int->Term.t(**
[mk_term2_indexed1 t kind arg0 arg1 idx]
create an indexed term of given kind with two argument terms and one index.
@param kind The operator kind.
@param arg0 The first argument term.
@param arg1 The second argument term.
@param idx The index.
@return A term representing an indexed operation of given kind.
*)valmk_term2_indexed2:Kind.t->Term.t->Term.t->int->int->Term.t(**
[mk_term2_indexed2 t kind arg0 arg1 idx0 idx1]
create an indexed term of given kind with two argument terms and two indices.
@param kind The operator kind.
@param arg0 The first argument term.
@param arg1 The second argument term.
@param idx0 The first index.
@param idx1 The second index.
@return A term representing an indexed operation of given kind.
*)valmk_term:Kind.t->?indices:intarray->Term.tarray->Term.t(**
[mk_term kind args ~indices]
create an indexed term of given kind with the given argument terms and
indices.
@param kind The operator kind.
@param args The argument terms.
@param indices The indices.
@return A term representing an indexed operation of given kind.
*)valmk_const:?symbol:string->Sort.t->Term.t(**
[mk_const sort ~symbol]
create a (first-order) constant of given sort with given symbol.
This creates a 0-arity function symbol.
@param sort The sort of the constant.
@param symbol The symbol of the constant.
@return A term representing the constant.
*)valmk_const_array:Sort.t->Term.t->Term.t(**
[mk_const_array sort value]
create a one-dimensional constant array of given sort, initialized with
given value.
@param sort The sort of the array.
@param value The value to initialize the elements of the array with.
@return A term representing a constant array of given sort.
*)valmk_var:?symbol:string->Sort.t->Term.t(**
[mk_var sort ~symbol]
create a variable of given sort with given symbol.
This creates a variable to be bound by quantifiers or lambdas.
@param sort The sort of the variable.
@param symbol The symbol of the variable.
@return A term representing the variable.
*)(** {2 Util} *)valsubstitute_term:Term.t->(Term.t*Term.t)array->Term.t(**
[substitute t term map]
substitute a set of keys with their corresponding values in the given term.
@param term The term in which the keys are to be substituted.
@param map The key/value associations.
@return The resulting term from this substitution.
*)valsubstitute_terms:Term.tarray->(Term.t*Term.t)array->unit(**
[substitute_terms t terms map]
substitute a set of keys with their corresponding values in the set of given
terms.
The terms in [terms] are replaced with the terms resulting from this
substitutions.
@param terms The terms in which the keys are to be substituted.
@param map The key/value associations.
*)endmoduleMake():S=structlett=Manager.create()moduleSort=Sortletmk_array_sort=mk_array_sorttletmk_bool_sort()=mk_bool_sorttletmk_bv_sort=mk_bv_sorttletmk_fp_sort=mk_fp_sorttletmk_fun_sort=mk_fun_sorttletmk_rm_sort()=mk_rm_sorttletmk_uninterpreted_sort=mk_uninterpreted_sorttmoduleRoundingMode=RoundingModemoduleKind=KindmoduleTerm=Termletmk_true()=mk_truetletmk_false()=mk_falsetletmk_bv_zero=mk_bv_zerotletmk_bv_one=mk_bv_onetletmk_bv_ones=mk_bv_onestletmk_bv_min_signed=mk_bv_min_signedtletmk_bv_max_signed=mk_bv_max_signedtletmk_bv_value=mk_bv_valuetletmk_bv_value_int=mk_bv_value_inttletmk_bv_value_int64=mk_bv_value_int64tletmk_fp_pos_zero=mk_fp_pos_zerotletmk_fp_neg_zero=mk_fp_neg_zerotletmk_fp_pos_inf=mk_fp_pos_inftletmk_fp_neg_inf=mk_fp_neg_inftletmk_fp_nan=mk_fp_nantletmk_fp_value=mk_fp_valuetletmk_fp_value_from_real=mk_fp_value_from_realtletmk_fp_value_from_rational=mk_fp_value_from_rationaltletmk_rm_valuem=mk_rm_valuet(RoundingMode.to_cxxm)letmk_term1kx=mk_term1t(Kind.to_cxxk)xletmk_term2kx1x2=mk_term2t(Kind.to_cxxk)x1x2letmk_term3kx1x2x3=mk_term3t(Kind.to_cxxk)x1x2x3letmk_term1_indexed1kxi=mk_term1_indexed1t(Kind.to_cxxk)xiletmk_term1_indexed2kxij=mk_term1_indexed2t(Kind.to_cxxk)xijletmk_term2_indexed1kx1x2i=mk_term2_indexed1t(Kind.to_cxxk)x1x2iletmk_term2_indexed2kx1x2ij=mk_term2_indexed2t(Kind.to_cxxk)x1x2ijletmk_termk?(indices=[||])args=mk_termt(Kind.to_cxxk)argsindicesletmk_const=mk_consttletmk_const_array=mk_const_arraytletmk_var=mk_vartletsubstitute_term=substitute_termtletsubstitute_terms=substitute_termstmoduleResult=ResultmoduleSolver=structincludeSolverletcreate=createtendendincludeMake()