(* Proof of lem_rel_prod_Img                                               *)
unfold rImg in |- *; unfold inc in |- *; intros.
elim
(axs_comprehension
(fun y : E =>
exists x : E, In (couple x y) (rel_prod r1 r2 a rRel1 rRel2)) a v0);
intros; generalize (H0 H); clear H H0 H1; intros;
elim H; clear H; intros; elim H0; clear H0; unfold rel_prod in |- *;
intros.
elim
(axs_comprehension
(fun c : E =>
exists x0 : E,
(exists y : E,
(exists z : E,
In (couple x0 y) r1 /\ In (couple y z) r2 /\ c = couple x0 z)))
(cartesien a a) (couple x v0)); intros; generalize (H1 H0);
clear H0 H1 H2; intros.
elim H0; clear H0; intros; elim H1; clear H1; intros; elim H1; clear H1;
intros; elim H1; clear H1; intros; elim H1; clear H1;
intros; elim H2; clear H2; intros.
elim (lem_couple_propertie x x0 v0 x2); intros; generalize (H4 H3);
clear H3 H4 H5; intros; elim H3; clear H3; intros;
generalize H1 H2; rewrite <- H3; rewrite <- H4; clear H1 H2 H3 H4;
clear x0 x2; intros.
elim (axs_comprehension (fun y : E => exists x : E, In (couple x y) r2) a v0);
intros; apply H4; clear H3 H4; intros.
split; [ auto with zfc | exists x1; auto with zfc ].
Qed.
(* End of proof of lem_rel_prod_Img                                        *)

(* Specifications: *)
(***************************************************************************)
(* Le produit est associatif                                               *)
(***************************************************************************)
Lemma lem_rel_prod_assoc :
forall (r1 r2 r3 a : E) (rRel1 : rel_sig r1 a a) (rRel2 : rel_sig r2 a a)
(rRel3 : rel_sig r3 a a),
rel_prod (rel_prod r1 r2 a rRel1 rRel2) r3 a
(lem_rel_prod_rel_sig r1 r2 a rRel1 rRel2) rRel3 =
rel_prod r1 (rel_prod r2 r3 a rRel2 rRel3) a rRel1
(lem_rel_prod_rel_sig r2 r3 a rRel2 rRel3).