diff options
Diffstat (limited to 'src/expr')
-rw-r--r-- | src/expr/lazy_proof.cpp | 27 | ||||
-rw-r--r-- | src/expr/proof_node_manager.cpp | 3 |
2 files changed, 22 insertions, 8 deletions
diff --git a/src/expr/lazy_proof.cpp b/src/expr/lazy_proof.cpp index d66a8984b..a96e30fde 100644 --- a/src/expr/lazy_proof.cpp +++ b/src/expr/lazy_proof.cpp @@ -83,16 +83,27 @@ std::shared_ptr<ProofNode> LazyCDProof::getProofFor(Node fact) // the current proof. Instead, it is only linked, and ignored on // future calls to getProofFor due to the check above. std::shared_ptr<ProofNode> pgc = pg->getProofFor(cfactGen); - if (isSym) + // If the proof was null, then the update is not performed. This is + // not considered an error, since this behavior is equivalent to + // if pg had provided the proof (ASSUME cfactGen). Ensuring the + // proper behavior wrt closed proofs should be done outside this + // method. + if (pgc != nullptr) { - d_manager->updateNode(cur, PfRule::SYMM, {pgc}, {}); - } - else - { - d_manager->updateNode(cur, pgc.get()); + Trace("lazy-cdproof-gen") + << "LazyCDProof: stored proof: " << *pgc.get() << std::endl; + + if (isSym) + { + d_manager->updateNode(cur, PfRule::SYMM, {pgc}, {}); + } + else + { + d_manager->updateNode(cur, pgc.get()); + } + Trace("lazy-cdproof") << "LazyCDProof: Successfully added fact for " + << cfactGen << std::endl; } - Trace("lazy-cdproof") << "LazyCDProof: Successfully added fact for " - << cfactGen << std::endl; } else { diff --git a/src/expr/proof_node_manager.cpp b/src/expr/proof_node_manager.cpp index 9f60a49e4..8ed9779d3 100644 --- a/src/expr/proof_node_manager.cpp +++ b/src/expr/proof_node_manager.cpp @@ -254,6 +254,8 @@ bool ProofNodeManager::updateNode( bool ProofNodeManager::updateNode(ProofNode* pn, ProofNode* pnr) { + Assert(pn != nullptr); + Assert(pnr != nullptr); if (pn->getResult() != pnr->getResult()) { return false; @@ -296,6 +298,7 @@ bool ProofNodeManager::updateNodeInternal( const std::vector<Node>& args, bool needsCheck) { + Assert(pn != nullptr); // ---------------- check for cyclic std::unordered_map<const ProofNode*, bool> visited; std::unordered_map<const ProofNode*, bool>::iterator it; |