module Cat.Functor.Adjoint.Colimit {o  o' ℓ' o'' ℓ''}
  {C : Precategory o } {D : Precategory o'  ℓ'} {J : Precategory o'' ℓ''}
  (F : Functor C D) (ff : is-fully-faithful F) {diagram : Functor J C}
  (colim : Colimit {C = D} (F F∘ diagram))
  (ob : Free-object F (Colimit.coapex colim)) where

Free objects and colimits🔗

Suppose that and we have colimit with coapex of the diagram composed with in If there is an adjunction then we have a colimit of the diagram in as left adjoints preserve colimits. Furthermore, if is fully faithful (which is to say this is the data of a reflective subcategory) then is a colimit of

Now, what if we don’t have such an adjunction, and merely a free object for the coapex relative to Free objects are effectively a partial left adjoint, and thus should likewise be “cocontinuous”. Indeed, if is fully faithful, and we have a free object on our coapex relative to then it is a colimit of

free-object→make-is-colimit : make-is-colimit diagram free
free-object→make-is-colimit = record where
  ψ j = F.from (unit D.∘ colim.ψ j)
  universal {x} eta p = fold $ colim.universal (F.₁  eta) (F.collapse  p)

  commutes {x} {y} f = F.ipushr (colim.commutes f)
  factors {j} eta p =
    fold (colim.universal _ _) C.∘ F.from (unit D.∘ colim.ψ j) ≡⟨ F.pouncer (D.pulll ob.commute) 
    F.from (colim.universal _ _ D.∘ colim.ψ j)                 ≡⟨ F.fromn't (colim.factors (F.₁  eta) (F.collapse  p)) 
    eta j                                                      
  unique {y} eta p other p' = ob.unique {y} other $
    colim.unique (F.₁  eta) (F.collapse  p) (F.₁ other D.∘ unit)
      λ j  sym (D.assoc _ _ _)  F.unwhackr (p' j)

free-object→is-colimit : is-colimit diagram free _
free-object→is-colimit = to-is-colimit free-object→make-is-colimit

free-object→colimit : Colimit diagram
free-object→colimit = to-colimit free-object→is-colimit