acu.insert(a);
continue;
}
- // trivial assumption
- if (a == d_true)
- {
- Trace("pnm-scope") << "- justify trivial True assumption\n";
- for (std::shared_ptr<ProofNode> pfs : fa.second)
- {
- Assert(pfs->getResult() == a);
- updateNode(pfs.get(), PfRule::MACRO_SR_PRED_INTRO, {}, {a});
- }
- Trace("pnm-scope") << "...finished" << std::endl;
- acu.insert(a);
- continue;
- }
Trace("pnm-scope") << "- try matching free assumption " << a << "\n";
// otherwise it may be due to symmetry?
Node aeqSym = CDProof::getSymmFact(a);
}
else
{
+ // trivial assumption (by rewriting)
+ Node ar = d_rewriter->rewrite(a);
+ if (ar == d_true)
+ {
+ Trace("pnm-scope") << "- justify trivial True assumption\n";
+ for (std::shared_ptr<ProofNode> pfs : fa.second)
+ {
+ Assert(pfs->getResult() == a);
+ updateNode(pfs.get(), PfRule::MACRO_SR_PRED_INTRO, {}, {a});
+ }
+ Trace("pnm-scope") << "...finished" << std::endl;
+ acu.insert(a);
+ continue;
+ }
// Otherwise, may be derivable by rewriting. Note this is used in
// ensuring that proofs from the proof equality engine that involve
// equality with Boolean constants are closed.
for (const Node& acc : ac)
{
Node accr = d_rewriter->rewrite(acc);
- if (accr != acc)
- {
- acr[accr] = acc;
- }
+ acr[accr] = acc;
}
}
- Node ar = d_rewriter->rewrite(a);
+ Trace("pnm-scope") << "- rewritten: " << ar << std::endl;
std::unordered_map<Node, Node>::iterator itr = acr.find(ar);
if (itr != acr.end())
{