module Cubical.Categories.Adjoint.Monad where
open import Cubical.Foundations.Prelude
open import Cubical.Categories.Category
open import Cubical.Categories.Functor
open import Cubical.Categories.Monad.Base
open import Cubical.Categories.Adjoint
open import Cubical.Categories.NaturalTransformation.Base
open import Cubical.Categories.NaturalTransformation.Properties
open import Cubical.Categories.NaturalTransformation.More
open import Cubical.Tactics.CategorySolver.Reflection
private
variable
ℓC ℓC' ℓD ℓD' : Level
module _ {C : Category ℓC ℓC'} {D : Category ℓD ℓD'}
(L : Functor C D) (R : Functor D C) where
open UnitCounit
open IsMonad
open _⊣_
open NatIso
open Category
open NatTrans
open Functor
MonadFromAdjunction : (L ⊣ R) → IsMonad (R ∘F L)
η (MonadFromAdjunction L⊣R) = L⊣R .η
N-ob (μ (MonadFromAdjunction L⊣R)) c = R ⟪ L⊣R .ε ⟦ L ⟅ c ⟆ ⟧ ⟫
N-hom (μ (MonadFromAdjunction L⊣R)) f = (R ∘ʳ ((L⊣R .ε) ∘ˡ L)) .N-hom f
idl-μ (MonadFromAdjunction L⊣R) =
makeNatTransPathP
(λ i → F-rUnit i)
(λ i → funcComp R L)
(funExt (λ c → L⊣R .Δ₂ (L ⟅ c ⟆)))
idr-μ (MonadFromAdjunction L⊣R) =
makeNatTransPathP
(λ i → F-lUnit i)
(λ i → funcComp R L)
(funExt (λ c →
compTrans (μ (MonadFromAdjunction L⊣R)) (funcComp R L ∘ʳ L⊣R .η) .N-ob c
≡⟨ refl ⟩
(funcComp R L) ⟪ L⊣R .η ⟦ c ⟧ ⟫ ⋆⟨ C ⟩ R ⟪ L⊣R .ε ⟦ L ⟅ c ⟆ ⟧ ⟫
≡⟨ sym (R .F-seq (L ⟪ L⊣R .η ⟦ c ⟧ ⟫) (L⊣R .ε ⟦ L ⟅ c ⟆ ⟧)) ⟩
R ⟪ (L ⟪ L⊣R .η ⟦ c ⟧ ⟫) ⋆⟨ D ⟩ (L⊣R .ε ⟦ L ⟅ c ⟆ ⟧) ⟫
≡⟨ ((λ i → R ⟪ L⊣R .Δ₁ c i ⟫)) ⟩
R ⟪ D .id ⟫
≡⟨ R .F-id ⟩
C .id ∎))
assoc-μ (MonadFromAdjunction L⊣R) =
makeNatTransPathP
(λ i → F-assoc i)
(λ i → funcComp R L)
(funExt (λ c →
(funcComp R L) ⟪ R ⟪ L⊣R .ε ⟦ L ⟅ c ⟆ ⟧ ⟫ ⟫
⋆⟨ C ⟩ R ⟪ L⊣R .ε ⟦ L ⟅ c ⟆ ⟧ ⟫
≡⟨ sym (R .F-seq (L ⟪ R ⟪ L⊣R .ε ⟦ L ⟅ c ⟆ ⟧ ⟫ ⟫)
(L⊣R .ε ⟦ L ⟅ c ⟆ ⟧)) ⟩
R ⟪ (L ⟪ R ⟪ L⊣R .ε ⟦ L ⟅ c ⟆ ⟧ ⟫ ⟫) ⋆⟨ D ⟩ (L⊣R .ε ⟦ L ⟅ c ⟆ ⟧) ⟫
≡⟨ (λ i → R ⟪ L⊣R .ε .N-hom (L⊣R .ε .N-ob (L ⟅ c ⟆)) i ⟫) ⟩
R ⟪ L⊣R .ε ⟦ L ⟅ funcComp R L ⟅ c ⟆ ⟆ ⟧ ⋆⟨ D ⟩ L⊣R .ε ⟦ L ⟅ c ⟆ ⟧ ⟫
≡⟨ R .F-seq (L⊣R .ε ⟦ L ⟅ funcComp R L ⟅ c ⟆ ⟆ ⟧)
(L⊣R .ε ⟦ L ⟅ c ⟆ ⟧) ⟩
R ⟪ L⊣R .ε ⟦ L ⟅ funcComp R L ⟅ c ⟆ ⟆ ⟧ ⟫ ⋆⟨ C ⟩
R ⟪ L⊣R .ε ⟦ L ⟅ c ⟆ ⟧ ⟫ ∎
))