Section a_pair_is_a_pair_proof.
Variable A : Ens.
Variable B : Ens.
Let M := PAIR A B.
Let step1 : EQ M (PAIR A B) := EQ_refl M.
Let step2 : EXISTS (fun B1 : Ens => EQ M (PAIR A B1)) :=
EXISTS_th1 (fun B1 : Ens => EQ M (PAIR A B1)) B step1.
Definition a_pair_is_a_pair_Out : is_a_pair M :=
EXISTS_th1 (fun A1 : Ens => EXISTS (fun B1 : Ens => EQ M (PAIR A1 B1))) A
step2.
End a_pair_is_a_pair_proof.
Proof a_pair_is_a_pair_Out.
Proof
fun (A B U : Ens) (i : EQ (PAIR A B) U) =>
Big_Extensionality (fun V : Ens => is_a_pair V) (PAIR A B) U
(a_pair_is_a_pair A B) i.
(******* projections *******)
Definition PR1 (M : Ens) :=
CHOICE (fun A : Ens => EXISTS (fun B : Ens => EQ M (PAIR A B))).
Proof
fun (M : Ens) (p : is_a_pair M) =>
CHOICE_pr (fun A : Ens => EXISTS (fun B : Ens => EQ M (PAIR A B))) p.
Definition PR2 (M : Ens) := CHOICE (fun B : Ens => EQ M (PAIR (PR1 M) B)).

Theorem PAIR_proj_th1 :
forall (M : Ens) (p : is_a_pair M), EQ M (PAIR (PR1 M) (PR2 M)).