module Cat.Diagram.Limit.Isomorph where

Limits of one-object diagrams🔗

We establish a correspondence between limits of the one-object diagram and isomorphs of objects that are isomorphic to In more detail, a cone over such a diagram is an object with a map and such a cone is limiting if and only if is invertible.

  is-iso→is-limit
    :  {A B : Functor ⊤Cat C} {eps : B F∘ !F => A}
     is-invertible (eps .η tt)
     is-ran !F A B eps
  is-iso→is-limit {A = A} {B} {eps} inv = to-is-limitp ml refl where
    module inv = is-invertible inv
    open make-is-limit

    ml : make-is-limit A (B .F₀ tt)
    ml .ψ = _
    ml .commutes _ = eliml (A .F-id)
    ml .universal eps' _ = inv.inv  eps' tt
    ml .factors eps' _ = cancell inv.invl
    ml .unique eps' _ other com = lswizzle (sym (com tt)) inv.invr

  is-limit→is-iso
    :  {A B : Functor ⊤Cat C} {eps : B F∘ !F => A}
     is-ran !F A B eps
     is-invertible (eps .η tt)
  is-limit→is-iso {A = A} {B} {eps} lim = inv where
    module lim = is-limit lim

    inv : is-invertible (eps .η tt)
    inv = make-invertible
      (lim.universal  _  id)  _  eliml (A .F-id)))
      (lim.factors _ _)
      (lim.unique₂  _  eps .η tt)  _  eliml (A .F-id))
         _  cancell (lim.factors _ _)) λ _  idr _)

  Isomorph→Limit :  {A : Functor ⊤Cat C}  Σ[ B   C  ] B  A .F₀ tt  Limit A
  Isomorph→Limit (A , i) = to-limit {K = !Const A} {eps = !constⁿ (i .to)}
    (is-iso→is-limit (iso→invertible i))

  Limit→Isomorph :  {A}  Limit {C = C} (!Const A)  Σ[ B   C  ] B  A
  Limit→Isomorph lim = lim.apex , invertible→iso _ (is-limit→is-iso lim.has-limit)
    where module lim = Limit lim

Since all functors preserve isomorphisms, this is a (fairly trivial) example of an absolute limit. On the other hand, the functors that reflect these limits are exactly the conservative (i.e., isomorphism-reflecting) functors.

module _ {o h} (C : Precategory o h)  where
  isomorph-is-absolute-limit
    :  {A B : Functor ⊤Cat C} {eps : B F∘ !F => A}
     (ran : is-ran !F A B eps)
     is-absolute-ran ran
  isomorph-is-absolute-limit ran H =
    is-iso→is-limit _ (F-map-invertible H (is-limit→is-iso _ ran))