diff options
author | Haniel Barbosa <hanielbbarbosa@gmail.com> | 2021-04-14 10:31:35 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-14 13:31:35 +0000 |
commit | d1eee40cc8788d38ec7431ea8d7429a5573a101c (patch) | |
tree | f3e994a1b58ce6a3686e73bc9b8e52c2da58175d /src/expr/buffered_proof_generator.cpp | |
parent | 340380462989ff06d08567147bb16d0df9ddb1bc (diff) |
[proof-new] Fix explanation of literals in SAT proof manager (#6346)
Prevents exponential behavior in SAT proof generation by not reexplaining previously explained literals. Also fix a potential issue in not previously overwriting rederived resolution chains during solving.
Diffstat (limited to 'src/expr/buffered_proof_generator.cpp')
-rw-r--r-- | src/expr/buffered_proof_generator.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/expr/buffered_proof_generator.cpp b/src/expr/buffered_proof_generator.cpp index b37295c52..2cbbd7e91 100644 --- a/src/expr/buffered_proof_generator.cpp +++ b/src/expr/buffered_proof_generator.cpp @@ -81,4 +81,23 @@ std::shared_ptr<ProofNode> BufferedProofGenerator::getProofFor(Node fact) return cdp.getProofFor(fact); } +bool BufferedProofGenerator::hasProofFor(Node f) +{ + NodeProofStepMap::iterator it = d_facts.find(f); + if (it == d_facts.end()) + { + Node symFact = CDProof::getSymmFact(f); + if (symFact.isNull()) + { + return false; + } + it = d_facts.find(symFact); + if (it == d_facts.end()) + { + return false; + } + } + return true; +} + } // namespace cvc5 |