Section PAIR_proj_uni_proof.
Variable M : Ens.
Hypothesis m : is_a_pair M.
Variable N : Ens.
Hypothesis n : is_a_pair N.
Hypothesis e : EQ (PR1 M) (PR1 N).
Hypothesis f : EQ (PR2 M) (PR2 N).
Let M1 := PR1 M.
Let M2 := PR2 M.
Let N1 := PR1 N.
Let N2 := PR2 N.
Let M12 := PAIR M1 M2.
Let N12 := PAIR N1 N2.
Let U := PAIR M1 N2.
Let step1 : EQ M12 M12 := EQ_refl M12.
Let step2 : EQ M12 U :=
Big_Extensionality (fun X : Ens => EQ M12 (PAIR M1 X)) M2 N2 step1 f.
Let step3 : EQ U U := EQ_refl U.
Let step4 : EQ U N12 :=
Big_Extensionality (fun X : Ens => EQ U (PAIR X N2)) M1 N1 step3 e.
Let step5 : EQ M12 N12 := EQ_trans M12 U N12 step2 step4.
Let step6 : EQ M M12 := PAIR_proj_th1 M m.
Let step7 : EQ N N12 := PAIR_proj_th1 N n.
Let step8 : EQ N12 N := EQ_symm N N12 step7.
Let step9 : EQ M N12 := EQ_trans M M12 N12 step6 step5.
Definition PAIR_proj_uni_Out : EQ M N := EQ_trans M N12 N step9 step8.
End PAIR_proj_uni_proof.
(***** PAIR_proj_uni says that if two pairs have the same projections then they are equal   *******)

(* Specifications: *)
Theorem PAIR_proj_uni :
forall (M : Ens) (m : is_a_pair M) (N : Ens) (n : is_a_pair N)
(e : EQ (PR1 M) (PR1 N)) (f : EQ (PR2 M) (PR2 N)),
EQ M N.