--- /dev/null
+#!/bin/bash
+
+cvc4="${CVC4_HOME}/cvc4"
+
+# This is the set of command line arguments that is required to be strictly
+# complaint with the input and output requirements of the current SMT-LIB
+# standard.
+"$cvc4" --lang=smt2 --output-lang=smt2 --strict-parsing --default-expr-depth=-1 --print-success --incremental --abstract-values $@
long = "stats-every-query"
type = "bool"
default = "false"
- links = ["--stats"]
read_only = true
help = "in incremental mode, print stats after every satisfiability or validity query"
notifies = ["notifyPrintSuccess"]
read_only = true
help = "print the \"success\" output required of SMT-LIBv2"
-
-[[alias]]
- category = "regular"
- long = "smtlib-strict"
- links = ["--lang=smt2", "--output-lang=smt2", "--strict-parsing", "--default-expr-depth=-1", "--print-success", "--incremental", "--abstract-values"]
- help = "SMT-LIBv2 compliance mode (implies other options)"
long = "bv-aig-simp=COMMAND"
type = "std::string"
predicates = ["abcEnabledBuild"]
- links = ["--bitblast-aig"]
help = "abc command to run AIG simplifications (implies --bitblast-aig, default is \"balance;drw\")"
[[option]]
long = "bv-eq-slicer=MODE"
type = "BvSlicerMode"
default = "OFF"
- links = ["--bv-eq-solver"]
help = "turn on the slicing equality solver for the bit-vector theory (only if --bitblast=lazy)"
help_mode = "Bit-vector equality slicer modes."
[[option.mode.ON]]
long = "bv-algebraic-budget=N"
type = "unsigned"
default = "1500"
- links = ["--bv-algebraic-solver"]
help = "the budget allowed for the algebraic solver in number of SAT conflicts"
[[option]]
}
bool Options::getStatistics() const{
- return (*this)[options::statistics];
+ // statsEveryQuery enables stats
+ return (*this)[options::statistics] || (*this)[options::statsEveryQuery];
}
bool Options::getStatsEveryQuery() const{
type = "bool"
default = "false"
notifies = ["notifyBeforeSearch"]
- read_only = true
help = "support the get-value and get-model commands"
[[option]]
long = "check-models"
type = "bool"
notifies = ["notifyBeforeSearch"]
- links = ["--produce-models", "--produce-assertions"]
read_only = true
help = "after SAT/INVALID/UNKNOWN, check that the generated model satisfies user assertions"
long = "dump-models"
type = "bool"
default = "false"
- links = ["--produce-models"]
read_only = true
help = "output models after every SAT/INVALID/UNKNOWN response"
default = "false"
predicates = ["proofEnabledBuild"]
notifies = ["notifyBeforeSearch"]
- read_only = true
help = "turn on proof generation"
[[option]]
type = "bool"
predicates = ["LFSCEnabledBuild"]
notifies = ["notifyBeforeSearch"]
- links = ["--proof"]
help = "after UNSAT/VALID, machine-check the generated proof"
[[option]]
long = "dump-proofs"
type = "bool"
default = "false"
- links = ["--proof"]
read_only = true
help = "output proofs after every UNSAT/VALID response"
category = "regular"
long = "check-unsat-cores"
type = "bool"
- links = ["--produce-unsat-cores"]
help = "after UNSAT/VALID, produce and check an unsat core (expensive)"
[[option]]
type = "bool"
default = "false"
notifies = ["notifyBeforeSearch"]
- links = ["--produce-unsat-cores"]
- read_only = true
help = "output unsat cores after every UNSAT/VALID response"
[[option]]
type = "bool"
default = "false"
notifies = ["notifyBeforeSearch"]
- links = ["--dump-unsat-cores"]
read_only = true
help = "dump the full unsat core, including unlabeled assertions"
long = "produce-unsat-assumptions"
type = "bool"
default = "false"
- links = ["--produce-unsat-cores"]
predicates = ["proofEnabledBuild"]
notifies = ["notifyBeforeSearch"]
read_only = true
type = "bool"
default = "false"
notifies = ["notifyBeforeSearch"]
- read_only = true
help = "support the get-assignment command"
[[option]]
void setDefaults(SmtEngine& smte, LogicInfo& logic)
{
+ // implied options
+ if (options::checkModels() || options::dumpModels())
+ {
+ Notice() << "SmtEngine: setting produceModels" << std::endl;
+ options::produceModels.set(true);
+ }
+ if (options::checkModels())
+ {
+ Notice() << "SmtEngine: setting produceAssignments" << std::endl;
+ options::produceAssignments.set(true);
+ }
+ if (options::dumpUnsatCoresFull())
+ {
+ Notice() << "SmtEngine: setting dumpUnsatCores" << std::endl;
+ options::dumpUnsatCores.set(true);
+ }
+ if (options::checkUnsatCores() || options::dumpUnsatCores()
+ || options::unsatAssumptions())
+ {
+ Notice() << "SmtEngine: setting unsatCores" << std::endl;
+ options::unsatCores.set(true);
+ }
+ if (options::checkProofs() || options::dumpProofs())
+ {
+ Notice() << "SmtEngine: setting proof" << std::endl;
+ options::proof.set(true);
+ }
+ if (options::bitvectorAigSimplifications.wasSetByUser())
+ {
+ Notice() << "SmtEngine: setting bitvectorAig" << std::endl;
+ options::bitvectorAig.set(true);
+ }
+ if (options::bitvectorEqualitySlicer.wasSetByUser())
+ {
+ Notice() << "SmtEngine: setting bitvectorEqualitySolver" << std::endl;
+ options::bitvectorEqualitySolver.set(true);
+ }
+ if (options::bitvectorAlgebraicBudget.wasSetByUser())
+ {
+ Notice() << "SmtEngine: setting bitvectorAlgebraicSolver" << std::endl;
+ options::bitvectorAlgebraicSolver.set(true);
+ }
+
// Language-based defaults
if (!options::bitvectorDivByZeroConst.wasSetByUser())
{
void SmtEngine::finishInit()
{
+ // set the random seed
+ Random::getRandom().setSeed(options::seed());
+
+ // ensure that our heuristics are properly set up
+ setDefaults(*this, d_logic);
+
Trace("smt-debug") << "SmtEngine::finishInit" << std::endl;
// We have mutual dependency here, so we add the prop engine to the theory
// engine later (it is non-essential there)
#endif
}
- // set the random seed
- Random::getRandom().setSeed(options::seed());
-
- // ensure that our heuristics are properly set up
- setDefaults(*this, d_logic);
-
Trace("smt-debug") << "Making decision engine..." << std::endl;
Trace("smt-debug") << "Making prop engine..." << std::endl;
Expr formula)
{
SmtScope smts(this);
+ finalOptionsAreSet();
doPendingPops();
Trace("smt") << "SMT defineFunction(" << func << ")" << endl;
debugCheckFormals(formals, func);