Library HoTT.Categories.FunctorCategory.Functorial

Functoriality of functor category construction

Require Import Category.Core Functor.Core FunctorCategory.Core Functor.Pointwise.Core Functor.Pointwise.Properties Category.Dual Category.Prod Cat.Core ExponentialLaws.Law4.Functors.

Set Implicit Arguments.
Generalizable All Variables.

Local Open Scope category_scope.
Local Open Scope type_scope.

(_ _) is a functor catᵒᵖ × cat cat

Section functor.
  Context `{Funext}.

  Variable P : PreCategory Type.
  Context `{ C, IsHProp (P C)}.
  Context `{HF : C D, P C P D IsHSet (Functor C D)}.

  Local Notation cat := (sub_pre_cat P HF).

  Hypothesis has_functor_categories : C D : cat, P (C.1 D.1).

  Local Open Scope category_scope.

  Definition functor_uncurried
  : object ((cat^op × cat) cat)
    := Eval cbv zeta in
        let object_of := (fun CD(((fst CD).1 (snd CD).1);
                                     has_functor_categories (fst CD) (snd CD)))
        in Build_Functor
             (cat^op × cat) cat
             object_of
             (fun CD C'D' FGpointwise (fst FG) (snd FG))
             (fun _ _ _ _ _Functor.Pointwise.Properties.composition_of _ _ _ _)
             (fun _Functor.Pointwise.Properties.identity_of _ _).

  Definition functor : object (cat^op (cat cat))
    := ExponentialLaws.Law4.Functors.inverse _ _ _ functor_uncurried.
End functor.