123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980(******************************************************************************)(* *)(* The Alt-Ergo theorem prover *)(* Copyright (C) 2006-2013 *)(* *)(* Sylvain Conchon *)(* Evelyne Contejean *)(* *)(* Francois Bobot *)(* Mohamed Iguernelala *)(* Stephane Lescuyer *)(* Alain Mebsout *)(* *)(* CNRS - INRIA - Universite Paris Sud *)(* *)(* This file is distributed under the terms of the Apache Software *)(* License version 2.0 *)(* *)(* ------------------------------------------------------------------------ *)(* *)(* Alt-Ergo: The SMT Solver For Software Verification *)(* Copyright (C) 2013-2018 --- OCamlPro SAS *)(* *)(* This file is distributed under the terms of the Apache Software *)(* License version 2.0 *)(* *)(******************************************************************************)letfmt=Format.err_formattermoduleM=structletfile=ref""letsession_file=ref""letused_context_file=ref""letrewriting=reffalselettype_only=reffalselettype_smt2=reffalseletparse_only=reffalseletfrontend=ref"legacy"letsteps_bound=ref(-1)letage_bound=ref50letdebug=reffalseletdebug_warnings=reffalseletno_user_triggers=reffalseletdebug_triggers=reffalseletdebug_cc=reffalseletdebug_gc=reffalseletdebug_use=reffalseletdebug_arrays=reffalseletdebug_ite=reffalseletdebug_uf=reffalseletdebug_sat=reffalseletdebug_sat_simple=reffalseletdebug_typing=reffalseletdebug_constr=reffalseletverbose=reffalseletdebug_fm=reffalseletdebug_fpa=ref0letdebug_sum=reffalseletdebug_adt=reffalseletdebug_arith=reffalseletdebug_combine=reffalseletdebug_bitv=reffalseletdebug_ac=reffalseletdebug_split=reffalse(* unused -- let options = ref false *)letgreedy=reffalseletdisable_ites=reffalseletdisable_adts=reffalseletenable_adts_cs=reffalselettriggers_var=reffalseletnb_triggers=ref2letmax_multi_triggers_size=ref4letenable_assertions=reffalseletno_Ematching=reffalseletarith_matching=reftrueletno_backjumping=reffalseletnocontracongru=reffalseletterm_like_pp=reftrueletdebug_types=reffalseletall_models=reffalseletmodel=reffalseletcomplete_model=reffalseletinterpretation=ref0letdebug_interpretation=reffalseletunsat_core=reffalseletdebug_unsat_core=reffalseletrules=ref(-1)letmax_split=ref(Numbers.Q.from_int1000000)letfm_cross_limit=ref(Numbers.Q.from_int10_000)letcase_split_policy=refUtil.AfterTheoryAssumeletrestricted=reffalseletbottom_classes=reffalselettimelimit=ref0.lettimelimit_per_goal=reffalseletinterpretation_timelimit=ref(ifSys.win32then0.else1.)letdebug_matching=ref0letdebug_explanations=reffalseletsat_plugin=ref""letparsers=ref[]letinequalities_plugin=ref""letprofiling_plugin=ref""letcumulative_time_profiling=reffalseletnormalize_instances=reffalseletsat_solver=refUtil.CDCL_Tableauxletcdcl_tableaux_inst=reftrueletcdcl_tableaux_th=reftruelettableaux_cdcl=reffalseletminimal_bj=reftrueletenable_restarts=reffalseletdisable_flat_formulas_simplification=reffalselettighten_vars=reffalseletno_tcp=reffalseletno_decisions=reffalseletno_decisions_on=refUtil.SS.emptyletno_fm=reffalseletno_theory=reffalseletjs_mode=reffalseletuse_fpa=reffalseletreversed_preludes:stringlistref=ref[]letno_NLA=reffalseletno_ac=reffalseletno_backward=reffalseletno_sat_learning=reffalseletinstantiate_after_backjump=reffalseletdisable_weaks=reffalseletdefault_input_lang=ref".why"letno_locs_in_answers=reffalseletunsat_mode=reffalseletinline_lets=reffalseletshow_wheres=matchswith|""->()|s->letpath=matchswith|"lib"->Config.libdir|"plugins"->Config.pluginsdir|"preludes"->Config.preludesdir|"data"->Config.datadir|"man"->Config.mandir|s->raise(Arg.Bad("Option -where has no argument "^s))inFormat.printf"%s@."path;exit0letshow_version()=Format.printf"%s@."Version._version;exit0letshow_version_info()=Format.printf"Version = %s@."Version._version;Format.printf"Release date = %s@."Version._release_date;Format.printf"Release commit = %s@."Version._release_commit;exit0letset_max_splits=max_split:=tryNumbers.Q.from_stringswithFailure_->Numbers.Q.m_oneletset_fm_cross_limits=fm_cross_limit:=tryNumbers.Q.from_stringswithFailure_->Numbers.Q.m_oneletupdate_no_decisions_ons=no_decisions_on:=List.fold_left(funsets->matchswith|""->set|s->Util.SS.addsset)!no_decisions_on(Str.split(Str.regexp",")s)letset_sat_plugins=sat_plugin:=sletadd_parserp=parsers:=p::!parsersletset_inequalities_plugins=inequalities_plugin:=sletset_profiling_plugins=profiling_plugin:=s(* unused -- let set_unsat_core b = unsat_core := b *)letset_rules=function|"parsing"->rules:=0|"typing"->rules:=1|"sat"->rules:=2|"cc"->rules:=3|"arith"->rules:=4|_->rules:=-1letset_limittimelimit_targett=ifSys.win32thenFormat.eprintf"timelimit not supported on Win32 (ignored)@."elsetimelimit_target:=tletreplay=reffalseletreplay_used_context=reffalseletreplay_all_used_context=reffalseletsave_used_context=reffalseletprofiling_period=ref0.letprofiling=reffalseletparse_profilings=profiling:=true;tryprofiling_period:=float_of_stringswith_->()letset_case_split_policy_options=case_split_policy:=matchswith|"after-theory-assume"->Util.AfterTheoryAssume|"before-matching"->Util.BeforeMatching|"after-matching"->Util.AfterMatching|_->raise(Arg.Bad("Bad value '"^s^"' for option -case-split-policy"))letadd_preludep=reversed_preludes:=p::!reversed_preludesletset_default_input_langlang=default_input_lang:="."^langlettimers=reffalseletusage="usage: alt-ergo [options] file.<why|mlw>"letset_sat_solvers=matchswith|"CDCL"|"satML"->sat_solver:=Util.CDCL;cdcl_tableaux_inst:=false;cdcl_tableaux_th:=false|"CDCL-Tableaux"|"satML-Tableaux"|"CDCL-tableaux"|"satML-tableaux"->sat_solver:=Util.CDCL_Tableaux;cdcl_tableaux_inst:=true;cdcl_tableaux_th:=true|"tableaux"|"Tableaux"|"tableaux-like"|"Tableaux-like"->sat_solver:=Util.Tableaux;tableaux_cdcl:=false|"tableaux-cdcl"|"Tableaux-CDCL"|"tableaux-CDCL"|"Tableaux-cdcl"->sat_solver:=Util.Tableaux_CDCL;tableaux_cdcl:=true;|_->Format.eprintf"Args parsing error: unkown SAT solver %S@."s;exit1letspec=["-parse-only",Arg.Setparse_only," stop after parsing";"-frontend",Arg.Set_stringfrontend," select the parsing and typing frontend";"-type-only",Arg.Settype_only," stop after typing";"-type-smt2",Arg.Settype_smt2," stop after smt2 typing";"-no-user-triggers",Arg.Setno_user_triggers," ignore user triggers, except for triggers of theories axioms";"-debug",Arg.Setdebug," sets the debugging flag";"-dwarnings",Arg.Setdebug_warnings," sets the debugging flag of warnings";"-dcc",Arg.Setdebug_cc," sets the debugging flag of cc";"-dgc",Arg.Setdebug_gc," prints some debug info about the GC's activity";"-duse",Arg.Setdebug_use," sets the debugging flag of use";"-duf",Arg.Setdebug_uf," sets the debugging flag of uf";"-dfm",Arg.Setdebug_fm," sets the debugging flag of inequalities";"-dfpa",Arg.Set_intdebug_fpa," sets the debugging flag of floating-point";"-dsum",Arg.Setdebug_sum," sets the debugging flag of Sum";"-dadt",Arg.Setdebug_adt," sets the debugging flag of ADTs";"-darith",Arg.Setdebug_arith," sets the debugging flag of Arith (without fm)";"-dbitv",Arg.Setdebug_bitv," sets the debugging flag of bitv";"-dac",Arg.Setdebug_ac," sets the debugging flag of ac";"-dsat",Arg.Setdebug_sat," sets the debugging flag of sat";"-dsats",Arg.Setdebug_sat_simple," sets the debugging flag of sat (simple output)";"-dtyping",Arg.Setdebug_typing," sets the debugging flag of typing";"-types",Arg.Setdebug_types," sets the debugging flag of types";"-dconstr",Arg.Setdebug_constr," sets the debugging flag of constructors";"-darrays",Arg.Setdebug_arrays," sets the debugging flag of arrays";"-dite",Arg.Setdebug_ite," sets the debugging flag of ite";"-dcombine",Arg.Setdebug_combine," sets the debugging flag of combine";"-dsplit",Arg.Setdebug_split," sets the debugging flag of case-split analysis";"-dmatching",Arg.Set_intdebug_matching," sets the debugging flag of E-matching (0=disabled, 1=light, 2=full)";"-dexplanations",Arg.Setdebug_explanations," sets the debugging flag of explanations";"-dtriggers",Arg.Setdebug_triggers," sets the debugging flag of triggers";"-verbose",Arg.Setverbose," sets the verbose mode";"-version",Arg.Unitshow_version," prints the version number";"-version-info",Arg.Unitshow_version_info," prints some info about this version";"-where",Arg.Stringshow_where," prints the directory of its argument. Possible arguments are: \
'bin', 'lib', 'plugins', 'data' and 'man'";"-disable-ites",Arg.Setdisable_ites," disable handling of ite(s) on terms in the backend";"-disable-adts",Arg.Setdisable_adts," disable Algebraic Datatypes theory";"-enable-adts-cs",Arg.Setenable_adts_cs," enable case-split for Algebraic Datatypes theory";"-steps-bound",Arg.Set_intsteps_bound," <n> set the maximum number of steps";"-enable-assertions",Arg.Setenable_assertions," Enable verification of some heavy invariants";"-no-tcp",Arg.Setno_tcp," Deactivate BCP modulo theories";"-no-decisions",Arg.Setno_decisions," Disable decisions at the SAT level";"-no-decisions-on",Arg.Stringupdate_no_decisions_on," Disable decisions at the SAT level for the instances generated \
from the given axioms. Arguments should be separated with a comma";"-no-fm",Arg.Setno_fm," Disable Fourier-Motzkin algorithm";"-tighten-vars",Arg.Settighten_vars," Compute the best bounds for arithmetic variables";"-no-theory",Arg.Setno_theory," Completely deactivate theory reasoning";"-age-bound",Arg.Set_intage_bound,"<n> set the age limite bound";"-greedy",Arg.Setgreedy," use all available ground terms in instantiation";"-nb-triggers",Arg.Set_intnb_triggers," number of (multi)triggers (default: 2)";"-max-multi-triggers-size",Arg.Set_intmax_multi_triggers_size," max number of terms allowed in multi-triggers (default: 4)";"-triggers-var",Arg.Settriggers_var," allows variables as triggers";"-no-Ematching",Arg.Setno_Ematching," disable matching modulo ground equalities";"-no-arith-matching",Arg.Cleararith_matching," disable (the weak form of) matching modulo linear arithmetic";"-no-backjumping",Arg.Setno_backjumping," disable backjumping mechanism in the functional SAT solver";"-no-NLA",Arg.Setno_NLA," disable non-linear arithmetic reasoning (i.e. non-linear \
multplication, division and modulo on integers and rationals). \
Non-linear multiplication remains AC";"-no-ac",Arg.Setno_ac," Disable the AC theory of Associative and Commutative function symbols";"-nocontracongru",Arg.Setnocontracongru,"";"-term-like-pp",Arg.Setterm_like_pp," output semantic values as terms";"-all-models",Arg.Setall_models," experimental support for all models";"-model",Arg.Setmodel," experimental support for models on labeled terms";"-complete-model",Arg.Setcomplete_model," experimental support for complete model";"-dinterpretation",Arg.Setdebug_interpretation," set debug flag for interpretation generatation";"-interpretation",Arg.Set_intinterpretation," experimental support for counter-example generation. Possible values \
are 1, 2, or 3 to compute an interpretation before returning Unknown, \
before instantiation, or before every decision or instantiation. \
A negative value (-1, -2, or -3) will disable interpretation display. \
Note that -max-split limitation will be ignored in model generation phase";"-unsat-core",Arg.Setunsat_core," experimental support for unsat-cores";"-debug-unsat-core",Arg.Setdebug_unsat_core," replay unsat-cores produced by -unsat-core. The option implies \
-unsat-core";"-rules",Arg.Stringset_rules,"tr (tr in <parsing|typing|sat|cc|arith>) output rules used on stderr";"-max-split",Arg.Stringset_max_split,(Format.sprintf" maximum size of case-split (default value : %s)"(Numbers.Q.to_string!max_split));"-fm-cross-limit",Arg.Stringset_fm_cross_limit,(Format.sprintf" skip Fourier-Motzkin variables elimination steps that may produce \
a number of inequalities that is greater than the given limit \
(default value : %s). However, unit eliminations are always done"(Numbers.Q.to_string!fm_cross_limit));"-case-split-policy",Arg.Stringset_case_split_policy_option," case-split policy. Set the case-split policy to use. Possible values \
are: after-theory-assume (default), before-matching, after-matching";"-restricted",Arg.Setrestricted," restrict set of decision procedures (equality, arithmetic and AC)";"-bottom-classes",Arg.Setbottom_classes," show equivalence classes at each bottom of the sat";"-replay",Arg.Setreplay," replay session saved in .agr";"-replay-used-context",Arg.Setreplay_used_context," replay with axioms and predicates saved in .used file";"-replay-all-used-context",Arg.Setreplay_all_used_context," replay with all axioms and predicates saved in .used files of the \
current directory";"-save-used-context",Arg.Setsave_used_context," save used axioms and predicates in a .used file. This option implies \
-unsat-core";"-timelimit",Arg.Float(set_limittimelimit),"n set the time limit to n seconds (not supported on Windows)";"-timelimit-per-goal",Arg.Settimelimit_per_goal," Set the given timelimit for each goal, in case of multiple goals per \
file. In this case, time spent in preprocessing is separated from \
resolution time. Not relevant for GUI-mode.";"-interpretation-timelimit",Arg.Float(set_limitinterpretation_timelimit),"n set the time limit to n seconds for model generation (not supported \
on Windows). Default value is 1. sec";"-sat-plugin",Arg.Stringset_sat_plugin," use the given SAT-solver instead of the default DFS-based SAT solver";"-sat-solver",Arg.Stringset_sat_solver," choose the SAT solver to use. Default value is CDCL (i.e. satML \
solver). value 'Tableaux' will enable the Tableaux-like solver";"-no-minimal-bj",Arg.Clearminimal_bj," disable minimal backjumping in satML CDCL solver";"-no-tableaux-cdcl-in-instantiation",Arg.Clearcdcl_tableaux_inst," when satML is used, this disables the use of a tableaux-like method \
for instantiations with the CDCL solver";"-no-tableaux-cdcl-in-theories",Arg.Clearcdcl_tableaux_th," when satML is used, this disables the use of a tableaux-like method \
for the theories with the CDCL solver";"-disable-flat-formulas-simplification",Arg.Setdisable_flat_formulas_simplification," disable facts simplifications in satML's flat formulas";"-inequalities-plugin",Arg.Stringset_inequalities_plugin," use the given module to handle inequalities of linear arithmetic";"-parser",Arg.Stringadd_parser," register a new parser for Alt-Ergo";"-profiling",Arg.Stringparse_profiling,"<delay> activate the profiling module with the given frequency. \
Use Ctrl-C to switch between different views and \"Ctrl + AltGr + \\\" \
to exit.";"-profiling-plugin",Arg.Stringset_profiling_plugin," use the given profiling plugin";"-cumulative-time-profiling",Arg.Setcumulative_time_profiling," the time spent in called functions is also recorded in callers";"-rwt",Arg.Setrewriting," use rewriting instead of axiomatic approach";"-normalize-instances",Arg.Setnormalize_instances," normalize generated substitutions by matching w.r.t. the state of \
the theory. Default value is false. This means that only terms that \
are greater (w.r.t. depth) than the initial terms of the problem are \
normalized.";"-use-fpa",Arg.Setuse_fpa," enable support for floating-point arithmetic";"-prelude",Arg.Stringadd_prelude," add a file that will be loaded as a prelude. The command is \
cumulative, and the order of successive preludes is presrved.";"-inst-after-bj",Arg.Setinstantiate_after_backjump," make a (normal) instantiation round after every backjump/backtrack";"-no-backward",Arg.Setno_backward," Disable backward reasoning step (starting from the goal) done in \
the default SAT solver before deciding";"-no-sat-learning",Arg.Setno_sat_learning," Disable learning/caching of unit facts in the Default SAT. These \
facts are used to improve bcp";"-disable-weaks",Arg.Setdisable_weaks," Prevent the GC from collecting hashconsed data structrures that are \
not reachable (useful for more determinism)";"-enable-restarts",Arg.Setenable_restarts," For satML: enable restarts or not. Default behavior is 'false'";"-default-lang",Arg.Stringset_default_input_lang," Set the default input language to 'lang'. Useful when the extension \
does not allow to automatically select a parser (eg. JS mode, GUI \
mode, ...)";"-no-locs-in-answers",Arg.Setno_locs_in_answers," Do not show the locations of goals when printing solver's answers.";"-unsat-mode",Arg.Setunsat_mode," answer unsat / sat / unknown instead of Valid / Invalid / I don't know";"-inline-lets",Arg.Setinline_lets," enable substutition of variables bounds by Let. The default \
behavior is to only substitute variables that are bound to a \
constant, or that appear at most once."]letspec=List.fast_sort(fun(s1,_,_)(s2,_,_)->String.compares1s2)specletspec=Arg.alignspecletthread_yield=ref(fun()->())let(timeout:(unit->unit)ref)=ref(fun()->raiseUtil.Timeout)endletparse_cmdline_arguments()=letofile=refNoneinletset_files=ofile:=SomesinArg.parseM.specset_fileM.usage;match!ofilewith|Somef->M.file:=f;letbase_file=Filename.chop_extensionfinM.session_file:=base_file^".agr";M.used_context_file:=base_file|None->()letset_file_for_jsfilename=M.file:=filename;M.js_mode:=true(** setter functions **********************************************************)(** setters for debug flags *)letset_debugb=M.debug:=bletset_debug_ccb=M.debug_cc:=bletset_debug_gcb=M.debug_gc:=bletset_debug_useb=M.debug_use:=bletset_debug_ufb=M.debug_uf:=bletset_debug_fmb=M.debug_fm:=bletset_debug_sumb=M.debug_sum:=bletset_debug_adtb=M.debug_adt:=bletset_debug_arithb=M.debug_arith:=bletset_debug_bitvb=M.debug_bitv:=bletset_debug_acb=M.debug_ac:=bletset_debug_satb=M.debug_sat:=bletset_debug_sat_simpleb=M.debug_sat_simple:=bletset_debug_typingb=M.debug_typing:=bletset_debug_constrb=M.debug_constr:=bletset_debug_arraysb=M.debug_arrays:=bletset_debug_iteb=M.debug_ite:=bletset_debug_typesb=M.debug_types:=bletset_debug_combineb=M.debug_combine:=bletset_debug_unsat_coreb=M.debug_unsat_core:=bletset_debug_splitb=M.debug_split:=bletset_debug_matchingi=M.debug_matching:=iletset_debug_explanationsb=M.debug_explanations:=b(** additional setters *)letset_type_onlyb=M.type_only:=bletset_type_smt2b=M.type_smt2:=bletset_parse_onlyb=M.parse_only:=bletset_frontends=M.frontend:=sletset_steps_boundb=M.steps_bound:=bletset_age_boundb=M.age_bound:=bletset_no_user_triggersb=M.no_user_triggers:=bletset_verboseb=M.verbose:=bletset_greedyb=M.greedy:=bletset_triggers_varb=M.triggers_var:=bletset_nb_triggersb=M.nb_triggers:=bletset_no_Ematchingb=M.no_Ematching:=bletset_no_NLAb=M.no_NLA:=bletset_no_acb=M.no_ac:=bletset_normalize_instancesb=M.normalize_instances:=bletset_nocontracongrub=M.nocontracongru:=bletset_term_like_ppb=M.term_like_pp:=bletset_all_modelsb=M.all_models:=bletset_modelb=M.model:=bletset_complete_modelb=M.complete_model:=bletset_interpretationb=M.interpretation:=bletset_max_splitb=M.max_split:=bletset_fm_cross_limitb=M.fm_cross_limit:=bletset_rewritingb=M.rewriting:=bletset_unsat_coreb=M.unsat_core:=bletset_rulesb=M.rules:=bletset_restrictedb=M.restricted:=bletset_bottom_classesb=M.bottom_classes:=bletset_timelimitb=M.timelimit:=b(* unused -- let set_model_timelimit b = M.timelimit := b *)letset_timersb=M.timers:=b(* unused -- let set_minimal_bj b = M.minimal_bj := b *)letset_profilingfb=M.profiling:=b;M.profiling_period:=ifbthenfelse0.letset_thread_yieldf=M.thread_yield:=fletset_timeoutf=M.timeout:=fletset_save_used_contextb=M.save_used_context:=bletset_default_input_langlang=M.set_default_input_langlangletset_unsat_modeb=M.unsat_mode:=bletset_inline_letsm=M.inline_lets:=m(** getter functions **********************************************************)(** getters for debug flags *)letdebug()=!M.debugletdebug_warnings()=!M.debug_warningsletdebug_cc()=!M.debug_ccletdebug_gc()=!M.debug_gcletdebug_use()=!M.debug_useletdebug_uf()=!M.debug_ufletdebug_fm()=!M.debug_fmletdebug_fpa()=!M.debug_fpaletdebug_sum()=!M.debug_sumletdebug_adt()=!M.debug_adtletdebug_arith()=!M.debug_arithletdebug_bitv()=!M.debug_bitvletdebug_ac()=!M.debug_acletdebug_sat()=!M.debug_satletdebug_sat_simple()=!M.debug_sat_simpleletdebug_typing()=!M.debug_typingletdebug_constr()=!M.debug_constrletdebug_arrays()=!M.debug_arraysletdebug_ite()=!M.debug_iteletdebug_types()=!M.debug_typesletdebug_combine()=!M.debug_combineletdebug_unsat_core()=!M.debug_unsat_coreletdebug_split()=!M.debug_splitletdebug_matching()=!M.debug_matchingletdebug_explanations()=!M.debug_explanationsletdebug_triggers()=!M.debug_triggers(** additional getters *)letdisable_ites()=!M.disable_itesletdisable_adts()=!M.disable_adtsletenable_adts_cs()=!M.enable_adts_csletjs_mode()=!M.js_modelettype_only()=!M.type_onlylettype_smt2()=!M.type_smt2letparse_only()=!M.parse_onlyletfrontend()=!M.frontendletsteps_bound()=!M.steps_boundletno_tcp()=!M.no_tcpletno_decisions()=!M.no_decisionsletno_fm()=!M.no_fmletno_theory()=!M.no_theorylettighten_vars()=!M.tighten_varsletage_bound()=!M.age_boundletno_user_triggers()=!M.no_user_triggersletverbose()=!M.verboseletgreedy()=!M.greedylettriggers_var()=!M.triggers_varletnb_triggers()=!M.nb_triggersletmax_multi_triggers_size()=!M.max_multi_triggers_sizeletno_Ematching()=!M.no_Ematchingletarith_matching()=!M.arith_matchingletno_backjumping()=!M.no_backjumpingletno_NLA()=!M.no_NLAletno_ac()=!M.no_acletno_backward()=!M.no_backwardletno_sat_learning()=!M.no_sat_learningletsat_learning()=not!M.no_sat_learningletnocontracongru()=!M.nocontracongruletterm_like_pp()=!M.term_like_ppletcumulative_time_profiling()=!M.cumulative_time_profilingletall_models()=!M.all_modelsletmodel()=!M.model||!M.complete_modelletinterpretation()=!M.interpretationletdebug_interpretation()=!M.debug_interpretationletcomplete_model()=!M.complete_modelletmax_split()=!M.max_splitletfm_cross_limit()=!M.fm_cross_limitletrewriting()=!M.rewritingletunsat_core()=!M.unsat_core||!M.save_used_context||!M.debug_unsat_coreletrules()=!M.rulesletrestricted()=!M.restrictedletbottom_classes()=!M.bottom_classeslettimelimit()=!M.timelimitlettimelimit_per_goal()=!M.timelimit_per_goalletinterpretation_timelimit()=!M.interpretation_timelimitletenable_assertions()=!M.enable_assertionsletprofiling()=!M.profilingletprofiling_period()=!M.profiling_periodlettimers()=!M.timers||!M.profilingletcase_split_policy()=!M.case_split_policyletinstantiate_after_backjump()=!M.instantiate_after_backjumpletdisable_weaks()=!M.disable_weaksletminimal_bj()=!M.minimal_bjletcdcl_tableaux_inst()=!M.cdcl_tableaux_instletcdcl_tableaux_th()=!M.cdcl_tableaux_thletcdcl_tableaux()=!M.cdcl_tableaux_th||!M.cdcl_tableaux_instlettableaux_cdcl()=!M.tableaux_cdclletdisable_flat_formulas_simplification()=!M.disable_flat_formulas_simplificationletenable_restarts()=!M.enable_restartsletreplay()=!M.replayletreplay_used_context()=!M.replay_used_contextletreplay_all_used_context()=!M.replay_all_used_contextletsave_used_context()=!M.save_used_contextletget_file()=!M.fileletget_session_file()=!M.session_fileletget_used_context_file()=!M.used_context_fileletsat_plugin()=!M.sat_pluginletparsers()=List.rev!M.parsersletsat_solver()=!M.sat_solverletinequalities_plugin()=!M.inequalities_pluginletprofiling_plugin()=!M.profiling_pluginletnormalize_instances()=!M.normalize_instancesletuse_fpa()=!M.use_fpaletpreludes()=List.rev!M.reversed_preludesletcan_decide_ons=!M.no_decisions_on==Util.SS.empty||not(Util.SS.mems!M.no_decisions_on)letno_decisions_on__is_empty()=!M.no_decisions_on==Util.SS.emptyletdefault_input_lang()=!M.default_input_langletanswers_with_locs()=not!M.no_locs_in_answersletunsat_mode()=!M.unsat_modeletinline_lets()=!M.inline_lets(** particular getters : functions that are immediately executed **************)letexec_thread_yield()=!M.thread_yield()letexec_timeout()=!M.timeout()lettool_reqnmsg=ifrules()=nthenFormat.fprintffmt"[rule] %s@."msg(** Simple Timer module **)moduleTime=structletu=ref0.0letstart()=u:=MyUnix.cur_time()letvalue()=MyUnix.cur_time()-.!uletset_timeout~is_guitm=MyUnix.set_timeout~is_guitmletunset_timeout~is_gui=iftimelimit()<>0.thenMyUnix.unset_timeout~is_guiend(** globals **)letcs_steps_cpt=ref0letcs_steps()=!cs_steps_cptletincr_cs_steps()=incrcs_steps_cpt(** open Options in every module to hide polymorphic versions of Pervasives **)let(<>)(a:int)(b:int)=a<>blet(=)(a:int)(b:int)=a=blet(<)(a:int)(b:int)=a<blet(>)(a:int)(b:int)=a>blet(<=)(a:int)(b:int)=a<=blet(>=)(a:int)(b:int)=a>=bletcompare(a:int)(b:int)=Stdlib.compareab(* extra **)letis_gui=refNoneletset_is_guib=match!is_guiwith|None->is_gui:=Someb|Some_->Format.eprintf"Error in Options.set_is_gui: is_gui is already set!@.";assertfalseletget_is_gui()=match!is_guiwith|Someb->b|None->Format.eprintf"Error in Options.get_is_gui: is_gui is not set!@.";assertfalse