assert (H:forall p:Prop, (¬p) ≡≡ (p ≡≡ F)).
apply T5.
specialize (H (¬p)).
assert (H1:((¬p ≡≡ p) ≡≡ F)).
apply (contradict p).
assert (H2:((¬p ≡≡ p) ≡≡ F) ≡≡ (F ≡≡ (¬p ≡≡ p))).
apply (T4 (¬p ≡≡ p) F).
apply (detachL ((¬p ≡≡ p) ≡≡ F)(F ≡≡ (¬p ≡≡ p))) in H2;[
clear H1;assert (H1:(F ≡≡ (¬p ≡≡ p)) ≡≡ ((F ≡≡ ¬p) ≡≡ p));[
apply (A2 F (¬p) p) |
apply (detachL (F ≡≡ (¬p ≡≡ p))((F ≡≡ ¬p) ≡≡ p)) in H1;[
clear H2;assert (H2:(F ≡≡ ¬p) ≡≡ ((¬p) ≡≡ F));[
apply (T4 F (¬p)) |
rewrite H2 in H1;clear H2;assert (H2:((¬p ≡≡ F) ≡≡ p) ≡≡ (¬(¬p) ≡≡ (¬p ≡≡ F)));[
apply (intro_eqP ((¬p ≡≡ F) ≡≡ p)(¬(¬p) ≡≡ (¬p ≡≡ F)) H1 H) |
assert (H3:(((¬p ≡≡ F) ≡≡ p) ≡≡ (¬(¬p) ≡≡ (¬p ≡≡ F))) ≡≡ (p ≡≡ ¬(¬p)));[
apply (A1 (¬p ≡≡ F)(¬(¬p)) p) |
apply (detachL (((¬p ≡≡ F) ≡≡ p) ≡≡ (¬(¬p) ≡≡ (¬p ≡≡ F)))(p ≡≡ ¬(¬p))) in H3;[
clear H2;assert (H2:(p ≡≡ ¬(¬p)) ≡≡ (¬(¬p) ≡≡ p));[
apply (T4 p (¬(¬p))) |
apply (detachL (p ≡≡ ¬(¬p))(¬(¬p) ≡≡ p)) in H2;assumption ] |
assumption ]]]] |
assumption ]] |
assumption ].
Qed.

(* Specifications: *)
Lemma T8 : F ≡≡ F.
Lemma T9 : forall p : Prop, p -> ¬(forall q, (p ≡≡ q)).
(* intro/elim rules for Falsum *)
Lemma elim_F     : forall p:Prop, F -> p.
(* intro/elim rules for conjunction *)
Lemma intro_conj   : forall (p q:Prop),  p -> q -> (p ∧ q).
Lemma elim_conjHL  : forall (p q:Prop), (p ∧ q) -> p.
Lemma elim_conjHR  : forall (p q:Prop), (p ∧ q) -> q.
(**** elimination of double negation *****)
Lemma elim_dneg   : forall (p:Prop), (¬¬p) -> p.
(* intro/elim rules for equivalence *)
Lemma elim_eqP   : forall p q:Prop,  (p ≡≡ q) -> ((p ⊃ q) -> (q ⊃ p)).
Lemma def_eqP   : forall p q:Prop, (p ⊃ q) -> (q ⊃ p) -> p ≡≡ q.
(* intro/elim rules for implication *)
Lemma intro_impl  : forall (p q:Prop), (p->q) -> (p ⊃ q).
Lemma elim_impl : forall (p q:Prop),  (p ⊃ q) -> p -> q.
(* intro/elim rules for disjunction *)
Lemma intro_disjR       : forall (p q:Prop),  q -> (p ∨ q).
Lemma intro_disjL       : forall (p q:Prop),  p -> (p ∨ q).
Lemma elim_disj         : forall (p q r:Prop), (p ∨ q) -> (p ⊃ r) -> (q ⊃ r) -> r.
(* intro/elim rules for negation *)
Lemma intro_neg : forall p, (p ≡≡ F) -> ¬p.
Lemma elim_neg : forall p, (¬p) -> (p ≡≡ F).
(* ========================================== *)
Lemma T10 : forall (p q:Prop)(F:Morphism), (p ≡≡ q) ⊃ (F p ≡≡ F q).
Lemma subst_law : forall (p q:Prop)(f:Morphism), ((p ≡≡ q) ∧ f p) ⊃  f q.
Lemma  excluded_middle : forall (p :Prop), p ∨ ¬p.
Lemma T11 : forall (p:Prop), p ≡≡ (p ≡≡ (forall q:Prop, (q ≡≡ q))).
Lemma T12 : forall (p:Prop)(f:Morphism), ((f (forall q :Prop, q)) ∧ (f (forall q :Prop, (q ≡≡ q))))  ⊃  f p.
Lemma T13 : forall (p q:Prop)(f:Morphism), (f p ∧ f (¬p)) ⊃  f q.
Lemma T14 : forall (p :Prop)(f:Morphism), (f p ∧ f (¬p)) ≡≡  forall (q :Prop), f q.
Lemma eqP_implies_impl : forall (p q:Prop), (p ≡≡ q) ⊃ (p ⊃ q).
Lemma not_implies_F : forall (p:Prop), (p ≡≡ F) ⊃ (p ⊃ F).
Lemma T16 : forall p, (p ≡≡ p).
Lemma T17 : T.
Lemma T18 : (T ≡≡ (F ≡≡ F)) ≡≡ ((T ≡≡ F) ≡≡ F).
Lemma T19 : ((T ≡≡ F) ≡≡ F) ≡≡ (T ≡≡ (F ≡≡ F)).
Lemma T27 : T ≡≡ (F ≡≡ F).
Lemma T30 : T ≡≡ ¬F.
Lemma T32 : ¬T ≡≡ F.
Lemma T50 : (F ≡≡ F) ≡≡ ¬F.
Ltac elimP :=
match goal with
| |- ?A ⊃ ?B =>  apply (intro_impl A B);intro
end.