diff options
author | Andrew Reynolds <andrew.j.reynolds@gmail.com> | 2019-11-18 19:08:08 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-18 19:08:08 -0600 |
commit | af1279b8c5cbe5ebe78300d9d0cae4fda4500446 (patch) | |
tree | 3eabd78b5163075e5b4dcd00d0370a8a8f339bca | |
parent | 752a3bcf3aabb1d85101186c3f185289cde534b8 (diff) | |
parent | 7ac4aac015e69a6f377c5254c600bea386d58577 (diff) |
Merge branch 'master' into fix3475fix3475
-rw-r--r-- | proofs/signatures/drat.plf | 14 | ||||
-rw-r--r-- | src/proof/proof_manager.cpp | 8 |
2 files changed, 16 insertions, 6 deletions
diff --git a/proofs/signatures/drat.plf b/proofs/signatures/drat.plf index 9f1ec00a9..2f70bbfbd 100644 --- a/proofs/signatures/drat.plf +++ b/proofs/signatures/drat.plf @@ -11,7 +11,8 @@ ; Both are detailed in this paper, along with their differences: ; http://fmv.jku.at/papers/RebolaPardoBiere-POS18.pdf ; -; This signature checks **Specified DRAT**. +; This signature contains implementations for a checker for each. +; **Specified DRAT** is first. ; A DRAT proof itself: a list of addition or deletion instructions. (declare DRATProof type) @@ -23,7 +24,8 @@ ; Functional Programs ; ; ==================== ; -; Are two clauses equal (in the set sense) +; Are two clauses equal (i.e., if interpretted as sets of literals, are those +; sets equal?) ; ; Assumes that marks 1,2,3,4 are clear for the constituent variables, and ; leaves them clear afterwards. @@ -44,9 +46,11 @@ ; the mark 2 means (seen as - in c1, but not yet in c2) ; the mark 4 means (seen as - in c1) ; -; This implementation is robust to literal order, repeated literals, and -; literals of opposite polarity in the same clause. It is true equality on sets -; literals. +; This implementation **does not**: +; 1. assume that clauses do not have duplicates +; (so the clause [x v x v ~y] is an accceptable input) +; 2. assume that clauses are non-tautological +; (so the clause [x v ~x] is an acceptable input) ; ; TODO(aozdemir) This implementation could be further optimized b/c once c1 is ; drained, we need not continue to pattern match on it. diff --git a/src/proof/proof_manager.cpp b/src/proof/proof_manager.cpp index fa4c1ecb5..bbf5b0064 100644 --- a/src/proof/proof_manager.cpp +++ b/src/proof/proof_manager.cpp @@ -579,9 +579,13 @@ void LFSCProof::toStream(std::ostream& out) const CodeTimer skeletonProofTimer{ ProofManager::currentPM()->getStats().d_skeletonProofTraceTime}; Assert(!d_satProof->proofConstructed()); + + // Here we give our SAT solver a chance to flesh out the resolution proof. + // It proves bottom from a set of clauses. d_satProof->constructProof(); - // collecting leaf clauses in resolution proof + // We ask the SAT solver which clauses are used in that proof. + // For a resolution proof, these are the leaves of the tree. d_satProof->collectClausesUsed(used_inputs, used_lemmas); IdToSatClause::iterator it2; @@ -672,6 +676,8 @@ void LFSCProof::toStream(std::ostream& out) const } } + // From the clauses, compute the atoms (atomic theory predicates in + // assertions and lemmas). d_cnfProof->collectAtomsForClauses(used_inputs, atoms); d_cnfProof->collectAtomsForClauses(used_lemmas, atoms); |