summaryrefslogtreecommitdiff
path: root/src/proof/er
diff options
context:
space:
mode:
authorAlex Ozdemir <aozdemir@hmc.edu>2019-03-15 18:51:47 -0700
committerAndres Noetzli <andres.noetzli@gmail.com>2019-03-16 01:51:47 +0000
commit5d0a5a729680a1db3f44e31037955390e86440ce (patch)
treed2f85ff47f75935439a14f514a5133d1dd6d5cad /src/proof/er
parent2989780f0242d14712927bd4c01c4a521a8fe399 (diff)
Enable CryptoMiniSat-backed BV proofs (#2847)
* Connect the plumbing so that BV proofs are enabled when using CryptoMiniSat * Also fixed a bug in CNF-proof generation * Specifically, CNF proofs broke when proving tautological clauses. Now they don't.
Diffstat (limited to 'src/proof/er')
-rw-r--r--src/proof/er/er_proof.cpp26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/proof/er/er_proof.cpp b/src/proof/er/er_proof.cpp
index 452b64b11..22903c3c9 100644
--- a/src/proof/er/er_proof.cpp
+++ b/src/proof/er/er_proof.cpp
@@ -102,12 +102,12 @@ ErProof ErProof::fromBinaryDratProof(const ClauseUseRecord& usedClauses,
// Write the formula
std::ofstream formStream(formulaFilename);
printDimacs(formStream, usedClauses);
- unlink(formulaFilename);
+ formStream.close();
// Write the (binary) DRAT proof
std::ofstream dratStream(dratFilename);
dratStream << dratBinary;
- unlink(dratFilename);
+ dratStream.close();
// Invoke drat2er
#if CVC4_USE_DRAT2ER
@@ -115,7 +115,8 @@ ErProof ErProof::fromBinaryDratProof(const ClauseUseRecord& usedClauses,
dratFilename,
tracecheckFilename,
false,
- drat2er::options::QUIET);
+ drat2er::options::QUIET,
+ false);
#else
Unimplemented(
@@ -126,13 +127,11 @@ ErProof ErProof::fromBinaryDratProof(const ClauseUseRecord& usedClauses,
// Parse the resulting TRACECHECK proof into an ER proof.
std::ifstream tracecheckStream(tracecheckFilename);
ErProof proof(usedClauses, TraceCheckProof::fromText(tracecheckStream));
- unlink(tracecheckFilename);
-
- formStream.close();
- dratStream.close();
tracecheckStream.close();
-
+ remove(formulaFilename);
+ remove(dratFilename);
+ remove(tracecheckFilename);
return proof;
}
@@ -156,6 +155,15 @@ ErProof::ErProof(const ClauseUseRecord& usedClauses,
{
Assert(d_tracecheck.d_lines[i].d_idx = i + 1);
Assert(d_tracecheck.d_lines[i].d_chain.size() == 0);
+ std::unordered_set<prop::SatLiteral, prop::SatLiteralHashFunction>
+ traceCheckClause{d_tracecheck.d_lines[i].d_clause.begin(),
+ d_tracecheck.d_lines[i].d_clause.end()};
+ std::unordered_set<prop::SatLiteral, prop::SatLiteralHashFunction>
+ originalClause{usedClauses[i].second.begin(),
+ usedClauses[i].second.end()};
+ Assert(traceCheckClause == originalClause);
+ Assert(d_tracecheck.d_lines[i].d_idx = i + 1);
+ Assert(d_tracecheck.d_lines[i].d_chain.size() == 0);
Assert(d_tracecheck.d_lines[i].d_clause.size()
== usedClauses[i].second.size());
for (size_t j = 0, m = usedClauses[i].second.size(); j < m; ++j)
@@ -185,7 +193,7 @@ ErProof::ErProof(const ClauseUseRecord& usedClauses,
// Look at the negation of the second literal in the second clause to get
// the old literal
AlwaysAssert(d_tracecheck.d_lines.size() > i + 1,
- "Malformed definition in TRACECHECK proof from drat2er");
+ "Malformed definition in TRACECHECK proof from drat2er");
d_definitions.emplace_back(newVar,
~d_tracecheck.d_lines[i + 1].d_clause[1],
std::move(otherLiterals));
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback