namespace proof {
AletheProofPostprocessCallback::AletheProofPostprocessCallback(
- ProofNodeManager* pnm, AletheNodeConverter& anc)
- : d_pnm(pnm), d_anc(anc)
+ ProofNodeManager* pnm, AletheNodeConverter& anc, bool resPivots)
+ : d_pnm(pnm), d_anc(anc), d_resPivots(resPivots)
{
NodeManager* nm = NodeManager::currentNM();
d_cl = nm->mkBoundVar("cl", nm->sExprType());
}
std::vector<Node> new_children = children;
std::vector<Node> new_args =
- options::proofAletheResPivots()
- ? args
- : std::vector<Node>(args.begin(), args.begin() + 3);
+ d_resPivots ? args
+ : std::vector<Node>(args.begin(), args.begin() + 3);
Node trueNode = nm->mkConst(true);
Node falseNode = nm->mkConst(false);
bool hasUpdated = false;
}
}
}
- if (hasUpdated || !options::proofAletheResPivots())
+ if (hasUpdated || !d_resPivots)
{
Trace("alethe-proof")
<< "... update alethe step in finalizer " << res << " "
}
AletheProofPostprocess::AletheProofPostprocess(ProofNodeManager* pnm,
- AletheNodeConverter& anc)
- : d_pnm(pnm), d_cb(d_pnm, anc)
+ AletheNodeConverter& anc,
+ bool resPivots)
+ : d_pnm(pnm), d_cb(d_pnm, anc, resPivots)
{
}
{
public:
AletheProofPostprocessCallback(ProofNodeManager* pnm,
- AletheNodeConverter& anc);
+ AletheNodeConverter& anc,
+ bool resPivots);
~AletheProofPostprocessCallback() {}
/** Should proof pn be updated? Only if its top-level proof rule is not an
* Alethe proof rule.
ProofNodeManager* d_pnm;
/** The Alethe node converter */
AletheNodeConverter& d_anc;
+ /** Whether to keep the pivots in the alguments of the resolution rule */
+ bool d_resPivots;
/** The cl operator
* For every step the conclusion is a clause. But since the or operator
*requires at least two arguments it is extended by the cl operator. In case
class AletheProofPostprocess
{
public:
- AletheProofPostprocess(ProofNodeManager* pnm, AletheNodeConverter& anc);
+ AletheProofPostprocess(ProofNodeManager* pnm,
+ AletheNodeConverter& anc,
+ bool resPivots);
~AletheProofPostprocess();
/** post-process */
void process(std::shared_ptr<ProofNode> pf);
else if (options().proof.proofFormatMode == options::ProofFormatMode::ALETHE)
{
proof::AletheNodeConverter anc;
- proof::AletheProofPostprocess vpfpp(d_pnm.get(), anc);
+ proof::AletheProofPostprocess vpfpp(
+ d_pnm.get(), anc, options().proof.proofAletheResPivots);
vpfpp.process(fp);
proof::AletheProofPrinter vpp;
vpp.print(out, fp);