diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2020-11-19 11:44:35 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-11-19 11:44:35 -0600 |
commit | 3654512dd8b341c5725e550d438b23508493b991 (patch) | |
tree | 367684e5521e35a452ef669a4e58bb1b5005509c /src/theory/arith | |
parent | b0130a1e032c201fab3c4b19f25871428b761967 (diff) |
Fix issues related to eliminating extended arithmetic operators (#5475)
This fixes 2 issues related to eliminating arithmetic operators:
(1) counterexample lemmas in CEGQI were not being preprocessed
(2) ensureLiteral was not doing term formula removal.
This corrects these two issues. Now ensureLiteral does full theory preprocessing on the term we are ensuring literal for, meaning this may trigger lemmas if the term contains extended arithmetic operators like div.
Fixes #5469, fixes #5470, fixes #5471.
This adds --sygus-inst to 2 of these benchmarks which moreover makes them solvable.
This also improves our assertions and trace messages.
Diffstat (limited to 'src/theory/arith')
-rw-r--r-- | src/theory/arith/theory_arith.cpp | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/theory/arith/theory_arith.cpp b/src/theory/arith/theory_arith.cpp index c77e64221..b5c0d1bd0 100644 --- a/src/theory/arith/theory_arith.cpp +++ b/src/theory/arith/theory_arith.cpp @@ -154,10 +154,15 @@ void TheoryArith::ppStaticLearn(TNode n, NodeBuilder<>& learned) { d_internal->ppStaticLearn(n, learned); } -bool TheoryArith::preCheck(Effort level) { return d_internal->preCheck(level); } +bool TheoryArith::preCheck(Effort level) +{ + Trace("arith-check") << "TheoryArith::preCheck " << level << std::endl; + return d_internal->preCheck(level); +} void TheoryArith::postCheck(Effort level) { + Trace("arith-check") << "TheoryArith::postCheck " << level << std::endl; // check with the non-linear solver at last call if (level == Theory::EFFORT_LAST_CALL) { @@ -191,6 +196,9 @@ void TheoryArith::postCheck(Effort level) bool TheoryArith::preNotifyFact( TNode atom, bool pol, TNode fact, bool isPrereg, bool isInternal) { + Trace("arith-check") << "TheoryArith::preNotifyFact: " << fact + << ", isPrereg=" << isPrereg + << ", isInternal=" << isInternal << std::endl; d_internal->preNotifyFact(atom, pol, fact); // We do not assert to the equality engine of arithmetic in the standard way, // hence we return "true" to indicate we are finished with this fact. |