
Set Primitive Projections.
Axiom ap10 : forall {A B} {f g:A->B} (h:f=g) x, f x = g x.
Axiom IsHSet : Type -> Type.
Record hSet := BuildhSet {setT:> Type; iss :> IsHSet setT}.
Canonical Structure default_HSet:= fun T P => (@BuildhSet T P).
Record PreCategory := { object :> Type ; morphism : object -> object -> Type }.
Record Functor (C D : PreCategory) :=
  { object_of :> C -> D;
    morphism_of : forall s d, morphism C s d
                              -> morphism D (object_of s) (object_of d) }.
Set Implicit Arguments.
Record NaturalTransformation C D (F G : Functor C D) :=
  { components_of :> forall c, morphism D (F c) (G c);
    commutes : forall s d (m : morphism C s d), components_of s = components_of s }.
Definition set_cat : PreCategory.
  exact ((@Build_PreCategory hSet
                             (fun x y => x -> y))).
Defined.
Goal forall (A : PreCategory) (F : Functor A set_cat)
            (a : A) (x : F a) (nt :NaturalTransformation F F), x = x.
  intros.
  pose (fun c d m => ap10 (commutes nt c d m)).
Abort.
