(* Proof of lem_comp_make                                                  *)
intros; unfold comp in |- *.
elim
(axs_comprehension
(fun c0 : E =>
exists y : E, In (couple (first c0) y) f /\ In (couple y (second c0)) g)
(cartesien a c) (couple x z)); intros; apply H2;
clear H1 H2; intros.
split;
[ idtac
| exists y; rewrite (lem_first_propertie x z);
rewrite (lem_second_propertie x z); split; auto with zfc ].
elim Af; clear Af; intros; elim H2; clear H2; intros.
elim Ag; clear Ag; intros; elim H5; clear H5; intros.
elim (lem_cartesian_propertie a c (couple x z)); intros; apply H8;
clear H7 H8; intros.
exists x; exists z; split;
[ rewrite <- H2; exact (lem_fun_and_dom f x y H1 H)
| split; [ idtac | reflexivity ] ].
generalize (lem_fun_and_img g y z H4 H0); intros.
unfold inc in H6; exact (H6 z H7).
Qed.
(* End of proof of lem_comp_make                                           *)

(* Specifications: *)
(***************************************************************************)
(* (x,z) in g o f -> il existe un y tel que (x,y) in f et (y,z) in g       *)
(***************************************************************************)
Lemma lem_comp_intermed :
forall (f g a b c x z : E) (Af : fun_sig f a b) (Ag : fun_sig g b c),
In (couple x z) (comp f g a b c Af Ag) ->
exists y : E, In (couple x y) f /\ In (couple y z) g.