Commit bd560f72 authored by Raphael Cauderlier's avatar Raphael Cauderlier

New certificate: absurd

parent bae98fea
......@@ -565,6 +565,7 @@ A B= if =c= proves =B a=.
The following certificates are used to reason from assumptions:
- =cert.exfalso : cert.certificate -> cert.certificate=
- =cert.absurd : cert.certificate=
- =cert.destruct_and : fol.prop -> fol.prop -> cert.certificate -> cert.certificate -> cert.certificate=
- =cert.destruct_or : fol.prop -> fol.prop -> cert.certificate -> cert.certificate -> cert.certificate -> cert.certificate=
- =cert.destruct_imp : fol.prop -> fol.prop -> cert.certificate -> cert.certificate -> cert.certificate -> cert.certificate=
......@@ -572,20 +573,22 @@ The following certificates are used to reason from assumptions:
- =cert.destruct_ex : A : fol.type -> (fol.term A -> fol.prop) -> cert.certificate -> cert.certificate -> cert.certificate=
The certificate =cert.exfalso c= proves the current goal if =c= proves
=fol.false=. The certificate =cert.destruct_and A B c1 c2= proves the
current goal =C= in context =G= if =c1= proves =fol.and A B= in
context =G= and =c2= proves =C= in context =G= with extra assumptions
=A= and =B=. The certificate =cert.destruct_or A B c1 c2 c3= proves
the current goal =C= in context =G= if =c1= proves =fol.or A B= in
context =G=, =c2= proves =C= in context =G= with extra assumption =A=,
and =c3= proves =C= in context =G= with extra assumption =B=. The
certificate =cert.destruct_imp A B c1 c2 c3= proves the current goal
=C= in context =G= if =c1= proves =fol.imp A B= in context =G=, =c2=
proves =A= in context =G= and =c3= proves =C= in context =G= with
extra assumption =B=. The certificate =cert.destruct_ex A B c1 c2=
proves the current goal =C= in context =G= if =c1= proves =fol.ex A B=
and =c2= proves =C= in context =G= with an extra variable =x= of type
=A= and an extra assumption =B x=.
=fol.false=. The certificate =cert.absurd= proves the current goal if
the context contains a pair of contradictory assumptions (an
assumption together with its negation). The certificate
=cert.destruct_and A B c1 c2= proves the current goal =C= in context
=G= if =c1= proves =fol.and A B= in context =G= and =c2= proves =C= in
context =G= with extra assumptions =A= and =B=. The certificate
=cert.destruct_or A B c1 c2 c3= proves the current goal =C= in context
=G= if =c1= proves =fol.or A B= in context =G=, =c2= proves =C= in
context =G= with extra assumption =A=, and =c3= proves =C= in context
=G= with extra assumption =B=. The certificate =cert.destruct_imp A B
c1 c2 c3= proves the current goal =C= in context =G= if =c1= proves
=fol.imp A B= in context =G=, =c2= proves =A= in context =G= and =c3=
proves =C= in context =G= with extra assumption =B=. The certificate
=cert.destruct_ex A B c1 c2= proves the current goal =C= in context
=G= if =c1= proves =fol.ex A B= and =c2= proves =C= in context =G=
with an extra variable =x= of type =A= and an extra assumption =B x=.
** Equality Certificates
......
......@@ -200,6 +200,12 @@ def exfalso (c : certificate) : certificate :=
with_goal (A =>
refine fol.false A (fol.false_elim A) c).
(; absurd proves anything if the current context contains an
assumption and its negation. ;)
def absurd : cert.certificate :=
cert.with_assumption (P => p =>
cert.destruct_imp P fol.false cert.assumption (cert.exact P p) cert.assumption).
(; trivial proves true ;)
def trivial : certificate :=
exact fol.true fol.true_intro.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment