#include "expr/sequence.h"
#include "expr/type_node.h"
#include "expr/uninterpreted_constant.h"
+#include "options/base_options.h"
#include "options/main_options.h"
#include "options/option_exception.h"
#include "options/options.h"
NodeManagerScope scope(getNodeManager());
CVC5_API_TRY_CATCH_BEGIN;
CVC5_API_CHECK(!d_smtEngine->isQueryMade()
- || d_smtEngine->getOptions().smt.incrementalSolving)
+ || d_smtEngine->getOptions().base.incrementalSolving)
<< "Cannot make multiple queries unless incremental solving is enabled "
"(try --incremental)";
CVC5_API_SOLVER_CHECK_TERM(term);
CVC5_API_TRY_CATCH_BEGIN;
NodeManagerScope scope(getNodeManager());
CVC5_API_CHECK(!d_smtEngine->isQueryMade()
- || d_smtEngine->getOptions().smt.incrementalSolving)
+ || d_smtEngine->getOptions().base.incrementalSolving)
<< "Cannot make multiple queries unless incremental solving is enabled "
"(try --incremental)";
CVC5_API_SOLVER_CHECK_TERMS(terms);
CVC5_API_TRY_CATCH_BEGIN;
NodeManagerScope scope(getNodeManager());
CVC5_API_CHECK(!d_smtEngine->isQueryMade()
- || d_smtEngine->getOptions().smt.incrementalSolving)
+ || d_smtEngine->getOptions().base.incrementalSolving)
<< "Cannot make multiple queries unless incremental solving is enabled "
"(try --incremental)";
//////// all checks before this line
CVC5_API_TRY_CATCH_BEGIN;
NodeManagerScope scope(getNodeManager());
CVC5_API_CHECK(!d_smtEngine->isQueryMade()
- || d_smtEngine->getOptions().smt.incrementalSolving)
+ || d_smtEngine->getOptions().base.incrementalSolving)
<< "Cannot make multiple queries unless incremental solving is enabled "
"(try --incremental)";
CVC5_API_SOLVER_CHECK_TERM_WITH_SORT(assumption, getBooleanSort());
CVC5_API_TRY_CATCH_BEGIN;
NodeManagerScope scope(getNodeManager());
CVC5_API_CHECK(!d_smtEngine->isQueryMade() || assumptions.size() == 0
- || d_smtEngine->getOptions().smt.incrementalSolving)
+ || d_smtEngine->getOptions().base.incrementalSolving)
<< "Cannot make multiple queries unless incremental solving is enabled "
"(try --incremental)";
CVC5_API_SOLVER_CHECK_TERMS_WITH_SORT(assumptions, getBooleanSort());
{
CVC5_API_TRY_CATCH_BEGIN;
NodeManagerScope scope(getNodeManager());
- CVC5_API_CHECK(d_smtEngine->getOptions().smt.incrementalSolving)
+ CVC5_API_CHECK(d_smtEngine->getOptions().base.incrementalSolving)
<< "Cannot get unsat assumptions unless incremental solving is enabled "
"(try --incremental)";
CVC5_API_CHECK(d_smtEngine->getOptions().smt.unsatAssumptions)
{
NodeManagerScope scope(getNodeManager());
CVC5_API_TRY_CATCH_BEGIN;
- CVC5_API_CHECK(d_smtEngine->getOptions().smt.incrementalSolving)
+ CVC5_API_CHECK(d_smtEngine->getOptions().base.incrementalSolving)
<< "Cannot pop when not solving incrementally (use --incremental)";
CVC5_API_CHECK(nscopes <= d_smtEngine->getNumUserLevels())
<< "Cannot pop beyond first pushed context";
{
NodeManagerScope scope(getNodeManager());
CVC5_API_TRY_CATCH_BEGIN;
- CVC5_API_CHECK(d_smtEngine->getOptions().smt.incrementalSolving)
+ CVC5_API_CHECK(d_smtEngine->getOptions().base.incrementalSolving)
<< "Cannot push when not solving incrementally (use --incremental)";
//////// all checks before this line
for (uint32_t n = 0; n < nscopes; ++n)
#include <vector>
#include "main/main.h"
-#include "options/options_public.h"
+#include "options/base_options.h"
+#include "options/main_options.h"
#include "smt/command.h"
#include "smt/smt_engine.h"
void CommandExecutor::printStatistics(std::ostream& out) const
{
- if (options::getStatistics(d_options))
+ if (d_options.base.statistics)
{
getSmtEngine()->printStatistics(out);
}
void CommandExecutor::printStatisticsSafe(int fd) const
{
- if (options::getStatistics(d_options))
+ if (d_options.base.statistics)
{
getSmtEngine()->printStatisticsSafe(fd);
}
bool CommandExecutor::doCommand(Command* cmd)
{
- if (options::getParseOnly(d_options))
+ if (d_options.base.parseOnly)
{
return true;
}
return status;
} else {
- if (options::getVerbosity(d_options) > 2)
+ if (d_options.base.verbosity > 2)
{
- *options::getOut(d_options) << "Invoking: " << *cmd << std::endl;
+ *d_options.base.out << "Invoking: " << *cmd << std::endl;
}
return doCommandSingleton(cmd);
void CommandExecutor::reset()
{
- printStatistics(*options::getErr(d_options));
+ printStatistics(*d_options.base.err);
/* We have to keep options passed via CL on reset. These options are stored
* in CommandExecutor::d_options (populated and created in the driver), and
* CommandExecutor::d_options only contains *these* options since the
bool CommandExecutor::doCommandSingleton(Command* cmd)
{
bool status = true;
- if (options::getVerbosity(d_options) >= -1)
+ if (d_options.base.verbosity >= -1)
{
status = solverInvoke(
- d_solver.get(), d_symman.get(), cmd, options::getOut(d_options));
+ d_solver.get(), d_symman.get(), cmd, d_options.base.out);
}
else
{
d_result = res = q->getResult();
}
- if ((cs != nullptr || q != nullptr) && options::getStatsEveryQuery(d_options))
+ if ((cs != nullptr || q != nullptr) && d_options.base.statisticsEveryQuery)
{
- getSmtEngine()->printStatisticsDiff(*options::getErr(d_options));
+ getSmtEngine()->printStatisticsDiff(*d_options.base.err);
}
bool isResultUnsat = res.isUnsat() || res.isEntailed();
// dump the model/proof/unsat core if option is set
if (status) {
std::vector<std::unique_ptr<Command> > getterCommands;
- if (options::getDumpModels(d_options)
+ if (d_options.driver.dumpModels
&& (res.isSat()
|| (res.isSatUnknown()
&& res.getUnknownExplanation() == api::Result::INCOMPLETE)))
{
getterCommands.emplace_back(new GetModelCommand());
}
- if (options::getDumpProofs(d_options) && isResultUnsat)
+ if (d_options.driver.dumpProofs && isResultUnsat)
{
getterCommands.emplace_back(new GetProofCommand());
}
- if (options::getDumpInstantiations(d_options)
+ if (d_options.driver.dumpInstantiations
&& GetInstantiationsCommand::isEnabled(d_solver.get(), res))
{
getterCommands.emplace_back(new GetInstantiationsCommand());
}
- if (options::getDumpUnsatCores(d_options) && isResultUnsat)
+ if ((d_options.driver.dumpUnsatCores || d_options.driver.dumpUnsatCoresFull) && isResultUnsat)
{
getterCommands.emplace_back(new GetUnsatCoreCommand());
}
if (!getterCommands.empty()) {
// set no time limit during dumping if applicable
- if (options::getForceNoLimitCpuWhileDump(d_options))
+ if (d_options.driver.forceNoLimitCpuWhileDump)
{
setNoLimitCPU();
}
}
void CommandExecutor::flushOutputStreams() {
- printStatistics(*(options::getErr(d_options)));
+ printStatistics(*d_options.base.err);
// make sure out and err streams are flushed too
- if (options::getOut(d_options) != nullptr)
+ if (d_options.base.out != nullptr)
{
- *options::getOut(d_options) << std::flush;
+ *d_options.base.out << std::flush;
}
- if (options::getErr(d_options) != nullptr)
+ if (d_options.base.err != nullptr)
{
- *options::getErr(d_options) << std::flush;
+ *d_options.base.err << std::flush;
}
}
#include "main/main.h"
#include "main/signal_handlers.h"
#include "main/time_limit.h"
+#include "options/base_options.h"
#include "options/options.h"
-#include "options/options_public.h"
+#include "options/parser_options.h"
#include "options/main_options.h"
#include "options/set_language.h"
#include "parser/parser.h"
<< endl
<< "cvc5 options:" << endl;
if(full) {
- Options::printUsage(ss.str(), *(options::getOut(opts)));
+ Options::printUsage(ss.str(), *opts.base.out);
} else {
- Options::printShortUsage(ss.str(), *(options::getOut(opts)));
+ Options::printShortUsage(ss.str(), *opts.base.out);
}
}
printUsage(opts, true);
exit(1);
}
- else if (options::getLanguageHelp(opts))
+ else if (opts.base.languageHelp)
{
- Options::printLanguageHelp(*(options::getOut(opts)));
+ Options::printLanguageHelp(*opts.base.out);
exit(1);
}
else if (opts.driver.version)
{
- *(options::getOut(opts)) << Configuration::about().c_str() << flush;
+ *opts.base.out << Configuration::about().c_str() << flush;
exit(0);
}
// If in competition mode, set output stream option to flush immediately
#ifdef CVC5_COMPETITION_MODE
- *(options::getOut(opts)) << unitbuf;
+ *opts.base.out << unitbuf;
#endif /* CVC5_COMPETITION_MODE */
// We only accept one input file
const bool inputFromStdin = filenames.empty() || filenames[0] == "-";
// if we're reading from stdin on a TTY, default to interactive mode
- if (!options::wasSetByUserInteractive(opts))
+ if (!opts.driver.interactiveWasSetByUser)
{
opts.driver.interactive = inputFromStdin && isatty(fileno(stdin));
}
}
const char* filename = filenameStr.c_str();
- if (options::getInputLanguage(opts) == language::input::LANG_AUTO)
+ if (opts.base.inputLanguage == language::input::LANG_AUTO)
{
if( inputFromStdin ) {
// We can't do any fancy detection on stdin
- options::setInputLanguage(language::input::LANG_CVC, opts);
+ opts.base.inputLanguage = language::input::LANG_CVC;
} else {
size_t len = filenameStr.size();
if(len >= 5 && !strcmp(".smt2", filename + len - 5)) {
- options::setInputLanguage(language::input::LANG_SMTLIB_V2_6, opts);
+ opts.base.inputLanguage = language::input::LANG_SMTLIB_V2_6;
} else if((len >= 2 && !strcmp(".p", filename + len - 2))
|| (len >= 5 && !strcmp(".tptp", filename + len - 5))) {
- options::setInputLanguage(language::input::LANG_TPTP, opts);
+ opts.base.inputLanguage = language::input::LANG_TPTP;
} else if(( len >= 4 && !strcmp(".cvc", filename + len - 4) )
|| ( len >= 5 && !strcmp(".cvc4", filename + len - 5) )) {
- options::setInputLanguage(language::input::LANG_CVC, opts);
+ opts.base.inputLanguage = language::input::LANG_CVC;
} else if((len >= 3 && !strcmp(".sy", filename + len - 3))
|| (len >= 3 && !strcmp(".sl", filename + len - 3))) {
// version 2 sygus is the default
- options::setInputLanguage(language::input::LANG_SYGUS_V2, opts);
+ opts.base.inputLanguage = language::input::LANG_SYGUS_V2;
}
}
}
- if (options::getOutputLanguage(opts) == language::output::LANG_AUTO)
+ if (opts.base.outputLanguage == language::output::LANG_AUTO)
{
- options::setOutputLanguage(
- language::toOutputLanguage(options::getInputLanguage(opts)), opts);
+ opts.base.outputLanguage = language::toOutputLanguage(opts.base.inputLanguage);
}
// Determine which messages to show based on smtcomp_mode and verbosity
}
// important even for muzzled builds (to get result output right)
- (*(options::getOut(opts)))
- << language::SetLanguage(options::getOutputLanguage(opts));
+ (*opts.base.out)
+ << language::SetLanguage(opts.base.outputLanguage);
// Create the command executor to execute the parsed commands
pExecutor = std::make_unique<CommandExecutor>(opts);
throw Exception(
"--tear-down-incremental doesn't work in interactive mode");
}
- if (!options::wasSetByUserIncrementalSolving(opts))
+ if (!opts.base.incrementalSolvingWasSetByUser)
{
cmd.reset(new SetOptionCommand("incremental", "true"));
cmd->setMuted(true);
try {
cmd.reset(shell.readCommand());
} catch(UnsafeInterruptException& e) {
- (*options::getOut(opts)) << CommandInterrupted();
+ *opts.base.out << CommandInterrupted();
break;
}
if (cmd == nullptr)
}
else if (opts.driver.tearDownIncremental > 0)
{
- if (!options::getIncrementalSolving(opts)
+ if (!opts.base.incrementalSolving
&& opts.driver.tearDownIncremental > 1)
{
// For tear-down-incremental values greater than 1, need incremental
cmd.reset(new SetOptionCommand("incremental", "true"));
cmd->setMuted(true);
pExecutor->doCommand(cmd);
- // if(options::wasSetByUserIncrementalSolving(opts)) {
+ // if(opts.base.incrementalWasSetByUser) {
// throw OptionException(
// "--tear-down-incremental incompatible with --incremental");
// }
std::unique_ptr<Parser> parser(parserBuilder.build());
if( inputFromStdin ) {
parser->setInput(Input::newStreamInput(
- options::getInputLanguage(opts), cin, filename));
+ opts.base.inputLanguage, cin, filename));
}
else
{
- parser->setInput(Input::newFileInput(options::getInputLanguage(opts),
+ parser->setInput(Input::newFileInput(opts.base.inputLanguage,
filename,
- options::getMemoryMap(opts)));
+ opts.parser.memoryMap));
}
vector< vector<Command*> > allCommands;
while (status)
{
if (interrupted) {
- (*options::getOut(opts)) << CommandInterrupted();
+ *opts.base.out << CommandInterrupted();
break;
}
}
}
if (interrupted) continue;
- (*options::getOut(opts)) << CommandSuccess();
+ *opts.base.out << CommandSuccess();
needReset = 0;
}
else
}
else
{
- if (!options::wasSetByUserIncrementalSolving(opts))
+ if (!opts.base.incrementalSolvingWasSetByUser)
{
cmd.reset(new SetOptionCommand("incremental", "false"));
cmd->setMuted(true);
std::unique_ptr<Parser> parser(parserBuilder.build());
if( inputFromStdin ) {
parser->setInput(Input::newStreamInput(
- options::getInputLanguage(opts), cin, filename));
+ opts.base.inputLanguage, cin, filename));
}
else
{
- parser->setInput(Input::newFileInput(options::getInputLanguage(opts),
+ parser->setInput(Input::newFileInput(opts.base.inputLanguage,
filename,
- options::getMemoryMap(opts)));
+ opts.parser.memoryMap));
}
bool interrupted = false;
while (status)
{
if (interrupted) {
- (*options::getOut(opts)) << CommandInterrupted();
+ *opts.base.out << CommandInterrupted();
pExecutor->reset();
break;
}
}
#ifdef CVC5_COMPETITION_MODE
- if (cvc5::options::getOut(opts) != nullptr)
+ if (opts.base.out != nullptr)
{
- *cvc5::options::getOut(opts) << std::flush;
+ *opts.base.out << std::flush;
}
// exit, don't return (don't want destructors to run)
// _exit() from unistd.h doesn't run global destructors
pExecutor->flushOutputStreams();
#ifdef CVC5_DEBUG
- if (opts.driver.earlyExit && options::wasSetByUserEarlyExit(opts))
+ if (opts.driver.earlyExit && opts.driver.earlyExitWasSetByUser)
{
_exit(returnValue);
}
#include "base/check.h"
#include "base/output.h"
#include "expr/symbol_manager.h"
+#include "options/base_options.h"
#include "options/language.h"
#include "options/main_options.h"
#include "options/options.h"
-#include "options/options_public.h"
+#include "options/parser_options.h"
#include "parser/input.h"
#include "parser/parser.h"
#include "parser/parser_builder.h"
InteractiveShell::InteractiveShell(api::Solver* solver, SymbolManager* sm)
: d_options(solver->getOptions()),
- d_in(*options::getIn(d_options)),
- d_out(*options::getOut(d_options)),
+ d_in(*d_options.base.in),
+ d_out(*d_options.base.out),
d_quit(false)
{
ParserBuilder parserBuilder(solver, sm, d_options);
/* Create parser with bogus input. */
d_parser = parserBuilder.build();
- if (options::wasSetByUserForceLogicString(d_options))
+ if (d_options.parser.forceLogicStringWasSetByUser)
{
- LogicInfo tmp(options::getForceLogicString(d_options));
+ LogicInfo tmp(d_options.parser.forceLogicString);
d_parser->forceLogic(tmp.getLogicString());
}
::using_history();
OutputLanguage lang =
- toOutputLanguage(options::getInputLanguage(d_options));
+ toOutputLanguage(d_options.base.inputLanguage);
switch(lang) {
case output::LANG_CVC:
d_historyFilename = string(getenv("HOME")) + "/.cvc5_history";
}
d_parser->setInput(Input::newStringInput(
- options::getInputLanguage(d_options), input, INPUT_FILENAME));
+ d_options.base.inputLanguage, input, INPUT_FILENAME));
/* There may be more than one command in the input. Build up a
sequence. */
}
catch (ParserException& pe)
{
- if (language::isOutputLang_smt2(options::getOutputLanguage(d_options)))
+ if (language::isOutputLang_smt2(d_options.base.outputLanguage))
{
d_out << "(error \"" << pe << "\")" << endl;
}
#include "base/output.h"
#include "main/command_executor.h"
#include "main/interactive_shell.h"
+#include "options/base_options.h"
#include "options/language.h"
#include "options/option_exception.h"
#include "options/options.h"
-#include "options/options_public.h"
#include "parser/parser.h"
#include "parser/parser_builder.h"
#include "parser/parser_exception.h"
return runCvc5(argc, argv, opts);
} catch(OptionException& e) {
#ifdef CVC5_COMPETITION_MODE
- *options::getOut(opts) << "unknown" << endl;
+ *opts.base.out << "unknown" << endl;
#endif
cerr << "(error \"" << e << "\")" << endl
<< endl
<< "Please use --help to get help on command-line options." << endl;
} catch(Exception& e) {
#ifdef CVC5_COMPETITION_MODE
- *options::getOut(opts) << "unknown" << endl;
+ *opts.base.out << "unknown" << endl;
#endif
- if (language::isOutputLang_smt2(options::getOutputLanguage(opts)))
+ if (language::isOutputLang_smt2(opts.base.outputLanguage))
{
- *options::getOut(opts) << "(error \"" << e << "\")" << endl;
+ *opts.base.out << "(error \"" << e << "\")" << endl;
} else {
- *options::getErr(opts) << "(error \"" << e << "\")" << endl;
+ *opts.base.err << "(error \"" << e << "\")" << endl;
}
- if (options::getStatistics(opts) && pExecutor != nullptr)
+ if (opts.base.statistics && pExecutor != nullptr)
{
totalTime.reset();
- pExecutor->printStatistics(*options::getErr(opts));
+ pExecutor->printStatistics(*opts.base.err);
}
}
exit(1);
#include <cstring>
#include "base/exception.h"
-#include "options/options_public.h"
+#include "options/base_options.h"
#include "signal_handlers.h"
namespace cvc5 {
TimeLimit install_time_limit(const Options& opts)
{
- unsigned long ms = options::getCumulativeTimeLimit(opts);
+ uint64_t ms = opts.base.cumulativeMillisecondLimit;
// Skip if no time limit shall be set.
if (ms == 0) {
return TimeLimit();
proof_options.toml
prop_options.toml
quantifiers_options.toml
- resource_manager_options.toml
sep_options.toml
sets_options.toml
smt_options.toml
id = "BASE"
name = "Base"
+public = true
[[option]]
name = "in"
handler = "decreaseVerbosity"
help = "decrease verbosity (may be repeated)"
+[[option]]
+ name = "incrementalSolving"
+ category = "common"
+ short = "i"
+ long = "incremental"
+ type = "bool"
+ default = "true"
+ help = "enable incremental solving"
+
[[option]]
name = "statistics"
long = "stats"
long = "print-success"
type = "bool"
help = "print the \"success\" output required of SMT-LIBv2"
+
+[[option]]
+ name = "cumulativeMillisecondLimit"
+ category = "common"
+ long = "tlimit=MS"
+ type = "uint64_t"
+ help = "set time limit in milliseconds of wall clock time"
+
+[[option]]
+ name = "perCallMillisecondLimit"
+ category = "common"
+ long = "tlimit-per=MS"
+ type = "uint64_t"
+ help = "set time limit per query in milliseconds"
+
+[[option]]
+ name = "cumulativeResourceLimit"
+ category = "common"
+ long = "rlimit=N"
+ type = "uint64_t"
+ help = "set resource limit"
+
+[[option]]
+ name = "perCallResourceLimit"
+ alias = ["reproducible-resource-limit"]
+ category = "common"
+ long = "rlimit-per=N"
+ type = "uint64_t"
+ help = "set resource limit per query"
+
+# --rweight is used to override the default of one particular resource weight.
+# It can be given multiple times to override multiple weights. When options are
+# parsed, the resource manager might now be created yet, and it is not clear
+# how an option handler would access it in a reasonable way. The option handler
+# thus merely puts the data in another option that holds a vector of strings.
+# This other option "resourceWeightHolder" has the sole purpose of storing
+# this data in a way so that the resource manager can access it in its
+# constructor.
+[[option]]
+ category = "expert"
+ long = "rweight=VAL=N"
+ type = "std::string"
+ handler = "setResourceWeight"
+ help = "set a single resource weight"
+
+[[option]]
+ name = "resourceWeightHolder"
+ category = "undocumented"
+ type = "std::vector<std::string>"
type = "int"
default = "0"
help = "implement PUSH/POP/multi-query by destroying and recreating SmtEngine every N queries"
+
+[[option]]
+ name = "dumpModels"
+ category = "regular"
+ long = "dump-models"
+ type = "bool"
+ default = "false"
+ help = "output models after every SAT/INVALID/UNKNOWN response"
+
+[[option]]
+ name = "dumpProofs"
+ category = "regular"
+ long = "dump-proofs"
+ type = "bool"
+ default = "false"
+ help = "output proofs after every UNSAT/VALID response"
+
+[[option]]
+ name = "dumpInstantiations"
+ category = "regular"
+ long = "dump-instantiations"
+ type = "bool"
+ default = "false"
+ help = "output instantiations of quantified formulas after every UNSAT/VALID response"
+
+[[option]]
+ name = "dumpUnsatCores"
+ category = "regular"
+ long = "dump-unsat-cores"
+ type = "bool"
+ default = "false"
+ help = "output unsat cores after every UNSAT/VALID response"
+
+[[option]]
+ name = "dumpUnsatCoresFull"
+ category = "regular"
+ long = "dump-unsat-cores-full"
+ type = "bool"
+ default = "false"
+ help = "dump the full unsat core, including unlabeled assertions"
+
+[[option]]
+ name = "forceNoLimitCpuWhileDump"
+ category = "regular"
+ long = "force-no-limit-cpu-while-dump"
+ type = "bool"
+ default = "false"
+ help = "Force no CPU limit when dumping models and proofs"
#include "options/didyoumean.h"
#include "options/language.h"
#include "options/option_exception.h"
-#include "options/resource_manager_options.h"
#include "options/smt_options.h"
#include "options/theory_options.h"
void OptionsHandler::setResourceWeight(std::string option, std::string optarg)
{
- d_options->resman.resourceWeightHolder.emplace_back(optarg);
+ d_options->base.resourceWeightHolder.emplace_back(optarg);
}
// theory/quantifiers/options_handlers.h
#include "options_public.h"
-#include <fstream>
-#include <ostream>
-#include <string>
-#include <vector>
-
-#include "base/listener.h"
-#include "base/modal_exception.h"
-#include "options/base_options.h"
-#include "options/language.h"
-#include "options/main_options.h"
-#include "options/option_exception.h"
-#include "options/options.h"
-#include "options/parser_options.h"
-#include "options/printer_modes.h"
-#include "options/printer_options.h"
-#include "options/resource_manager_options.h"
-#include "options/smt_options.h"
#include "options/uf_options.h"
namespace cvc5::options {
-InputLanguage getInputLanguage(const Options& opts)
-{
- return opts.base.inputLanguage;
-}
-InstFormatMode getInstFormatMode(const Options& opts)
-{
- return opts.printer.instFormatMode;
-}
-OutputLanguage getOutputLanguage(const Options& opts)
-{
- return opts.base.outputLanguage;
-}
bool getUfHo(const Options& opts) { return opts.uf.ufHo; }
-bool getDumpInstantiations(const Options& opts)
-{
- return opts.smt.dumpInstantiations;
-}
-bool getDumpModels(const Options& opts) { return opts.smt.dumpModels; }
-bool getDumpProofs(const Options& opts) { return opts.smt.dumpProofs; }
-bool getDumpUnsatCores(const Options& opts)
-{
- return opts.smt.dumpUnsatCores || opts.smt.dumpUnsatCoresFull;
-}
-bool getFilesystemAccess(const Options& opts)
-{
- return opts.parser.filesystemAccess;
-}
-bool getForceNoLimitCpuWhileDump(const Options& opts)
-{
- return opts.smt.forceNoLimitCpuWhileDump;
-}
-bool getIncrementalSolving(const Options& opts)
-{
- return opts.smt.incrementalSolving;
-}
-bool getLanguageHelp(const Options& opts) { return opts.base.languageHelp; }
-bool getMemoryMap(const Options& opts) { return opts.parser.memoryMap; }
-bool getParseOnly(const Options& opts) { return opts.base.parseOnly; }
-bool getProduceModels(const Options& opts) { return opts.smt.produceModels; }
-bool getSemanticChecks(const Options& opts)
-{
- return opts.parser.semanticChecks;
-}
-bool getStatistics(const Options& opts) { return opts.base.statistics; }
-bool getStatsEveryQuery(const Options& opts)
-{
- return opts.base.statisticsEveryQuery;
-}
-bool getStrictParsing(const Options& opts)
-{
- return opts.parser.strictParsing;
-}
-uint64_t getCumulativeTimeLimit(const Options& opts)
-{
- return opts.resman.cumulativeMillisecondLimit;
-}
-const std::string& getForceLogicString(const Options& opts)
-{
- return opts.parser.forceLogicString;
-}
-int32_t getVerbosity(const Options& opts) { return opts.base.verbosity; }
-
-std::istream* getIn(const Options& opts) { return opts.base.in; }
-std::ostream* getErr(const Options& opts) { return opts.base.err; }
-std::ostream* getOut(const Options& opts) { return opts.base.out; }
-
-void setInputLanguage(InputLanguage val, Options& opts)
-{
- opts.base.inputLanguage = val;
-}
-void setOut(std::ostream* val, Options& opts) { opts.base.out = val; }
-void setOutputLanguage(OutputLanguage val, Options& opts)
-{
- opts.base.outputLanguage = val;
-}
-
-bool wasSetByUserEarlyExit(const Options& opts)
-{
- return opts.driver.earlyExitWasSetByUser;
-}
-bool wasSetByUserForceLogicString(const Options& opts)
-{
- return opts.parser.forceLogicStringWasSetByUser;
-}
-bool wasSetByUserIncrementalSolving(const Options& opts)
-{
- return opts.smt.incrementalSolvingWasSetByUser;
-}
-bool wasSetByUserInteractive(const Options& opts)
-{
- return opts.driver.interactiveWasSetByUser;
-}
} // namespace cvc5::options
#ifndef CVC5__OPTIONS__OPTIONS_PUBLIC_H
#define CVC5__OPTIONS__OPTIONS_PUBLIC_H
-#include "options/language.h"
#include "options/options.h"
-#include "options/printer_modes.h"
namespace cvc5::options {
-InputLanguage getInputLanguage(const Options& opts) CVC5_EXPORT;
-InstFormatMode getInstFormatMode(const Options& opts) CVC5_EXPORT;
-OutputLanguage getOutputLanguage(const Options& opts) CVC5_EXPORT;
bool getUfHo(const Options& opts) CVC5_EXPORT;
-bool getDumpInstantiations(const Options& opts) CVC5_EXPORT;
-bool getDumpModels(const Options& opts) CVC5_EXPORT;
-bool getDumpProofs(const Options& opts) CVC5_EXPORT;
-bool getDumpUnsatCores(const Options& opts) CVC5_EXPORT;
-bool getFilesystemAccess(const Options& opts) CVC5_EXPORT;
-bool getForceNoLimitCpuWhileDump(const Options& opts) CVC5_EXPORT;
-bool getIncrementalSolving(const Options& opts) CVC5_EXPORT;
-bool getLanguageHelp(const Options& opts) CVC5_EXPORT;
-bool getMemoryMap(const Options& opts) CVC5_EXPORT;
-bool getParseOnly(const Options& opts) CVC5_EXPORT;
-bool getProduceModels(const Options& opts) CVC5_EXPORT;
-bool getSemanticChecks(const Options& opts) CVC5_EXPORT;
-bool getStatistics(const Options& opts) CVC5_EXPORT;
-bool getStatsEveryQuery(const Options& opts) CVC5_EXPORT;
-bool getStrictParsing(const Options& opts) CVC5_EXPORT;
-uint64_t getCumulativeTimeLimit(const Options& opts) CVC5_EXPORT;
-const std::string& getForceLogicString(const Options& opts) CVC5_EXPORT;
-int32_t getVerbosity(const Options& opts) CVC5_EXPORT;
-
-std::istream* getIn(const Options& opts) CVC5_EXPORT;
-std::ostream* getErr(const Options& opts) CVC5_EXPORT;
-std::ostream* getOut(const Options& opts) CVC5_EXPORT;
-
-void setInputLanguage(InputLanguage val, Options& opts) CVC5_EXPORT;
-void setOut(std::ostream* val, Options& opts) CVC5_EXPORT;
-void setOutputLanguage(OutputLanguage val, Options& opts) CVC5_EXPORT;
-
-bool wasSetByUserEarlyExit(const Options& opts) CVC5_EXPORT;
-bool wasSetByUserForceLogicString(const Options& opts) CVC5_EXPORT;
-bool wasSetByUserIncrementalSolving(const Options& opts) CVC5_EXPORT;
-bool wasSetByUserInteractive(const Options& opts) CVC5_EXPORT;
} // namespace cvc5::options
id = "PARSER"
name = "Parser"
+public = true
[[option]]
name = "strictParsing"
+++ /dev/null
-id = "RESMAN"
-name = "Resource Manager"
-
-[[option]]
- name = "cumulativeMillisecondLimit"
- category = "common"
- long = "tlimit=MS"
- type = "uint64_t"
- help = "set time limit in milliseconds of wall clock time"
-
-[[option]]
- name = "perCallMillisecondLimit"
- category = "common"
- long = "tlimit-per=MS"
- type = "uint64_t"
- help = "set time limit per query in milliseconds"
-
-[[option]]
- name = "cumulativeResourceLimit"
- category = "common"
- long = "rlimit=N"
- type = "uint64_t"
- help = "set resource limit"
-
-[[option]]
- name = "perCallResourceLimit"
- alias = ["reproducible-resource-limit"]
- category = "common"
- long = "rlimit-per=N"
- type = "uint64_t"
- help = "set resource limit per query"
-
-# --rweight is used to override the default of one particular resource weight.
-# It can be given multiple times to override multiple weights. When options are
-# parsed, the resource manager might now be created yet, and it is not clear
-# how an option handler would access it in a reasonable way. The option handler
-# thus merely puts the data in another option that holds a vector of strings.
-# This other option "resourceWeightHolder" has the sole purpose of storing
-# this data in a way so that the resource manager can access it in its
-# constructor.
-[[option]]
- category = "expert"
- long = "rweight=VAL=N"
- type = "std::string"
- handler = "setResourceWeight"
- help = "set a single resource weight"
-
-[[option]]
- name = "resourceWeightHolder"
- category = "undocumented"
- type = "std::vector<std::string>"
type = "bool"
help = "after SAT/INVALID/UNKNOWN, check that the generated model satisfies user and internal assertions"
-[[option]]
- name = "dumpModels"
- category = "regular"
- long = "dump-models"
- type = "bool"
- default = "false"
- help = "output models after every SAT/INVALID/UNKNOWN response"
-
[[option]]
name = "modelCoresMode"
category = "regular"
default = "false"
help = "produce proofs, support check-proofs and get-proof"
-[[option]]
- name = "dumpProofs"
- category = "regular"
- long = "dump-proofs"
- type = "bool"
- default = "false"
- help = "output proofs after every UNSAT/VALID response"
-
[[option]]
name = "checkProofs"
category = "regular"
type = "bool"
help = "after UNSAT/VALID, check the generated proof (with proof)"
-[[option]]
- name = "dumpInstantiations"
- category = "regular"
- long = "dump-instantiations"
- type = "bool"
- default = "false"
- help = "output instantiations of quantified formulas after every UNSAT/VALID response"
-
[[option]]
name = "sygusOut"
category = "regular"
type = "bool"
help = "after UNSAT/VALID, produce and check an unsat core (expensive)"
-[[option]]
- name = "dumpUnsatCores"
- category = "regular"
- long = "dump-unsat-cores"
- type = "bool"
- default = "false"
- help = "output unsat cores after every UNSAT/VALID response"
-
-[[option]]
- name = "dumpUnsatCoresFull"
- category = "regular"
- long = "dump-unsat-cores-full"
- type = "bool"
- default = "false"
- help = "dump the full unsat core, including unlabeled assertions"
-
[[option]]
name = "unsatAssumptions"
category = "regular"
default = "false"
help = "calculate sort inference of input problem, convert the input based on monotonic sorts"
-[[option]]
- name = "incrementalSolving"
- category = "common"
- short = "i"
- long = "incremental"
- type = "bool"
- default = "true"
- help = "enable incremental solving"
-
[[option]]
name = "abstractValues"
category = "regular"
type = "std::string"
help = "set the diagnostic output channel of the solver"
-[[option]]
- name = "forceNoLimitCpuWhileDump"
- category = "regular"
- long = "force-no-limit-cpu-while-dump"
- type = "bool"
- default = "false"
- help = "Force no CPU limit when dumping models and proofs"
-
[[option]]
name = "foreignTheoryRewrite"
category = "regular"
#include "base/check.h"
#include "base/output.h"
#include "expr/kind.h"
+#include "options/base_options.h"
#include "options/options.h"
-#include "options/options_public.h"
#include "parser/input.h"
#include "parser/parser_exception.h"
#include "smt/command.h"
api::Term Parser::mkStringConstant(const std::string& s)
{
if (language::isInputLang_smt2_6(
- options::getInputLanguage(d_solver->getOptions())))
+ d_solver->getOptions().base.inputLanguage))
{
return d_solver->mkString(s, true);
}
#include "api/cpp/cvc5.h"
#include "base/check.h"
#include "cvc/cvc.h"
+#include "options/base_options.h"
#include "options/options.h"
-#include "options/options_public.h"
+#include "options/parser_options.h"
#include "parser/antlr_input.h"
#include "parser/input.h"
#include "parser/parser.h"
ParserBuilder& ParserBuilder::withOptions(const Options& opts)
{
ParserBuilder& retval = *this;
- retval = retval.withInputLanguage(options::getInputLanguage(opts))
- .withChecks(options::getSemanticChecks(opts))
- .withStrictMode(options::getStrictParsing(opts))
- .withParseOnly(options::getParseOnly(opts))
- .withIncludeFile(options::getFilesystemAccess(opts));
- if (options::wasSetByUserForceLogicString(opts))
+ retval = retval.withInputLanguage(opts.base.inputLanguage)
+ .withChecks(opts.parser.semanticChecks)
+ .withStrictMode(opts.parser.strictParsing)
+ .withParseOnly(opts.base.parseOnly)
+ .withIncludeFile(opts.parser.filesystemAccess);
+ if (opts.parser.forceLogicStringWasSetByUser)
{
- LogicInfo tmp(options::getForceLogicString(opts));
+ LogicInfo tmp(opts.parser.forceLogicString);
retval = retval.withForcedLogic(tmp.getLogicString());
}
return retval;
#include <algorithm>
#include "base/check.h"
+#include "options/base_options.h"
#include "options/options.h"
#include "options/options_public.h"
#include "parser/antlr_input.h"
InputLanguage Smt2::getLanguage() const
{
- return options::getInputLanguage(d_solver->getOptions());
+ return d_solver->getOptions().base.inputLanguage;
}
void Smt2::parseOpApplyTypeAscription(ParseOp& p, api::Sort type)
#include "base/check.h"
#include "expr/node_algorithm.h"
#include "expr/skolem_manager.h"
+#include "options/base_options.h"
#include "options/options.h"
-#include "options/smt_options.h"
#include "preprocessing/assertion_pipeline.h"
#include "preprocessing/preprocessing_pass_context.h"
#include "expr/node.h"
#include "expr/node_traversal.h"
#include "expr/skolem_manager.h"
+#include "options/base_options.h"
#include "options/smt_options.h"
#include "preprocessing/assertion_pipeline.h"
#include "theory/rewriter.h"
#include <vector>
+#include "options/base_options.h"
#include "options/smt_options.h"
#include "preprocessing/assertion_pipeline.h"
#include "preprocessing/preprocessing_pass_context.h"
#include "expr/node_self_iterator.h"
#include "expr/skolem_manager.h"
#include "options/arith_options.h"
-#include "options/smt_options.h"
+#include "options/base_options.h"
#include "preprocessing/assertion_pipeline.h"
#include "preprocessing/preprocessing_pass_context.h"
#include "smt/smt_statistics_registry.h"
#include "base/check.h"
#include "base/output.h"
+#include "options/base_options.h"
#include "options/main_options.h"
#include "options/prop_options.h"
#include "options/smt_options.h"
#include "expr/symbol_manager.h"
#include "expr/type_node.h"
#include "options/options.h"
+#include "options/main_options.h"
#include "options/printer_options.h"
#include "options/smt_options.h"
#include "printer/printer.h"
#include "smt/preprocessor.h"
+#include "options/base_options.h"
#include "options/expr_options.h"
#include "options/smt_options.h"
#include "preprocessing/preprocessing_pass_context.h"
// unsat cores and proofs shenanigans
if (options::dumpUnsatCoresFull())
{
- opts.smt.dumpUnsatCores = true;
+ opts.driver.dumpUnsatCores = true;
}
if (options::checkUnsatCores() || options::dumpUnsatCores()
|| options::unsatAssumptions()
#include "options/option_exception.h"
#include "options/printer_options.h"
#include "options/proof_options.h"
-#include "options/resource_manager_options.h"
#include "options/smt_options.h"
#include "options/theory_options.h"
#include "printer/printer.h"
{
if (cumulative)
{
- d_env->d_options.resman.cumulativeResourceLimit = units;
+ d_env->d_options.base.cumulativeResourceLimit = units;
}
else
{
- d_env->d_options.resman.perCallResourceLimit = units;
+ d_env->d_options.base.perCallResourceLimit = units;
}
}
void SmtEngine::setTimeLimit(uint64_t millis)
{
- d_env->d_options.resman.perCallMillisecondLimit = millis;
+ d_env->d_options.base.perCallMillisecondLimit = millis;
}
unsigned long SmtEngine::getResourceUsage() const
#include "smt/smt_engine_state.h"
#include "base/modal_exception.h"
+#include "options/base_options.h"
#include "options/option_exception.h"
#include "options/smt_options.h"
#include "smt/smt_engine.h"
#include "base/modal_exception.h"
#include "expr/dtype.h"
#include "expr/skolem_manager.h"
+#include "options/base_options.h"
#include "options/option_exception.h"
#include "options/quantifiers_options.h"
#include "options/smt_options.h"
#include "base/output.h"
#include "expr/skolem_manager.h"
+#include "options/base_options.h"
#include "options/smt_options.h"
#include "preprocessing/util/ite_utilities.h"
#include "theory/arith/arith_utilities.h"
#include "expr/node_builder.h"
#include "expr/skolem_manager.h"
#include "options/arith_options.h"
-#include "options/smt_options.h" // for incrementalSolving()
+#include "options/base_options.h"
#include "preprocessing/util/ite_utilities.h"
#include "proof/proof_generator.h"
#include "proof/proof_node_manager.h"
#include "theory/bv/bitblast/eager_bitblaster.h"
#include "cvc5_private.h"
+#include "options/base_options.h"
#include "options/bv_options.h"
#include "options/smt_options.h"
#include "prop/cnf_stream.h"
#include "theory/bv/bv_eager_solver.h"
+#include "options/base_options.h"
#include "options/bv_options.h"
#include "options/smt_options.h"
#include "theory/bv/bitblast/aig_bitblaster.h"
#include "theory/quantifiers/instantiate.h"
#include "expr/node_algorithm.h"
+#include "options/base_options.h"
#include "options/printer_options.h"
#include "options/quantifiers_options.h"
#include "options/smt_options.h"
#include "theory/quantifiers/term_registry.h"
+#include "options/base_options.h"
#include "options/quantifiers_options.h"
#include "options/smt_options.h"
#include "theory/quantifiers/first_order_model.h"
#include "base/check.h"
#include "base/listener.h"
#include "base/output.h"
+#include "options/base_options.h"
#include "options/option_exception.h"
#include "options/options.h"
-#include "options/resource_manager_options.h"
#include "util/statistics_registry.h"
using namespace std;
d_infidWeights.fill(1);
d_resourceWeights.fill(1);
- for (const auto& opt : d_options.resman.resourceWeightHolder)
+ for (const auto& opt : d_options.base.resourceWeightHolder)
{
std::string name;
uint64_t weight;
uint64_t ResourceManager::getResourceRemaining() const
{
- if (d_options.resman.cumulativeResourceLimit <= d_cumulativeResourceUsed)
+ if (d_options.base.cumulativeResourceLimit <= d_cumulativeResourceUsed)
return 0;
- return d_options.resman.cumulativeResourceLimit - d_cumulativeResourceUsed;
+ return d_options.base.cumulativeResourceLimit - d_cumulativeResourceUsed;
}
void ResourceManager::spendResource(uint64_t amount)
void ResourceManager::beginCall()
{
- d_perCallTimer.set(d_options.resman.perCallMillisecondLimit);
+ d_perCallTimer.set(d_options.base.perCallMillisecondLimit);
d_thisCallResourceUsed = 0;
- if (d_options.resman.cumulativeResourceLimit > 0)
+ if (d_options.base.cumulativeResourceLimit > 0)
{
// Compute remaining cumulative resource budget
d_thisCallResourceBudget =
- d_options.resman.cumulativeResourceLimit - d_cumulativeResourceUsed;
+ d_options.base.cumulativeResourceLimit - d_cumulativeResourceUsed;
}
- if (d_options.resman.perCallResourceLimit > 0)
+ if (d_options.base.perCallResourceLimit > 0)
{
// Check if per-call resource budget is even smaller
- if (d_options.resman.perCallResourceLimit < d_thisCallResourceBudget)
+ if (d_options.base.perCallResourceLimit < d_thisCallResourceBudget)
{
- d_thisCallResourceBudget = d_options.resman.perCallResourceLimit;
+ d_thisCallResourceBudget = d_options.base.perCallResourceLimit;
}
}
}
bool ResourceManager::limitOn() const
{
- return (d_options.resman.cumulativeResourceLimit > 0)
- || (d_options.resman.perCallMillisecondLimit > 0)
- || (d_options.resman.perCallResourceLimit > 0);
+ return (d_options.base.cumulativeResourceLimit > 0)
+ || (d_options.base.perCallMillisecondLimit > 0)
+ || (d_options.base.perCallResourceLimit > 0);
}
bool ResourceManager::outOfResources() const
{
- if (d_options.resman.perCallResourceLimit > 0)
+ if (d_options.base.perCallResourceLimit > 0)
{
// Check if per-call resources are exhausted
- if (d_thisCallResourceUsed >= d_options.resman.perCallResourceLimit)
+ if (d_thisCallResourceUsed >= d_options.base.perCallResourceLimit)
{
return true;
}
}
- if (d_options.resman.cumulativeResourceLimit > 0)
+ if (d_options.base.cumulativeResourceLimit > 0)
{
// Check if cumulative resources are exhausted
- if (d_cumulativeResourceUsed >= d_options.resman.cumulativeResourceLimit)
+ if (d_cumulativeResourceUsed >= d_options.base.cumulativeResourceLimit)
{
return true;
}
bool ResourceManager::outOfTime() const
{
- if (d_options.resman.perCallMillisecondLimit == 0) return false;
+ if (d_options.base.perCallMillisecondLimit == 0) return false;
return d_perCallTimer.expired();
}
#include <sstream>
#include "api/cpp/cvc5.h"
+#include "options/base_options.h"
#include "options/options.h"
#include "options/options_public.h"
#include "options/set_language.h"
int main()
{
Options opts;
- options::setInputLanguage(language::input::LANG_SMTLIB_V2, opts);
- options::setOutputLanguage(language::output::LANG_SMTLIB_V2, opts);
+ opts.base.inputLanguage = language::input::LANG_SMTLIB_V2;
+ opts.base.outputLanguage = language::output::LANG_SMTLIB_V2;
cout << language::SetLanguage(language::output::LANG_SMTLIB_V2);