(* A Type-theoretical axiom of choice gives us the collection axiom  *)


Definition collection :=
  forall P : Ens -> Ens -> Prop,
  (forall x x' y : Ens, EQ x x' -> P x y -> P x' y) ->
  (forall E : Ens, EXType _ (P E)) ->
  forall E : Ens,
  EXType _
    (fun A : Ens =>
     forall x : Ens, IN x E -> EXType _ (fun y : Ens => IN y A /\ P x y)).Definition choice :=
  forall (A B : Type) (P : A -> B -> Prop),
  (forall a : A, EXType _ (fun b : B => P a b)) ->
  EXType _ (fun f : A -> B => forall a : A, P a (f a)).

(* Specifications: *)
Theorem Choice_Collection : choice -> collection.