Section union_symm_proof.
Variable A : Ens.
Variable B : Ens.
Let U := union A B.
Let V := union B A.
Let step1 : SUB A U.
Proof union_pr1 A B.
Let step2 : SUB B U.
Proof union_pr2 A B.
Let step3 : SUB B V.
Proof union_pr1 B A.
Let step4 : SUB A V.
Proof union_pr2 B A.
Let step5 : SUB U V.
Proof union_pr3 A B V step4 step3.
Let step6 : SUB V U.
Proof union_pr3 B A U step2 step1.
Proof Build_EQ U V step5 step6.
End union_symm_proof.
Proof union_symm_proof_Out.
(********** Union ************)
Definition Union (F : Ens) : Ens := REPLACEMENT (b_in_Union_a F).
Proof
fun (F X : Ens) (h : EXISTS (fun U : Ens => nested_IN X U F)) =>
REPLACEMENT_pr1 (b_in_Union_a F) (Union_bounded F) X h.
Proof fun F : Ens => REPLACEMENT_pr2 (b_in_Union_a F) (Union_bounded F).
Definition Union_intermediate (F X : Ens) (i : IN X (Union F)) : Ens :=
CHOICE (fun U : Ens => nested_IN X U F).
Proof
fun (F X : Ens) (i : IN X (Union F)) =>
CHOICE_pr (fun U : Ens => nested_IN X U F) (Union_pr2 F X i).
Proof
fun (F X : Ens) (i : IN X (Union F)) =>
nested_IN_ab X (Union_intermediate F X i) F (Union_intermediate_pr F X i).

Theorem Union_intermediate_th2 :
forall (F X : Ens) (i : IN X (Union F)), IN (Union_intermediate F X i) F.