diff options
author | Dejan Jovanović <dejan.jovanovic@gmail.com> | 2011-12-12 09:47:37 +0000 |
---|---|---|
committer | Dejan Jovanović <dejan.jovanovic@gmail.com> | 2011-12-12 09:47:37 +0000 |
commit | 6d04f19e1c1fbf7714fbb95dc62648ac44b419dd (patch) | |
tree | 7f5486f7b4a88323708f693b5905afb6375d8ca3 /src/theory/uf/theory_uf.cpp | |
parent | 933a1ea506fd553e756be942087ef82154b6f959 (diff) |
* merging some uf stuff from incremental_work branch that somehow nobody merged-in
* since two theories can propagate the same literal minisat now explicitly checks that a propagated literal has not been asserted yet
Diffstat (limited to 'src/theory/uf/theory_uf.cpp')
-rw-r--r-- | src/theory/uf/theory_uf.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/src/theory/uf/theory_uf.cpp b/src/theory/uf/theory_uf.cpp index 58fa44358..e2462f244 100644 --- a/src/theory/uf/theory_uf.cpp +++ b/src/theory/uf/theory_uf.cpp @@ -236,9 +236,16 @@ void TheoryUF::explain(TNode literal, std::vector<TNode>& assumptions) { rhs = d_true; break; case kind::NOT: - lhs = literal[0]; - rhs = d_false; - break; + if (literal[0].getKind() == kind::EQUAL) { + // Disequalities + d_equalityEngine.explainDisequality(literal[0][0], literal[0][1], assumptions); + return; + } else { + // Predicates + lhs = literal[0]; + rhs = d_false; + break; + } case kind::CONST_BOOLEAN: // we get to explain true = false, since we set false to be the trigger of this lhs = d_true; @@ -247,8 +254,8 @@ void TheoryUF::explain(TNode literal, std::vector<TNode>& assumptions) { default: Unreachable(); } - d_equalityEngine.getExplanation(lhs, rhs, assumptions); -}/* TheoryUF::explain() */ + d_equalityEngine.explainEquality(lhs, rhs, assumptions); +} Node TheoryUF::explain(TNode literal) { Debug("uf") << "TheoryUF::explain(" << literal << ")" << std::endl; |