diff options
author | Dejan Jovanović <dejan.jovanovic@gmail.com> | 2010-11-12 04:39:54 +0000 |
---|---|---|
committer | Dejan Jovanović <dejan.jovanovic@gmail.com> | 2010-11-12 04:39:54 +0000 |
commit | 0eb2a0362fee06023f0668e94bb566b69f4a7cda (patch) | |
tree | 03910431f2185e2a668da5a3e5d9e61220c67fdc /src/theory/arith | |
parent | 9f935c74842084fad55e2c0efaf963791c0ebba9 (diff) |
Some bug fixes in the SAT for lemmas, and an experiment with a more complete (wr propagation) splitter in arithmetic.
Diffstat (limited to 'src/theory/arith')
-rw-r--r-- | src/theory/arith/theory_arith.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/theory/arith/theory_arith.cpp b/src/theory/arith/theory_arith.cpp index 7b768d9af..7cedbcd20 100644 --- a/src/theory/arith/theory_arith.cpp +++ b/src/theory/arith/theory_arith.cpp @@ -416,7 +416,17 @@ void TheoryArith::check(Effort effortLevel){ Node ltNode = NodeBuilder<2>(kind::LT) << lhs << rhs; Node gtNode = NodeBuilder<2>(kind::GT) << lhs << rhs; Node lemma = NodeBuilder<3>(OR) << eq << ltNode << gtNode; - d_out->lemma(lemma); + + // < => !> + Node imp1 = NodeBuilder<2>(kind::IMPLIES) << ltNode << gtNode.notNode(); + // < => != + Node imp2 = NodeBuilder<2>(kind::IMPLIES) << ltNode << eq.notNode(); + // > => != + Node imp3 = NodeBuilder<2>(kind::IMPLIES) << gtNode << eq.notNode(); + // All the implication + Node impClosure = NodeBuilder<3>(kind::AND) << imp1 << imp2 << imp3; + + d_out->lemma(lemma.andNode(impClosure)); } } } |