open import GpdCont.Prelude

open import Cubical.Categories.Category.Base

module GpdCont.Categories.Diagonal {ℓo ℓh} (C : Category ℓo ℓh) ( : Level) where

open import GpdCont.HomotopySet as HSet
open import Cubical.Foundations.HLevels

open import Cubical.Categories.Functor.Base
open import Cubical.Categories.Adjoint.UniversalElements
open import Cubical.Categories.Presheaf.Representable
private
  module C where
    open Category C public

ΠC : (K : hSet )  Category _ _
ΠC K .Category.ob =  K   C.ob
ΠC K .Category.Hom[_,_] x y =  k  C.Hom[ x k , y k ]
ΠC K .Category.id k = C.id
ΠC K .Category._⋆_ f g = λ k  f k C.⋆ g k
ΠC K .Category.⋆IdL f = funExt $ C.⋆IdL  f
ΠC K .Category.⋆IdR f = funExt $ C.⋆IdR  f
ΠC K .Category.⋆Assoc f g h = funExt λ k  C.⋆Assoc (f k) (g k) (h k)
ΠC K .Category.isSetHom = isSetΠ λ k  C.isSetHom

Δ : (K : hSet )  Functor C (ΠC K)
Δ K = ΔK where
  ΔK : Functor _ _
  ΔK .Functor.F-ob c = const c
  ΔK .Functor.F-hom f = const f
  ΔK .Functor.F-id = refl
  ΔK .Functor.F-seq _ _ = refl