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.cpp1801
1 files changed, 0 insertions, 1801 deletions
diff --git a/src/util/options.cpp b/src/util/options.cpp
deleted file mode 100644
index c2b632b32..000000000
--- a/src/util/options.cpp
+++ /dev/null
@@ -1,1801 +0,0 @@
-/********************* */
-/*! \file options.cpp
- ** \verbatim
- ** Original author: mdeters
- ** Major contributors: cconway, taking
- ** Minor contributors (to current version): barrett, dejan
- ** This file is part of the CVC4 prototype.
- ** Copyright (c) 2009, 2010, 2011 The Analysis of Computer Systems Group (ACSys)
- ** Courant Institute of Mathematical Sciences
- ** New York University
- ** See the file COPYING in the top-level source directory for licensing
- ** information.\endverbatim
- **
- ** \brief Contains code for handling command-line options.
- **
- ** Contains code for handling command-line options
- **/
-
-#include <cstdio>
-#include <cstdlib>
-#include <new>
-#include <unistd.h>
-#include <string.h>
-#include <stdint.h>
-#include <time.h>
-#include <sstream>
-
-#include <getopt.h>
-
-#include "expr/expr.h"
-#include "expr/command.h"
-#include "util/configuration.h"
-#include "util/exception.h"
-#include "util/language.h"
-#include "util/options.h"
-#include "util/output.h"
-#include "util/dump.h"
-#include "prop/sat_solver_factory.h"
-
-#include "cvc4autoconfig.h"
-
-using namespace std;
-using namespace CVC4;
-
-namespace CVC4 {
-
-CVC4_THREADLOCAL(const Options*) Options::s_current = NULL;
-
-#ifdef CVC4_DEBUG
-# define USE_EARLY_TYPE_CHECKING_BY_DEFAULT true
-#else /* CVC4_DEBUG */
-# define USE_EARLY_TYPE_CHECKING_BY_DEFAULT false
-#endif /* CVC4_DEBUG */
-
-#if defined(CVC4_MUZZLED) || defined(CVC4_COMPETITION_MODE)
-# define DO_SEMANTIC_CHECKS_BY_DEFAULT false
-#else /* CVC4_MUZZLED || CVC4_COMPETITION_MODE */
-# define DO_SEMANTIC_CHECKS_BY_DEFAULT true
-#endif /* CVC4_MUZZLED || CVC4_COMPETITION_MODE */
-
-/** default decision options */
-const Options::DecisionOptions defaultDecOpt = {
- false, // relevancyLeaves
- 1000, // maxRelTimeAsPermille
- true, // computeRelevancy
- false, // mustRelevancy
- false, // stopOnly
-};
-
-Options::Options() :
- binary_name(),
- statistics(false),
- in(&std::cin),
- out(&std::cout),
- err(&std::cerr),
- verbosity(0),
- inputLanguage(language::input::LANG_AUTO),
- outputLanguage(language::output::LANG_AUTO),
- help(false),
- version(false),
- languageHelp(false),
- parseOnly(false),
- preprocessOnly(false),
- semanticChecks(DO_SEMANTIC_CHECKS_BY_DEFAULT),
- theoryRegistration(true),
- memoryMap(false),
- strictParsing(false),
- lazyDefinitionExpansion(false),
- printWinner(false),
- defaultExprDepth(0),
- simplificationMode(SIMPLIFICATION_MODE_BATCH),
- simplificationModeSetByUser(false),
- decisionMode(DECISION_STRATEGY_INTERNAL),
- decisionModeSetByUser(false),
- decisionOptions(DecisionOptions(defaultDecOpt)),
- doStaticLearning(true),
- doITESimp(false),
- doITESimpSetByUser(false),
- unconstrainedSimp(false),
- unconstrainedSimpSetByUser(false),
- repeatSimp(false),
- repeatSimpSetByUser(false),
- interactive(false),
- interactiveSetByUser(false),
- perCallResourceLimit(0),
- cumulativeResourceLimit(0),
- perCallMillisecondLimit(0),
- cumulativeMillisecondLimit(0),
- segvNoSpin(false),
- produceModels(false),
- proof(false),
- produceAssignments(false),
- typeChecking(DO_SEMANTIC_CHECKS_BY_DEFAULT),
- earlyTypeChecking(USE_EARLY_TYPE_CHECKING_BY_DEFAULT),
- incrementalSolving(false),
- replayFilename(""),
- replayStream(NULL),
- replayLog(NULL),
- satRandomFreq(0.0),
- satRandomSeed(91648253),// Minisat's default value
- satVarDecay(0.95),
- satClauseDecay(0.999),
- satRestartFirst(25),
- satRestartInc(3.0),
- arithUnateLemmaMode(ALL_PRESOLVE_LEMMAS),
- arithPropagationMode(BOTH_PROP),
- arithHeuristicPivots(0),
- arithHeuristicPivotsSetByUser(false),
- arithStandardCheckVarOrderPivots(-1),
- arithStandardCheckVarOrderPivotsSetByUser(false),
- arithHeuristicPivotRule(MINIMUM),
- arithSimplexCheckPeriod(200),
- arithPivotThreshold(2),
- arithPivotThresholdSetByUser(false),
- arithPropagateMaxLength(16),
- arithDioSolver(true),
- arithRewriteEq(false),
- 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),
- ufssEagerSplits(false),
- ufssRegions(true),
- ufssColoringSat(false),
- fmfModelBasedInst(true),
- fmfInstGen(true),
- fmfOneInstPerRound(false),
- fmfInstEngine(false),
- fmfRelevantDomain(false),
- efficientEMatching(false),
- literalMatchMode(LITERAL_MATCH_NONE),
- cbqi(false),
- cbqiSetByUser(false),
- rewriteRulesAsAxioms(false),
- userPatternsQuant(true),
- flipDecision(false),
- printInstEngine(false),
- printModelEngine(false),
- lemmaOutputChannel(NULL),
- lemmaInputChannel(NULL),
- threads(2),// default should be 1 probably, but say 2 for now
- threadArgv(),
- thread_id(-1),
- separateOutput(false),
- sharingFilterByLength(-1),
- bitvectorEagerBitblast(false),
- bitvectorEagerFullcheck(false),
- bitvectorShareLemmas(false),
- sat_refine_conflicts(false),
- theoryOfModeSetByUser(false),
- theoryOfMode(theory::THEORY_OF_TYPE_BASED)
-{
-}
-
-
-static const string mostCommonOptionsDescription = "\
-Most commonly-used CVC4 options:\n\
- --version | -V identify this CVC4 binary\n\
- --help | -h full command line reference\n\
- --lang | -L force input language\n\
- (default is `auto'; see --lang help)\n\
- --output-lang force output language\n\
- (default is `auto'; see --lang help)\n\
- --verbose | -v increase verbosity (may be repeated)\n\
- --quiet | -q decrease verbosity (may be repeated)\n\
- --stats give statistics on exit\n\
- --parse-only exit after parsing input\n\
- --preprocess-only exit after preproc (useful with --stats or --dump)\n\
- --dump=MODE dump preprocessed assertions, etc., see --dump=help\n\
- --dump-to=FILE all dumping goes to FILE (instead of stdout)\n\
- --show-config show CVC4 static configuration\n\
- --strict-parsing be less tolerant of non-conforming inputs\n\
- --interactive force interactive mode\n\
- --no-interactive force non-interactive mode\n\
- --produce-models | -m support the get-value command\n\
- --produce-assignments support the get-assignment command\n\
- --print-success print the \"success\" output required of SMT-LIBv2\n\
- --smtlib2 SMT-LIBv2 conformance mode (implies other options)\n\
- --proof turn on proof generation\n\
- --incremental | -i enable incremental solving\n\
- --tlimit=MS enable time limiting (give milliseconds)\n\
- --tlimit-per=MS enable time limiting per query (give milliseconds)\n\
- --rlimit=N enable resource limiting\n\
- --rlimit-per=N enable resource limiting per query\n\
-";
-
-static const string optionsDescription = mostCommonOptionsDescription + "\
-\n\
-Additional CVC4 options:\n\
- --mmap memory map file input\n\
- --segv-nospin don't spin on segfault waiting for gdb\n\
- --lazy-type-checking type check expressions only when necessary (default)\n\
- --eager-type-checking type check expressions immediately on creation\n\
- (debug builds only)\n\
- --no-type-checking never type check expressions\n\
- --no-checking disable ALL semantic checks, including type checks\n\
- --no-theory-registration disable theory reg (not safe for some theories)\n\
- --print-winner enable printing the winning thread (pcvc4 only)\n\
- --trace | -t trace something (e.g. -t pushpop), can repeat\n\
- --debug | -d debug something (e.g. -d arith), can repeat\n\
- --show-debug-tags show all available tags for debugging\n\
- --show-trace-tags show all available tags for tracing\n\
- --show-sat-solvers show all available SAT solvers\n\
- --default-expr-depth=N print exprs to depth N (0 == default, -1 == no limit)\n\
- --default-dag-thresh=N dagify common subexprs appearing > N times\n\
- (1 == default, 0 == don't dagify)\n\
- --print-expr-types print types with variables when printing exprs\n\
- --lazy-definition-expansion expand define-funs/LAMBDAs lazily\n\
- --simplification=MODE choose simplification mode, see --simplification=help\n\
- --decision=MODE choose decision mode, see --decision=help\n\
- --decision-budget=N impose a budget for relevancy heuristic which increases linearly with\n\
- each decision. N between 0 and 1000. (default: 1000, no budget)\n\
- --no-static-learning turn off static learning (e.g. diamond-breaking)\n\
- --ite-simp turn on ite simplification (Kim (and Somenzi) et al., SAT 2009)\n\
- --no-ite-simp turn off ite simplification (Kim (and Somenzi) et al., SAT 2009)\n\
- --unconstrained-simp turn on unconstrained simplification (see Bruttomesso/Brummayer PhD thesis)\n\
- --no-unconstrained-simp turn off unconstrained simplification (see Bruttomesso/Brummayer PhD thesis)\n\
- --repeat-simp make multiple passes with nonclausal simplifier\n\
- --no-repeat-simp do not make multiple passes with nonclausal simplifier\n\
- --replay=file replay decisions from file\n\
- --replay-log=file log decisions and propagations to file\n\
- --theoryof-mode=mode mode for theoryof\n\
- SAT:\n\
- --random-freq=P frequency of random decisions in the sat solver\n\
- (P=0.0 by default)\n\
- --random-seed=S sets the random seed for the sat solver\n\
- --restart-int-base=I sets the base restart interval for the sat solver\n\
- (I=25 by default)\n\
- --restart-int-inc=F restart interval increase factor for the sat solver\n\
- (F=3.0 by default)\n\
- ARITHMETIC:\n\
- --unate-lemmas=MODE determines which lemmas to add before solving\n\
- (default is 'all', see --unate-lemmas=help)\n\
- --arith-prop=MODE turns on arithmetic propagation\n\
- (default is 'old', see --arith-prop=help)\n\
- --heuristic-pivot-rule=RULE change the pivot rule for the basic variable\n\
- (default is 'min', see --heuristic-pivot-rule help)\n\
- --heuristic-pivots=N the number of times to apply the heuristic pivot rule.\n\
- If N < 0, this defaults to the number of variables\n\
- If this is unset, this is tuned by the logic selection.\n\
- --simplex-check-period=N The number of pivots to do in simplex before rechecking for\n\
- a conflict on all variables.\n\
- --pivot-threshold=N sets the number of pivots using --pivot-rule\n\
- per basic variable per simplex instance before\n\
- using variable order\n\
- --prop-row-length=N sets the maximum row length to be used in propagation\n\
- --disable-dio-solver turns off Linear Diophantine Equation solver \n\
- (Griggio, JSAT 2012)\n\
- --enable-arith-rewrite-equalities turns on the preprocessing rewrite\n\
- turning equalities into a conjunction of inequalities.\n \
- --disable-arith-rewrite-equalities turns off the preprocessing rewrite\n\
- turning equalities into a conjunction of inequalities.\n \
- UF:\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\
- QUANTIFIERS:\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 ground 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\
- --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\
- REWRITERULES:\n\
- --efficient-e-matching use efficient E-matching (only for rewrite rules)\n\
- --rewrite-rules-as-axioms convert rewrite rules into usual axioms (for debugging only)\n\
- FINITE_MODEL_FINDING:\n\
- --finite-model-find use finite model finding heuristic for quantifier instantiation\n\
- --disable-uf-ss-regions disable region-based method for discovering cliques and splits in uf strong solver\n\
- --uf-ss-eager-split add splits eagerly for uf strong solver\n\
- --uf-ss-coloring-sat use coloring-based SAT heuristic for uf strong solver\n\
- --disable-fmf-mbqi disable model-based quantifier instantiation for finite model finding\n\
- --disable-fmf-inst-gen disable Inst-Gen instantiation techniques for finite model finding\n\
- --fmf-one-inst-per-round only add one instantiation per quantifier per round for fmf\n\
- --fmf-inst-engine use instantiation engine in conjunction with finite model finding\n\
- --fmf-relevant-domain use relevant domain computation, similar to complete instantiation (Ge, deMoura 09)\n\
- OTHER:\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\
- --bitblast-eager eagerly bitblast the bitvectors to the main SAT solver\n\
- --bitblast-share-lemmas share lemmas from the bitblasting solver with the main solver\n\
- --bitblast-eager-fullcheck check the bitblasting eagerly\n\
- --refine-conflicts refine theory conflict clauses\n\
-";
-
-
-
-static const string languageDescription = "\
-Languages currently supported as arguments to the -L / --lang option:\n\
- auto attempt to automatically determine the input language\n\
- pl | cvc4 CVC4 presentation language\n\
- smt | smtlib SMT-LIB format 1.2\n\
- smt2 | smtlib2 SMT-LIB format 2.0\n\
- tptp TPTP format (cnf and fof)\n\
-\n\
-Languages currently supported as arguments to the --output-lang option:\n\
- auto match the output language to the input language\n\
- pl | cvc4 CVC4 presentation language\n\
- smt | smtlib SMT-LIB format 1.2\n\
- smt2 | smtlib2 SMT-LIB format 2.0\n\
- tptp TPTP format\n\
- ast internal format (simple syntax-tree language)\n\
-";
-
-static const string simplificationHelp = "\
-Simplification modes currently supported by the --simplification option:\n\
-\n\
-batch (default) \n\
-+ save up all ASSERTions; run nonclausal simplification and clausal\n\
- (MiniSat) propagation for all of them only after reaching a querying command\n\
- (CHECKSAT or QUERY or predicate SUBTYPE declaration)\n\
-\n\
-incremental\n\
-+ run nonclausal simplification and clausal propagation at each ASSERT\n\
- (and at CHECKSAT/QUERY/SUBTYPE)\n\
-\n\
-none\n\
-+ do not perform nonclausal simplification\n\
-";
-
-static const string theoryofHelp = "\
-TheoryOf modes currently supported by the --theoryof-mode option:\n\
-\n\
-type (default) \n\
-+ type variables, constants and equalities by type\n\
-\n\
-term \n\
-+ type variables as uninterpreted, equalities by the parametric theory\n\
-";
-
-static const string decisionHelp = "\
-Decision modes currently supported by the --decision option:\n\
-\n\
-internal (default)\n\
-+ Use the internal decision heuristics of the SAT solver\n\
-\n\
-justification\n\
-+ An ATGP-inspired justification heuristic\n\
-\n\
-justification-stoponly\n\
-+ Use the justification heuristic only to stop early, not for decisions\n\
-\n\
-relevancy\n\
-+ Under development may-relevancy\n\
-\n\
-relevancy-leaves\n\
-+ May-relevancy, but decide only on leaves\n\
-\n\
-Developer modes:\n\
-\n\
-justification-rel\n\
-+ Use the relevancy code to do the justification stuff\n\
-+ (This should do exact same thing as justification)\n\
-\n\
-justification-must\n\
-+ Start deciding on literals close to root instead of those\n\
-+ near leaves (don't expect it to work well) [Unimplemented]\n\
-";
-
-static const string instWhenHelp = "\
-Modes currently supported by the --inst-when option:\n\
-\n\
-full\n\
-+ Run instantiation round at full effort, before theory combination.\n\
-\n\
-full-last-call (default)\n\
-+ Alternate running instantiation rounds at full effort and last\n\
- call. In other words, interleave instantiation and theory combination.\n\
-\n\
-last-call\n\
-+ Run instantiation at last call effort, after theory combination.\n\
-\n\
-";
-
-static const string literalMatchHelp = "\
-Literal match modes currently supported by the --literal-match option:\n\
-\n\
-none (default)\n\
-+ Do not use literal matching.\n\
-\n\
-predicate\n\
-+ Consider the phase requirements of predicate literals when applying heuristic\n\
- quantifier instantiation. For example, the trigger P( x ) in the quantified \n\
- formula forall( x ). ( P( x ) V ~Q( x ) ) will only be matched with ground\n\
- terms P( t ) where P( t ) is in the equivalence class of false, and likewise\n\
- Q( x ) with Q( s ) where Q( s ) is in the equivalence class of true.\n\
-\n\
-";
-
-static const string dumpHelp = "\
-Dump modes currently supported by the --dump option:\n\
-\n\
-benchmark\n\
-+ Dump the benchmark structure (set-logic, push/pop, queries, etc.), but\n\
- does not include any declarations or assertions. Implied by all following\n\
- modes.\n\
-\n\
-declarations\n\
-+ Dump declarations. Implied by all following modes.\n\
-\n\
-assertions\n\
-+ Output the assertions after non-clausal simplification and static\n\
- learning phases, but before presolve-time T-lemmas arrive. If\n\
- non-clausal simplification and static learning are off\n\
- (--simplification=none --no-static-learning), the output\n\
- will closely resemble the input (with term-level ITEs removed).\n\
-\n\
-learned\n\
-+ Output the assertions after non-clausal simplification, static\n\
- learning, and presolve-time T-lemmas. This should include all eager\n\
- T-lemmas (in the form provided by the theory, which my or may not be\n\
- clausal). Also includes level-0 BCP done by Minisat.\n\
-\n\
-clauses\n\
-+ Do all the preprocessing outlined above, and dump the CNF-converted\n\
- output\n\
-\n\
-state\n\
-+ Dump all contextual assertions (e.g., SAT decisions, propagations..).\n\
- Implied by all \"stateful\" modes below and conflicts with all\n\
- non-stateful modes below.\n\
-\n\
-t-conflicts [non-stateful]\n\
-+ Output correctness queries for all theory conflicts\n\
-\n\
-missed-t-conflicts [stateful]\n\
-+ Output completeness queries for theory conflicts\n\
-\n\
-t-propagations [stateful]\n\
-+ Output correctness queries for all theory propagations\n\
-\n\
-missed-t-propagations [stateful]\n\
-+ Output completeness queries for theory propagations (LARGE and EXPENSIVE)\n\
-\n\
-t-lemmas [non-stateful]\n\
-+ Output correctness queries for all theory lemmas\n\
-\n\
-t-explanations [non-stateful]\n\
-+ Output correctness queries for all theory explanations\n\
-\n\
-Dump modes can be combined with multiple uses of --dump. Generally you want\n\
-one from the assertions category (either assertions, learned, or clauses), and\n\
-perhaps one or more stateful or non-stateful modes for checking correctness\n\
-and completeness of decision procedure implementations. Stateful modes dump\n\
-the contextual assertions made by the core solver (all decisions and\n\
-propagations as assertions; that affects the validity of the resulting\n\
-correctness and completeness queries, so of course stateful and non-stateful\n\
-modes cannot be mixed in the same run.\n\
-\n\
-The --output-language option controls the language used for dumping, and\n\
-this allows you to connect CVC4 to another solver implementation via a UNIX\n\
-pipe to perform on-line checking. The --dump-to option can be used to dump\n\
-to a file.\n\
-";
-
-static const string arithUnateLemmasHelp = "\
-Presolve lemmas are generated before SAT search begins using the relationship\n\
-of constant terms and polynomials.\n\
-Modes currently supported by the --unate-lemmas option:\n\
-+ none \n\
-+ ineqs \n\
- Outputs lemmas of the general form (<= p c) implies (<= p d) for c < d.\n\
-+ eqs \n\
- Outputs lemmas of the general forms\n\
- (= p c) implies (<= p d) for c < d, or\n\
- (= p c) implies (not (= p d)) for c != d.\n\
-+ all \n\
- A combination of inequalities and equalities.\n\
-";
-
-static const string propagationModeHelp = "\
-This decides on kind of propagation arithmetic attempts to do during the search.\n\
-+ none\n\
-+ unate\n\
- use constraints to do unate propagation\n\
-+ bi (Bounds Inference)\n\
- infers bounds on basic variables using the upper and lower bounds of the\n\
- non-basic variables in the tableau.\n\
-+both\n\
-";
-
-static const string pivotRulesHelp = "\
-This decides on the rule used by simplex during heuristic rounds\n\
-for deciding the next basic variable to select.\n\
-Pivot rules available:\n\
-+min\n\
- The minimum abs() value of the variable's violation of its bound. (default)\n\
-+min-break-ties\n\
- The minimum violation with ties broken by variable order (total)\n\
-+max\n\
- The maximum violation the bound\n\
-";
-
-string Options::getDescription() const {
- return optionsDescription;
-}
-
-void Options::printUsage(const std::string msg, std::ostream& out) {
- out << msg << optionsDescription << endl << flush;
-}
-
-void Options::printShortUsage(const std::string msg, std::ostream& out) {
- out << msg << mostCommonOptionsDescription << endl
- << "For full usage, please use --help." << endl << flush;
-}
-
-void Options::printLanguageHelp(std::ostream& out) {
- out << languageDescription << flush;
-}
-
-/**
- * For the main getopt() routine, we need ways to switch on long
- * options without clashing with short option characters. This is an
- * enum of those long options. For long options (e.g. "--verbose")
- * with a short option equivalent ("-v"), we use the single-letter
- * short option; therefore, this enumeration starts at 256 to avoid
- * any collision.
- */
-enum OptionValue {
- OPTION_VALUE_BEGIN = 256, /* avoid clashing with char options */
- SMTCOMP,
- STATS,
- SEGV_NOSPIN,
- OUTPUT_LANGUAGE,
- PARSE_ONLY,
- PREPROCESS_ONLY,
- DUMP,
- DUMP_TO,
- NO_CHECKING,
- NO_THEORY_REGISTRATION,
- USE_MMAP,
- SHOW_DEBUG_TAGS,
- SHOW_TRACE_TAGS,
- SHOW_SAT_SOLVERS,
- SHOW_CONFIG,
- STRICT_PARSING,
- DEFAULT_EXPR_DEPTH,
- DEFAULT_DAG_THRESH,
- PRINT_EXPR_TYPES,
- UF_THEORY,
- LAZY_DEFINITION_EXPANSION,
- SIMPLIFICATION_MODE,
- DECISION_MODE,
- DECISION_BUDGET,
- NO_STATIC_LEARNING,
- ITE_SIMP,
- NO_ITE_SIMP,
- UNCONSTRAINED_SIMP,
- NO_UNCONSTRAINED_SIMP,
- REPEAT_SIMP,
- NO_REPEAT_SIMP,
- INTERACTIVE,
- NO_INTERACTIVE,
- PRODUCE_ASSIGNMENTS,
- PRINT_SUCCESS,
- SMTLIB2,
- PROOF,
- NO_TYPE_CHECKING,
- LAZY_TYPE_CHECKING,
- EAGER_TYPE_CHECKING,
- REPLAY,
- REPLAY_LOG,
- PRINT_WINNER,
- RANDOM_FREQUENCY,
- RANDOM_SEED,
- SAT_RESTART_FIRST,
- SAT_RESTART_INC,
- ARITHMETIC_UNATE_LEMMA_MODE,
- ARITHMETIC_PROPAGATION_MODE,
- ARITHMETIC_HEURISTIC_PIVOTS,
- ARITHMETIC_VAR_ORDER_PIVOTS,
- ARITHMETIC_PIVOT_RULE,
- ARITHMETIC_CHECK_PERIOD,
- ARITHMETIC_PIVOT_THRESHOLD,
- ARITHMETIC_PROP_MAX_LENGTH,
- ARITHMETIC_DIO_SOLVER,
- ENABLE_ARITHMETIC_REWRITE_EQUALITIES,
- 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,
- DISABLE_UF_SS_REGIONS,
- UF_SS_EAGER_SPLIT,
- UF_SS_COLORING_SAT,
- DISABLE_FMF_MODEL_BASED_INST,
- DISABLE_FMF_INST_GEN,
- FMF_ONE_INST_PER_ROUND,
- FMF_INST_ENGINE,
- FMF_RELEVANT_DOMAIN,
- EFFICIENT_E_MATCHING,
- LITERAL_MATCHING,
- ENABLE_CBQI,
- DISABLE_CBQI,
- IGNORE_USER_PATTERNS,
- ENABLE_FLIP_DECISION,
- REWRITE_RULES_AS_AXIOMS,
- PRINT_MODEL_ENGINE,
- PRINT_INST_ENGINE,
- PARALLEL_THREADS,
- PARALLEL_SEPARATE_OUTPUT,
- PORTFOLIO_FILTER_LENGTH,
- TIME_LIMIT,
- TIME_LIMIT_PER,
- RESOURCE_LIMIT,
- RESOURCE_LIMIT_PER,
- BITVECTOR_EAGER_BITBLAST,
- BITVECTOR_SHARE_LEMMAS,
- BITVECTOR_EAGER_FULLCHECK,
- SAT_REFINE_CONFLICTS,
- THEORYOF_MODE,
- OPTION_VALUE_END
-};/* enum OptionValue */
-
-/**
- * This is a table of long options. By policy, each short option
- * should have an equivalent long option (but the reverse isn't the
- * case), so this table should thus contain all command-line options.
- *
- * Each option in this array has four elements:
- *
- * 1. the long option string
- * 2. argument behavior for the option:
- * no_argument - no argument permitted
- * required_argument - an argument is expected
- * optional_argument - an argument is permitted but not required
- * 3. this is a pointer to an int which is set to the 4th entry of the
- * array if the option is present; or NULL, in which case
- * getopt_long() returns the 4th entry
- * 4. the return value for getopt_long() when this long option (or the
- * value to set the 3rd entry to; see #3)
- *
- * If you add something here, you should add it in src/main/usage.h
- * also, to document it.
- *
- * If you add something that has a short option equivalent, you should
- * add it to the getopt_long() call in parseOptions().
- */
-static struct option cmdlineOptions[] = {
- // name, has_arg, *flag, val
- { "verbose" , no_argument , NULL, 'v' },
- { "quiet" , no_argument , NULL, 'q' },
- { "debug" , required_argument, NULL, 'd' },
- { "trace" , required_argument, NULL, 't' },
- { "stats" , no_argument , NULL, STATS },
- { "no-checking", no_argument , NULL, NO_CHECKING },
- { "no-theory-registration", no_argument, NULL, NO_THEORY_REGISTRATION },
- { "show-debug-tags", no_argument , NULL, SHOW_DEBUG_TAGS },
- { "show-trace-tags", no_argument , NULL, SHOW_TRACE_TAGS },
- { "show-sat-solvers", no_argument , NULL, SHOW_SAT_SOLVERS },
- { "show-config", no_argument , NULL, SHOW_CONFIG },
- { "segv-nospin", no_argument , NULL, SEGV_NOSPIN },
- { "help" , no_argument , NULL, 'h' },
- { "version" , no_argument , NULL, 'V' },
- { "about" , no_argument , NULL, 'V' },
- { "lang" , required_argument, NULL, 'L' },
- { "output-lang", required_argument, NULL, OUTPUT_LANGUAGE },
- { "parse-only" , no_argument , NULL, PARSE_ONLY },
- { "preprocess-only", no_argument , NULL, PREPROCESS_ONLY },
- { "dump" , required_argument, NULL, DUMP },
- { "dump-to" , required_argument, NULL, DUMP_TO },
- { "mmap" , no_argument , NULL, USE_MMAP },
- { "strict-parsing", no_argument , NULL, STRICT_PARSING },
- { "default-expr-depth", required_argument, NULL, DEFAULT_EXPR_DEPTH },
- { "default-dag-thresh", required_argument, NULL, DEFAULT_DAG_THRESH },
- { "print-expr-types", no_argument , NULL, PRINT_EXPR_TYPES },
- { "uf" , required_argument, NULL, UF_THEORY },
- { "lazy-definition-expansion", no_argument, NULL, LAZY_DEFINITION_EXPANSION },
- { "simplification", required_argument, NULL, SIMPLIFICATION_MODE },
- { "decision", required_argument, NULL, DECISION_MODE },
- { "decision-budget", required_argument, NULL, DECISION_BUDGET },
- { "no-static-learning", no_argument, NULL, NO_STATIC_LEARNING },
- { "ite-simp", no_argument, NULL, ITE_SIMP },
- { "no-ite-simp", no_argument, NULL, NO_ITE_SIMP },
- { "unconstrained-simp", no_argument, NULL, UNCONSTRAINED_SIMP },
- { "no-unconstrained-simp", no_argument, NULL, NO_UNCONSTRAINED_SIMP },
- { "repeat-simp", no_argument, NULL, REPEAT_SIMP },
- { "no-repeat-simp", no_argument, NULL, NO_REPEAT_SIMP },
- { "interactive", no_argument , NULL, INTERACTIVE },
- { "no-interactive", no_argument , NULL, NO_INTERACTIVE },
- { "produce-models", no_argument , NULL, 'm' },
- { "produce-assignments", no_argument, NULL, PRODUCE_ASSIGNMENTS },
- { "print-success", no_argument, NULL, PRINT_SUCCESS },
- { "smtlib2", no_argument, NULL, SMTLIB2 },
- { "proof", no_argument, NULL, PROOF },
- { "no-type-checking", no_argument , NULL, NO_TYPE_CHECKING },
- { "lazy-type-checking", no_argument, NULL, LAZY_TYPE_CHECKING },
- { "eager-type-checking", no_argument, NULL, EAGER_TYPE_CHECKING },
- { "incremental", no_argument , NULL, 'i' },
- { "replay" , required_argument, NULL, REPLAY },
- { "replay-log" , required_argument, NULL, REPLAY_LOG },
- { "random-freq" , required_argument, NULL, RANDOM_FREQUENCY },
- { "random-seed" , required_argument, NULL, RANDOM_SEED },
- { "restart-int-base", required_argument, NULL, SAT_RESTART_FIRST },
- { "restart-int-inc", required_argument, NULL, SAT_RESTART_INC },
- { "print-winner", no_argument , NULL, PRINT_WINNER },
- { "unate-lemmas", required_argument, NULL, ARITHMETIC_UNATE_LEMMA_MODE },
- { "arith-prop", required_argument, NULL, ARITHMETIC_PROPAGATION_MODE },
- { "heuristic-pivots", required_argument, NULL, ARITHMETIC_HEURISTIC_PIVOTS },
- { "heuristic-pivot-rule" , required_argument, NULL, ARITHMETIC_PIVOT_RULE },
- { "standard-effort-variable-order-pivots", required_argument, NULL, ARITHMETIC_VAR_ORDER_PIVOTS },
- { "simplex-check-period" , required_argument, NULL, ARITHMETIC_CHECK_PERIOD },
- { "pivot-threshold" , required_argument, NULL, ARITHMETIC_PIVOT_THRESHOLD },
- { "prop-row-length" , required_argument, NULL, ARITHMETIC_PROP_MAX_LENGTH },
- { "disable-dio-solver", no_argument, NULL, ARITHMETIC_DIO_SOLVER },
- { "enable-arith-rewrite-equalities", no_argument, NULL, ENABLE_ARITHMETIC_REWRITE_EQUALITIES },
- { "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 },
- { "disable-uf-ss-regions", no_argument, NULL, DISABLE_UF_SS_REGIONS },
- { "uf-ss-eager-split", no_argument, NULL, UF_SS_EAGER_SPLIT },
- { "uf-ss-coloring-sat", no_argument, NULL, UF_SS_COLORING_SAT },
- { "disable-fmf-mbqi", no_argument, NULL, DISABLE_FMF_MODEL_BASED_INST },
- { "disable-fmf-inst-gen", no_argument, NULL, DISABLE_FMF_INST_GEN },
- { "fmf-one-inst-per-round", no_argument, NULL, FMF_ONE_INST_PER_ROUND },
- { "fmf-inst-engine", no_argument, NULL, FMF_INST_ENGINE },
- { "fmf-relevant-domain", no_argument, NULL, FMF_RELEVANT_DOMAIN },
- { "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 },
- { "rewrite-rules-as-axioms", no_argument, NULL, REWRITE_RULES_AS_AXIOMS },
- { "print-m-e", no_argument, NULL, PRINT_MODEL_ENGINE },
- { "print-i-e", no_argument, NULL, PRINT_INST_ENGINE },
- { "threads", required_argument, NULL, PARALLEL_THREADS },
- { "separate-output", no_argument, NULL, PARALLEL_SEPARATE_OUTPUT },
- { "filter-lemma-length", required_argument, NULL, PORTFOLIO_FILTER_LENGTH },
- { "tlimit" , required_argument, NULL, TIME_LIMIT },
- { "tlimit-per" , required_argument, NULL, TIME_LIMIT_PER },
- { "rlimit" , required_argument, NULL, RESOURCE_LIMIT },
- { "rlimit-per" , required_argument, NULL, RESOURCE_LIMIT_PER },
- { "bitblast-eager", no_argument, NULL, BITVECTOR_EAGER_BITBLAST },
- { "bitblast-share-lemmas", no_argument, NULL, BITVECTOR_SHARE_LEMMAS },
- { "bitblast-eager-fullcheck", no_argument, NULL, BITVECTOR_EAGER_FULLCHECK },
- { "refine-conflicts", no_argument, NULL, SAT_REFINE_CONFLICTS },
- { "theoryof-mode", required_argument, NULL, THEORYOF_MODE },
- { NULL , no_argument , NULL, '\0' }
-};/* if you add things to the above, please remember to update usage.h! */
-
-
-/** Parse argc/argv and put the result into a CVC4::Options struct. */
-int Options::parseOptions(int argc, char* argv[])
-throw(OptionException) {
- const char *progName = argv[0];
- int c;
-
- // Reset getopt(), in the case of multiple calls.
- // This can be = 1 in newer GNU getopt, but older (< 2007) require = 0.
- optind = 0;
-#if HAVE_DECL_OPTRESET
- optreset = 1; // on BSD getopt() (e.g. Mac OS), might also need this
-#endif /* HAVE_DECL_OPTRESET */
-
- // find the base name of the program
- const char *x = strrchr(progName, '/');
- if(x != NULL) {
- progName = x + 1;
- }
- binary_name = string(progName);
-
- // The strange string in this call is the short option string. An
- // initial '+' means that option processing stops as soon as a
- // non-option argument is encountered (it is not present, by design).
- // The initial ':' indicates that getopt_long() should return ':'
- // instead of '?' for a missing option argument. Then, each letter
- // is a valid short option for getopt_long(), and if it's encountered,
- // getopt_long() returns that character. A ':' after an option
- // character means an argument is required; two colons indicates an
- // argument is optional; no colons indicate an argument is not
- // permitted. cmdlineOptions specifies all the long-options and the
- // return value for getopt_long() should they be encountered.
- while((c = getopt_long(argc, argv,
- ":himVvqL:d:t:",
- cmdlineOptions, NULL)) != -1) {
- switch(c) {
-
- case 'h':
- help = true;
- break;
-
- case 'V':
- version = true;
- break;
-
- case 'v':
- ++verbosity;
- break;
-
- case 'q':
- --verbosity;
- break;
-
- case 'L':
- setInputLanguage(optarg);
- break;
-
- case OUTPUT_LANGUAGE:
- setOutputLanguage(optarg);
- break;
-
- case 't':
- if(Configuration::isTracingBuild()) {
- if(!Configuration::isTraceTag(optarg))
- throw OptionException(string("trace tag ") + optarg +
- string(" not available"));
- } else {
- throw OptionException("trace tags not available in non-tracing builds");
- }
- Trace.on(optarg);
- break;
-
- case 'd':
- if(Configuration::isDebugBuild() && Configuration::isTracingBuild()) {
- if(!Configuration::isDebugTag(optarg) && !Configuration::isTraceTag(optarg)) {
- throw OptionException(string("debug tag ") + optarg +
- string(" not available"));
- }
- } else if(! Configuration::isDebugBuild()) {
- throw OptionException("debug tags not available in non-debug builds");
- } else {
- throw OptionException("debug tags not available in non-tracing builds");
- }
- Debug.on(optarg);
- Trace.on(optarg);
- break;
-
- case STATS:
- statistics = true;
- break;
-
- case SEGV_NOSPIN:
- segvNoSpin = true;
- break;
-
- case PARSE_ONLY:
- parseOnly = true;
- break;
-
- case PREPROCESS_ONLY:
- preprocessOnly = true;
- break;
-
- case DUMP: {
-#ifdef CVC4_DUMPING
- char* tokstr = optarg;
- char* toksave;
- while((optarg = strtok_r(tokstr, ",", &toksave)) != NULL) {
- tokstr = NULL;
- if(!strcmp(optarg, "benchmark")) {
- } else if(!strcmp(optarg, "declarations")) {
- } else if(!strcmp(optarg, "assertions")) {
- } else if(!strcmp(optarg, "learned")) {
- } else if(!strcmp(optarg, "clauses")) {
- } else if(!strcmp(optarg, "t-conflicts") ||
- !strcmp(optarg, "t-lemmas") ||
- !strcmp(optarg, "t-explanations") ||
- !strcmp(optarg, "bv-rewrites") ||
- !strcmp(optarg, "theory::fullcheck")) {
- // These are "non-state-dumping" modes. If state (SAT decisions,
- // propagations, etc.) is dumped, it will interfere with the validity
- // of these generated queries.
- if(Dump.isOn("state")) {
- throw OptionException(string("dump option `") + optarg +
- "' conflicts with a previous, "
- "state-dumping dump option. You cannot "
- "mix stateful and non-stateful dumping modes; "
- "see --dump help.");
- } else {
- Dump.on("no-permit-state");
- }
- } else if(!strcmp(optarg, "state") ||
- !strcmp(optarg, "missed-t-conflicts") ||
- !strcmp(optarg, "t-propagations") ||
- !strcmp(optarg, "missed-t-propagations")) {
- // These are "state-dumping" modes. If state (SAT decisions,
- // propagations, etc.) is not dumped, it will interfere with the
- // validity of these generated queries.
- if(Dump.isOn("no-permit-state")) {
- throw OptionException(string("dump option `") + optarg +
- "' conflicts with a previous, "
- "non-state-dumping dump option. You cannot "
- "mix stateful and non-stateful dumping modes; "
- "see --dump help.");
- } else {
- Dump.on("state");
- }
- } else if(!strcmp(optarg, "help")) {
- puts(dumpHelp.c_str());
- exit(1);
- } else {
- throw OptionException(string("unknown option for --dump: `") +
- optarg + "'. Try --dump help.");
- }
-
- Dump.on(optarg);
- Dump.on("benchmark");
- if(strcmp(optarg, "benchmark")) {
- Dump.on("declarations");
- }
- }
-#else /* CVC4_DUMPING */
- throw OptionException("The dumping feature was disabled in this build of CVC4.");
-#endif /* CVC4_DUMPING */
- break;
- }
-
- case DUMP_TO: {
-#ifdef CVC4_DUMPING
- size_t dagSetting = expr::ExprDag::getDag(Dump.getStream());
- if(optarg == NULL || *optarg == '\0') {
- throw OptionException(string("Bad file name for --dump-to"));
- } else if(!strcmp(optarg, "-")) {
- Dump.setStream(DumpOutC::dump_cout);
- } else {
- ostream* dumpTo = new ofstream(optarg, ofstream::out | ofstream::trunc);
- if(!*dumpTo) {
- throw OptionException(string("Cannot open dump-to file (maybe it exists): `") + optarg + "'");
- }
- Dump.setStream(*dumpTo);
- }
- expr::ExprDag::setDag(Dump.getStream(), dagSetting);
-#else /* CVC4_DUMPING */
- throw OptionException("The dumping feature was disabled in this build of CVC4.");
-#endif /* CVC4_DUMPING */
- }
- break;
-
- case NO_THEORY_REGISTRATION:
- theoryRegistration = false;
- break;
-
- case NO_CHECKING:
- semanticChecks = false;
- typeChecking = false;
- earlyTypeChecking = false;
- break;
-
- case USE_MMAP:
- memoryMap = true;
- break;
-
- case PRINT_WINNER:
- printWinner = true;
- break;
-
- case STRICT_PARSING:
- strictParsing = true;
- break;
-
- case DEFAULT_EXPR_DEPTH:
- {
- int depth = atoi(optarg);
- Debug.getStream() << Expr::setdepth(depth);
- Trace.getStream() << Expr::setdepth(depth);
- Notice.getStream() << Expr::setdepth(depth);
- Chat.getStream() << Expr::setdepth(depth);
- Message.getStream() << Expr::setdepth(depth);
- Warning.getStream() << Expr::setdepth(depth);
- defaultExprDepth = depth;
- }
- break;
-
- case DEFAULT_DAG_THRESH:
- {
- int dag = atoi(optarg);
- if(dag < 0) {
- throw OptionException("--default-dag-thresh requires a nonnegative argument.");
- }
- Debug.getStream() << Expr::dag(dag);
- Trace.getStream() << Expr::dag(dag);
- Notice.getStream() << Expr::dag(dag);
- Chat.getStream() << Expr::dag(dag);
- Message.getStream() << Expr::dag(dag);
- Warning.getStream() << Expr::dag(dag);
- Dump.getStream() << Expr::dag(dag);
- }
- break;
-
- case PRINT_EXPR_TYPES:
- Debug.getStream() << Expr::printtypes(true);
- Trace.getStream() << Expr::printtypes(true);
- Notice.getStream() << Expr::printtypes(true);
- Chat.getStream() << Expr::printtypes(true);
- Message.getStream() << Expr::printtypes(true);
- Warning.getStream() << Expr::printtypes(true);
- break;
-
- case LAZY_DEFINITION_EXPANSION:
- lazyDefinitionExpansion = true;
- break;
-
- case SIMPLIFICATION_MODE:
- if(!strcmp(optarg, "batch")) {
- simplificationMode = SIMPLIFICATION_MODE_BATCH;
- simplificationModeSetByUser = true;
- } else if(!strcmp(optarg, "incremental")) {
- simplificationMode = SIMPLIFICATION_MODE_INCREMENTAL;
- simplificationModeSetByUser = true;
- } else if(!strcmp(optarg, "none")) {
- simplificationMode = SIMPLIFICATION_MODE_NONE;
- simplificationModeSetByUser = true;
- } else if(!strcmp(optarg, "help")) {
- puts(simplificationHelp.c_str());
- exit(1);
- } else {
- throw OptionException(string("unknown option for --simplification: `") +
- optarg + "'. Try --simplification help.");
- }
- break;
-
- case THEORYOF_MODE:
- if (!strcmp(optarg, "type")) {
- theoryOfModeSetByUser = true;
- theoryOfMode = theory::THEORY_OF_TYPE_BASED;
- } else if (!strcmp(optarg, "term")) {
- theoryOfModeSetByUser = true;
- theoryOfMode = theory::THEORY_OF_TERM_BASED;
- } else if (!strcmp(optarg, "help")) {
- puts(theoryofHelp.c_str());
- exit(1);
- } else {
- throw OptionException(string("unknown option for --theoryof-mode: `") +
- optarg + "'. Try --theoryof-mode help.");
- }
- break;
- case DECISION_MODE:
- decisionOptions = defaultDecOpt; // reset all options
- if(!strcmp(optarg, "internal")) {
- decisionMode = DECISION_STRATEGY_INTERNAL;
- decisionModeSetByUser = true;
- } else if(!strcmp(optarg, "justification")) {
- decisionMode = DECISION_STRATEGY_JUSTIFICATION;
- decisionModeSetByUser = true;
- } else if(!strcmp(optarg, "justification-stoponly")) {
- decisionMode = DECISION_STRATEGY_JUSTIFICATION;
- decisionModeSetByUser = true;
- decisionOptions.stopOnly = true;
- } else if(!strcmp(optarg, "relevancy")) {
- decisionMode = DECISION_STRATEGY_RELEVANCY;
- decisionModeSetByUser = true;
- decisionOptions.relevancyLeaves = false;
- } else if(!strcmp(optarg, "relevancy-leaves")) {
- decisionMode = DECISION_STRATEGY_RELEVANCY;
- decisionModeSetByUser = true;
- decisionOptions.relevancyLeaves = true;
- } else if(!strcmp(optarg, "justification-rel")) {
- decisionMode = DECISION_STRATEGY_RELEVANCY;
- decisionModeSetByUser = true;
- // relevancyLeaves : irrelevant
- // maxRelTimeAsPermille : irrelevant
- decisionOptions.computeRelevancy = false;
- decisionOptions.mustRelevancy = false;
- } else if(!strcmp(optarg, "justification-must")) {
- decisionMode = DECISION_STRATEGY_RELEVANCY;
- decisionModeSetByUser = true;
- // relevancyLeaves : irrelevant
- // maxRelTimeAsPermille : irrelevant
- decisionOptions.computeRelevancy = false;
- decisionOptions.mustRelevancy = true;
- } else if(!strcmp(optarg, "help")) {
- puts(decisionHelp.c_str());
- exit(1);
- } else {
- throw OptionException(string("unknown option for --decision: `") +
- optarg + "'. Try --decision help.");
- }
- break;
-
- case DECISION_BUDGET: {
- int i = atoi(optarg);
- if(i < 0 || i > 1000) {
- throw OptionException(string("invalid value for --decision-budget: `") +
- optarg + "'. Must be between 0 and 1000.");
- }
- if(i == 0) {
- Warning() << "Decision budget is 0. Consider using internal decision heuristic and "
- << std::endl << " removing this option." << std::endl;
-
- }
- decisionOptions.maxRelTimeAsPermille = (unsigned short)i;
- }
- break;
-
- case NO_STATIC_LEARNING:
- doStaticLearning = false;
- break;
-
- case ITE_SIMP:
- doITESimp = true;
- doITESimpSetByUser = true;
- break;
-
- case NO_ITE_SIMP:
- doITESimp = false;
- doITESimpSetByUser = true;
- break;
-
- case UNCONSTRAINED_SIMP:
- unconstrainedSimp = true;
- unconstrainedSimpSetByUser = true;
- break;
-
- case NO_UNCONSTRAINED_SIMP:
- unconstrainedSimp = false;
- unconstrainedSimpSetByUser = true;
- break;
-
- case REPEAT_SIMP:
- repeatSimp = true;
- repeatSimpSetByUser = true;
- break;
-
- case NO_REPEAT_SIMP:
- repeatSimp = false;
- repeatSimpSetByUser = true;
- break;
-
- case INTERACTIVE:
- interactive = true;
- interactiveSetByUser = true;
- break;
-
- case NO_INTERACTIVE:
- interactive = false;
- interactiveSetByUser = true;
- break;
-
- case 'm':
- produceModels = true;
- break;
-
- case PRODUCE_ASSIGNMENTS:
- produceAssignments = true;
- break;
-
- case SMTLIB2: // smtlib v2 compliance mode
- inputLanguage = language::input::LANG_SMTLIB_V2;
- outputLanguage = language::output::LANG_SMTLIB_V2;
- strictParsing = true;
- // make sure entire expressions are printed on all the non-debug, non-trace streams
- Notice.getStream() << Expr::setdepth(-1);
- Chat.getStream() << Expr::setdepth(-1);
- Message.getStream() << Expr::setdepth(-1);
- Warning.getStream() << Expr::setdepth(-1);
- /* intentionally fall through */
-
- case PRINT_SUCCESS:
- Debug.getStream() << Command::printsuccess(true);
- Trace.getStream() << Command::printsuccess(true);
- Notice.getStream() << Command::printsuccess(true);
- Chat.getStream() << Command::printsuccess(true);
- Message.getStream() << Command::printsuccess(true);
- Warning.getStream() << Command::printsuccess(true);
- break;
-
- case PROOF:
-#ifdef CVC4_PROOF
- proof = true;
-#else /* CVC4_PROOF */
- 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;
- break;
-
- case LAZY_TYPE_CHECKING:
- typeChecking = true;
- earlyTypeChecking = false;
- break;
-
- case EAGER_TYPE_CHECKING:
- typeChecking = true;
- earlyTypeChecking = true;
- break;
-
- case 'i':
- incrementalSolving = true;
- break;
-
- case REPLAY:
-#ifdef CVC4_REPLAY
- if(optarg == NULL || *optarg == '\0') {
- throw OptionException(string("Bad file name for --replay"));
- } else {
- replayFilename = optarg;
- }
-#else /* CVC4_REPLAY */
- throw OptionException("The replay feature was disabled in this build of CVC4.");
-#endif /* CVC4_REPLAY */
- break;
-
- case REPLAY_LOG:
-#ifdef CVC4_REPLAY
- if(optarg == NULL || *optarg == '\0') {
- throw OptionException(string("Bad file name for --replay-log"));
- } else if(!strcmp(optarg, "-")) {
- replayLog = &cout;
- } else {
- replayLog = new ofstream(optarg, ofstream::out | ofstream::trunc);
- if(!*replayLog) {
- throw OptionException(string("Cannot open replay-log file: `") + optarg + "'");
- }
- }
-#else /* CVC4_REPLAY */
- throw OptionException("The replay feature was disabled in this build of CVC4.");
-#endif /* CVC4_REPLAY */
- break;
-
- case ENABLE_SYMMETRY_BREAKER:
- ufSymmetryBreaker = true;
- ufSymmetryBreakerSetByUser = true;
- break;
- case DISABLE_SYMMETRY_BREAKER:
- 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 DISABLE_UF_SS_REGIONS:
- ufssRegions = false;
- break;
- case UF_SS_EAGER_SPLIT:
- ufssEagerSplits = true;
- break;
- case UF_SS_COLORING_SAT:
- ufssColoringSat = true;
- break;
- case DISABLE_FMF_MODEL_BASED_INST:
- fmfModelBasedInst = false;
- break;
- case DISABLE_FMF_INST_GEN:
- fmfInstGen = false;
- break;
- case FMF_ONE_INST_PER_ROUND:
- fmfOneInstPerRound = true;
- break;
- case FMF_INST_ENGINE:
- fmfInstEngine = true;
- break;
- case FMF_RELEVANT_DOMAIN:
- fmfRelevantDomain = true;
- 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 REWRITE_RULES_AS_AXIOMS:
- rewriteRulesAsAxioms = true;
- break;
- case PRINT_MODEL_ENGINE:
- printModelEngine = true;
- break;
- case PRINT_INST_ENGINE:
- printInstEngine = true;
- break;
- case TIME_LIMIT:
- {
- int i = atoi(optarg);
- if(i < 0) {
- throw OptionException("--time-limit requires a nonnegative argument.");
- }
- cumulativeMillisecondLimit = (unsigned long) i;
- }
- break;
- case TIME_LIMIT_PER:
- {
- int i = atoi(optarg);
- if(i < 0) {
- throw OptionException("--time-limit-per requires a nonnegative argument.");
- }
- perCallMillisecondLimit = (unsigned long) i;
- }
- break;
- case RESOURCE_LIMIT:
- {
- int i = atoi(optarg);
- if(i < 0) {
- throw OptionException("--limit requires a nonnegative argument.");
- }
- cumulativeResourceLimit = (unsigned long) i;
- }
- break;
- case RESOURCE_LIMIT_PER:
- {
- int i = atoi(optarg);
- if(i < 0) {
- throw OptionException("--limit-per requires a nonnegative argument.");
- }
- perCallResourceLimit = (unsigned long) i;
- break;
- }
- case BITVECTOR_EAGER_BITBLAST:
- {
- bitvectorEagerBitblast = true;
- break;
- }
- case BITVECTOR_EAGER_FULLCHECK:
- {
- bitvectorEagerFullcheck = true;
- break;
- }
- case BITVECTOR_SHARE_LEMMAS:
- {
- bitvectorShareLemmas = true;
- break;
- }
- case SAT_REFINE_CONFLICTS:
- {
- sat_refine_conflicts = true;
- break;
- }
- case RANDOM_SEED:
- satRandomSeed = atof(optarg);
- break;
-
- case RANDOM_FREQUENCY:
- satRandomFreq = atof(optarg);
- if(! (0.0 <= satRandomFreq && satRandomFreq <= 1.0)){
- throw OptionException(string("--random-freq: `") +
- optarg + "' is not between 0.0 and 1.0.");
- }
- break;
-
- case SAT_RESTART_FIRST:
- {
- int i = atoi(optarg);
- if(i < 1) {
- throw OptionException("--restart-int-base requires a number bigger than 1");
- }
- satRestartFirst = i;
- break;
- }
-
- case SAT_RESTART_INC:
- {
- int i = atoi(optarg);
- if(i < 1) {
- throw OptionException("--restart-int-inc requires a number bigger than 1.0");
- }
- satRestartInc = i;
- }
- break;
-
- case ARITHMETIC_UNATE_LEMMA_MODE:
- if(!strcmp(optarg, "all")) {
- arithUnateLemmaMode = ALL_PRESOLVE_LEMMAS;
- break;
- } else if(!strcmp(optarg, "none")) {
- arithUnateLemmaMode = NO_PRESOLVE_LEMMAS;
- break;
- } else if(!strcmp(optarg, "ineqs")) {
- arithUnateLemmaMode = INEQUALITY_PRESOLVE_LEMMAS;
- break;
- } else if(!strcmp(optarg, "eqs")) {
- arithUnateLemmaMode = EQUALITY_PRESOLVE_LEMMAS;
- break;
- } else if(!strcmp(optarg, "help")) {
- puts(arithUnateLemmasHelp.c_str());
- exit(1);
- } else {
- throw OptionException(string("unknown option for --unate-lemmas: `") +
- optarg + "'. Try --unate-lemmas=help.");
- }
- break;
-
- case ARITHMETIC_PROPAGATION_MODE:
- if(!strcmp(optarg, "none")) {
- arithPropagationMode = NO_PROP;
- break;
- } else if(!strcmp(optarg, "unate")) {
- arithPropagationMode = UNATE_PROP;
- break;
- } else if(!strcmp(optarg, "bi")) {
- arithPropagationMode = BOUND_INFERENCE_PROP;
- break;
- } else if(!strcmp(optarg, "both")) {
- arithPropagationMode = BOTH_PROP;
- break;
- } else if(!strcmp(optarg, "help")) {
- puts(propagationModeHelp.c_str());
- exit(1);
- } else {
- throw OptionException(string("unknown option for --arith-prop: `") +
- optarg + "'. Try --arith-prop help.");
- }
- break;
-
- case ARITHMETIC_HEURISTIC_PIVOTS:
- arithHeuristicPivots = atoi(optarg);
- arithHeuristicPivotsSetByUser = true;
- break;
-
- case ARITHMETIC_VAR_ORDER_PIVOTS:
- arithStandardCheckVarOrderPivots = atoi(optarg);
- arithStandardCheckVarOrderPivotsSetByUser = true;
- break;
-
- case ARITHMETIC_PIVOT_RULE:
- if(!strcmp(optarg, "min")) {
- arithHeuristicPivotRule = MINIMUM;
- break;
- } else if(!strcmp(optarg, "min-break-ties")) {
- arithHeuristicPivotRule = BREAK_TIES;
- break;
- } else if(!strcmp(optarg, "max")) {
- arithHeuristicPivotRule = MAXIMUM;
- break;
- } else if(!strcmp(optarg, "help")) {
- puts(pivotRulesHelp.c_str());
- exit(1);
- } else {
- throw OptionException(string("unknown option for --heuristic-pivot-rule: `") +
- optarg + "'. Try --heuristic-pivot-rule help.");
- }
- break;
-
- case ARITHMETIC_CHECK_PERIOD:
- arithSimplexCheckPeriod = atoi(optarg);
- break;
-
- case ARITHMETIC_PIVOT_THRESHOLD:
- arithPivotThreshold = atoi(optarg);
- arithPivotThresholdSetByUser = true;
- break;
-
- case ARITHMETIC_PROP_MAX_LENGTH:
- arithPropagateMaxLength = atoi(optarg);
- break;
-
- case ARITHMETIC_DIO_SOLVER:
- arithDioSolver = false;
- break;
-
- case ENABLE_ARITHMETIC_REWRITE_EQUALITIES:
- arithRewriteEq = true;
- arithRewriteEqSetByUser = true;
- break;
-
- case DISABLE_ARITHMETIC_REWRITE_EQUALITIES:
- arithRewriteEq = false;
- arithRewriteEqSetByUser = true;
- break;
-
- case SHOW_DEBUG_TAGS:
- if(Configuration::isDebugBuild() && Configuration::isTracingBuild()) {
- printf("available tags:");
- unsigned ntags = Configuration::getNumDebugTags();
- char const* const* tags = Configuration::getDebugTags();
- for(unsigned i = 0; i < ntags; ++ i) {
- printf(" %s", tags[i]);
- }
- printf("\n");
- } else if(! Configuration::isDebugBuild()) {
- throw OptionException("debug tags not available in non-debug builds");
- } else {
- throw OptionException("debug tags not available in non-tracing builds");
- }
- exit(0);
- break;
-
- case SHOW_TRACE_TAGS:
- if(Configuration::isTracingBuild()) {
- printf("available tags:");
- unsigned ntags = Configuration::getNumTraceTags();
- char const* const* tags = Configuration::getTraceTags();
- for (unsigned i = 0; i < ntags; ++ i) {
- printf(" %s", tags[i]);
- }
- printf("\n");
- } else {
- throw OptionException("trace tags not available in non-tracing builds");
- }
- exit(0);
- break;
-
- case SHOW_SAT_SOLVERS:
- {
- vector<string> solvers;
- prop::SatSolverFactory::getSolverIds(solvers);
- printf("Available SAT solvers: ");
- for (unsigned i = 0; i < solvers.size(); ++ i) {
- if (i > 0) {
- printf(", ");
- }
- printf("%s", solvers[i].c_str());
- }
- printf("\n");
- exit(0);
- break;
- }
- case SHOW_CONFIG:
- fputs(Configuration::about().c_str(), stdout);
- printf("\n");
- printf("version : %s\n", Configuration::getVersionString().c_str());
- if(Configuration::isSubversionBuild()) {
- printf("subversion : yes [%s r%u%s]\n",
- Configuration::getSubversionBranchName(),
- Configuration::getSubversionRevision(),
- Configuration::hasSubversionModifications() ?
- " (with modifications)" : "");
- } else {
- printf("subversion : %s\n", Configuration::isSubversionBuild() ? "yes" : "no");
- }
- printf("\n");
- printf("library : %u.%u.%u\n",
- Configuration::getVersionMajor(),
- Configuration::getVersionMinor(),
- Configuration::getVersionRelease());
- printf("\n");
- printf("debug code : %s\n", Configuration::isDebugBuild() ? "yes" : "no");
- printf("statistics : %s\n", Configuration::isStatisticsBuild() ? "yes" : "no");
- printf("replay : %s\n", Configuration::isReplayBuild() ? "yes" : "no");
- printf("tracing : %s\n", Configuration::isTracingBuild() ? "yes" : "no");
- printf("dumping : %s\n", Configuration::isDumpingBuild() ? "yes" : "no");
- printf("muzzled : %s\n", Configuration::isMuzzledBuild() ? "yes" : "no");
- printf("assertions : %s\n", Configuration::isAssertionBuild() ? "yes" : "no");
- printf("proof : %s\n", Configuration::isProofBuild() ? "yes" : "no");
- printf("coverage : %s\n", Configuration::isCoverageBuild() ? "yes" : "no");
- printf("profiling : %s\n", Configuration::isProfilingBuild() ? "yes" : "no");
- printf("competition: %s\n", Configuration::isCompetitionBuild() ? "yes" : "no");
- printf("\n");
- printf("cudd : %s\n", Configuration::isBuiltWithCudd() ? "yes" : "no");
- printf("cln : %s\n", Configuration::isBuiltWithCln() ? "yes" : "no");
- printf("gmp : %s\n", Configuration::isBuiltWithGmp() ? "yes" : "no");
- printf("tls : %s\n", Configuration::isBuiltWithTlsSupport() ? "yes" : "no");
- exit(0);
-
- case PARALLEL_THREADS:
- threads = atoi(optarg);
- break;
-
- case PARALLEL_SEPARATE_OUTPUT:
- separateOutput = true;
- break;
-
- case PORTFOLIO_FILTER_LENGTH:
- sharingFilterByLength = atoi(optarg);
- break;
-
- case ':':
- // This can be a long or short option, and the way to get at the name of it is different.
- if(optopt == 0 || // was a long option
- (optopt >= OPTION_VALUE_BEGIN && optopt <= OPTION_VALUE_END)) { // OptionValue option
- throw OptionException(string("option `") + argv[optind - 1] + "' missing its required argument");
- } else { // was a short option
- throw OptionException(string("option `-") + char(optopt) + "' missing its required argument");
- }
-
- case '?':
- default:
- if(optopt == 0 &&
- !strncmp(argv[optind - 1], "--thread", 8) &&
- strlen(argv[optind - 1]) > 8 &&
- isdigit(argv[optind - 1][8])) {
- int tnum = atoi(argv[optind - 1] + 8);
- threadArgv.resize(tnum + 1);
- if(threadArgv[tnum] != "") {
- threadArgv[tnum] += " ";
- }
- const char* p = strchr(argv[optind - 1] + 9, '=');
- if(p == NULL) { // e.g., we have --thread0 "foo"
- threadArgv[tnum] += argv[optind++];
- } else { // e.g., we have --thread0="foo"
- threadArgv[tnum] += p + 1;
- }
- break;
- }
-
- // This can be a long or short option, and the way to get at the name of it is different.
- if(optopt == 0) { // was a long option
- throw OptionException(string("can't understand option `") + argv[optind - 1] + "'");
- } else { // was a short option
- throw OptionException(string("can't understand option `-") + char(optopt) + "'");
- }
- }
- }
-
- if(incrementalSolving && proof) {
- throw OptionException(string("The use of --incremental with --proof is not yet supported"));
- }
-
- return optind;
-}
-
-void Options::setOutputLanguage(const char* str) throw(OptionException) {
- if(!strcmp(str, "cvc4") || !strcmp(str, "pl")) {
- outputLanguage = language::output::LANG_CVC4;
- return;
- } else if(!strcmp(str, "smtlib") || !strcmp(str, "smt")) {
- outputLanguage = language::output::LANG_SMTLIB;
- return;
- } else if(!strcmp(str, "smtlib2") || !strcmp(str, "smt2")) {
- outputLanguage = language::output::LANG_SMTLIB_V2;
- return;
- } else if(!strcmp(str, "tptp")) {
- outputLanguage = language::output::LANG_TPTP;
- return;
- } else if(!strcmp(str, "ast")) {
- outputLanguage = language::output::LANG_AST;
- return;
- } else if(!strcmp(str, "auto")) {
- outputLanguage = language::output::LANG_AUTO;
- return;
- }
-
- if(strcmp(str, "help")) {
- throw OptionException(string("unknown language for --output-lang: `") +
- str + "'. Try --output-lang help.");
- }
-
- languageHelp = true;
-}
-
-void Options::setInputLanguage(const char* str) throw(OptionException) {
- if(!strcmp(str, "cvc4") || !strcmp(str, "pl") || !strcmp(str, "presentation")) {
- inputLanguage = language::input::LANG_CVC4;
- return;
- } else if(!strcmp(str, "smtlib") || !strcmp(str, "smt")) {
- inputLanguage = language::input::LANG_SMTLIB;
- return;
- } else if(!strcmp(str, "smtlib2") || !strcmp(str, "smt2")) {
- inputLanguage = language::input::LANG_SMTLIB_V2;
- return;
- } else if(!strcmp(str, "tptp")) {
- inputLanguage = language::input::LANG_TPTP;
- return;
- } else if(!strcmp(str, "auto")) {
- inputLanguage = language::input::LANG_AUTO;
- return;
- }
-
- if(strcmp(str, "help")) {
- throw OptionException(string("unknown language for --lang: `") +
- str + "'. Try --lang help.");
- }
-
- languageHelp = true;
-}
-
-std::ostream& operator<<(std::ostream& out, Options::ArithHeuristicPivotRule rule) {
- switch(rule) {
- case Options::MINIMUM:
- out << "MINIMUM";
- break;
- case Options::BREAK_TIES:
- out << "BREAK_TIES";
- break;
- case Options::MAXIMUM:
- out << "MAXIMUM";
- break;
- default:
- out << "ArithPivotRule!UNKNOWN";
- }
-
- return out;
-}
-
-#undef USE_EARLY_TYPE_CHECKING_BY_DEFAULT
-#undef DO_SEMANTIC_CHECKS_BY_DEFAULT
-
-}/* CVC4 namespace */
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback