summaryrefslogtreecommitdiff
path: root/src/prop/proof_cnf_stream.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/prop/proof_cnf_stream.cpp')
-rw-r--r--src/prop/proof_cnf_stream.cpp47
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";
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback