(* End of proof of lem_index_inter                                         *)

(***************************************************************************)
(***************************************************************************)
(* Produit d'une famille d'ensembles                                       *)
(***************************************************************************)
(***************************************************************************)
Definition produit (a I : E) (funa : fun_ a) (doma : dom a = I) :=
  subset
    (fun f : E =>
     forall i : E,
     In i I ->
     exUniq _ (fun y : E => In (couple i y) f /\ In y (App a funa i)))
    (exp (reunion (index a I funa doma)) I).

(* Specifications: *)
Lemma lem_f_in_prod_is_fun : forall (a I : E) (funa : fun_ a) (doma : dom a = I) (f : E), In f (produit a I funa doma) -> fun_ f.
Lemma lem_dom_of_f_in_prod_is_I : forall (a I : E) (funa : fun_ a) (doma : dom a = I) (f : E), In f (produit a I funa doma) -> dom f = I.