(* Contribution to the Coq Library   V6.3 (July 1999)                    *)
(****************************************************************************)
(* This contribution was updated for Coq V5.10 by the COQ workgroup.        *)
(* January 1995                                                             *)
(****************************************************************************)
(*                                  ex1.v                                   *)
(****************************************************************************)
intros A H'; exact H'.
Qed.
intros A B H'; split.
elim H'; intros H'0 H'1; clear H'; exact H'1.
elim H'; intros H'0 H'1; clear H'; exact H'0.
Qed.
intros A B h; elim h; [ intro H'; clear h; try exact H' | clear h; intro H' ].
right; assumption.
left; assumption.
Qed.
intros A B H' H'0.
apply H'0.
exact H'.
Qed.
intros A B C H' H'0 H'1.
apply H'.
exact H'1.
apply H'0.
exact H'1.
Qed.
intros x y z t h; elim h; intros H' H'0; clear h.
intro h; elim h; intros H'1 H'2; clear h.
split.
apply H'; assumption.
apply H'0; assumption.
Qed.
intros p q a H' H'0.
apply H'0.
exact H'.
Qed.
intros a b p h; elim h; intro H'; clear h.
exists a; assumption.
exists b; assumption.
Qed.
intros A R H' H'0 x h; elim h; intros y E; clear h.
apply H' with y.
split; [ assumption | idtac ].
apply H'0; assumption.
Qed.
intros a H'; red in |- *; intro H'0; elim H'0; assumption.
Qed.
intros x y h; elim h; intros h0 H'; elim h0;
[ intro H'0; clear h h0; try exact H'0 | clear h h0; intro H'0 ].
elim H'0; try assumption.
Qed.
(*This theorem needs classical logic*)
intros a H'.
generalize (classic a); intro h; elim h;
[ intro H'0; clear h; try exact H'0 | clear h; intro H'0 ].
elim H'; assumption.
Qed.

Theorem not_quite_classic : forall a : Prop, ~ ~ (a \/ ~ a).