summaryrefslogtreecommitdiff
path: root/src/prop
diff options
context:
space:
mode:
authorAndrew Reynolds <andrew.j.reynolds@gmail.com>2020-03-05 15:12:57 -0600
committerGitHub <noreply@github.com>2020-03-05 15:12:57 -0600
commitbbba915f44f9e75eaa6238a10ba667643dacb00b (patch)
tree981c352e9aae8c96539374e98065101ee3835b28 /src/prop
parentd26ee67911fedfef966a0e4d64ffda02007d65a0 (diff)
Move ownership of DecisionEngine into PropEngine. (#3850)
This is in preparation of fixing the issue we currently have with reset-assertions. This also removes a competition hack for QF_LRA.
Diffstat (limited to 'src/prop')
-rw-r--r--src/prop/prop_engine.cpp16
-rw-r--r--src/prop/prop_engine.h12
2 files changed, 21 insertions, 7 deletions
diff --git a/src/prop/prop_engine.cpp b/src/prop/prop_engine.cpp
index 05704c0fa..546567b98 100644
--- a/src/prop/prop_engine.cpp
+++ b/src/prop/prop_engine.cpp
@@ -75,14 +75,12 @@ public:
};
PropEngine::PropEngine(TheoryEngine* te,
- DecisionEngine* de,
Context* satContext,
- Context* userContext,
+ UserContext* userContext,
std::ostream* replayLog,
ExprStream* replayStream)
: d_inCheckSat(false),
d_theoryEngine(te),
- d_decisionEngine(de),
d_context(satContext),
d_theoryProxy(NULL),
d_satSolver(NULL),
@@ -94,6 +92,9 @@ PropEngine::PropEngine(TheoryEngine* te,
Debug("prop") << "Constructing the PropEngine" << endl;
+ d_decisionEngine.reset(new DecisionEngine(satContext, userContext));
+ d_decisionEngine->init(); // enable appropriate strategies
+
d_satSolver = SatSolverFactory::createDPLLMinisat(smtStatisticsRegistry());
d_registrar = new theory::TheoryRegistrar(d_theoryEngine);
@@ -102,7 +103,7 @@ PropEngine::PropEngine(TheoryEngine* te,
d_theoryProxy = new TheoryProxy(this,
d_theoryEngine,
- d_decisionEngine,
+ d_decisionEngine.get(),
d_context,
d_cnfStream,
replayLog,
@@ -118,6 +119,7 @@ PropEngine::PropEngine(TheoryEngine* te,
PropEngine::~PropEngine() {
Debug("prop") << "Destructing the PropEngine" << endl;
+ d_decisionEngine->shutdown();
delete d_cnfStream;
delete d_registrar;
delete d_satSolver;
@@ -142,6 +144,12 @@ void PropEngine::assertLemma(TNode node, bool negated,
d_cnfStream->convertAndAssert(node, removable, negated, rule, from);
}
+void PropEngine::addAssertionsToDecisionEngine(
+ const preprocessing::AssertionPipeline& assertions)
+{
+ d_decisionEngine->addAssertions(assertions);
+}
+
void PropEngine::requirePhase(TNode n, bool phase) {
Debug("prop") << "requirePhase(" << n << ", " << phase << ")" << endl;
diff --git a/src/prop/prop_engine.h b/src/prop/prop_engine.h
index 061fbbca6..707244ff5 100644
--- a/src/prop/prop_engine.h
+++ b/src/prop/prop_engine.h
@@ -27,6 +27,7 @@
#include "expr/expr_stream.h"
#include "expr/node.h"
#include "options/options.h"
+#include "preprocessing/assertion_pipeline.h"
#include "proof/proof_manager.h"
#include "util/resource_manager.h"
#include "util/result.h"
@@ -60,9 +61,8 @@ class PropEngine
* Create a PropEngine with a particular decision and theory engine.
*/
PropEngine(TheoryEngine*,
- DecisionEngine*,
context::Context* satContext,
- context::Context* userContext,
+ context::UserContext* userContext,
std::ostream* replayLog,
ExprStream* replayStream);
@@ -105,6 +105,12 @@ class PropEngine
TNode from = TNode::null());
/**
+ * Pass a list of assertions from an AssertionPipeline to the decision engine.
+ */
+ void addAssertionsToDecisionEngine(
+ const preprocessing::AssertionPipeline& assertions);
+
+ /**
* If ever n is decided upon, it must be in the given phase. This
* occurs *globally*, i.e., even if the literal is untranslated by
* user pop and retranslated, it keeps this phase. The associated
@@ -223,7 +229,7 @@ class PropEngine
TheoryEngine* d_theoryEngine;
/** The decision engine we will be using */
- DecisionEngine* d_decisionEngine;
+ std::unique_ptr<DecisionEngine> d_decisionEngine;
/** The context */
context::Context* d_context;
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback