summaryrefslogtreecommitdiff
path: root/src/proof/alethe/alethe_post_processor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/proof/alethe/alethe_post_processor.cpp')
-rw-r--r--src/proof/alethe/alethe_post_processor.cpp22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/proof/alethe/alethe_post_processor.cpp b/src/proof/alethe/alethe_post_processor.cpp
index 167b885f4..dd2927ead 100644
--- a/src/proof/alethe/alethe_post_processor.cpp
+++ b/src/proof/alethe/alethe_post_processor.cpp
@@ -909,6 +909,28 @@ bool AletheProofPostprocessCallback::update(Node res,
{},
*cdp);
}
+ // ======== Double negation elimination
+ // See proof_rule.h for documentation on the NOT_NOT_ELIM rule. This comment
+ // uses variable names as introduced there.
+ //
+ // ---------------------------------- NOT_NOT
+ // (VP1:(cl (not (not (not F))) F)) (P:(not (not F)))
+ // ------------------------------------------------------------- RESOLUTION
+ // (cl F)*
+ //
+ // * the corresponding proof node is F
+ case PfRule::NOT_NOT_ELIM:
+ {
+ Node vp1 = nm->mkNode(kind::SEXPR, d_cl, children[0].notNode(), res);
+
+ return addAletheStep(AletheRule::NOT_NOT, vp1, vp1, {}, {}, *cdp)
+ && addAletheStep(AletheRule::RESOLUTION,
+ res,
+ nm->mkNode(kind::SEXPR, d_cl, res),
+ {vp1, children[0]},
+ {},
+ *cdp);
+ }
default:
{
return addAletheStep(AletheRule::UNDEFINED,
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback