Section Union_th1_proof.
Variable F : Ens.
Variable X : Ens.
Variable U : Ens.
Hypothesis h : IN X U.
Hypothesis k : IN U F.
Let step1 : nested_IN X U F.
Proof Build_nested_IN X U F h k.
Let step2 : EXISTS (fun U1 : Ens => nested_IN X U1 F).
Proof EXISTS_th1 (fun U1 : Ens => nested_IN X U1 F) U step1.
Proof Union_pr1 F X step2.
End Union_th1_proof.
Proof union_th1_OutA.
(************************************************)
(**********     Elementary Counting  ************)
(************************************************)
Definition has_leq_0_elements := Its_empty.
(*** recall that this is equal to [A: Ens] (X: Ens) (not (IN X A)) ***)
Proof EmptySet_th1.
Definition has_geq_1_elements (A : Ens) := ~ has_leq_0_elements A.
(**** this is equal to EXISTS ([X: Ens] (IN X A)) ****)
Definition Choose_an_element (A : Ens) (k : has_geq_1_elements A) : Ens :=
CHOICE (fun X : Ens => IN X A).

Theorem Choose_an_element_pr :
forall (A : Ens) (k : has_geq_1_elements A), IN (Choose_an_element A k) A.