(* Proof of lem_rel_union_rel_sig                                          *)
unfold rel_union in |- *; unfold rel_sig in |- *; unfold inc in |- *; intros.
elim (lem_union_propertie r1 r2 v0); intros; generalize (H0 H); clear H H0 H1;
intros.
elim (lem_cartesian_propertie (union a1 a2) (union b1 b2) v0); intros;
apply H1; clear H0 H1; intros.
elim H; clear H; intros.
generalize (rRel1 v0 H); intros.
elim (lem_cartesian_propertie a1 b1 v0); intros; generalize (H1 H0);
clear H0 H1 H2; intros.
elim H0; clear H0; intros; elim H0; clear H0; intros; elim H0; clear H0;
intros; elim H1; clear H1; intros.
exists x; exists x0; split;
[ elim (lem_union_propertie a1 a2 x); intros; apply H4; left;
auto with zfc
| split;
[ elim (lem_union_propertie b1 b2 x0); intros; apply H4; left;
auto with zfc
| auto with zfc ] ].
generalize (rRel2 v0 H); intros.
elim (lem_cartesian_propertie a2 b2 v0); intros; generalize (H1 H0);
clear H0 H1 H2; intros.
elim H0; clear H0; intros; elim H0; clear H0; intros; elim H0; clear H0;
intros; elim H1; clear H1; intros.
exists x; exists x0; split;
[ elim (lem_union_propertie a1 a2 x); intros; apply H4; right;
auto with zfc
| split;
[ elim (lem_union_propertie b1 b2 x0); intros; apply H4; right;
auto with zfc
| auto with zfc ] ].
Qed.
(* End of proof of lem_rel_union_rel_sig                                   *)

(* Specifications: *)
(***************************************************************************)
(* Le domaine de l'union de deux relations est l'union des deux domaines   *)
(***************************************************************************)
Lemma lem_rel_union_dom :
forall (r1 a1 b1 r2 a2 b2 : E) (rRel1 : rel_sig r1 a1 b1)
(rRel2 : rel_sig r2 a2 b2),
rdom (rel_union r1 a1 b1 r2 a2 b2 rRel1 rRel2) (union a1 a2)
(union b1 b2) (lem_rel_union_rel_sig r1 a1 b1 r2 a2 b2 rRel1 rRel2) =
union (rdom r1 a1 b1 rRel1) (rdom r2 a2 b2 rRel2).