Work on initial pre-Elgot

This commit is contained in:
Leon Vatthauer 2023-11-15 16:00:08 +01:00
parent 08cf9b6f61
commit 60f60ce3bf
Signed by: leonv
SSH key fingerprint: SHA256:G4+ddwoZmhLPRB1agvXzZMXIzkVJ36dUYZXf5NxT+u8
2 changed files with 64 additions and 7 deletions

View file

@ -18,6 +18,7 @@ open import Categories.Category.Core
module Category.Construction.PreElgotMonads {o e} (ambient : Ambient o e) where module Category.Construction.PreElgotMonads {o e} (ambient : Ambient o e) where
open Ambient ambient open Ambient ambient
open import Monad.ElgotMonad ambient open import Monad.ElgotMonad ambient
open import Algebra.ElgotAlgebra ambient
open HomReasoning open HomReasoning
open Equiv open Equiv
open M C open M C
@ -25,12 +26,14 @@ open MR C
module _ (P S : PreElgotMonad) where module _ (P S : PreElgotMonad) where
private private
open PreElgotMonad P using () renaming (T to TP) open PreElgotMonad P using () renaming (T to TP; elgotalgebras to P-elgots)
open PreElgotMonad S using () renaming (T to TS) open PreElgotMonad S using () renaming (T to TS; elgotalgebras to S-elgots)
module TP = Monad TP module TP = Monad TP
module TS = Monad TS module TS = Monad TS
open RMonad (Monad⇒Kleisli C TP) using () renaming (extend to extendP) open RMonad (Monad⇒Kleisli C TP) using () renaming (extend to extendP)
open RMonad (Monad⇒Kleisli C TS) using () renaming (extend to extendS) open RMonad (Monad⇒Kleisli C TS) using () renaming (extend to extendS)
_#P = λ {X} {A} f → P-elgots._# {X} {A} f
_#S = λ {X} {A} f → S-elgots._# {X} {A} f
record PreElgotMonad-Morphism : Set (o ⊔ ⊔ e) where record PreElgotMonad-Morphism : Set (o ⊔ ⊔ e) where
field field
α : NaturalTransformation TP.F TS.F α : NaturalTransformation TP.F TS.F
@ -40,6 +43,7 @@ module _ (P S : PreElgotMonad) where
α.η X ∘ TP.η.η X ≈ TS.η.η X α.η X ∘ TP.η.η X ≈ TS.η.η X
α-μ : ∀ {X} α-μ : ∀ {X}
α.η X ∘ TP.μ.η X ≈ TS.μ.η X ∘ TS.F.₁ (α.η X) ∘ α.η (TP.F.₀ X) α.η X ∘ TP.μ.η X ≈ TS.μ.η X ∘ TS.F.₁ (α.η X) ∘ α.η (TP.F.₀ X)
preserves : ∀ {X A} (f : X ⇒ TP.F.₀ A + X) → α.η A ∘ f #P ≈ ((α.η A +₁ idC) ∘ f) #S
PreElgotMonads : Category (o ⊔ ⊔ e) (o ⊔ ⊔ e) (o ⊔ e) PreElgotMonads : Category (o ⊔ ⊔ e) (o ⊔ ⊔ e) (o ⊔ e)
PreElgotMonads = record PreElgotMonads = record
@ -57,6 +61,7 @@ PreElgotMonads = record
; ∘-resp-≈ = λ f≈h g≈i → ∘-resp-≈ f≈h g≈i ; ∘-resp-≈ = λ f≈h g≈i → ∘-resp-≈ f≈h g≈i
} }
where where
open Elgot-Algebra-on using (#-resp-≈)
id' : ∀ {A : PreElgotMonad} → PreElgotMonad-Morphism A A id' : ∀ {A : PreElgotMonad} → PreElgotMonad-Morphism A A
id' {A} = record id' {A} = record
{ α = ntHelper (record { α = ntHelper (record
@ -68,10 +73,16 @@ PreElgotMonads = record
T.μ.η _ ∘ T.F.₁ idC ∘ idC ≈⟨ refl⟩∘⟨ identityʳ ⟩ T.μ.η _ ∘ T.F.₁ idC ∘ idC ≈⟨ refl⟩∘⟨ identityʳ ⟩
T.μ.η _ ∘ T.F.₁ idC ≈⟨ elimʳ T.F.identity ⟩ T.μ.η _ ∘ T.F.₁ idC ≈⟨ elimʳ T.F.identity ⟩
T.μ.η _ ≈⟨ sym identityˡ ⟩ T.μ.η _ ≈⟨ sym identityˡ ⟩
idC ∘ T.μ.η _ ∎) } idC ∘ T.μ.η _ ∎)
; preserves = λ f → begin
idC ∘ f # ≈⟨ identityˡ ⟩
f # ≈⟨ sym (#-resp-≈ elgotalgebras (elimˡ ([]-unique id-comm-sym id-comm-sym))) ⟩
((idC +₁ idC) ∘ f) # ∎
}
where where
open PreElgotMonad A using (T) open PreElgotMonad A using (T; elgotalgebras)
module T = Monad T module T = Monad T
_# = λ {X} {A} f → elgotalgebras._# {X} {A} f
_∘'_ : ∀ {X Y Z : PreElgotMonad} → PreElgotMonad-Morphism Y Z → PreElgotMonad-Morphism X Y → PreElgotMonad-Morphism X Z _∘'_ : ∀ {X Y Z : PreElgotMonad} → PreElgotMonad-Morphism Y Z → PreElgotMonad-Morphism X Y → PreElgotMonad-Morphism X Z
_∘'_ {X} {Y} {Z} f g = record _∘'_ {X} {Y} {Z} f g = record
{ α = αf ∘ᵥ αg { α = αf ∘ᵥ αg
@ -86,13 +97,21 @@ PreElgotMonads = record
TZ.μ.η A ∘ TZ.F.₁ (αf.η A) ∘ (TZ.F.₁ (αg.η A) ∘ αf.η (TX.F.₀ A)) ∘ αg.η (TX.F.₀ A) ≈⟨ refl⟩∘⟨ pullˡ (pullˡ (sym (Functor.homomorphism TZ.F))) ⟩ TZ.μ.η A ∘ TZ.F.₁ (αf.η A) ∘ (TZ.F.₁ (αg.η A) ∘ αf.η (TX.F.₀ A)) ∘ αg.η (TX.F.₀ A) ≈⟨ refl⟩∘⟨ pullˡ (pullˡ (sym (Functor.homomorphism TZ.F))) ⟩
TZ.μ.η A ∘ (TZ.F.₁ (αf.η A ∘ αg.η A) ∘ αf.η (TX.F.₀ A)) ∘ αg.η (TX.F.₀ A) ≈⟨ refl⟩∘⟨ assoc ⟩ TZ.μ.η A ∘ (TZ.F.₁ (αf.η A ∘ αg.η A) ∘ αf.η (TX.F.₀ A)) ∘ αg.η (TX.F.₀ A) ≈⟨ refl⟩∘⟨ assoc ⟩
TZ.μ.η A ∘ TZ.F.₁ ((αf.η A ∘ αg.η A)) ∘ αf.η (TX.F.₀ A) ∘ αg.η (TX.F.₀ A) ∎ TZ.μ.η A ∘ TZ.F.₁ ((αf.η A ∘ αg.η A)) ∘ αf.η (TX.F.₀ A) ∘ αg.η (TX.F.₀ A) ∎
; preserves = λ {A} {B} h → begin
(αf.η B ∘ αg.η B) ∘ (h #X) ≈⟨ pullʳ (preserves g h) ⟩
αf.η B ∘ ((αg.η B +₁ idC) ∘ h) #Y ≈⟨ preserves f ((αg.η B +₁ idC) ∘ h) ⟩
(((αf.η B +₁ idC) ∘ (αg.η B +₁ idC) ∘ h) #Z) ≈⟨ #-resp-≈ (PreElgotMonad.elgotalgebras Z) (pullˡ (+₁∘+₁ ○ +₁-cong₂ refl identity²)) ⟩
(((αf.η B ∘ αg.η B +₁ idC) ∘ h) #Z) ∎
} }
where where
module TX = Monad (PreElgotMonad.T X) module TX = Monad (PreElgotMonad.T X)
module TY = Monad (PreElgotMonad.T Y) module TY = Monad (PreElgotMonad.T Y)
module TZ = Monad (PreElgotMonad.T Z) module TZ = Monad (PreElgotMonad.T Z)
_#X = λ {A} {B} f → PreElgotMonad.elgotalgebras._# X {A} {B} f
_#Y = λ {A} {B} f → PreElgotMonad.elgotalgebras._# Y {A} {B} f
_#Z = λ {A} {B} f → PreElgotMonad.elgotalgebras._# Z {A} {B} f
open PreElgotMonad-Morphism using (α-η; α-μ) open PreElgotMonad-Morphism using (α-η; α; preserves)
open PreElgotMonad-Morphism f using () renaming (α to αf) open PreElgotMonad-Morphism f using () renaming (α to αf)
open PreElgotMonad-Morphism g using () renaming (α to αg) open PreElgotMonad-Morphism g using () renaming (α to αg)

View file

@ -2,6 +2,11 @@
```agda ```agda
open import Level open import Level
open import Category.Instance.AmbientCategory open import Category.Instance.AmbientCategory
open import Categories.FreeObjects.Free
open import Categories.Object.Initial
open import Categories.NaturalTransformation
open import Categories.NaturalTransformation.Equivalence
open import Categories.Monad
import Monad.Instance.K as MIK import Monad.Instance.K as MIK
``` ```
--> -->
@ -17,7 +22,8 @@ open import Monad.ElgotMonad ambient
open import Monad.Instance.K ambient open import Monad.Instance.K ambient
open import Monad.Instance.K.Compositionality ambient MK open import Monad.Instance.K.Compositionality ambient MK
open import Monad.Instance.K.Commutative ambient MK open import Monad.Instance.K.Commutative ambient MK
open import Categories.FreeObjects.Free open import Category.Construction.PreElgotMonads ambient
open import Category.Construction.ElgotAlgebras ambient
open Equiv open Equiv
open HomReasoning open HomReasoning
@ -43,4 +49,36 @@ preElgot : PreElgotMonad
preElgot = record { T = monadK ; isPreElgot = isPreElgot } preElgot = record { T = monadK ; isPreElgot = isPreElgot }
-- initialPreElgot : -- initialPreElgot :
initialPreElgot : IsInitial PreElgotMonads preElgot
initialPreElgot = record
{ ! = !
; !-unique = !-unique
}
where
! : ∀ {A : PreElgotMonad} → PreElgotMonad-Morphism preElgot A
! {A} = record
{ α = ntHelper (record
{ η = η'
; commute = {!!}
})
; α-η = {!!}
; α-μ = {!!}
}
where
open PreElgotMonad A using (T)
module T = Monad T
open PreElgotMonad preElgot using ()
η' : ∀ (X : Obj) → K.₀ X ⇒ T.F.₀ X
η' X = Elgot-Algebra-Morphism.h (_* {A = record { A = T.F.F₀ X ; algebra = PreElgotMonad.elgotalgebras A }} (T.η.η X))
where open FreeObject (freeElgot X)
!-unique : ∀ {A : PreElgotMonad} (f : PreElgotMonad-Morphism preElgot A) → PreElgotMonad-Morphism.α ! ≃ PreElgotMonad-Morphism.α f
!-unique {A} f {X} = sym (*-uniq (T.η.η X) (record
{ h = α.η X
; preserves = preserves _
}) α-η)
where
open PreElgotMonad-Morphism f using (α; α-η; preserves)
open PreElgotMonad A using (T)
module T = Monad T
open FreeObject (freeElgot X)
``` ```