namespace theory {
namespace arith {
-ArithPreprocess::ArithPreprocess(ArithState& state,
+ArithPreprocess::ArithPreprocess(Env& env,
+ ArithState& state,
InferenceManager& im,
ProofNodeManager* pnm,
OperatorElim& oe)
- : d_im(im), d_opElim(oe), d_reduced(state.getUserContext())
+ : EnvObj(env), d_im(im), d_opElim(oe), d_reduced(userContext())
{
}
TrustNode ArithPreprocess::eliminate(TNode n,
#define CVC5__THEORY__ARITH__ARITH_PREPROCESS_H
#include "context/cdhashmap.h"
+#include "smt/env_obj.h"
#include "theory/arith/operator_elim.h"
#include "theory/logic_info.h"
* extends that utility with the ability to generate lemmas on demand via
* the provided inference manager.
*/
-class ArithPreprocess
+class ArithPreprocess : protected EnvObj
{
public:
- ArithPreprocess(ArithState& state,
+ ArithPreprocess(Env& env,
+ ArithState& state,
InferenceManager& im,
ProofNodeManager* pnm,
OperatorElim& oe);
namespace theory {
namespace arith {
-BranchAndBound::BranchAndBound(ArithState& s,
+BranchAndBound::BranchAndBound(Env& env,
+ ArithState& s,
InferenceManager& im,
PreprocessRewriteEq& ppre,
ProofNodeManager* pnm)
- : d_astate(s),
+ : EnvObj(env),
+ d_astate(s),
d_im(im),
d_ppre(ppre),
- d_pfGen(new EagerProofGenerator(pnm, s.getUserContext())),
+ d_pfGen(new EagerProofGenerator(pnm, userContext())),
d_pnm(pnm)
{
}
TrustNode lem = TrustNode::null();
NodeManager* nm = NodeManager::currentNM();
Integer floor = value.floor();
- if (d_astate.options().arith.brabTest)
+ if (options().arith.brabTest)
{
Trace("integers") << "branch-round-and-bound enabled" << std::endl;
Integer ceil = value.ceiling();
#include "expr/node.h"
#include "proof/proof_node_manager.h"
#include "proof/trust_node.h"
+#include "smt/env_obj.h"
#include "theory/arith/arith_state.h"
#include "theory/arith/inference_manager.h"
#include "theory/arith/pp_rewrite_eq.h"
* agnostic to the state of solver; instead is simply given (variable, value)
* pairs in branchIntegerVariable below and constructs the appropriate lemma.
*/
-class BranchAndBound
+class BranchAndBound : protected EnvObj
{
public:
- BranchAndBound(ArithState& s,
+ BranchAndBound(Env& env,
+ ArithState& s,
InferenceManager& im,
PreprocessRewriteEq& ppre,
ProofNodeManager* pnm);
namespace theory {
namespace arith {
-EqualitySolver::EqualitySolver(ArithState& astate, InferenceManager& aim)
- : d_astate(astate),
+EqualitySolver::EqualitySolver(Env& env,
+ ArithState& astate,
+ InferenceManager& aim)
+ : EnvObj(env),
+ d_astate(astate),
d_aim(aim),
d_notify(*this),
d_ee(nullptr),
- d_propLits(astate.getSatContext())
+ d_propLits(context())
{
}
#include "context/cdhashset.h"
#include "expr/node.h"
#include "proof/trust_node.h"
+#include "smt/env_obj.h"
#include "theory/arith/arith_state.h"
#include "theory/ee_setup_info.h"
#include "theory/uf/equality_engine.h"
* the literals that it propagates and only explains the literals that
* originated from this class.
*/
-class EqualitySolver
+class EqualitySolver : protected EnvObj
{
using NodeSet = context::CDHashSet<Node>;
public:
- EqualitySolver(ArithState& astate, InferenceManager& aim);
+ EqualitySolver(Env& env, ArithState& astate, InferenceManager& aim);
~EqualitySolver() {}
//--------------------------------- initialization
/**
ProofNodeManager* pnm)
: InferenceManagerBuffered(env, ta, astate, pnm, "theory::arith::"),
// currently must track propagated literals if using the equality solver
- d_trackPropLits(astate.options().arith.arithEqSolver),
+ d_trackPropLits(options().arith.arithEqSolver),
d_propLits(context())
{
}
bool InferenceManager::isEntailedFalse(const SimpleTheoryLemma& lem)
{
- if (d_theoryState.options().arith.nlExtEntailConflicts)
+ if (options().arith.nlExtEntailConflicts)
{
Node ch_lemma = lem.d_node.negate();
ch_lemma = Rewriter::rewrite(ch_lemma);
namespace arith {
namespace nl {
-IAndSolver::IAndSolver(InferenceManager& im, ArithState& state, NlModel& model)
- : d_im(im),
+IAndSolver::IAndSolver(Env& env,
+ InferenceManager& im,
+ ArithState& state,
+ NlModel& model)
+ : EnvObj(env),
+ d_im(im),
d_model(model),
d_astate(state),
- d_initRefine(state.getUserContext())
+ d_initRefine(userContext())
{
NodeManager* nm = NodeManager::currentNM();
d_false = nm->mkConst(false);
}
// ************* additional lemma schemas go here
- if (d_astate.options().smt.iandMode == options::IandMode::SUM)
+ if (options().smt.iandMode == options::IandMode::SUM)
{
Node lem = sumBasedLemma(i); // add lemmas based on sum mode
Trace("iand-lemma")
d_im.addPendingLemma(
lem, InferenceId::ARITH_NL_IAND_SUM_REFINE, nullptr, true);
}
- else if (d_astate.options().smt.iandMode == options::IandMode::BITWISE)
+ else if (options().smt.iandMode == options::IandMode::BITWISE)
{
Node lem = bitwiseLemma(i); // check for violated bitwise axioms
Trace("iand-lemma")
Node x = i[0];
Node y = i[1];
size_t bvsize = i.getOperator().getConst<IntAnd>().d_size;
- uint64_t granularity = d_astate.options().smt.BVAndIntegerGranularity;
+ uint64_t granularity = options().smt.BVAndIntegerGranularity;
NodeManager* nm = NodeManager::currentNM();
Node lem = nm->mkNode(
EQUAL, i, d_iandUtils.createSumNode(x, y, bvsize, granularity));
Node y = i[1];
unsigned bvsize = i.getOperator().getConst<IntAnd>().d_size;
- uint64_t granularity = d_astate.options().smt.BVAndIntegerGranularity;
+ uint64_t granularity = options().smt.BVAndIntegerGranularity;
Rational absI = d_model.computeAbstractModelValue(i).getConst<Rational>();
Rational concI = d_model.computeConcreteModelValue(i).getConst<Rational>();
#include "context/cdhashset.h"
#include "expr/node.h"
+#include "smt/env_obj.h"
#include "theory/arith/nl/iand_utils.h"
namespace cvc5 {
/** Integer and solver class
*
*/
-class IAndSolver
+class IAndSolver : protected EnvObj
{
typedef context::CDHashSet<Node> NodeSet;
public:
- IAndSolver(InferenceManager& im, ArithState& state, NlModel& model);
+ IAndSolver(Env& env, InferenceManager& im, ArithState& state, NlModel& model);
~IAndSolver();
/** init last call
d_tangentPlaneSlv(&d_extState),
d_cadSlv(d_astate.getEnv(), d_im, d_model),
d_icpSlv(d_im),
- d_iandSlv(d_im, state, d_model),
- d_pow2Slv(d_im, state, d_model)
+ d_iandSlv(env, d_im, state, d_model),
+ d_pow2Slv(env, d_im, state, d_model)
{
d_extTheory.addFunctionKind(kind::NONLINEAR_MULT);
d_extTheory.addFunctionKind(kind::EXPONENTIAL);
namespace arith {
namespace nl {
-Pow2Solver::Pow2Solver(InferenceManager& im, ArithState& state, NlModel& model)
- : d_im(im), d_model(model), d_initRefine(state.getUserContext())
+Pow2Solver::Pow2Solver(Env& env,
+ InferenceManager& im,
+ ArithState& state,
+ NlModel& model)
+ : EnvObj(env), d_im(im), d_model(model), d_initRefine(userContext())
{
NodeManager* nm = NodeManager::currentNM();
d_false = nm->mkConst(false);
#include "context/cdhashset.h"
#include "expr/node.h"
+#include "smt/env_obj.h"
namespace cvc5 {
namespace theory {
/** pow2 solver class
*
*/
-class Pow2Solver
+class Pow2Solver : protected EnvObj
{
using NodeSet = context::CDHashSet<Node>;
public:
- Pow2Solver(InferenceManager& im, ArithState& state, NlModel& model);
+ Pow2Solver(Env& env, InferenceManager& im, ArithState& state, NlModel& model);
~Pow2Solver();
/** init last call
d_astate(env, valuation),
d_im(env, *this, d_astate, d_pnm),
d_ppre(context(), d_pnm),
- d_bab(d_astate, d_im, d_ppre, d_pnm),
+ d_bab(env, d_astate, d_im, d_ppre, d_pnm),
d_eqSolver(nullptr),
d_internal(new TheoryArithPrivate(*this, env, d_bab)),
d_nonlinearExtension(nullptr),
d_opElim(d_pnm, logicInfo()),
- d_arithPreproc(d_astate, d_im, d_pnm, d_opElim),
+ d_arithPreproc(env, d_astate, d_im, d_pnm, d_opElim),
d_rewriter(d_opElim)
{
// currently a cyclic dependency to TheoryArithPrivate
if (options().arith.arithEqSolver)
{
- d_eqSolver.reset(new EqualitySolver(d_astate, d_im));
+ d_eqSolver.reset(new EqualitySolver(env, d_astate, d_im));
}
}
ProofNodeManager* pnm)
: TheoryInferenceManager(env, t, state, pnm, "theory::arrays::", false),
d_lemmaPg(pnm ? new EagerProofGenerator(
- pnm, state.getUserContext(), "ArrayLemmaProofGenerator")
+ pnm, userContext(), "ArrayLemmaProofGenerator")
: nullptr)
{
}
namespace theory {
namespace bags {
-TermRegistry::TermRegistry(SolverState& state, InferenceManager& im)
- : d_im(im),
- d_proxy(state.getUserContext()),
- d_proxy_to_term(state.getUserContext())
+TermRegistry::TermRegistry(Env& env, SolverState& state, InferenceManager& im)
+ : EnvObj(env),
+ d_im(im),
+ d_proxy(userContext()),
+ d_proxy_to_term(userContext())
{
}
#include "context/cdhashmap.h"
#include "expr/node.h"
+#include "smt/env_obj.h"
namespace cvc5 {
namespace theory {
* Term registry, the purpose of this class is to maintain a database of
* commonly used terms, and mappings from bags to their "proxy variables".
*/
-class TermRegistry
+class TermRegistry : protected EnvObj
{
typedef context::CDHashMap<Node, Node> NodeMap;
public:
- TermRegistry(SolverState& state, InferenceManager& im);
+ TermRegistry(Env& env, SolverState& state, InferenceManager& im);
/**
* Returns the existing empty bag for type tn
d_notify(*this, d_im),
d_statistics(),
d_rewriter(&d_statistics.d_rewrites),
- d_termReg(d_state, d_im),
+ d_termReg(env, d_state, d_im),
d_solver(d_state, d_im, d_termReg)
{
// use the official theory state and inference manager objects
ProofNodeManager* pnm)
: InferenceManagerBuffered(env, t, state, pnm, "theory::datatypes::"),
d_pnm(pnm),
- d_ipc(pnm == nullptr ? nullptr
- : new InferProofCons(state.getSatContext(), pnm)),
- d_lemPg(pnm == nullptr
- ? nullptr
- : new EagerProofGenerator(
- pnm, state.getUserContext(), "datatypes::lemPg"))
+ d_ipc(pnm == nullptr ? nullptr : new InferProofCons(context(), pnm)),
+ d_lemPg(pnm == nullptr ? nullptr
+ : new EagerProofGenerator(
+ pnm, userContext(), "datatypes::lemPg"))
{
d_false = NodeManager::currentNM()->mkConst(false);
}
its = d_sampler[a].find(tn);
}
// check equivalent
- its->second.checkEquivalent(bv, bvr, *d_state.options().base.out);
+ its->second.checkEquivalent(bv, bvr, *options().base.out);
}
}
namespace theory {
namespace quantifiers {
-InstantiationEngine::InstantiationEngine(QuantifiersState& qs,
+InstantiationEngine::InstantiationEngine(Env& env,
+ QuantifiersState& qs,
QuantifiersInferenceManager& qim,
QuantifiersRegistry& qr,
TermRegistry& tr)
{
if (options::relevantTriggers())
{
- d_quant_rel.reset(new quantifiers::QuantRelevance);
+ d_quant_rel.reset(new quantifiers::QuantRelevance(env));
}
if (options::eMatching()) {
// these are the instantiation strategies for E-matching
class InstantiationEngine : public QuantifiersModule {
public:
- InstantiationEngine(QuantifiersState& qs,
+ InstantiationEngine(Env& env,
+ QuantifiersState& qs,
QuantifiersInferenceManager& qim,
QuantifiersRegistry& qr,
TermRegistry& tr);
namespace theory {
namespace quantifiers {
-EqualityQuery::EqualityQuery(QuantifiersState& qs, FirstOrderModel* m)
- : d_qstate(qs),
+EqualityQuery::EqualityQuery(Env& env, QuantifiersState& qs, FirstOrderModel* m)
+ : QuantifiersUtil(env),
+ d_qstate(qs),
d_model(m),
d_eqi_counter(qs.getSatContext()),
d_reset_count(0)
class EqualityQuery : public QuantifiersUtil
{
public:
- EqualityQuery(QuantifiersState& qs, FirstOrderModel* m);
+ EqualityQuery(Env& env, QuantifiersState& qs, FirstOrderModel* m);
virtual ~EqualityQuery();
/** reset */
};
using ModelBasisArgAttribute = expr::Attribute<ModelBasisArgAttributeId, uint64_t>;
-FirstOrderModel::FirstOrderModel(QuantifiersState& qs,
+FirstOrderModel::FirstOrderModel(Env& env,
+ QuantifiersState& qs,
QuantifiersRegistry& qr,
TermRegistry& tr)
: d_model(nullptr),
d_qreg(qr),
d_treg(tr),
- d_eq_query(qs, this),
+ d_eq_query(env, qs, this),
d_forall_asserts(qs.getSatContext()),
d_forallRlvComputed(false)
{
class FirstOrderModel
{
public:
- FirstOrderModel(QuantifiersState& qs,
+ FirstOrderModel(Env& env,
+ QuantifiersState& qs,
QuantifiersRegistry& qr,
TermRegistry& tr);
virtual ~FirstOrderModel() {}
};
using IsStarAttribute = expr::Attribute<IsStarAttributeId, bool>;
-FirstOrderModelFmc::FirstOrderModelFmc(QuantifiersState& qs,
+FirstOrderModelFmc::FirstOrderModelFmc(Env& env,
+ QuantifiersState& qs,
QuantifiersRegistry& qr,
TermRegistry& tr)
- : FirstOrderModel(qs, qr, tr)
+ : FirstOrderModel(env, qs, qr, tr)
{
}
void processInitializeModelForTerm(Node n) override;
public:
- FirstOrderModelFmc(QuantifiersState& qs,
+ FirstOrderModelFmc(Env& env,
+ QuantifiersState& qs,
QuantifiersRegistry& qr,
TermRegistry& tr);
~FirstOrderModelFmc() override;
}
}
-FullModelChecker::FullModelChecker(QuantifiersState& qs,
+FullModelChecker::FullModelChecker(Env& env,
+ QuantifiersState& qs,
QuantifiersInferenceManager& qim,
QuantifiersRegistry& qr,
TermRegistry& tr)
- : QModelBuilder(qs, qim, qr, tr), d_fm(new FirstOrderModelFmc(qs, qr, tr))
+ : QModelBuilder(env, qs, qim, qr, tr),
+ d_fm(new FirstOrderModelFmc(env, qs, qr, tr))
{
d_true = NodeManager::currentNM()->mkConst(true);
d_false = NodeManager::currentNM()->mkConst(false);
Node getSomeDomainElement( FirstOrderModelFmc * fm, TypeNode tn );
public:
- FullModelChecker(QuantifiersState& qs,
+ FullModelChecker(Env& env,
+ QuantifiersState& qs,
QuantifiersInferenceManager& qim,
QuantifiersRegistry& qr,
TermRegistry& tr);
using namespace cvc5::theory;
using namespace cvc5::theory::quantifiers;
-QModelBuilder::QModelBuilder(QuantifiersState& qs,
+QModelBuilder::QModelBuilder(Env& env,
+ QuantifiersState& qs,
QuantifiersInferenceManager& qim,
QuantifiersRegistry& qr,
TermRegistry& tr)
- : TheoryEngineModelBuilder(qs.getEnv()),
+ : TheoryEngineModelBuilder(env),
d_addedLemmas(0),
d_triedLemmas(0),
d_qstate(qs),
void QModelBuilder::finishInit()
{
// allocate the default model
- d_modelAloc.reset(new FirstOrderModel(d_qstate, d_qreg, d_treg));
+ d_modelAloc.reset(new FirstOrderModel(d_env, d_qstate, d_qreg, d_treg));
d_model = d_modelAloc.get();
}
unsigned d_triedLemmas;
public:
- QModelBuilder(QuantifiersState& qs,
+ QModelBuilder(Env& env,
+ QuantifiersState& qs,
QuantifiersInferenceManager& qim,
QuantifiersRegistry& qr,
TermRegistry& tr);
namespace theory {
namespace quantifiers {
-HoTermDb::HoTermDb(QuantifiersState& qs, QuantifiersRegistry& qr)
- : TermDb(qs, qr)
+HoTermDb::HoTermDb(Env& env, QuantifiersState& qs, QuantifiersRegistry& qr)
+ : TermDb(env, qs, qr)
{
}
bool HoTermDb::finishResetInternal(Theory::Effort effort)
{
- if (!d_qstate.options().quantifiers.hoMergeTermDb)
+ if (!options().quantifiers.hoMergeTermDb)
{
return true;
}
class HoTermDb : public TermDb
{
public:
- HoTermDb(QuantifiersState& qs, QuantifiersRegistry& qr);
+ HoTermDb(Env& env, QuantifiersState& qs, QuantifiersRegistry& qr);
~HoTermDb();
/** identify */
std::string identify() const override { return "HoTermDb"; }
namespace theory {
namespace quantifiers {
-Instantiate::Instantiate(QuantifiersState& qs,
+Instantiate::Instantiate(Env& env,
+ QuantifiersState& qs,
QuantifiersInferenceManager& qim,
QuantifiersRegistry& qr,
TermRegistry& tr,
ProofNodeManager* pnm)
- : d_qstate(qs),
+ : QuantifiersUtil(env),
+ d_qstate(qs),
d_qim(qim),
d_qreg(qr),
d_treg(tr),
context::CDHashMap<Node, std::shared_ptr<InstLemmaList>>;
public:
- Instantiate(QuantifiersState& qs,
+ Instantiate(Env& env,
+ QuantifiersState& qs,
QuantifiersInferenceManager& qim,
QuantifiersRegistry& qr,
TermRegistry& tr,
namespace theory {
namespace quantifiers {
+QuantRelevance::QuantRelevance(Env& env) : QuantifiersUtil(env) {}
+
void QuantRelevance::registerQuantifier(Node f)
{
// compute symbols in f
* if this is false, then all calls to getRelevance
* return -1.
*/
- QuantRelevance() {}
+ QuantRelevance(Env& env);
~QuantRelevance() {}
/** reset */
bool reset(Theory::Effort e) override { return true; }
namespace cvc5 {
namespace theory {
+QuantifiersUtil::QuantifiersUtil(Env& env) : EnvObj(env) {}
+
QuantPhaseReq::QuantPhaseReq( Node n, bool computeEq ){
initialize( n, computeEq );
}
#include <vector>
#include "expr/node.h"
+#include "smt/env_obj.h"
#include "theory/incomplete_id.h"
#include "theory/theory.h"
* This is a lightweight version of a quantifiers module that does not implement
* methods for checking satisfiability.
*/
-class QuantifiersUtil {
-public:
- QuantifiersUtil(){}
+class QuantifiersUtil : protected EnvObj
+{
+ public:
+ QuantifiersUtil(Env& env);
virtual ~QuantifiersUtil(){}
/** Called at the beginning of check-sat call. */
virtual void presolve() {}
TermRegistry& tr,
ProofNodeManager* pnm)
: InferenceManagerBuffered(env, t, state, pnm, "theory::quantifiers::"),
- d_instantiate(new Instantiate(state, *this, qr, tr, pnm)),
+ d_instantiate(new Instantiate(env, state, *this, qr, tr, pnm)),
d_skolemize(new Skolemize(state, tr, pnm))
{
}
}
if (!options::finiteModelFind() || options::fmfInstEngine())
{
- d_inst_engine.reset(new InstantiationEngine(qs, qim, qr, tr));
+ d_inst_engine.reset(new InstantiationEngine(env, qs, qim, qr, tr));
modules.push_back(d_inst_engine.get());
}
if (options::cegqi())
// full saturation : instantiate from relevant domain, then arbitrary terms
if (options::fullSaturateQuant() || options::fullSaturateInterleave())
{
- d_rel_dom.reset(new RelevantDomain(qs, qr, tr));
+ d_rel_dom.reset(new RelevantDomain(env, qs, qr, tr));
d_fs.reset(new InstStrategyEnum(qs, qim, qr, tr, d_rel_dom.get()));
modules.push_back(d_fs.get());
}
namespace quantifiers {
QuantifiersRegistry::QuantifiersRegistry(Env& env)
- : d_quantAttr(),
+ : QuantifiersUtil(env),
+ d_quantAttr(),
d_quantBoundInf(options::fmfTypeCompletionThresh(),
options::finiteModelFind()),
d_quantPreproc(env)
}
}
-RelevantDomain::RelevantDomain(QuantifiersState& qs,
+RelevantDomain::RelevantDomain(Env& env,
+ QuantifiersState& qs,
QuantifiersRegistry& qr,
TermRegistry& tr)
- : d_qs(qs), d_qreg(qr), d_treg(tr)
+ : QuantifiersUtil(env), d_qs(qs), d_qreg(qr), d_treg(tr)
{
d_is_computed = false;
}
class RelevantDomain : public QuantifiersUtil
{
public:
- RelevantDomain(QuantifiersState& qs,
+ RelevantDomain(Env& env,
+ QuantifiersState& qs,
QuantifiersRegistry& qr,
TermRegistry& tr);
virtual ~RelevantDomain();
d_samplerRrV->initializeSygus(
d_tds, e, options::sygusSamples(), false);
// use the default output for the output of sygusRewVerify
- out = d_qstate.options().base.out;
+ out = options().base.out;
}
d_secd.reset(new SygusEnumeratorCallbackDefault(
e, &d_stats, d_eec.get(), d_samplerRrV.get(), out));
d_treg(tr),
d_stats(s),
d_tds(tr.getTermDatabaseSygus()),
- d_verify(qs.options(), qs.getLogicInfo(), d_tds),
+ d_verify(options(), qs.getLogicInfo(), d_tds),
d_hasSolution(false),
d_ceg_si(new CegSingleInv(env, tr, s)),
d_templInfer(new SygusTemplateInfer),
{
if (printDebug)
{
- const Options& sopts = d_qstate.options();
+ const Options& sopts = options();
std::ostream& out = *sopts.base.out;
out << "(sygus-candidate ";
Assert(d_quant[0].getNumChildren() == candidate_values.size());
Assert(d_master != nullptr);
// we have generated a solution, print it
// get the current output stream
- const Options& sopts = d_qstate.options();
- printSynthSolutionInternal(*sopts.base.out);
+ printSynthSolutionInternal(*options().base.out);
excludeCurrentSolution(enums, values);
}
namespace theory {
namespace quantifiers {
-TermDb::TermDb(QuantifiersState& qs, QuantifiersRegistry& qr)
- : d_qstate(qs),
+TermDb::TermDb(Env& env, QuantifiersState& qs, QuantifiersRegistry& qr)
+ : QuantifiersUtil(env),
+ d_qstate(qs),
d_qim(nullptr),
d_qreg(qr),
d_termsContext(),
using NodeDbListMap = context::CDHashMap<Node, std::shared_ptr<DbList>>;
public:
- TermDb(QuantifiersState& qs,
- QuantifiersRegistry& qr);
+ TermDb(Env& env, QuantifiersState& qs, QuantifiersRegistry& qr);
virtual ~TermDb();
/** Finish init, which sets the inference manager */
void finishInit(QuantifiersInferenceManager* qim);
d_skolemAddToPool.clear();
}
-TermPools::TermPools(QuantifiersState& qs) : d_qs(qs) {}
+TermPools::TermPools(Env& env, QuantifiersState& qs)
+ : QuantifiersUtil(env), d_qs(qs)
+{
+}
bool TermPools::reset(Theory::Effort e)
{
class TermPools : public QuantifiersUtil
{
public:
- TermPools(QuantifiersState& qs);
+ TermPools(Env& env, QuantifiersState& qs);
~TermPools() {}
/** reset, which resets the current values of pools */
bool reset(Theory::Effort e) override;
: d_presolve(qs.getUserContext(), true),
d_presolveCache(qs.getUserContext()),
d_termEnum(new TermEnumeration),
- d_termPools(new TermPools(qs)),
- d_termDb(qs.getEnv().getLogicInfo().isHigherOrder() ? new HoTermDb(qs, qr)
- : new TermDb(qs, qr)),
+ d_termPools(new TermPools(env, qs)),
+ d_termDb(qs.getEnv().getLogicInfo().isHigherOrder()
+ ? new HoTermDb(env, qs, qr)
+ : new TermDb(env, qs, qr)),
d_sygusTdb(nullptr),
d_qmodel(nullptr)
{
{
Trace("quant-init-debug") << "...make fmc builder." << std::endl;
d_builder.reset(
- new quantifiers::fmcheck::FullModelChecker(qs, qim, qr, tr));
+ new quantifiers::fmcheck::FullModelChecker(env, qs, qim, qr, tr));
}
else
{
Trace("quant-init-debug") << "...make default model builder." << std::endl;
- d_builder.reset(new quantifiers::QModelBuilder(qs, qim, qr, tr));
+ d_builder.reset(new quantifiers::QModelBuilder(env, qs, qim, qr, tr));
}
// set the model object
d_builder->finishInit();
d_model->finishInit(te->getModel());
d_te = te;
// Initialize the modules and the utilities here.
- d_qmodules.reset(new quantifiers::QuantifiersModules);
+ d_qmodules.reset(new quantifiers::QuantifiersModules());
d_qmodules->initialize(
d_env, d_qstate, d_qim, d_qreg, d_treg, d_builder.get(), d_modules);
if (d_qmodules->d_rel_dom.get())
context::UserContext* getUserContext() const;
/** Get the environment */
Env& getEnv() const { return d_env; }
- /** Get the options */
- const Options& options() const { return getEnv().getOptions(); }
//-------------------------------------- equality information
/** Is t registered as a term in the equality engine of this class? */
virtual bool hasTerm(TNode a) const;