summaryrefslogtreecommitdiff
path: root/src/util/options.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/options.cpp')
-rw-r--r--src/util/options.cpp176
1 files changed, 169 insertions, 7 deletions
diff --git a/src/util/options.cpp b/src/util/options.cpp
index 26881e052..1296fa5af 100644
--- a/src/util/options.cpp
+++ b/src/util/options.cpp
@@ -130,6 +130,25 @@ Options::Options() :
arithRewriteEqSetByUser(false),
ufSymmetryBreaker(false),
ufSymmetryBreakerSetByUser(false),
+ miniscopeQuant(true),
+ miniscopeQuantFreeVar(true),
+ prenexQuant(true),
+ varElimQuant(false),
+ cnfQuant(false),
+ preSkolemQuant(false),
+ smartTriggers(true),
+ registerQuantBodyTerms(false),
+ instWhenMode(INST_WHEN_FULL_LAST_CALL),
+ eagerInstQuant(false),
+ finiteModelFind(false),
+ fmfRegionSat(false),
+ fmfModelBasedInst(true),
+ efficientEMatching(false),
+ literalMatchMode(LITERAL_MATCH_NONE),
+ cbqi(false),
+ cbqiSetByUser(false),
+ userPatternsQuant(true),
+ flipDecision(false),
lemmaOutputChannel(NULL),
lemmaInputChannel(NULL),
threads(2),// default should be 1 probably, but say 2 for now
@@ -240,6 +259,27 @@ Additional CVC4 options:\n\
--enable-symmetry-breaker turns on UF symmetry breaker (Deharbe et al.,\n\
CADE 2011) [on by default only for QF_UF]\n\
--disable-symmetry-breaker turns off UF symmetry breaker\n\
+ --disable-miniscope-quant disable miniscope quantifiers\n\
+ --disable-miniscope-quant-fv disable miniscope quantifiers for ground subformulas\n\
+ --disable-prenex-quant disable prenexing of quantified formulas\n\
+ --var-elim-quant enable variable elimination of quantified formulas\n\
+ --cnf-quant apply CNF conversion to quantified formulas\n\
+ --pre-skolem-quant apply skolemization eagerly to bodies of quantified formulas\n\
+ --disable-smart-triggers disable smart triggers\n\
+ --register-quant-body-terms consider terms within bodies of quantified formulas for matching\n\
+ --inst-when=MODE when to apply instantiation\n\
+ --eager-inst-quant apply quantifier instantiation eagerly\n\
+ --finite-model-find use finite model finding heuristic for quantifier instantiation\n\
+ --use-fmf-region-sat use region-based SAT heuristic for finite model finding\n\
+ --disable-fmf-model-inst disable model-based instantiation for finite model finding\n\
+ --efficient-e-matching use efficient E-matching\n\
+ --literal-matching=MODE choose literal matching mode\n\
+ --enable-cbqi turns on counterexample-based quantifier instantiation [off by default]\n\
+ --disable-cbqi turns off counterexample-based quantifier instantiation\n\
+ --ignore-user-patterns ignore user-provided patterns for quantifier instantiation\n\
+ --enable-flip-decision turns on flip decision heuristic\n\
+ --disable-dio-solver turns off Linear Diophantine Equation solver (Griggio, JSAT 2012)\n\
+ --disable-arith-rewrite-equalities turns off the preprocessing rewrite turning equalities into a conjunction of inequalities.\n\
--threads=N sets the number of solver threads\n\
--threadN=string configures thread N (0..#threads-1)\n\
--filter-lemma-length=N don't share lemmas strictly longer than N\n\
@@ -439,7 +479,7 @@ void Options::printLanguageHelp(std::ostream& out) {
*/
enum OptionValue {
OPTION_VALUE_BEGIN = 256, /* avoid clashing with char options */
- SMTCOMP,
+ SMTCOMP,
STATS,
SEGV_NOSPIN,
OUTPUT_LANGUAGE,
@@ -496,6 +536,25 @@ enum OptionValue {
DISABLE_ARITHMETIC_REWRITE_EQUALITIES,
ENABLE_SYMMETRY_BREAKER,
DISABLE_SYMMETRY_BREAKER,
+ DISABLE_MINISCOPE_QUANT,
+ DISABLE_MINISCOPE_QUANT_FV,
+ DISABLE_PRENEX_QUANT,
+ VAR_ELIM_QUANT,
+ CNF_QUANT,
+ PRE_SKOLEM_QUANT,
+ DISABLE_SMART_TRIGGERS,
+ REGISTER_QUANT_BODY_TERMS,
+ INST_WHEN,
+ EAGER_INST_QUANT,
+ FINITE_MODEL_FIND,
+ FMF_REGION_SAT,
+ DISABLE_FMF_MODEL_BASED_INST,
+ EFFICIENT_E_MATCHING,
+ LITERAL_MATCHING,
+ ENABLE_CBQI,
+ DISABLE_CBQI,
+ IGNORE_USER_PATTERNS,
+ ENABLE_FLIP_DECISION,
PARALLEL_THREADS,
PARALLEL_SEPARATE_OUTPUT,
PORTFOLIO_FILTER_LENGTH,
@@ -602,6 +661,25 @@ static struct option cmdlineOptions[] = {
{ "disable-arith-rewrite-equalities", no_argument, NULL, DISABLE_ARITHMETIC_REWRITE_EQUALITIES },
{ "enable-symmetry-breaker", no_argument, NULL, ENABLE_SYMMETRY_BREAKER },
{ "disable-symmetry-breaker", no_argument, NULL, DISABLE_SYMMETRY_BREAKER },
+ { "disable-miniscope-quant", no_argument, NULL, DISABLE_MINISCOPE_QUANT },
+ { "disable-miniscope-quant-fv", no_argument, NULL, DISABLE_MINISCOPE_QUANT_FV },
+ { "disable-prenex-quant", no_argument, NULL, DISABLE_PRENEX_QUANT },
+ { "var-elim-quant", no_argument, NULL, VAR_ELIM_QUANT },
+ { "cnf-quant", no_argument, NULL, CNF_QUANT },
+ { "pre-skolem-quant", no_argument, NULL, PRE_SKOLEM_QUANT },
+ { "disable-smart-triggers", no_argument, NULL, DISABLE_SMART_TRIGGERS },
+ { "register-quant-body-terms", no_argument, NULL, REGISTER_QUANT_BODY_TERMS },
+ { "inst-when", required_argument, NULL, INST_WHEN },
+ { "eager-inst-quant", no_argument, NULL, EAGER_INST_QUANT },
+ { "finite-model-find", no_argument, NULL, FINITE_MODEL_FIND },
+ { "use-fmf-region-sat", no_argument, NULL, FMF_REGION_SAT },
+ { "disable-fmf-model-inst", no_argument, NULL, DISABLE_FMF_MODEL_BASED_INST },
+ { "efficient-e-matching", no_argument, NULL, EFFICIENT_E_MATCHING },
+ { "literal-matching", required_argument, NULL, LITERAL_MATCHING },
+ { "enable-cbqi", no_argument, NULL, ENABLE_CBQI },
+ { "disable-cbqi", no_argument, NULL, DISABLE_CBQI },
+ { "ignore-user-patterns", no_argument, NULL, IGNORE_USER_PATTERNS },
+ { "enable-flip-decision", no_argument, NULL, ENABLE_FLIP_DECISION },
{ "threads", required_argument, NULL, PARALLEL_THREADS },
{ "separate-output", no_argument, NULL, PARALLEL_SEPARATE_OUTPUT },
{ "filter-lemma-length", required_argument, NULL, PORTFOLIO_FILTER_LENGTH },
@@ -984,7 +1062,7 @@ throw(OptionException) {
case 'm':
produceModels = true;
break;
-
+
case PRODUCE_ASSIGNMENTS:
produceAssignments = true;
break;
@@ -1016,7 +1094,7 @@ throw(OptionException) {
throw OptionException("This is not a proof-enabled build of CVC4; --proof cannot be used");
#endif /* CVC4_PROOF */
break;
-
+
case NO_TYPE_CHECKING:
typeChecking = false;
earlyTypeChecking = false;
@@ -1073,7 +1151,91 @@ throw(OptionException) {
ufSymmetryBreaker = false;
ufSymmetryBreakerSetByUser = true;
break;
-
+ case DISABLE_MINISCOPE_QUANT:
+ miniscopeQuant = false;
+ break;
+ case DISABLE_MINISCOPE_QUANT_FV:
+ miniscopeQuantFreeVar = false;
+ break;
+ case DISABLE_PRENEX_QUANT:
+ prenexQuant = false;
+ break;
+ case VAR_ELIM_QUANT:
+ varElimQuant = true;
+ break;
+ case CNF_QUANT:
+ cnfQuant = true;
+ break;
+ case PRE_SKOLEM_QUANT:
+ preSkolemQuant = true;
+ break;
+ case DISABLE_SMART_TRIGGERS:
+ smartTriggers = false;
+ break;
+ case REGISTER_QUANT_BODY_TERMS:
+ registerQuantBodyTerms = true;
+ break;
+ case INST_WHEN:
+ if(!strcmp(optarg, "pre-full")) {
+ instWhenMode = INST_WHEN_PRE_FULL;
+ } else if(!strcmp(optarg, "full")) {
+ instWhenMode = INST_WHEN_FULL;
+ } else if(!strcmp(optarg, "full-last-call")) {
+ instWhenMode = INST_WHEN_FULL_LAST_CALL;
+ } else if(!strcmp(optarg, "last-call")) {
+ instWhenMode = INST_WHEN_LAST_CALL;
+ } else if(!strcmp(optarg, "help")) {
+ //puts(instWhenHelp.c_str());
+ exit(1);
+ } else {
+ throw OptionException(string("unknown option for --inst-when: `") +
+ optarg + "'. Try --inst-when help.");
+ }
+ break;
+ case EAGER_INST_QUANT:
+ eagerInstQuant = true;
+ break;
+ case FINITE_MODEL_FIND:
+ finiteModelFind = true;
+ break;
+ case FMF_REGION_SAT:
+ fmfRegionSat = true;
+ break;
+ case DISABLE_FMF_MODEL_BASED_INST:
+ fmfModelBasedInst = false;
+ break;
+ case EFFICIENT_E_MATCHING:
+ efficientEMatching = true;
+ break;
+ case LITERAL_MATCHING:
+ if(!strcmp(optarg, "none")) {
+ literalMatchMode = LITERAL_MATCH_NONE;
+ } else if(!strcmp(optarg, "predicate")) {
+ literalMatchMode = LITERAL_MATCH_PREDICATE;
+ } else if(!strcmp(optarg, "equality")) {
+ literalMatchMode = LITERAL_MATCH_EQUALITY;
+ } else if(!strcmp(optarg, "help")) {
+ //puts(literalMatchHelp.c_str());
+ exit(1);
+ } else {
+ throw OptionException(string("unknown option for --literal-matching: `") +
+ optarg + "'. Try --literal-matching help.");
+ }
+ break;
+ case ENABLE_CBQI:
+ cbqi = true;
+ cbqiSetByUser = true;
+ break;
+ case DISABLE_CBQI:
+ cbqi = false;
+ cbqiSetByUser = true;
+ break;
+ case IGNORE_USER_PATTERNS:
+ userPatternsQuant = false;
+ break;
+ case ENABLE_FLIP_DECISION:
+ flipDecision = true;
+ break;
case TIME_LIMIT:
{
int i = atoi(optarg);
@@ -1141,7 +1303,7 @@ throw(OptionException) {
optarg + "' is not between 0.0 and 1.0.");
}
break;
-
+
case SAT_RESTART_FIRST:
{
int i = atoi(optarg);
@@ -1151,7 +1313,7 @@ throw(OptionException) {
satRestartFirst = i;
break;
}
-
+
case SAT_RESTART_INC:
{
int i = atoi(optarg);
@@ -1341,7 +1503,7 @@ throw(OptionException) {
case PORTFOLIO_FILTER_LENGTH:
sharingFilterByLength = atoi(optarg);
- break;
+ break;
case ':':
// This can be a long or short option, and the way to get at the name of it is different.
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback