module Cat.Diagram.Colimit.Initial {o h} (C : Precategory o h) where

Initial objects are colimitsšŸ”—

An initial object is equivalently defined as a colimit of the empty diagram.

is-colimit→is-initial
  : āˆ€ {T : Ob} {eta : Ā”F => Const T}
  → is-colimit {C = C} Ā”F T eta
  → is-initial C T
is-colimit→is-initial colim Y = record where
  module colim = is-colimit colim

  centre  = colim.universal (Ī» ()) Ī» ()
  paths _ = colim.unique _ _ _ Ī» ()

is-initial→is-colimit : āˆ€ {T : Ob} {F : Functor ⊄Cat C} → is-initial C T → is-colimit {C = C} F T Ā”nt
is-initial→is-colimit {T} {F} init = to-is-colimitp mc Ī» {} where
  open make-is-colimit
  mc : make-is-colimit F T
  mc .ψ ()
  mc .commutes ()
  mc .universal _ _ = init _ .centre
  mc .factors {}
  mc .unique _ _ _ _ = init _ .paths _

Colimit→Initial : Colimit {C = C} Ā”F → Initial C
Colimit→Initial colim .bot = Colimit.coapex colim
Colimit→Initial colim .has⊄ = is-colimit→is-initial (Colimit.has-colimit colim)

Initial→Colimit : āˆ€ {F : Functor ⊄Cat C} → Initial C → Colimit {C = C} F
Initial→Colimit init = to-colimit (is-initial→is-colimit (init .has⊄))