3 header = "options/quantifiers_options.h"
5 # Whether to mini-scope quantifiers.
6 # For example, forall x. ( P( x ) ^ Q( x ) ) will be rewritten to
7 # ( forall x. P( x ) ) ^ ( forall x. Q( x ) )
9 name = "miniscopeQuant"
11 long = "miniscope-quant"
14 help = "miniscope quantifiers"
16 # Whether to mini-scope quantifiers based on formulas with no free variables.
17 # For example, forall x. ( P( x ) V Q ) will be rewritten to
18 # ( forall x. P( x ) ) V Q
20 name = "miniscopeQuantFreeVar"
22 long = "miniscope-quant-fv"
25 help = "miniscope quantifiers for ground subformulas"
33 help = "apply splitting to quantified formulas based on variable disjoint disjuncts"
38 long = "prenex-quant=MODE"
39 type = "PrenexQuantMode"
41 help = "prenex mode for quantified formulas"
42 help_mode = "Prenex quantifiers modes."
45 help = "Do no prenex nested quantifiers."
46 [[option.mode.SIMPLE]]
48 help = "Do simple prenexing of same sign quantifiers."
49 [[option.mode.NORMAL]]
51 help = "Prenex to prenex normal form."
54 name = "prenexQuantUser"
56 long = "prenex-quant-user"
59 help = "prenex quantified formulas with user patterns"
61 # Whether to variable-eliminate quantifiers.
62 # For example, forall x y. ( P( x, y ) V x != c ) will be rewritten to
67 long = "var-elim-quant"
70 help = "enable simple variable elimination for quantified formulas"
73 name = "varIneqElimQuant"
75 long = "var-ineq-elim-quant"
78 help = "enable variable elimination based on infinite projection of unbound arithmetic variables"
81 name = "dtVarExpandQuant"
83 long = "dt-var-exp-quant"
86 help = "expand datatype variables bound to one constructor in quantifiers"
91 long = "ite-lift-quant=MODE"
92 type = "IteLiftQuantMode"
94 help = "ite lifting mode for quantified formulas"
95 help_mode = "ITE lifting modes for quantified formulas."
98 help = "Do not lift if-then-else in quantified formulas."
99 [[option.mode.SIMPLE]]
101 help = "Lift if-then-else in quantified formulas if results in smaller term size."
104 help = "Lift if-then-else in quantified formulas."
107 name = "condVarSplitQuant"
109 long = "cond-var-split-quant"
112 help = "split quantified formulas that lead to variable eliminations"
115 name = "condVarSplitQuantAgg"
117 long = "cond-var-split-agg-quant"
120 help = "aggressive split quantified formulas that lead to variable eliminations"
123 name = "iteDtTesterSplitQuant"
125 long = "ite-dtt-split-quant"
128 help = "split ites with dt testers as conditions"
130 # Whether to pre-skolemize quantifier bodies.
131 # For example, forall x. ( P( x ) => (exists y. f( y ) = x) ) will be rewritten to
132 # forall x. P( x ) => f( S( x ) ) = x
134 name = "preSkolemQuant"
136 long = "pre-skolem-quant"
139 help = "apply skolemization eagerly to bodies of quantified formulas"
142 name = "preSkolemQuantNested"
144 long = "pre-skolem-quant-nested"
147 help = "apply skolemization to nested quantified formulas"
150 name = "preSkolemQuantAgg"
152 long = "pre-skolem-quant-agg"
155 help = "apply skolemization to quantified formulas aggressively"
158 name = "aggressiveMiniscopeQuant"
160 long = "ag-miniscope-quant"
163 help = "perform aggressive miniscoping for quantifiers"
166 name = "elimTautQuant"
168 long = "elim-taut-quant"
171 help = "eliminate tautological disjuncts of quantified formulas"
174 name = "extRewriteQuant"
176 long = "ext-rewrite-quant"
179 help = "apply extended rewriting to bodies of quantified formulas"
182 name = "globalNegate"
184 long = "global-negate"
187 help = "do global negation of input formula"
189 #### E-matching options
197 help = "whether to do heuristic E-matching"
202 long = "term-db-mode=MODE"
205 help = "which ground terms to consider for instantiation"
206 help_mode = "Modes for terms included in the quantifiers term database."
209 help = "Quantifiers module considers all ground terms."
210 [[option.mode.RELEVANT]]
212 help = "Quantifiers module considers only ground terms connected to current assertions."
220 help = "register terms in term database based on the SAT context"
223 name = "registerQuantBodyTerms"
225 long = "register-quant-body-terms"
228 help = "consider ground terms within bodies of quantified formulas for matching"
231 name = "strictTriggers"
233 long = "strict-triggers"
236 help = "only instantiate quantifiers with user patterns based on triggers"
239 name = "relevantTriggers"
241 long = "relevant-triggers"
244 help = "prefer triggers that are more relevant based on SInE style analysis"
247 name = "relationalTriggers"
249 long = "relational-triggers"
252 help = "choose relational triggers such as x = f(y), x >= f(y)"
255 name = "purifyTriggers"
257 long = "purify-triggers"
260 help = "purify triggers, e.g. f( x+1 ) becomes f( y ), x mapsto y-1"
263 name = "partialTriggers"
265 long = "partial-triggers"
268 help = "use triggers that do not contain all free variables"
271 name = "multiTriggerWhenSingle"
273 long = "multi-trigger-when-single"
276 help = "select multi triggers when single triggers exist"
279 name = "multiTriggerPriority"
281 long = "multi-trigger-priority"
284 help = "only try multi triggers if single triggers give no instantiations"
287 name = "multiTriggerCache"
289 long = "multi-trigger-cache"
292 help = "caching version of multi triggers"
295 name = "multiTriggerLinear"
297 long = "multi-trigger-linear"
300 help = "implementation of multi triggers where maximum number of instantiations is linear wrt number of ground terms"
302 # Trigger selection mode.
304 # These modes are used for determining which terms to select
305 # as triggers for quantified formulas, when necessary, during E-matching.
306 # In the following, note the following terminology. A trigger is a set of terms,
307 # where a single trigger is a singleton set and a multi-trigger is a set of more
310 # MIN selects single triggers of minimal term size.
311 # MAX selects single triggers of maximal term size.
313 # For example, consider the quantified formula :
314 # forall xy. P( f( g( x, y ) ) ) V Q( f( x ), y )
316 # MIN will select g( x, y ) and Q( f( x ), y ).
317 # MAX will select P( f( g( x ) ) ) and Q( f( x ), y ).
319 # The remaining three trigger selections make a difference for multi-triggers
320 # only. For quantified formulas that require multi-triggers, we build a set of
321 # partial triggers that don't contain all variables, call this set S. Then,
322 # multi-triggers are built by taking a random subset of S that collectively
323 # contains all variables.
325 # Consider the quantified formula :
326 # forall xyz. P( h( x ), y ) V Q( y, z )
328 # For ALL and MIN_SINGLE_ALL,
329 # S = { h( x ), P( h( x ), y ), Q( y, z ) }.
330 # For MIN_SINGLE_MAX,
331 # S = { P( h( x ), y ), Q( y, z ) }.
333 # Furthermore, MIN_SINGLE_ALL and MIN_SINGLE_MAX, when
334 # selecting single triggers, only select terms of minimal size.
337 name = "triggerSelMode"
339 long = "trigger-sel=MODE"
340 type = "TriggerSelMode"
342 help = "selection mode for triggers"
343 help_mode = "Trigger selection modes."
346 help = "Consider only minimal subterms that meet criteria for triggers."
349 help = "Consider only maximal subterms that meet criteria for triggers."
350 [[option.mode.MIN_SINGLE_MAX]]
352 help = "Consider only minimal subterms that meet criteria for single triggers, maximal otherwise."
353 [[option.mode.MIN_SINGLE_ALL]]
355 help = "Consider only minimal subterms that meet criteria for single triggers, all otherwise."
358 help = "Consider all subterms that meet criteria for triggers."
361 name = "triggerActiveSelMode"
363 long = "trigger-active-sel=MODE"
364 type = "TriggerActiveSelMode"
366 help = "selection mode to activate triggers"
367 help_mode = "Trigger active selection modes."
370 help = "Make all triggers active."
373 help = "Activate triggers with minimal ground terms."
376 help = "Activate triggers with maximal ground terms."
379 name = "userPatternsQuant"
381 long = "user-pat=MODE"
384 help = "policy for handling user-provided patterns for quantifier instantiation"
385 help_mode = "These modes determine how user provided patterns (triggers) are used during E-matching. The modes vary on when instantiation based on user-provided triggers is combined with instantiation based on automatically selected triggers."
388 help = "Use both user-provided and auto-generated patterns when patterns are provided for a quantified formula."
389 [[option.mode.TRUST]]
391 help = "When provided, use only user-provided patterns for a quantified formula."
392 [[option.mode.RESORT]]
394 help = "Use user-provided patterns only after auto-generated patterns saturate."
395 [[option.mode.IGNORE]]
397 help = "Ignore user-provided patterns."
398 [[option.mode.INTERLEAVE]]
400 help = "Alternate between use/resort."
403 name = "incrementTriggers"
405 long = "increment-triggers"
408 help = "generate additional triggers as needed during search"
411 name = "instWhenMode"
413 long = "inst-when=MODE"
414 type = "InstWhenMode"
415 default = "FULL_LAST_CALL"
416 predicates = ["checkInstWhenMode"]
417 help = "when to apply instantiation"
418 help_mode = "Instantiation modes."
419 [[option.mode.PRE_FULL]]
421 help = "Run instantiation round before full effort (possibly at standard effort)."
424 help = "Run instantiation round at full effort, before theory combination."
425 [[option.mode.FULL_DELAY]]
427 help = "Run instantiation round at full effort, before theory combination, after all other theories have finished."
428 [[option.mode.FULL_LAST_CALL]]
429 name = "full-last-call"
430 help = "Alternate running instantiation rounds at full effort and last call. In other words, interleave instantiation and theory combination."
431 [[option.mode.FULL_DELAY_LAST_CALL]]
432 name = "full-delay-last-call"
433 help = "Alternate running instantiation rounds at full effort after all other theories have finished, and last call."
434 [[option.mode.LAST_CALL]]
436 help = "Run instantiation at last call effort, after theory combination and and theories report sat."
439 name = "instWhenStrictInterleave"
441 long = "inst-when-strict-interleave"
444 help = "ensure theory combination and standard quantifier effort strategies take turns"
447 name = "instWhenPhase"
449 long = "inst-when-phase=N"
452 help = "instantiation rounds quantifiers takes (>=1) before allowing theory combination to happen"
455 name = "instWhenTcFirst"
457 long = "inst-when-tc-first"
460 help = "allow theory combination to happen once initially, before quantifier strategies are run"
463 name = "instMaxLevel"
465 long = "inst-max-level=N"
468 help = "maximum inst level of terms used to instantiate quantified formulas with (-1 == no limit, default)"
471 name = "instLevelInputOnly"
473 long = "inst-level-input-only"
476 help = "only input terms are assigned instantiation level zero"
479 name = "quantRepMode"
481 long = "quant-rep-mode=MODE"
482 type = "QuantRepMode"
484 help = "selection mode for representatives in quantifiers engine"
485 help_mode = "Modes for quantifiers representative selection."
488 help = "Let equality engine choose representatives."
489 [[option.mode.FIRST]]
491 help = "Choose terms that appear first."
492 [[option.mode.DEPTH]]
494 help = "Choose terms that are of minimal depth."
497 name = "fullSaturateQuant"
499 long = "full-saturate-quant"
502 help = "enumerative instantiation: instantiate with ground terms from relevant domain, then arbitrary ground terms before answering unknown"
505 name = "fullSaturateQuantRd"
507 long = "full-saturate-quant-rd"
510 help = "whether to use relevant domain first for enumerative instantiation strategy"
513 name = "fullSaturateLimit"
515 long = "full-saturate-quant-limit=N"
518 help = "maximum number of rounds of enumerative instantiation to apply (-1 means no limit)"
521 name = "fullSaturateInterleave"
523 long = "fs-interleave"
526 help = "interleave enumerative instantiation with other techniques"
529 name = "fullSaturateStratify"
534 help = "stratify effort levels in enumerative instantiation, which favors speed over fairness"
537 name = "fullSaturateSum"
542 help = "enumerating tuples of quantifiers by increasing the sum of indices, rather than the maximum"
545 name = "literalMatchMode"
547 long = "literal-matching=MODE"
548 type = "LiteralMatchMode"
550 help = "choose literal matching mode"
551 help_mode = "Literal match modes."
554 help = "Do not use literal matching."
557 help = "Consider phase requirements of triggers conservatively. For example, the trigger P( x ) in forall( x ). ( P( x ) V ~Q( x ) ) will not be matched with terms in the equivalence class of true, and likewise Q( x ) will not be matched terms in the equivalence class of false. Extends to equality."
558 [[option.mode.AGG_PREDICATE]]
559 name = "agg-predicate"
560 help = "Consider phase requirements aggressively for predicates. In the above example, only match P( x ) with terms that are in the equivalence class of false."
563 help = "Consider the phase requirements aggressively for all triggers."
571 help = "pool-based instantiation: instantiate with ground terms occurring in user-specified pools"
573 ### Finite model finding options
576 name = "finiteModelFind"
578 long = "finite-model-find"
581 help = "use finite model finding heuristic for quantifier instantiation"
584 name = "quantFunWellDefined"
586 long = "quant-fun-wd"
589 help = "assume that function defined by quantifiers are well defined"
592 name = "fmfFunWellDefined"
597 help = "find models for recursively defined functions, assumes functions are admissible"
600 name = "fmfFunWellDefinedRelevant"
605 help = "find models for recursively defined functions, assumes functions are admissible, allows empty type when function is irrelevant"
613 help = "choose mode for model-based quantifier instantiation"
614 help_mode = "Model-based quantifier instantiation modes."
617 help = "Disable model-based quantifier instantiation."
620 help = "Use algorithm from Section 5.4.2 of thesis Finite Model Finding in Satisfiability Modulo Theories."
621 [[option.mode.TRUST]]
623 help = "Do not instantiate quantified formulas (incomplete technique)."
626 name = "fmfOneInstPerRound"
628 long = "mbqi-one-inst-per-round"
631 help = "only add one instantiation per quantifier per round for mbqi"
634 name = "mbqiInterleave"
636 long = "mbqi-interleave"
639 help = "interleave model-based quantifier instantiation with other techniques"
642 name = "fmfInstEngine"
644 long = "fmf-inst-engine"
647 help = "use instantiation engine in conjunction with finite model finding"
650 name = "fmfFreshDistConst"
652 long = "fmf-fresh-dc"
655 help = "use fresh distinguished representative when applying Inst-Gen techniques"
658 name = "fmfFmcSimple"
660 long = "fmf-fmc-simple"
663 help = "simple models in full model check for finite model finding"
668 long = "fmf-bound-int"
671 help = "finite model finding on bounded integer quantification"
679 help = "finite model finding on bounded quantification"
682 name = "fmfBoundLazy"
684 long = "fmf-bound-lazy"
687 help = "enforce bounds for bounded quantification lazily via use of proxy variables"
690 name = "fmfTypeCompletionThresh"
692 long = "fmf-type-completion-thresh=N"
695 help = "the maximum cardinality of an interpreted type for which exhaustive enumeration in finite model finding is attempted"
698 name = "quantConflictFind"
703 help = "enable conflict find mechanism for quantifiers"
708 long = "quant-cf-mode=MODE"
711 help = "what effort to apply conflict find mechanism"
712 help_mode = "Quantifier conflict find modes."
713 [[option.mode.CONFLICT_ONLY]]
715 help = "Apply QCF algorithm to find conflicts only."
716 [[option.mode.PROP_EQ]]
718 help = "Apply QCF algorithm to propagate equalities as well as conflicts."
719 [[option.mode.PARTIAL]]
721 help = "Use QCF for conflicts, propagations and heuristic instantiations."
726 long = "quant-cf-when=MODE"
729 help = "when to invoke conflict find mechanism for quantifiers"
730 help_mode = "Quantifier conflict find modes."
731 [[option.mode.DEFAULT]]
733 help = "Default, apply conflict finding at full effort."
734 [[option.mode.LAST_CALL]]
736 help = "Apply conflict finding at last call, after theory combination and and all theories report sat."
739 help = "Apply conflict finding at standard effort."
740 [[option.mode.STD_H]]
742 help = "Apply conflict finding at standard effort when heuristic says to."
745 name = "qcfTConstraint"
747 long = "qcf-tconstraint"
750 help = "enable entailment checks for t-constraints in qcf algorithm"
753 name = "qcfAllConflict"
755 long = "qcf-all-conflict"
758 help = "add all available conflicting instances during conflict-based instantiation"
761 name = "qcfNestedConflict"
763 long = "qcf-nested-conflict"
766 help = "consider conflicts for nested quantifiers"
774 help = "qcf experimental variable ordering"
777 name = "instNoEntail"
779 long = "inst-no-entail"
782 help = "do not consider instances of quantified formulas that are currently entailed"
785 name = "qcfEagerTest"
787 long = "qcf-eager-test"
790 help = "optimization, test qcf instances eagerly"
793 name = "qcfEagerCheckRd"
795 long = "qcf-eager-check-rd"
798 help = "optimization, eagerly check relevant domain of matched position"
806 help = "optimization, skip instances based on possibly irrelevant portions of quantified formulas"
808 ### Induction options
811 name = "quantInduction"
816 help = "use all available techniques for inductive reasoning"
819 name = "dtStcInduction"
824 help = "apply strengthening for existential quantification over datatypes based on structural induction"
827 name = "intWfInduction"
832 help = "apply strengthening for integers based on well-founded induction"
835 name = "conjectureGen"
837 long = "conjecture-gen"
840 help = "generate candidate conjectures for inductive proofs"
843 name = "conjectureGenPerRound"
845 long = "conjecture-gen-per-round=N"
848 help = "number of conjectures to generate per instantiation round"
851 name = "conjectureNoFilter"
853 long = "conjecture-no-filter"
856 help = "do not filter conjectures"
859 name = "conjectureFilterActiveTerms"
861 long = "conjecture-filter-active-terms"
864 help = "filter based on active terms"
867 name = "conjectureFilterCanonical"
869 long = "conjecture-filter-canonical"
872 help = "filter based on canonicity"
875 name = "conjectureFilterModel"
877 long = "conjecture-filter-model"
880 help = "filter based on model"
883 name = "conjectureGenGtEnum"
885 long = "conjecture-gen-gt-enum=N"
888 help = "number of ground terms to generate for model filtering"
891 name = "conjectureUeeIntro"
893 long = "conjecture-gen-uee-intro"
896 help = "more aggressive merging for universal equality engine, introduces terms"
899 name = "conjectureGenMaxDepth"
901 long = "conjecture-gen-max-depth=N"
904 help = "maximum depth of terms to consider for conjectures"
906 ### Synthesis options
909 name = "sygusInference"
911 long = "sygus-inference"
914 help = "attempt to preprocess arbitrary inputs to sygus conjectures"
922 help = "use sygus solver (default is true for sygus inputs)"
925 name = "cegqiSingleInvMode"
927 long = "sygus-si=MODE"
928 type = "CegqiSingleInvMode"
930 help = "mode for processing single invocation synthesis conjectures"
931 help_mode = "Modes for single invocation techniques."
934 help = "Do not use single invocation techniques."
937 help = "Use single invocation techniques only if grammar is not restrictive."
940 help = "Always use single invocation techniques."
943 name = "cegqiSingleInvPartial"
945 long = "sygus-si-partial"
948 help = "combined techniques for synthesis conjectures that are partially single invocation"
950 # Solution reconstruction modes for single invocation conjectures
952 # These modes indicate the policy when cvc5 solves a synthesis conjecture using
953 # single invocation techniques for a sygus problem with a user-specified
957 name = "cegqiSingleInvReconstruct"
959 long = "sygus-si-rcons=MODE"
960 type = "CegqiSingleInvRconsMode"
961 default = "ALL_LIMIT"
962 help = "policy for reconstructing solutions for single invocation conjectures"
963 help_mode = "Modes for reconstruction solutions while using single invocation techniques."
966 help = "Do not try to reconstruct solutions in the original (user-provided) grammar when using single invocation techniques. In this mode, solutions produced by cvc5 may violate grammar restrictions."
969 help = "Try to reconstruct solutions in the original grammar when using single invocation techniques in an incomplete (fail-fast) manner."
970 [[option.mode.ALL_LIMIT]]
972 help = "Try to reconstruct solutions in the original grammar, but termintate if a maximum number of rounds for reconstruction is exceeded."
975 help = "Try to reconstruct solutions in the original grammar. In this mode, we do not terminate until a solution is successfully reconstructed."
978 name = "cegqiSingleInvReconstructLimit"
980 long = "sygus-si-rcons-limit=N"
983 help = "number of rounds of enumeration to use during solution reconstruction (negative means unlimited)"
986 name = "cegqiSingleInvReconstructConst"
988 long = "sygus-si-reconstruct-const"
991 help = "include constants when reconstruct solutions for single invocation conjectures in original grammar"
994 name = "cegqiSingleInvAbort"
996 long = "sygus-si-abort"
999 help = "abort if synthesis conjecture is not single invocation"
1002 name = "sygusConstRepairAbort"
1003 category = "regular"
1004 long = "sygus-crepair-abort"
1007 help = "abort if constant repair techniques are not applicable"
1009 # Modes for piecewise-independent unification for synthesis (see Barbosa et al
1013 name = "sygusUnifPi"
1014 category = "regular"
1015 long = "sygus-unif-pi=MODE"
1016 type = "SygusUnifPiMode"
1018 help = "mode for synthesis via piecewise-indepedent unification"
1019 help_mode = "Modes for piecewise-independent unification."
1020 [[option.mode.NONE]]
1022 help = "Do not use piecewise-independent unification."
1023 [[option.mode.COMPLETE]]
1025 help = "Use complete approach for piecewise-independent unification (see Section 3 of Barbosa et al FMCAD 2019)"
1026 [[option.mode.CENUM]]
1028 help = "Use unconstrained condition enumeration for piecewise-independent unification (see Section 4 of Barbosa et al FMCAD 2019)."
1029 [[option.mode.CENUM_IGAIN]]
1030 name = "cond-enum-igain"
1031 help = "Same as cond-enum, but additionally uses an information gain heuristic when doing decision tree learning."
1034 name = "sygusUnifShuffleCond"
1035 category = "regular"
1036 long = "sygus-unif-shuffle-cond"
1039 help = "Shuffle condition pool when building solutions (may change solutions sizes)"
1042 name = "sygusUnifCondIndNoRepeatSol"
1043 category = "regular"
1044 long = "sygus-unif-cond-independent-no-repeat-sol"
1047 help = "Do not try repeated solutions when using independent synthesis of conditions in unification-based function synthesis"
1050 name = "sygusBoolIteReturnConst"
1051 category = "regular"
1052 long = "sygus-bool-ite-return-const"
1055 help = "Only use Boolean constants for return values in unification-based function synthesis"
1058 name = "sygusQePreproc"
1059 category = "regular"
1060 long = "sygus-qe-preproc"
1063 help = "use quantifier elimination as a preprocessing step for sygus"
1066 name = "sygusRepairConst"
1067 category = "regular"
1068 long = "sygus-repair-const"
1071 help = "use approach to repair constants in sygus candidate solutions"
1074 name = "sygusCoreConnective"
1075 category = "regular"
1076 long = "sygus-core-connective"
1079 help = "use unsat core analysis to construct Boolean connective to sygus conjectures"
1082 name = "sygusRepairConstTimeout"
1083 category = "regular"
1084 long = "sygus-repair-const-timeout=N"
1085 type = "unsigned long"
1086 help = "timeout (in milliseconds) for the satisfiability check to repair constants in sygus candidate solutions"
1089 name = "sygusActiveGenMode"
1090 category = "regular"
1091 long = "sygus-active-gen=MODE"
1092 type = "SygusActiveGenMode"
1094 help = "mode for actively-generated sygus enumerators"
1095 help_mode = "Modes for actively-generated sygus enumerators."
1096 [[option.mode.NONE]]
1098 help = "Do not use actively-generated sygus enumerators."
1099 [[option.mode.ENUM_BASIC]]
1101 help = "Use basic type enumerator for actively-generated sygus enumerators."
1102 [[option.mode.ENUM]]
1104 help = "Use optimized enumerator for actively-generated sygus enumerators."
1105 [[option.mode.VAR_AGNOSTIC]]
1106 name = "var-agnostic"
1107 help = "Use sygus solver to enumerate terms that are agnostic to variables."
1108 [[option.mode.AUTO]]
1110 help = "Internally decide the best policy for each enumerator."
1113 name = "sygusActiveGenEnumConsts"
1114 category = "regular"
1115 long = "sygus-active-gen-cfactor=N"
1116 type = "unsigned long"
1118 help = "the branching factor for the number of interpreted constants to consider for each size when using --sygus-active-gen=enum"
1121 name = "sygusMinGrammar"
1122 category = "regular"
1123 long = "sygus-min-grammar"
1126 help = "statically minimize sygus grammars"
1129 name = "sygusAddConstGrammar"
1130 category = "regular"
1131 long = "sygus-add-const-grammar"
1134 help = "statically add constants appearing in conjecture to grammars"
1137 name = "sygusGrammarNorm"
1138 category = "regular"
1139 long = "sygus-grammar-norm"
1142 help = "statically normalize sygus grammars based on flattening (linearization)"
1145 name = "sygusTemplEmbedGrammar"
1146 category = "regular"
1147 long = "sygus-templ-embed-grammar"
1150 help = "embed sygus templates into grammars"
1153 name = "sygusGrammarConsMode"
1154 category = "regular"
1155 long = "sygus-grammar-cons=MODE"
1156 type = "SygusGrammarConsMode"
1158 help = "mode for SyGuS grammar construction"
1159 help_mode = "Modes for default SyGuS grammars."
1160 [[option.mode.SIMPLE]]
1162 help = "Use simple grammar construction (no symbolic terms or constants)."
1163 [[option.mode.ANY_CONST]]
1165 help = "Use symoblic constant constructors."
1166 [[option.mode.ANY_TERM]]
1168 help = "When applicable, use constructors corresponding to any symbolic term. This option enables a sum-of-monomials grammar for arithmetic. For all other types, it enables symbolic constant constructors."
1169 [[option.mode.ANY_TERM_CONCISE]]
1170 name = "any-term-concise"
1171 help = "When applicable, use constructors corresponding to any symbolic term, favoring conciseness over generality. This option is equivalent to any-term but enables a polynomial grammar for arithmetic when not in a combined theory."
1174 name = "sygusInvTemplMode"
1175 category = "regular"
1176 long = "sygus-inv-templ=MODE"
1177 type = "SygusInvTemplMode"
1179 help = "template mode for sygus invariant synthesis (weaken pre-condition, strengthen post-condition, or none)"
1180 help_mode = "Template modes for sygus invariant synthesis."
1181 [[option.mode.NONE]]
1183 help = "Synthesize invariant directly."
1186 help = "Synthesize invariant based on weakening of precondition."
1187 [[option.mode.POST]]
1189 help = "Synthesize invariant based on strengthening of postcondition."
1192 name = "sygusInvTemplWhenSyntax"
1193 category = "regular"
1194 long = "sygus-inv-templ-when-sg"
1197 help = "use invariant templates (with solution reconstruction) for syntax guided problems"
1200 name = "sygusInvAutoUnfold"
1201 category = "regular"
1202 long = "sygus-auto-unfold"
1205 help = "enable approach which automatically unfolds transition systems for directly solving invariant synthesis problems"
1208 name = "sygusUnifPbe"
1209 category = "regular"
1213 help = "enable approach which unifies conditional solutions, specialized for programming-by-examples (pbe) conjectures"
1216 name = "sygusPbeMultiFair"
1217 category = "regular"
1218 long = "sygus-pbe-multi-fair"
1221 help = "when using multiple enumerators, ensure that we only register value of minimial term size"
1224 name = "sygusPbeMultiFairDiff"
1225 category = "regular"
1226 long = "sygus-pbe-multi-fair-diff=N"
1229 help = "when using multiple enumerators, ensure that we only register values of minimial term size plus this value (default 0)"
1232 name = "sygusEvalUnfold"
1233 category = "regular"
1234 long = "sygus-eval-unfold"
1237 help = "do unfolding of sygus evaluation functions"
1240 name = "sygusEvalUnfoldBool"
1241 category = "regular"
1242 long = "sygus-eval-unfold-bool"
1245 help = "do unfolding of Boolean evaluation functions that appear in refinement lemmas"
1248 name = "sygusStream"
1249 category = "regular"
1250 long = "sygus-stream"
1253 help = "enumerate a stream of solutions instead of terminating after the first one"
1256 name = "sygusExtRew"
1257 category = "regular"
1258 long = "sygus-ext-rew"
1261 help = "use extended rewriter for sygus"
1264 name = "cegisSample"
1265 category = "regular"
1266 long = "cegis-sample=MODE"
1267 type = "CegisSampleMode"
1269 help = "mode for using samples in the counterexample-guided inductive synthesis loop"
1270 help_mode = "Modes for sampling with counterexample-guided inductive synthesis (CEGIS)."
1271 [[option.mode.NONE]]
1273 help = "Do not use sampling with CEGIS."
1276 help = "Use sampling to accelerate CEGIS. This will rule out solutions for a conjecture when they are not satisfied by a sample point."
1277 [[option.mode.TRUST]]
1279 help = "Trust that when a solution for a conjecture is always true under sampling, then it is indeed a solution. Note this option may print out spurious solutions for synthesis conjectures."
1282 name = "sygusEvalOpt"
1283 category = "regular"
1284 long = "sygus-eval-opt"
1287 help = "use optimized approach for evaluation in sygus"
1290 name = "sygusArgRelevant"
1291 category = "regular"
1292 long = "sygus-arg-relevant"
1295 help = "static inference techniques for computing whether arguments of functions-to-synthesize are relevant"
1298 name = "sygusRecFun"
1299 category = "regular"
1300 long = "sygus-rec-fun"
1303 help = "enable efficient support for recursive functions in sygus grammars"
1306 name = "sygusRecFunEvalLimit"
1307 category = "regular"
1308 long = "sygus-rec-fun-eval-limit=N"
1311 help = "use a hard limit for how many times in a given evaluator call a recursive function can be evaluated (so infinite loops can be avoided)"
1313 # Internal uses of sygus
1317 category = "regular"
1321 help = "use sygus to enumerate and verify correctness of rewrite rules"
1324 name = "sygusRewSynth"
1325 category = "regular"
1326 long = "sygus-rr-synth"
1329 help = "use sygus to enumerate candidate rewrite rules"
1332 name = "sygusRewSynthFilterOrder"
1333 category = "regular"
1334 long = "sygus-rr-synth-filter-order"
1337 help = "filter candidate rewrites based on variable ordering"
1340 name = "sygusRewSynthFilterMatch"
1341 category = "regular"
1342 long = "sygus-rr-synth-filter-match"
1345 help = "filter candidate rewrites based on matching"
1348 name = "sygusRewSynthFilterCong"
1349 category = "regular"
1350 long = "sygus-rr-synth-filter-cong"
1353 help = "filter candidate rewrites based on congruence"
1356 name = "sygusRewSynthFilterNonLinear"
1357 category = "regular"
1358 long = "sygus-rr-synth-filter-nl"
1361 help = "filter non-linear candidate rewrites"
1364 name = "sygusRewVerify"
1365 category = "regular"
1366 long = "sygus-rr-verify"
1369 help = "use sygus to verify the correctness of rewrite rules via sampling"
1372 name = "sygusRewVerifyAbort"
1373 category = "regular"
1374 long = "sygus-rr-verify-abort"
1377 help = "abort when sygus-rr-verify finds an instance of unsoundness"
1380 name = "sygusSamples"
1381 category = "regular"
1382 long = "sygus-samples=N"
1385 help = "number of points to consider when doing sygus rewriter sample testing"
1388 name = "sygusSampleGrammar"
1389 category = "regular"
1390 long = "sygus-sample-grammar"
1393 help = "when applicable, use grammar for choosing sample points"
1396 name = "sygusSampleFpUniform"
1397 category = "regular"
1398 long = "sygus-sample-fp-uniform"
1401 help = "sample floating-point values uniformly instead of in a biased fashion"
1404 name = "sygusRewSynthAccel"
1405 category = "regular"
1406 long = "sygus-rr-synth-accel"
1409 help = "add dynamic symmetry breaking clauses based on candidate rewrites"
1412 name = "sygusRewSynthCheck"
1413 category = "regular"
1414 long = "sygus-rr-synth-check"
1417 help = "use satisfiability check to verify correctness of candidate rewrites"
1420 name = "sygusRewSynthInput"
1421 category = "regular"
1422 long = "sygus-rr-synth-input"
1425 help = "synthesize rewrite rules based on the input formula"
1428 name = "sygusRewSynthInputNVars"
1429 category = "regular"
1430 long = "sygus-rr-synth-input-nvars=N"
1433 help = "the maximum number of variables per type that appear in rewrites from sygus-rr-synth-input"
1436 name = "sygusRewSynthInputUseBool"
1437 category = "regular"
1438 long = "sygus-rr-synth-input-use-bool"
1441 help = "synthesize Boolean rewrite rules based on the input formula"
1444 name = "sygusExprMinerCheckTimeout"
1445 category = "regular"
1446 long = "sygus-expr-miner-check-timeout=N"
1447 type = "unsigned long"
1448 help = "timeout (in milliseconds) for satisfiability checks in expression miners"
1451 name = "sygusRewSynthRec"
1452 category = "regular"
1453 long = "sygus-rr-synth-rec"
1456 help = "synthesize rewrite rules over all sygus grammar types recursively"
1459 name = "sygusQueryGen"
1460 category = "regular"
1461 long = "sygus-query-gen"
1464 help = "use sygus to enumerate interesting satisfiability queries"
1467 name = "sygusQueryGenThresh"
1468 category = "regular"
1469 long = "sygus-query-gen-thresh=N"
1472 help = "number of points that we allow to be equal for enumerating satisfiable queries with sygus-query-gen"
1475 name = "sygusQueryGenCheck"
1476 category = "regular"
1477 long = "sygus-query-gen-check"
1480 help = "use interesting satisfiability queries to check soundness of cvc5"
1483 name = "sygusQueryGenDumpFiles"
1484 category = "regular"
1485 long = "sygus-query-gen-dump-files=MODE"
1486 type = "SygusQueryDumpFilesMode"
1488 help = "mode for dumping external files corresponding to interesting satisfiability queries with sygus-query-gen"
1489 help_mode = "Query file options."
1490 [[option.mode.NONE]]
1492 help = "Do not dump query files when using --sygus-query-gen."
1495 help = "Dump all query files."
1496 [[option.mode.UNSOLVED]]
1498 help = "Dump query files that the subsolver did not solve."
1501 name = "sygusFilterSolMode"
1502 category = "regular"
1503 long = "sygus-filter-sol=MODE"
1504 type = "SygusFilterSolMode"
1506 help = "mode for filtering sygus solutions"
1507 help_mode = "Modes for filtering sygus solutions."
1508 [[option.mode.NONE]]
1510 help = "Do not filter sygus solutions."
1511 [[option.mode.STRONG]]
1513 help = "Filter solutions that are logically stronger than others."
1514 [[option.mode.WEAK]]
1516 help = "Filter solutions that are logically weaker than others."
1519 name = "sygusFilterSolRevSubsume"
1521 long = "sygus-filter-sol-rev"
1524 help = "compute backwards filtering to compute whether previous solutions are filtered based on later ones"
1528 category = "regular"
1529 long = "debug-sygus"
1532 help = "print enumerated terms and candidates generated by the sygus solver (for debugging)"
1534 # CEGQI applied to general quantified formulas
1538 category = "regular"
1542 help = "turns on counterexample-based quantifier instantiation"
1545 name = "cegqiFullEffort"
1546 category = "regular"
1550 help = "turns on full effort counterexample-based quantifier instantiation, which may resort to model-value instantiation"
1554 category = "regular"
1558 help = "answer sat when quantifiers are asserted with counterexample-based quantifier instantiation"
1562 category = "regular"
1563 long = "cegqi-model"
1566 help = "guide instantiations by model values for counterexample-based quantifier instantiation"
1570 category = "regular"
1574 help = "apply counterexample-based instantiation to all quantified formulas"
1577 name = "cegqiMultiInst"
1578 category = "regular"
1579 long = "cegqi-multi-inst"
1582 help = "when applicable, do multi instantiations per quantifier per round in counterexample-based quantifier instantiation"
1585 name = "cegqiRepeatLit"
1586 category = "regular"
1587 long = "cegqi-repeat-lit"
1590 help = "solve literals more than once in counterexample-based quantifier instantiation"
1593 name = "cegqiInnermost"
1594 category = "regular"
1595 long = "cegqi-innermost"
1598 help = "only process innermost quantified formulas in counterexample-based quantifier instantiation"
1601 name = "cegqiNestedQE"
1602 category = "regular"
1603 long = "cegqi-nested-qe"
1606 help = "process nested quantified formulas with quantifier elimination in counterexample-based quantifier instantiation"
1608 # CEGQI for arithmetic
1611 name = "cegqiUseInfInt"
1612 category = "regular"
1613 long = "cegqi-use-inf-int"
1616 help = "use integer infinity for vts in counterexample-based quantifier instantiation"
1619 name = "cegqiUseInfReal"
1620 category = "regular"
1621 long = "cegqi-use-inf-real"
1624 help = "use real infinity for vts in counterexample-based quantifier instantiation"
1627 name = "cegqiMinBounds"
1628 category = "regular"
1629 long = "cegqi-min-bounds"
1632 help = "use minimally constrained lower/upper bound for counterexample-based quantifier instantiation"
1635 name = "cegqiRoundUpLowerLia"
1636 category = "regular"
1637 long = "cegqi-round-up-lia"
1640 help = "round up integer lower bounds in substitutions for counterexample-based quantifier instantiation"
1643 name = "cegqiMidpoint"
1644 category = "regular"
1645 long = "cegqi-midpoint"
1648 help = "choose substitutions based on midpoints of lower and upper bounds for counterexample-based quantifier instantiation"
1652 category = "regular"
1656 help = "non-optimal bounds for counterexample-based quantifier instantiation"
1662 category = "regular"
1666 help = "use word-level inversion approach for counterexample-guided quantifier instantiation for bit-vectors"
1669 name = "cegqiBvInterleaveValue"
1670 category = "regular"
1671 long = "cegqi-bv-interleave-value"
1674 help = "interleave model value instantiation with word-level inversion approach"
1677 name = "cegqiBvIneqMode"
1678 category = "regular"
1679 long = "cegqi-bv-ineq=MODE"
1680 type = "CegqiBvIneqMode"
1681 default = "EQ_BOUNDARY"
1682 help = "choose mode for handling bit-vector inequalities with counterexample-guided instantiation"
1683 help_mode = "Modes for handling bit-vector inequalities in counterexample-guided instantiation."
1684 [[option.mode.EQ_SLACK]]
1686 help = "Solve for the inequality using the slack value in the model, e.g., t > s becomes t = s + ( t-s )^M."
1687 [[option.mode.EQ_BOUNDARY]]
1688 name = "eq-boundary"
1689 help = "Solve for the boundary point of the inequality, e.g., t > s becomes t = s+1."
1690 [[option.mode.KEEP]]
1692 help = "Solve for the inequality directly using side conditions for invertibility."
1695 name = "cegqiBvRmExtract"
1696 category = "regular"
1697 long = "cegqi-bv-rm-extract"
1700 help = "replaces extract terms with variables for counterexample-guided instantiation for bit-vectors"
1703 name = "cegqiBvLinearize"
1704 category = "regular"
1705 long = "cegqi-bv-linear"
1708 help = "linearize adder chains for variables"
1711 name = "cegqiBvSolveNl"
1712 category = "regular"
1713 long = "cegqi-bv-solve-nl"
1716 help = "try to solve non-linear bv literals using model value projections"
1719 name = "cegqiBvConcInv"
1720 category = "regular"
1721 long = "cegqi-bv-concat-inv"
1724 help = "compute inverse for concat over equalities rather than producing an invertibility condition"
1726 ### Reduction options
1729 name = "quantAlphaEquiv"
1730 category = "regular"
1731 long = "quant-alpha-equiv"
1734 help = "infer alpha equivalence between quantified formulas"
1737 name = "macrosQuant"
1738 category = "regular"
1739 long = "macros-quant"
1742 help = "perform quantifiers macro expansion"
1745 name = "macrosQuantMode"
1746 category = "regular"
1747 long = "macros-quant-mode=MODE"
1748 type = "MacrosQuantMode"
1749 default = "GROUND_UF"
1750 help = "mode for quantifiers macro expansion"
1751 help_mode = "Modes for quantifiers macro expansion."
1754 help = "Infer definitions for functions, including those containing quantified formulas."
1755 [[option.mode.GROUND]]
1757 help = "Only infer ground definitions for functions."
1758 [[option.mode.GROUND_UF]]
1760 help = "Only infer ground definitions for functions that result in triggers for all free variables."
1763 name = "quantDynamicSplit"
1764 category = "regular"
1765 long = "quant-dsplit-mode=MODE"
1766 type = "QuantDSplitMode"
1768 help = "mode for dynamic quantifiers splitting"
1769 help_mode = "Modes for quantifiers splitting."
1770 [[option.mode.NONE]]
1772 help = "Never split quantified formulas."
1773 [[option.mode.DEFAULT]]
1775 help = "Split quantified formulas over some finite datatypes when finite model finding is enabled."
1778 help = "Aggressively split quantified formulas."
1780 ### Higher-order options
1784 category = "regular"
1785 long = "ho-matching"
1788 help = "do higher-order matching algorithm for triggers with variable operators"
1791 name = "hoMatchingVarArgPriority"
1792 category = "regular"
1793 long = "ho-matching-var-priority"
1796 help = "give priority to variable arguments over constant arguments"
1799 name = "hoMergeTermDb"
1800 category = "regular"
1801 long = "ho-merge-term-db"
1804 help = "merge term indices modulo equality"
1808 category = "regular"
1812 help = "eagerly eliminate higher-order constraints"
1815 name = "hoElimStoreAx"
1816 category = "regular"
1817 long = "ho-elim-store-ax"
1820 help = "use store axiom during ho-elim"
1826 category = "regular"
1830 help = "print instantiations during solving (for debugging)"
1832 ### SyGuS instantiation options
1836 category = "regular"
1840 help = "Enable SyGuS instantiation quantifiers module"
1843 name = "sygusInstScope"
1844 category = "regular"
1845 long = "sygus-inst-scope=MODE"
1846 type = "SygusInstScope"
1848 help = "select scope of ground terms"
1849 help_mode = "scope for collecting ground terms for the grammar."
1852 help = "use ground terms inside given quantified formula only."
1855 help = "use ground terms outside of quantified formulas only."
1856 [[option.mode.BOTH]]
1858 help = "combines inside and outside."
1861 name = "sygusInstTermSel"
1862 category = "regular"
1863 long = "sygus-inst-term-sel=MODE"
1864 type = "SygusInstTermSelMode"
1866 help = "granularity for ground terms"
1867 help_mode = "Ground term selection modes."
1870 help = "collect minimal ground terms only."
1873 help = "collect maximal ground terms only."
1874 [[option.mode.BOTH]]
1876 help = "combines minimal and maximal ."
1879 name = "sygusInstMode"
1880 category = "regular"
1881 long = "sygus-inst-mode=MODE"
1882 type = "SygusInstMode"
1883 default = "PRIORITY_INST"
1884 help = "select instantiation lemma mode"
1885 help_mode = "SyGuS instantiation lemma modes."
1886 [[option.mode.PRIORITY_INST]]
1887 name = "priority-inst"
1888 help = "add instantiation lemmas first, add evaluation unfolding if instantiation fails."
1889 [[option.mode.PRIORITY_EVAL]]
1890 name = "priority-eval"
1891 help = "add evaluation unfolding lemma first, add instantiation lemma if unfolding lemmas already added."
1892 [[option.mode.INTERLEAVE]]
1894 help = "add instantiation and evaluation unfolding lemmas in the same step."