{-# OPTIONS --safe #-}
{-# OPTIONS --safe #-}
module Cubical.Categories.Comonad.ExtensionSystem where
open import Cubical.Foundations.Prelude
open import Cubical.Categories.Category
open import Cubical.Categories.Functor
open import Cubical.Categories.NaturalTransformation.Base
open import Cubical.Categories.NaturalTransformation.Properties
open import Cubical.Categories.Functors.HomFunctor
open import Cubical.Categories.Constructions.BinProduct
open import Cubical.Categories.Monad.Base
import Cubical.Categories.Monad.ExtensionSystem as MES
private
variable
ℓ ℓ' : Level
module _ (C : Category ℓ ℓ') where
open Category
private
variable
a b c : C .ob
f g h : C [ a , b ]
ExtensionSystemFor = MES.ExtensionSystemFor (C ^op)
ExtensionSystem = MES.ExtensionSystem (C ^op)
COMONAD : Category _ _
COMONAD = (MES.MONAD (C ^op)) ^op
ComonadMorphism = COMONAD .Hom[_,_]
ComonadMorphism≡ = MES.MonadMorphism≡ (C ^op)
module _ (E : ExtensionSystem) where
Kleisli : Category _ _
Kleisli = (MES.Kleisli (C ^op) E) ^op
F : Functor Kleisli C
F = (MES.G (C ^op) E) ^opF
open import Cubical.Categories.Adjoint.UniversalElements
G : RightAdjoint F
G = MES.F (C ^op) E
pull : {T T' : ExtensionSystem} → ComonadMorphism T T' →
Functor (Kleisli T') (Kleisli T)
pull {T}{T'} ϕ = (MES.push (C ^op) ϕ) ^opF
open Functor
pullId : {T : ExtensionSystem} → pull (COMONAD .id {T}) ≡ Id
pullId = Functor≡ (λ c → refl) λ f → C .⋆IdL _
pullComp : {T T' T'' : ExtensionSystem} (ϕ' : COMONAD [ T' , T'' ])
(ϕ : COMONAD [ T , T' ]) →
pull (ϕ' ∘⟨ COMONAD ⟩ ϕ) ≡ (pull ϕ ∘F pull ϕ')
pullComp ϕ' ϕ = Functor≡ (λ _ → refl) (λ f → (C .⋆Assoc _ _ _))