diff options
author | Haniel Barbosa <hanielbbarbosa@gmail.com> | 2020-05-18 20:00:37 -0300 |
---|---|---|
committer | Haniel Barbosa <hanielbbarbosa@gmail.com> | 2020-05-18 20:00:37 -0300 |
commit | d7d4a134ce89d1a0ad42468306b0cb9d216d5ac6 (patch) | |
tree | 18d6e3fc7620e35837bd41a0f47917f21e2cdadd /src/theory/trust_node.cpp | |
parent | 4df56a4fe3da185d3a2dabfb92a7370b07b72871 (diff) | |
parent | afc01bf9df9a36b6c8f83ff9706cfa349da8d24a (diff) |
Merge branch 'stringsPf' into fix-eqproof4
Diffstat (limited to 'src/theory/trust_node.cpp')
-rw-r--r-- | src/theory/trust_node.cpp | 56 |
1 files changed, 21 insertions, 35 deletions
diff --git a/src/theory/trust_node.cpp b/src/theory/trust_node.cpp index 4c6246888..ff3e89154 100644 --- a/src/theory/trust_node.cpp +++ b/src/theory/trust_node.cpp @@ -15,7 +15,6 @@ #include "theory/trust_node.h" #include "expr/proof_generator.h" -#include "theory/proof_engine_output_channel.h" namespace CVC4 { namespace theory { @@ -39,22 +38,25 @@ std::ostream& operator<<(std::ostream& out, TrustNodeKind tnk) TrustNode TrustNode::mkTrustConflict(Node conf, ProofGenerator* g) { + Node ckey = getConflictProven(conf); // if a generator is provided, should confirm that it can prove it - Assert(g == nullptr || g->hasProofFor(getConflictKeyValue(conf))); - return TrustNode(TrustNodeKind::CONFLICT, conf, g); + Assert(g == nullptr || g->hasProofFor(ckey)); + return TrustNode(TrustNodeKind::CONFLICT, ckey, g); } TrustNode TrustNode::mkTrustLemma(Node lem, ProofGenerator* g) { + Node lkey = getLemmaProven(lem); // if a generator is provided, should confirm that it can prove it - Assert(g == nullptr || g->hasProofFor(getLemmaKeyValue(lem))); - return TrustNode(TrustNodeKind::LEMMA, lem, g); + Assert(g == nullptr || g->hasProofFor(lkey)); + return TrustNode(TrustNodeKind::LEMMA, lkey, g); } TrustNode TrustNode::mkTrustPropExp(TNode lit, Node exp, ProofGenerator* g) { - Assert(g == nullptr || g->hasProofFor(getPropExpKeyValue(lit, exp))); - return TrustNode(TrustNodeKind::PROP_EXP, exp, g); + Node pekey = getPropExpProven(lit, exp); + Assert(g == nullptr || g->hasProofFor(pekey)); + return TrustNode(TrustNodeKind::PROP_EXP, pekey, g); } TrustNode TrustNode::null() @@ -62,50 +64,34 @@ TrustNode TrustNode::null() return TrustNode(TrustNodeKind::INVALID, Node::null()); } -TrustNode::TrustNode(TrustNodeKind tnk, Node n, ProofGenerator* g) - : d_tnk(tnk), d_node(n), d_gen(g) +TrustNode::TrustNode(TrustNodeKind tnk, Node p, ProofGenerator* g) + : d_tnk(tnk), d_proven(p), d_gen(g) { // does not make sense to provide null node with generator - Assert(!d_node.isNull() || d_gen == nullptr); + Assert(!d_proven.isNull() || d_gen == nullptr); } TrustNodeKind TrustNode::getKind() const { return d_tnk; } -Node TrustNode::getNode() const { return d_node; } +Node TrustNode::getNode() const +{ + return d_tnk == TrustNodeKind::LEMMA ? d_proven : d_proven[0]; +} +Node TrustNode::getProven() const { return d_proven; } ProofGenerator* TrustNode::getGenerator() const { return d_gen; } -bool TrustNode::isNull() const { return d_node.isNull(); } +bool TrustNode::isNull() const { return d_proven.isNull(); } -Node TrustNode::getConflictKeyValue(Node conf) { return conf.negate(); } +Node TrustNode::getConflictProven(Node conf) { return conf.notNode(); } -Node TrustNode::getLemmaKeyValue(Node lem) { return lem; } +Node TrustNode::getLemmaProven(Node lem) { return lem; } -Node TrustNode::getPropExpKeyValue(TNode lit, Node exp) +Node TrustNode::getPropExpProven(TNode lit, Node exp) { - if (exp.isConst()) - { - Assert(exp.getConst<bool>()); - return lit; - } return NodeManager::currentNM()->mkNode(kind::IMPLIES, exp, lit); } -Node TrustNode::getKeyValue(TrustNodeKind tnk, Node exp, Node conc) -{ - if (conc.isConst()) - { - Assert(!conc.getConst<bool>()); - return exp.negate(); - } - if (exp.isConst()) - { - Assert(exp.getConst<bool>()); - return conc; - } - return NodeManager::currentNM()->mkNode(kind::IMPLIES, exp, conc); -} - std::ostream& operator<<(std::ostream& out, TrustNode n) { out << "(trust " << n.getNode() << ")"; |