module Cat.Instances.OuterFunctor
  {o } {C : Precategory o }
  where

The category of outer functors🔗

Like most constructions in category theory, outer functors, and outer natural transformations between them, can also be regarded as a category. By a rote calculation, we can define the identity and composite outer natural transformations.

  idnto :  {F : Outer-functor }  F =>o F
  idnto {F = F} .ηo px = px
  idnto {F = F} .ηo-fib _ = refl
  idnto {F = F} .is-naturalo px y f =
    ap (F .P₁ px) (Internal-hom-path refl)
  idnto {F = F} .ηo-nat _ _ = refl

  _∘nto_ :  {F G H : Outer-functor }  G =>o H  F =>o G  F =>o H
  _∘nto_ α β .ηo x = α .ηo (β .ηo x)
  _∘nto_ α β .ηo-fib px = α .ηo-fib (β .ηo px)  β .ηo-fib px
  _∘nto_ {H = H} α β .is-naturalo px y f =
    ap (α .ηo) (β .is-naturalo px y f)
     α .is-naturalo (β .ηo px) y (adjusti (sym (β .ηo-fib px)) refl f)
     ap (H .P₁ _) (Internal-hom-path refl)
  (α ∘nto β) .ηo-nat px σ =
    α .ηo-nat (β .ηo px) σ  ap (α .ηo) (β .ηo-nat px σ)

These are almost definitionally a precategory, requiring only an appeal to extensionality to establish the laws.

  Outer-functors : Precategory (o  ) (o  )
  Outer-functors .Precategory.Ob = Outer-functor 
  Outer-functors .Precategory.Hom = _=>o_
  Outer-functors .Precategory.Hom-set _ _ = hlevel 2
  Outer-functors .Precategory.id = idnto
  Outer-functors .Precategory._∘_ = _∘nto_
  Outer-functors .Precategory.idr α = Outer-nat-path  _  refl)
  Outer-functors .Precategory.idl α = Outer-nat-path  _  refl)
  Outer-functors .Precategory.assoc α β γ = Outer-nat-path  _  refl)

The constant-functor functor🔗

If is a category with products, and is a category internal to then we can construct a constant outer-functor functor

  Δo : Functor C (Outer-functors )
  Δo .F₀ = ConstO prods
  Δo .F₁ = const-nato prods
  Δo .F-id = Outer-nat-path λ px 
    ap₂ ⟨_,_⟩ (idl _) refl
     sym (⟨⟩∘ px)
     eliml ⟨⟩-η
  Δo .F-∘ f g = Outer-nat-path λ px 
     (f  g)  π₁  px , π₂  px                                         ≡⟨ products! C prods 
     f  π₁   g  π₁  px , π₂  px  , π₂   g  π₁  px , π₂  px