open import Cat.Prelude
open import Cat.Functor.Hom
open import Cat.Functor.Base
open import Cat.Functor.Constant
open import Cat.Diagram.Colimit.Base
open import Cat.Diagram.Limit.Base
open import Cat.Diagram.Terminal
open import Cat.Diagram.Initial
open import Cat.Instances.Presheaf.Limits
open import Cat.Instances.Presheaf.Exponentials
import Cat.Reasoning
open _=>_
open make-is-colimit
module YonedaColimit {o ℓ} (C : Precategory o ℓ) where
open Cat.Reasoning C
Δ1 : Terminal (PSh ℓ C)
Δ1 = PSh-terminal _ C
open Terminal Δ1
よ-colimit : Colimit (よ C)
よ-colimit = to-colimit (to-is-colimit colim) where
  colim : make-is-colimit (よ C) top
  colim .ψ c = !
  colim .commutes f = ext λ _ _ → refl
  colim .universal eta comm .η x _ = eta x .η x id
  colim .universal eta comm .is-natural x y f = ext λ _ →
    sym (comm f ηₚ y $ₚ id) ∙∙ ap (eta x .η y) id-comm ∙∙ eta x .is-natural _ _ f $ₚ id
  colim .factors eta comm = ext λ x f →
    sym (comm f ηₚ x $ₚ id) ∙ ap (eta _ .η x) (idr _)
  colim .unique eta comm univ' fac' = ext λ x _ → fac' x ηₚ x $ₚ id
Δ0 : Initial (PSh ℓ C)
Δ0 = {! Const ?  !}
よ-limit : Limit (よ C)
よ-limit = to-limit (to-is-limit lim) where
  lim : make-is-limit (よ C) (Const (el! (Lift _ ⊥)))
  lim .make-is-limit.ψ c .η x ()
  lim .make-is-limit.ψ c .is-natural _ _ _ = ext λ ()
  lim .make-is-limit.commutes f = ext λ _ ()
  lim .make-is-limit.universal eps comm .η = {!   !}
  lim .make-is-limit.universal eps comm .is-natural = {!   !}
  lim .make-is-limit.factors = {!   !}
  lim .make-is-limit.unique = {!   !}