summaryrefslogtreecommitdiff
path: root/src/theory/theory_engine.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/theory/theory_engine.h')
-rw-r--r--src/theory/theory_engine.h37
1 files changed, 22 insertions, 15 deletions
diff --git a/src/theory/theory_engine.h b/src/theory/theory_engine.h
index e571c2bbd..2dd3db863 100644
--- a/src/theory/theory_engine.h
+++ b/src/theory/theory_engine.h
@@ -200,19 +200,17 @@ class TheoryEngine {
}
public:
+ /** The logic of the problem */
+ std::string d_logic;
- /**
- * Construct a theory engine.
- */
+ /** Constructs a theory engine */
TheoryEngine(context::Context* ctxt);
- /**
- * Destroy a theory engine.
- */
+ /** Destroys a theory engine */
~TheoryEngine();
/**
- * Adds a theory. Only one theory per theoryId can be present, so if
+ * Adds a theory. Only one theory per TheoryId can be present, so if
* there is another theory it will be deleted.
*/
template <class TheoryClass>
@@ -306,7 +304,7 @@ public:
* @param node the assertion
*/
inline void assertFact(TNode node) {
- Debug("theory") << "TheoryEngine::assertFact(" << node << ")" << std::endl;
+ Debug("theory") << "TheoryEngine::assertFact(" << node << ")" << std::endl<<d_logic<<std::endl;
// Mark it as asserted in this context
//
@@ -319,9 +317,13 @@ public:
// Again, equality is a special case
if (atom.getKind() == kind::EQUAL) {
- theory::TheoryId theoryLHS = theory::Theory::theoryOf(atom[0]);
- Debug("theory") << "asserting " << node << " to " << theoryLHS << std::endl;
- d_theoryTable[theoryLHS]->assertFact(node);
+ if(d_logic == "QF_AX") {
+ //Debug("theory")<< "TheoryEngine::assertFact QF_AX logic; everything goes to Arrays \n";
+ d_theoryTable[theory::THEORY_ARRAY]->assertFact(node);
+ } else {
+ theory::TheoryId theoryLHS = theory::Theory::theoryOf(atom[0]);
+ Debug("theory") << "asserting " << node << " to " << theoryLHS << std::endl;
+ d_theoryTable[theoryLHS]->assertFact(node);
// theory::TheoryId theoryRHS = theory::Theory::theoryOf(atom[1]);
// if (theoryLHS != theoryRHS) {
// Debug("theory") << "asserting " << node << " to " << theoryRHS << std::endl;
@@ -332,6 +334,7 @@ public:
// Debug("theory") << "asserting " << node << " to " << typeTheory << std::endl;
// d_theoryTable[typeTheory]->assertFact(node);
// }
+ }
} else {
theory::Theory* theory = theoryOf(atom);
Debug("theory") << "asserting " << node << " to " << theory->getId() << std::endl;
@@ -398,7 +401,12 @@ public:
d_theoryOut.d_explanationNode = Node::null();
TNode atom = node.getKind() == kind::NOT ? node[0] : node;
if (atom.getKind() == kind::EQUAL) {
- theoryOf(atom[0])->explain(node);
+ if(d_logic == "QF_AX") {
+ //Debug("theory")<< "TheoryEngine::assertFact QF_AX logic; everything goes to Arrays \n";
+ d_theoryTable[theory::THEORY_ARRAY]->explain(node);
+ } else {
+ theoryOf(atom[0])->explain(node);
+ }
} else {
theoryOf(atom)->explain(node);
}
@@ -417,8 +425,7 @@ private:
d_statPropagate("theory::propagate", 0),
d_statLemma("theory::lemma", 0),
d_statAugLemma("theory::aug_lemma", 0),
- d_statExplanation("theory::explanation", 0)
- {
+ d_statExplanation("theory::explanation", 0) {
StatisticsRegistry::registerStat(&d_statConflicts);
StatisticsRegistry::registerStat(&d_statPropagate);
StatisticsRegistry::registerStat(&d_statLemma);
@@ -433,7 +440,7 @@ private:
StatisticsRegistry::unregisterStat(&d_statAugLemma);
StatisticsRegistry::unregisterStat(&d_statExplanation);
}
- };
+ };/* class TheoryEngine::Statistics */
Statistics d_statistics;
};/* class TheoryEngine */
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback