module Cat.Functor.Hom.Displayed
  {o β„“ o' β„“'} {ℬ : Precategory o β„“} (β„° : Displayed ℬ o' β„“')
  where

Displayed Hom functorsπŸ”—

Let be a displayed category over For every in the base, we can obtain a bifunctor from to where denotes the fibre category of at The action of on is given by just as in the non-displayed case.

Hom-over : βˆ€ {x y} β†’ Hom x y β†’ Bifunctor (Fibre β„° x ^op) (Fibre β„° y) (Sets β„“')
Hom-over u = make-bifunctor Ξ» where
  .Fβ‚€ a b  β†’ el! (Hom[ u ] a b)
  .lmap f g β†’ hom[ idr u ] (g ∘' f)
  .rmap f g β†’ hom[ idl u ] (f ∘' g)
  .lmap-id β†’ ext Ξ» h β†’ from-pathp[] (idr' _)
  .rmap-id β†’ ext Ξ» h β†’ from-pathp[] (idl' _)
  .lmap-∘ f g β†’ funext Ξ» h β†’
    hom[] (h ∘' hom[] (g ∘' f)) β‰‘βŸ¨ disp! β„° βŸ©β‰‘
    hom[] (hom[] (h ∘' g) ∘' f) ∎
  .rmap-∘ f g β†’ funext Ξ» h β†’
    hom[] (hom[] (f ∘' g) ∘' h) β‰‘βŸ¨ disp! β„° βŸ©β‰‘
    hom[] (f ∘' hom[] (g ∘' h)) ∎
  .lrmap  f g β†’ funext Ξ» h β†’
    hom[] (hom[] (g ∘' h) ∘' f) β‰‘βŸ¨ disp! β„° βŸ©β‰‘
    hom[] (g ∘' hom[] (h ∘' f)) ∎

We can also define partially applied versions of this functor.

Hom-over-from : βˆ€ {x y} β†’ Hom x y β†’ Ob[ x ] β†’ Functor (Fibre β„° y) (Sets β„“')
Hom-over-from u x' = Bifunctor.Right (Hom-over u) x'

Hom-over-into : βˆ€ {x y} β†’ Hom x y β†’ Ob[ y ] β†’ Functor (Fibre β„° x ^op) (Sets β„“')
Hom-over-into u y' = Bifunctor.Left (Hom-over u) y'