module Cat.Displayed.Isofibration.Free where

Displayed categories from functorsπŸ”—

Source

The construction presented in this page is adapted from Foundations of Relative Category Theory.

This page addresses the problem of comparing notions in the theory of displayed categories, as we have formalised it, with those in the traditional study of relative category theory, which are stated in terms of a projection functor Essentially, we want to replace with the total category of some displayed category so as to recover (up to equivalence) as the projection functor

Fixing a functor we define the type of objects over to consist of pairs where and β€” in other words, the objects over are not the type-theoretic fibre of over but instead the category-theoretic essential fibre of over

  Free-isofibration : Displayed B (β„“b βŠ” oe) (β„“b βŠ” β„“e)
  Free-isofibration .Ob[_] x = Essential-fibre P x

To understand the types of maps in we will diagramatically denote a pair as a β€œleg”

A morphism lying over is a map which, β€œover” the Isomorphisms and gets sent by to Pictorially, we understand the type of as that of dashed arrows in the diagram below, where the β€œleg” on the left (resp. on the right) is drawn with towards the screen.

  Free-isofibration .Hom[_] f (x' , p) (y' , q) =
    Ξ£[ g ∈ E.Hom x' y' ] q .to ∘ P.₁ g ≑ f ∘ p .to

The operations (identities and composition) necessary to make a displayed category are inherited from those in with commutativity of the diagrams defining them assured by functoriality of

The displayed category laws are directly inherited from
  Free-isofibration .Hom[_]-set f a b = hlevel 2

  Free-isofibration .id' = record where
    fst = E.id
    snd = P.elimr refl βˆ™ introl refl

  Free-isofibration ._∘'_ (f , Ο†) (g , ψ) = record where
    fst = f E.∘ g
    snd = P.popl Ο† βˆ™ extendr ψ

  Free-isofibration .hom[_] p (f , Ξ±) = record
    { fst = f
    ; snd = Ξ± βˆ™ car p
    }
  Free-isofibration .coh[_] _ _   = Ξ£-prop-pathp! refl
  Free-isofibration .idr'   _     = Ξ£-prop-pathp! (E.idr _)
  Free-isofibration .idl'   _     = Ξ£-prop-pathp! (E.idl _)
  Free-isofibration .assoc' _ _ _ = Ξ£-prop-pathp! (E.assoc _ _ _)

As an isofibrationπŸ”—

The construction of a displayed category from a functor results in an isofibration, and indeed this is the isofibration over freely generated by in a suitable bicategorical sense.

To show this, we will first need a technical lemma stating that an isomorphism in whose forward direction extends to a morphism over the forward direction of an isomorphism extends to a complete isomorphism in

  Free-isofibration-iso
    : βˆ€ {a b x y}
    β†’ {u : a B.β‰… b} {Ο† : P.β‚€ x B.β‰… a} {ψ : P.β‚€ y B.β‰… b} (ΞΈ : x E.β‰… y)
    β†’ ψ .to B.∘ P.₁ (ΞΈ .to) ≑ u .to B.∘ Ο† .to
    β†’ (x , Ο†) Iso[P].β‰…[ u ] (y , ψ)
The details of the proof are not particularly interesting.
  Free-isofibration-iso {u = u} {Ο†} {ψ} ΞΈ p =
    Iso[P].make-iso[ u ]
      (ΞΈ .to   , p)
      (ΞΈ .from , q)
      (Ξ£-prop-pathp! (ΞΈ .invl))
      (Ξ£-prop-pathp! (ΞΈ .invr))
    where abstract
      q : Ο† .to B.∘ P.₁ (ΞΈ .from) ≑ u .from B.∘ ψ .to
      q = flip Equiv.from refl $
        Ο† .to B.∘ P.₁ (ΞΈ .from) ≑ u .from B.∘ ψ .to     β‰ƒβŸ¨ B.post-invl (B.isoβ†’invertible u) βŸ©β‰ƒ
        u .to B.∘ Ο† .to B.∘ P.₁ (ΞΈ .from) ≑ ψ .to       β‰ƒβŸ¨ βˆ™-pre-equiv (B.extendl p) βŸ©β‰ƒ
        ψ .to B.∘ P.₁ (ΞΈ .to) B.∘ P.₁ (ΞΈ .from) ≑ ψ .to β‰ƒβŸ¨ βˆ™-pre-equiv (B.intror (P.annihilate (ΞΈ .invl))) βŸ©β‰ƒ
        ψ .to ≑ ψ .to                                   β‰ƒβˆŽ

With this in hand, showing that is an isofibration is extremely straightforward. Supposing we have an iso and drawing the object we want to lift as a β€œleg”, we note that the lifting problem we have to solve involves a sequence of maps

whence it is immediate that the lifting we desire is

  Free-isofibration-is-isofibration : Isofibration Pβˆ™
  Free-isofibration-is-isofibration = record where
    _^*_ ψ (x , Ο†) = x , ψ B.∘Iso Ο†
    ^*-lifts ψ (x , Ο†) = Free-isofibration-iso
      E.id-iso
      (P.elimr refl)

The total categoryπŸ”—

There is an evident lifting of against which sends an object to the pair

  Free-isofibration-lifting : Lifting Pβˆ™ P
  Free-isofibration-lifting .Fβ‚€'  x   = x , B.id-iso
  Free-isofibration-lifting .F₁'  f   = f , B.id-comm-sym
  Free-isofibration-lifting .F-id'    = Ξ£-prop-pathp! refl
  Free-isofibration-lifting .F-∘' f g = Σ-prop-pathp! refl

Taken as a functor Eβ†’βˆ« from this lifting extends to an equivalence of categories.

  private
    Eβ†’βˆ« : Functor E (∫ Pβˆ™)
    Eβ†’βˆ« = Liftingβ†’Functor _ Free-isofibration-lifting

  Free-isofibration-lifting-split-eso : is-split-eso Eβ†’βˆ«
  Free-isofibration-lifting-is-ff     : is-fully-faithful Eβ†’βˆ«
The proofs are, again, straightforward functoriality reasoning.
  Free-isofibration-lifting-split-eso (b , x , Ο†) = record where
    fst = x
    snd = iso[]→total-iso _ {x≅y = φ} $
      Free-isofibration-iso E.id-iso $ B.cdr P.F-id

  Free-isofibration-lifting-is-ff = is-iso→is-equiv λ where
    .is-iso.from h β†’ h .snd .fst
    .is-iso.rinv h β†’ ∫Hom-path _
      (B.introl refl βˆ™βˆ™ h .snd .snd βˆ™βˆ™ B.elimr refl)
      (Ξ£-prop-pathp! refl)
    .is-iso.linv h β†’ refl

Finally, as desired, precomposition with this equivalence takes the projection functor to 1

  Free-isofibration-recovers : Ο€αΆ  Pβˆ™ F∘ Eβ†’βˆ« ≅ⁿ P
  Free-isofibration-recovers = Lifting-nat-iso _ _ ni⁻¹

Freeness as an isofibrationπŸ”—

To show that is freely generated as an isofibration over by we show that any lifting of some other isofibration against can be re-expressed as a vertical functor

  Free-isofibration-factor
    : βˆ€ {oh β„“h} {H : Displayed B oh β„“h}
    β†’ Isofibration H β†’ Lifting H P
    β†’ Vertical-functor Pβˆ™ H
  Free-isofibration-factor {H = H} H-isofib F = F† where

The gist of the construction is presented below. Starting with an object we obtain an which we can transport to our desired since is an isofibration.

    F† : Vertical-functor Pβˆ™ H
    F† .Fβ‚€' (x , Ο†) = Ο† H.^* F.β‚€' x
    F† .F₁' {a' = x , Ο†} {b' = y , ψ} (h , p) =
      hom[ B.pulll p βˆ™ B.cancelr (Ο† .invl) ] (H.Ο€* ∘' F.₁' h ∘' H.ΞΉ!)
Verifying that this assignment is functorial boils down to a straightforward calculation, using functoriality of the lifting
    F† .F-id' {x' = x , Ο†} = begin[]
      hom[] (H.Ο€* ∘' F.₁' E.id ∘' H.ΞΉ!) ≑[]⟨ unwrap _ βŸ©β‰‘[]
      H.Ο€* ∘' F.₁' E.id ∘' H.ΞΉ!         ≑[]⟨ refl⟩∘'⟨ eliml[] _ F.F-id' βŸ©β‰‘[]
      H.Ο€* ∘' H.ΞΉ!                      ≑[]⟨ H.^*-lifts _ _ .invl' βŸ©β‰‘[]
      id'                               ∎[]

    F† .F-∘' {a' = x , Ο†} {b' = y , ψ} {c' = z , ΞΈ} {f' = f , p} {g' = g , q} =
      let
        open _β‰…[_]_ (H.^*-lifts Ο† (F.β‚€' x)) renaming (from' to Ο†^*β†’; to' to Ο†^*←)
        open _β‰…[_]_ (H.^*-lifts ψ (F.β‚€' y)) renaming (from' to ψ^*β†’; to' to ψ^*←)
        open _β‰…[_]_ (H.^*-lifts ΞΈ (F.β‚€' z)) renaming (from' to ΞΈ^*β†’; to' to ΞΈ^*←)
      in begin[]
        hom[] (ΞΈ^*← ∘' F.₁' (f E.∘ g) ∘' Ο†^*β†’)                           ≑[]⟨ unwrap _ βŸ©β‰‘[]
        ΞΈ^*← ∘' F.₁' (f E.∘ g) ∘' Ο†^*β†’                                   ≑[]⟨ refl⟩∘'⟨ (pushl[] _ (F.F-∘' f g)) βŸ©β‰‘[]
        ΞΈ^*← ∘' F.₁' f ∘' F.₁' g ∘' H.ΞΉ!                                 ≑[]⟨ refl⟩∘'⟨ refl⟩∘'⟨ (introl[] _ (H.^*-lifts _ _ .invr')) βŸ©β‰‘[]
        ΞΈ^*← ∘' F.₁' f ∘' (ψ^*β†’ ∘' ψ^*←) ∘' F.₁' g ∘' H.ΞΉ!               ≑[]⟨ refl⟩∘'⟨ refl⟩∘'⟨ pullr[] _ (wrap _) βŸ©β‰‘[]
        ΞΈ^*← ∘' F.₁' f ∘' ψ^*β†’ ∘' hom[] (ψ^*← ∘' F.₁' g ∘' Ο†^*β†’)         ≑[]⟨ pushr[] _ (assoc' _ _ _) βˆ™[] wrapl _ βŸ©β‰‘[]
        hom[] (ΞΈ^*← ∘' F.₁' f ∘' ψ^*β†’) ∘' hom[] (ψ^*← ∘' F.₁' g ∘' Ο†^*β†’) ∎[]

  1. In fact, we recover up to identity of functors, definitionally in the relevant components.

      _ : Ο€αΆ  Pβˆ™ F∘ Eβ†’βˆ« ≑ P
    

    This is both inconvenient to work with and needlessly strict.β†©οΈŽ