(* Again, extentionality is not stated, but easy *)


(* Projections of a set: *)
(*  1: its base type     *)

Definition pi1 : Ens -> Type.(*  2: the function      *)

Definition pi2 : forall E : Ens, pi1 E -> Ens.(* The Union set   *)

Definition Union : forall E : Ens, Ens.

(* Specifications: *)
Theorem EQ_EXType : forall E E' : Ens, EQ E E' -> forall a : pi1 E, EXType (pi1 E') (fun b : pi1 E' => EQ (pi2 E a) (pi2 E' b)).
Theorem IN_EXType : forall E E' : Ens, IN E' E -> EXType (pi1 E) (fun a : pi1 E => EQ E' (pi2 E a)).
Theorem IN_Union : forall E E' E'' : Ens, IN E' E -> IN E'' E' -> IN E'' (Union E).
Theorem IN_INC_Union : forall E E' : Ens, IN E' E -> INC E' (Union E).
Theorem Union_IN : forall E E' : Ens, IN E' (Union E) -> EXType _ (fun E1 : Ens => IN E1 E /\ IN E' E1).
Theorem Union_sound : forall E E' : Ens, EQ E E' -> EQ (Union E) (Union E').
Theorem Union_mon : forall E E' : Ens, INC E E' -> INC (Union E) (Union E').
Theorem EQ_EXType : forall E E' : Ens, EQ E E' -> forall a : pi1 E, EXType (pi1 E') (fun b : pi1 E' => EQ (pi2 E a) (pi2 E' b)).
Theorem IN_EXType : forall E E' : Ens, IN E' E -> EXType (pi1 E) (fun a : pi1 E => EQ E' (pi2 E a)).
Theorem IN_Union : forall E E' E'' : Ens, IN E' E -> IN E'' E' -> IN E'' (Union E).
Theorem IN_INC_Union : forall E E' : Ens, IN E' E -> INC E' (Union E).
Theorem Union_IN : forall E E' : Ens, IN E' (Union E) -> EXType _ (fun E1 : Ens => IN E1 E /\ IN E' E1).
Theorem Union_sound : forall E E' : Ens, EQ E E' -> EQ (Union E) (Union E').
Theorem Union_mon : forall E E' : Ens, INC E E' -> INC (Union E) (Union E').