(********** composition ********)

Record Comp_inter (F G X Y Z : Ens) : Prop := 
  {Comp_inter_xy : IN (PAIR X Y) F; Comp_inter_yz : IN (PAIR Y Z) G}.(********** composition ********)

Record Comp_inter (F G X Y Z : Ens) : Prop := 
  {Comp_inter_xy : IN (PAIR X Y) F; Comp_inter_yz : IN (PAIR Y Z) G}.(********** composition ********)

Record Comp_inter (F G X Y Z : Ens) : Prop := 
  {Comp_inter_xy : IN (PAIR X Y) F; Comp_inter_yz : IN (PAIR Y Z) G}.Record Comp_prop (F G X : Ens) : Prop := 
  {Comp_pair : is_a_pair X;
   Comp_intern : EXISTS (fun Y : Ens => Comp_inter F G (PR1 X) Y (PR2 X))}.Record Comp_prop (F G X : Ens) : Prop := 
  {Comp_pair : is_a_pair X;
   Comp_intern : EXISTS (fun Y : Ens => Comp_inter F G (PR1 X) Y (PR2 X))}.Record Comp_prop (F G X : Ens) : Prop := 
  {Comp_pair : is_a_pair X;
   Comp_intern : EXISTS (fun Y : Ens => Comp_inter F G (PR1 X) Y (PR2 X))}.Definition Comp_INTER (F G X : Ens) :=
  CHOICE (fun Y : Ens => Comp_inter F G (PR1 X) Y (PR2 X)).

(* Specifications: *)
Theorem Comp_INTER_pr1 : forall (F G X : Ens) (c : Comp_prop F G X), Comp_inter F G (PR1 X) (Comp_INTER F G X) (PR2 X).
Theorem Comp_INTER_th1 : forall (F G X : Ens) (c : Comp_prop F G X), IN (PAIR (PR1 X) (Comp_INTER F G X)) F.
Theorem Comp_INTER_th2 : forall (F G X : Ens) (c : Comp_prop F G X), IN (PAIR (Comp_INTER F G X) (PR2 X)) G.
Theorem Comp_prop_th1 : forall (F G X : Ens) (c : Comp_prop F G X), IN (PR1 X) (Domain F).
Theorem Comp_prop_th2 : forall (F G X : Ens) (c : Comp_prop F G X), IN (PR2 X) (Range G).
Lemma comp_prop_3_Out : IN X (Cartesian (Domain F) (Range G)).
Theorem Comp_prop_th3 : forall (F G X : Ens) (c : Comp_prop F G X), IN X (Cartesian (Domain F) (Range G)).
Theorem composition_bounded_by : forall F G : Ens, Bounded_By (Cartesian (Domain F) (Range G)) (Comp_prop F G).
Theorem composition_bounded : forall F G : Ens, Bounded (Comp_prop F G).