diff options
Diffstat (limited to 'src/prop/proof_cnf_stream.cpp')
-rw-r--r-- | src/prop/proof_cnf_stream.cpp | 47 |
1 files changed, 37 insertions, 10 deletions
diff --git a/src/prop/proof_cnf_stream.cpp b/src/prop/proof_cnf_stream.cpp index b5542ab35..8aaa68b9a 100644 --- a/src/prop/proof_cnf_stream.cpp +++ b/src/prop/proof_cnf_stream.cpp @@ -20,8 +20,6 @@ #include "theory/builtin/proof_checker.h" #include "util/rational.h" -using namespace cvc5::kind; - namespace cvc5 { namespace prop { @@ -58,7 +56,7 @@ bool ProofCnfStream::hasProofFor(Node f) std::string ProofCnfStream::identify() const { return "ProofCnfStream"; } -void ProofCnfStream::normalizeAndRegister(TNode clauseNode) +Node ProofCnfStream::normalizeAndRegister(TNode clauseNode) { Node normClauseNode = d_psb.factorReorderElimDoubleNeg(clauseNode); if (Trace.isOn("cnf") && normClauseNode != clauseNode) @@ -69,6 +67,7 @@ void ProofCnfStream::normalizeAndRegister(TNode clauseNode) << pop; } d_satPM->registerSatAssumptions({normClauseNode}); + return normClauseNode; } void ProofCnfStream::convertAndAssert(TNode node, @@ -104,7 +103,8 @@ void ProofCnfStream::convertAndAssert(TNode node, void ProofCnfStream::convertAndAssert(TNode node, bool negated) { Trace("cnf") << "ProofCnfStream::convertAndAssert(" << node - << ", negated = " << (negated ? "true" : "false") << ")\n"; + << ", negated = " << (negated ? "true" : "false") << ")\n" + << push; switch (node.getKind()) { case kind::AND: convertAndAssertAnd(node, negated); break; @@ -159,12 +159,14 @@ void ProofCnfStream::convertAndAssert(TNode node, bool negated) } } } + Trace("cnf") << pop; } void ProofCnfStream::convertAndAssertAnd(TNode node, bool negated) { Trace("cnf") << "ProofCnfStream::convertAndAssertAnd(" << node - << ", negated = " << (negated ? "true" : "false") << ")\n"; + << ", negated = " << (negated ? "true" : "false") << ")\n" + << push; Assert(node.getKind() == kind::AND); if (!negated) { @@ -205,12 +207,14 @@ void ProofCnfStream::convertAndAssertAnd(TNode node, bool negated) normalizeAndRegister(clauseNode); } } + Trace("cnf") << pop; } void ProofCnfStream::convertAndAssertOr(TNode node, bool negated) { Trace("cnf") << "ProofCnfStream::convertAndAssertOr(" << node - << ", negated = " << (negated ? "true" : "false") << ")\n"; + << ", negated = " << (negated ? "true" : "false") << ")\n" + << push; Assert(node.getKind() == kind::OR); if (!negated) { @@ -240,12 +244,14 @@ void ProofCnfStream::convertAndAssertOr(TNode node, bool negated) convertAndAssert(node[i], true); } } + Trace("cnf") << pop; } void ProofCnfStream::convertAndAssertXor(TNode node, bool negated) { Trace("cnf") << "ProofCnfStream::convertAndAssertXor(" << node - << ", negated = " << (negated ? "true" : "false") << ")\n"; + << ", negated = " << (negated ? "true" : "false") << ")\n" + << push; if (!negated) { // p XOR q @@ -317,12 +323,14 @@ void ProofCnfStream::convertAndAssertXor(TNode node, bool negated) normalizeAndRegister(clauseNode); } } + Trace("cnf") << pop; } void ProofCnfStream::convertAndAssertIff(TNode node, bool negated) { Trace("cnf") << "ProofCnfStream::convertAndAssertIff(" << node - << ", negated = " << (negated ? "true" : "false") << ")\n"; + << ", negated = " << (negated ? "true" : "false") << ")\n" + << push; if (!negated) { // p <=> q @@ -400,12 +408,14 @@ void ProofCnfStream::convertAndAssertIff(TNode node, bool negated) normalizeAndRegister(clauseNode); } } + Trace("cnf") << pop; } void ProofCnfStream::convertAndAssertImplies(TNode node, bool negated) { Trace("cnf") << "ProofCnfStream::convertAndAssertImplies(" << node - << ", negated = " << (negated ? "true" : "false") << ")\n"; + << ", negated = " << (negated ? "true" : "false") << ")\n" + << push; if (!negated) { // ~p v q @@ -444,12 +454,14 @@ void ProofCnfStream::convertAndAssertImplies(TNode node, bool negated) << "ProofCnfStream::convertAndAssertImplies: NOT_IMPLIES_ELIM2 added " << node[1].notNode() << "\n"; } + Trace("cnf") << pop; } void ProofCnfStream::convertAndAssertIte(TNode node, bool negated) { Trace("cnf") << "ProofCnfStream::convertAndAssertIte(" << node - << ", negated = " << (negated ? "true" : "false") << ")\n"; + << ", negated = " << (negated ? "true" : "false") << ")\n" + << push; // ITE(p, q, r) SatLiteral p = toCNF(node[0], false); SatLiteral q = toCNF(node[1], negated); @@ -515,6 +527,7 @@ void ProofCnfStream::convertAndAssertIte(TNode node, bool negated) normalizeAndRegister(clauseNode); } } + Trace("cnf") << pop; } void ProofCnfStream::convertPropagation(TrustNode trn) @@ -590,6 +603,20 @@ void ProofCnfStream::convertPropagation(TrustNode trn) } } + +Node ProofCnfStream::getClauseNode(const SatClause& clause) +{ + std::vector<Node> clauseNodes; + for (size_t i = 0, size = clause.size(); i < size; ++i) + { + SatLiteral satLit = clause[i]; + clauseNodes.push_back(d_cnfStream.getNode(satLit)); + } + // order children by node id + std::sort(clauseNodes.begin(), clauseNodes.end()); + return NodeManager::currentNM()->mkNode(kind::OR, clauseNodes); +} + void ProofCnfStream::ensureLiteral(TNode n) { Trace("cnf") << "ProofCnfStream::ensureLiteral(" << n << ")\n"; |