(******************************************************)
(** * Compatible relations and the collection scheme  *)
(******************************************************)
(** ** Binary relations **)
(** The type of binary relations over pointed graphs: *)
Definition REL : Typ2 :=
forall X : Typ1, Rel X -> X -> forall Y : Typ1, Rel Y -> Y -> Prop.
(** And the corresponding (left and right) compatibility properties: *)
Definition LCOMPAT (R : REL) : Prop :=
forall (X : Typ1) (A : Rel X) (a : X) (Y : Typ1)
(B : Rel Y) (b : Y) (Z : Typ1) (C : Rel Z) (c : Z),
EQV X A a Y B b -> R Y B b Z C c -> R X A a Z C c.
Definition RCOMPAT (R : REL) : Prop :=
forall (X : Typ1) (A : Rel X) (a : X) (Y : Typ1)
(B : Rel Y) (b : Y) (Z : Typ1) (C : Rel Z) (c : Z),
R X A a Y B b -> EQV Y B b Z C c -> R X A a Z C c.
(** It is convenient to define a relativized form (exG_rel X A a P) of the existential quantifier on the class of pointed graphs, that expresses that the predicate P holds for some element of the pointed graph (X, A, a). *)
Definition exG_rel (X : Typ1) (A : Rel X) (a : X)
(P : forall Y : Typ1, Rel Y -> Y -> Prop) :=
forall E : Prop,
(forall (Y : Typ1) (B : Rel Y) (b : Y), ELT Y B b X A a -> P Y B b -> E) ->
E.

(* Specifications: *)
Lemma exG_rel_intro :
forall (X : Typ1) (A : Rel X) (a : X)
(P : forall Y : Typ1, Rel Y -> Y -> Prop) (Y : Typ1)
(B : Rel Y) (b : Y), ELT Y B b X A a -> P Y B b -> exG_rel X A a P.