(* faithful *)
Definition Faithful_law (F : Functor C D) :=
forall (a b : C) (f g : a --> b), FMor F f =_S FMor F g -> f =_S g.
Structure > Faithful : Type :=
{Faithful_functor :> Functor C D;
Prf_isFaithful :> Faithful_law Faithful_functor}.
(* full *)
Definition Full_law (F : Functor C D)
(H : forall a b : C, (F a --> F b) -> (a --> b)) :=
forall (a b : C) (h : F a --> F b), h =_S FMor F (H a b h).
Structure > Full : Type :=
{Full_functor :> Functor C D;
Full_mor :
forall a b : C, (Full_functor a --> Full_functor b) -> (a --> b);
Prf_isFull :> Full_law Full_mor}.
End functor_prop.
Section comp_functor_prop.
Variables (C D E : Category) (F : Functor C D) (G : Functor D E).

(* Specifications: *)
Lemma IsFaithful_comp :
Faithful_law F -> Faithful_law G -> Faithful_law (F o_F G).