Compare commits

..

4 commits

Author SHA1 Message Date
1a4b9135fc
Show that Setoids is an instance of our ambient category 2023-12-01 18:56:07 +01:00
a0ba49ff2e
Updated structure 2023-12-01 17:19:12 +01:00
b63d5455be
Work on maybe 2023-12-01 15:34:21 +01:00
7be2f41196
minor 2023-12-01 14:46:36 +01:00
21 changed files with 196 additions and 64 deletions

View file

@ -1,10 +1,9 @@
<!-- <!--
```agda ```agda
{-# OPTIONS --allow-unsolved-metas #-}
open import Level open import Level
open import Categories.Functor renaming (id to idF) open import Categories.Functor renaming (id to idF)
open import Categories.Functor.Algebra open import Categories.Functor.Algebra
open import Category.Instance.AmbientCategory using (Ambient) open import Category.Ambient using (Ambient)
``` ```
--> -->

View file

@ -1,8 +1,7 @@
<!-- <!--
```agda ```agda
{-# OPTIONS --allow-unsolved-metas #-}
open import Level open import Level
open import Category.Instance.AmbientCategory using (Ambient) open import Category.Ambient using (Ambient)
open import Categories.FreeObjects.Free open import Categories.FreeObjects.Free
open import Categories.Functor.Core open import Categories.Functor.Core
open import Categories.Functor.Algebra open import Categories.Functor.Algebra

View file

@ -36,14 +36,14 @@ We work in an ambient category that
- has exponentials `X^` - has exponentials `X^`
```agda ```agda
module Category.Instance.AmbientCategory where module Category.Ambient where
record Ambient (o e : Level) : Set (suc o ⊔ suc ⊔ suc e) where record Ambient (o e : Level) : Set (suc o ⊔ suc ⊔ suc e) where
field field
C : Category o e C : Category o e
extensive : Extensive C extensive : Extensive C
cartesian : Cartesian C cartesian : Cartesian C
: ParametrizedNNO (record { U = C ; cartesian = cartesian }) : ParametrizedNNO (record { U = C ; cartesian = cartesian })
_^ : ∀ X → Exponential C (ParametrizedNNO.N ) X -- _^ : ∀ X → Exponential C (ParametrizedNNO.N ) X
cartesianCategory : CartesianCategory o e cartesianCategory : CartesianCategory o e
cartesianCategory = record { U = C ; cartesian = cartesian } cartesianCategory = record { U = C ; cartesian = cartesian }

View file

@ -0,0 +1,111 @@
<!--
```agda
open import Level using (lift; Lift) renaming (suc to -suc)
open import Category.Ambient
open import Categories.Category.Instance.Setoids
open import Categories.Category.Instance.Properties.Setoids.Extensive
open import Categories.Category.Instance.Properties.Setoids.CCC
open import Categories.Category.Monoidal.Instance.Setoids
open import Categories.Category.Instance.SingletonSet
open import Categories.Object.NaturalNumbers
open import Relation.Binary
open import Data.Unit.Polymorphic using (tt; )
open import Data.Empty.Polymorphic using (⊥)
open import Function.Equality as SΠ renaming (id to idₛ)
open import Categories.Object.NaturalNumbers.Properties.Parametrized
open import Categories.Category.Cocartesian
import Relation.Binary.Reasoning.Setoid as SetoidR
import Relation.Binary.PropositionalEquality as Eq
open Eq using (_≡_)
```
-->
# The category of Setoids can be used as instance for ambient category
Most of the required properties are already proven in the agda-categories library, we are only left to construct the natural numbers object.
```agda
module Category.Ambient.Setoid {} where
-- equality on setoid functions
_≋_ : ∀ {A B : Setoid } → A ⟶ B → A ⟶ B → Set
_≋_ {A} {B} f g = Setoid._≈_ (A ⇨ B) f g
≋-sym : ∀ {A B : Setoid } {f g : A ⟶ B} → f ≋ g → g ≋ f
≋-sym {A} {B} {f} {g} = IsEquivalence.sym (Setoid.isEquivalence (A ⇨ B)) {f} {g}
≋-trans : ∀ {A B : Setoid } {f g h : A ⟶ B} → f ≋ g → g ≋ h → f ≋ h
≋-trans {A} {B} {f} {g} {h} = IsEquivalence.trans (Setoid.isEquivalence (A ⇨ B)) {f} {g} {h}
-- we define ourselves, instead of importing it, to avoid lifting the universe lifting (builtin Nats are defined on Set₀)
data : Set where
zero :
suc :
suc-cong : ∀ {n m} → n ≡ m → suc n ≡ suc m
suc-cong n≡m rewrite n≡m = Eq.refl
suc-inj : ∀ {n m} → suc n ≡ suc m → n ≡ m
suc-inj Eq.refl = Eq.refl
-eq : Rel
-eq zero zero =
-eq zero (suc m) = ⊥
-eq (suc n) zero = ⊥
-eq (suc n) (suc m) = -eq n m
-setoid : Setoid
-setoid = record { Carrier = ; _≈_ = _≡_ ; isEquivalence = Eq.isEquivalence }
-setoid : Setoid
-setoid = record
{ Carrier =
; _≈_ = _≡_ -- -eq
; isEquivalence = Eq.isEquivalence
}
zero⟶ : SingletonSetoid {} {} ⟶ -setoid
zero⟶ = record { _⟨$⟩_ = λ _ → zero ; cong = λ x → Eq.refl }
suc⟶ : -setoid ⟶ -setoid
suc⟶ = record { _⟨$⟩_ = suc ; cong = suc-cong }
-universal : ∀ {A : Setoid } → SingletonSetoid {} {} ⟶ A → A ⟶ A → -setoid ⟶ A
-universal {A} z s = record { _⟨$⟩_ = app ; cong = cong' }
where
app : → Setoid.Carrier A
app zero = z ⟨$⟩ tt
app (suc n) = s ⟨$⟩ (app n)
cong' : ∀ {n m : } → n ≡ m → Setoid._≈_ A (app n) (app m)
cong' Eq.refl = IsEquivalence.refl (Setoid.isEquivalence A)
-z-commute : ∀ {A : Setoid } {q : SingletonSetoid {} {} ⟶ A} {f : A ⟶ A} → q ≋ (-universal q f ∘ zero⟶)
-z-commute {A} {q} {f} {lift tt} _ = IsEquivalence.refl (Setoid.isEquivalence A)
-s-commute : ∀ {A : Setoid } {q : SingletonSetoid {} {} ⟶ A} {f : A ⟶ A} → (f ∘ (-universal q f)) ≋ (-universal q f ∘ suc⟶)
-s-commute {A} {q} {f} {n} {m} n≡m rewrite n≡m = IsEquivalence.refl (Setoid.isEquivalence A)
-unique : ∀ {A : Setoid } {q : SingletonSetoid {} {} ⟶ A} {f : A ⟶ A} {u : -setoid ⟶ A} → q ≋ (u ∘ zero⟶) → (f ∘ u) ≋ (u ∘ suc⟶) → u ≋ -universal q f
-unique {A} {q} {f} {u} qz fs {zero} {zero} Eq.refl = (≋-sym {SingletonSetoid} {A} {q} {u ∘ zero⟶} qz) tt
-unique {A} {q} {f} {u} qz fs {suc n} {suc m} Eq.refl = AR.begin
u ⟨$⟩ suc n AR.≈⟨ ≋-sym {-setoid} {A} {f ∘ u} {u ∘ suc⟶} fs Eq.refl ⟩
f ∘ u ⟨$⟩ m AR.≈⟨ cong f (-unique {A} {q} {f} {u} qz fs {n} {m} Eq.refl) ⟩
f ∘ -universal q f ⟨$⟩ n AR.≈⟨ -s-commute {A} {q} {f} {n} Eq.refl ⟩
-universal q f ⟨$⟩ suc m AR.∎
where module AR = SetoidR A
setoidNNO : NNO (Setoids ) SingletonSetoid-
setoidNNO = record
{ N = -setoid
; isNNO = record
{ z = zero⟶
; s = suc⟶
; universal = -universal
; z-commute = λ {A} {q} {f} → -z-commute {A} {q} {f}
; s-commute = λ {A} {q} {f} → -s-commute {A} {q} {f}
; unique = λ {A} {q} {f} {u} qz fs → -unique {A} {q} {f} {u} qz fs
}
}
-- TODO might need explicit PNNO definition if we later have to work with them
setoidAmbient : Ambient (-suc )
setoidAmbient = record { C = Setoids ; extensive = Setoids-Extensive ; cartesian = Setoids-Cartesian ; = NNO×CCC⇒PNNO (record { U = Setoids ; cartesianClosed = Setoids-CCC }) (Cocartesian.coproducts (Setoids-Cocartesian {} {})) setoidNNO }
```

View file

@ -1,6 +1,5 @@
<!-- <!--
```agda ```agda
{-# OPTIONS --allow-unsolved-metas #-}
open import Level open import Level
open import Categories.Category.Cocartesian using (Cocartesian) open import Categories.Category.Cocartesian using (Cocartesian)
open import Categories.Category.Cartesian using (Cartesian) open import Categories.Category.Cartesian using (Cartesian)
@ -14,7 +13,7 @@ open import Categories.Category
open import Categories.Category.Distributive open import Categories.Category.Distributive
open import Categories.Category.Extensive.Bundle open import Categories.Category.Extensive.Bundle
open import Categories.Category.Extensive open import Categories.Category.Extensive
open import Category.Instance.AmbientCategory using (Ambient) open import Category.Ambient using (Ambient)
``` ```
--> -->
@ -210,21 +209,21 @@ module Category.Construction.ElgotAlgebras {o e} (ambient : Ambient o e)
## Exponentials of Elgot Algebras TODO ## Exponentials of Elgot Algebras TODO
```agda ```agda
-- if the carriers of the algebra form a exponential, so do the algebras -- -- if the carriers of the algebra form a exponential, so do the algebras
B^A-Helper : ∀ {EA : Elgot-Algebra} {X : Obj} → Exponential C X (Elgot-Algebra.A EA) → Elgot-Algebra -- B^A-Helper : ∀ {EA : Elgot-Algebra} {X : Obj} → Exponential C X (Elgot-Algebra.A EA) → Elgot-Algebra
B^A-Helper {EA} {X} exp = record -- B^A-Helper {EA} {X} exp = record
{ A = A^X -- { A = A^X
; algebra = record -- ; algebra = record
{ _# = λ {Z} f → λg product (((((eval +₁ idC) ∘ (Categories.Object.Product.repack C product product' +₁ idC)) ∘ dstl) ∘ (f ⁂ idC)) #ᵃ) -- { _# = λ {Z} f → λg product (((((eval +₁ idC) ∘ (Categories.Object.Product.repack C product product' +₁ idC)) ∘ dstl) ∘ (f ⁂ idC)) #ᵃ)
; #-Fixpoint = {! !} -- ; #-Fixpoint = {! !}
; #-Uniformity = {! !} -- ; #-Uniformity = {! !}
; #-Folding = {! !} -- ; #-Folding = {! !}
; #-resp-≈ = {! !} -- ; #-resp-≈ = {! !}
} -- }
} -- }
where -- where
open Exponential exp renaming (B^A to A^X; product to product') -- open Exponential exp renaming (B^A to A^X; product to product')
open Elgot-Algebra EA using (A) renaming (_# to _#ᵃ; #-Fixpoint to #ᵃ-Fixpoint; #-Uniformity to #ᵃ-Uniformity; #-Folding to #ᵃ-Folding; #-resp-≈ to #ᵃ-resp-≈) -- open Elgot-Algebra EA using (A) renaming (_# to _#ᵃ; #-Fixpoint to #ᵃ-Fixpoint; #-Uniformity to #ᵃ-Uniformity; #-Folding to #ᵃ-Folding; #-resp-≈ to #ᵃ-resp-≈)
dstr = λ {X Y Z} → IsIso.inv (isIsoˡ {X} {Y} {Z}) -- dstr = λ {X Y Z} → IsIso.inv (isIsoˡ {X} {Y} {Z})
dstl = λ {X Y Z} → IsIso.inv (isIsoʳ {X} {Y} {Z}) -- dstl = λ {X Y Z} → IsIso.inv (isIsoʳ {X} {Y} {Z})
``` ```

View file

@ -1,7 +1,7 @@
<!-- <!--
```agda ```agda
open import Level open import Level
open import Category.Instance.AmbientCategory open import Category.Ambient using (Ambient)
open import Categories.NaturalTransformation open import Categories.NaturalTransformation
open import Categories.NaturalTransformation.Equivalence open import Categories.NaturalTransformation.Equivalence
open import Categories.Monad open import Categories.Monad

View file

@ -1,7 +1,7 @@
<!-- <!--
```agda ```agda
open import Level open import Level
open import Category.Instance.AmbientCategory open import Category.Ambient using (Ambient)
open import Categories.NaturalTransformation open import Categories.NaturalTransformation
open import Categories.NaturalTransformation.Equivalence open import Categories.NaturalTransformation.Equivalence
open import Categories.Monad open import Categories.Monad

View file

@ -12,7 +12,7 @@ open import Categories.Functor.Algebra
open import Categories.Monad.Construction.Kleisli open import Categories.Monad.Construction.Kleisli
open import Categories.Category.Construction.F-Coalgebras open import Categories.Category.Construction.F-Coalgebras
open import Categories.NaturalTransformation open import Categories.NaturalTransformation
open import Category.Instance.AmbientCategory using (Ambient) open import Category.Ambient using (Ambient)
open import Data.Product using (∃-syntax; _,_; Σ-syntax) open import Data.Product using (∃-syntax; _,_; Σ-syntax)
``` ```
--> -->

View file

@ -1,13 +1,12 @@
<!-- <!--
```agda ```agda
{-# OPTIONS --allow-unsolved-metas #-}
open import Level open import Level
open import Data.Product using (_,_; proj₁; proj₂) open import Data.Product using (_,_; proj₁; proj₂)
open import Categories.Category.Core open import Categories.Category.Core
open import Categories.Functor open import Categories.Functor
open import Categories.Functor.Coalgebra open import Categories.Functor.Coalgebra
open import Category.Instance.AmbientCategory open import Category.Ambient using (Ambient)
open import Monad.Commutative open import Monad.Commutative
open import Monad.Instance.Delay open import Monad.Instance.Delay
open import Categories.Monad open import Categories.Monad

View file

@ -4,7 +4,7 @@
open import Level open import Level
open import Categories.Functor open import Categories.Functor
open import Category.Instance.AmbientCategory using (Ambient) open import Category.Ambient using (Ambient)
open import Categories.Monad open import Categories.Monad
open import Categories.Monad.Construction.Kleisli open import Categories.Monad.Construction.Kleisli
open import Categories.Monad.Relative renaming (Monad to RMonad) open import Categories.Monad.Relative renaming (Monad to RMonad)

View file

@ -4,7 +4,7 @@ open import Level
open import Data.Product using (_,_; proj₁; proj₂) open import Data.Product using (_,_; proj₁; proj₂)
open import Categories.Category open import Categories.Category
open import Category.Instance.AmbientCategory open import Category.Ambient using (Ambient)
open import Categories.Functor open import Categories.Functor
open import Categories.Functor.Coalgebra open import Categories.Functor.Coalgebra
open import Monad.Instance.Delay open import Monad.Instance.Delay

View file

@ -7,7 +7,7 @@ open import Categories.Adjoint using (_⊣_)
open import Categories.Adjoint.Properties using (adjoint⇒monad) open import Categories.Adjoint.Properties using (adjoint⇒monad)
open import Categories.Monad using (Monad) open import Categories.Monad using (Monad)
open import Categories.Monad.Relative using () renaming (Monad to RMonad) open import Categories.Monad.Relative using () renaming (Monad to RMonad)
open import Category.Instance.AmbientCategory using (Ambient) open import Category.Ambient using (Ambient)
open import Categories.Monad.Construction.Kleisli open import Categories.Monad.Construction.Kleisli
``` ```
--> -->

View file

@ -1,8 +1,7 @@
<!-- <!--
```agda ```agda
{-# OPTIONS --allow-unsolved-metas #-}
open import Level open import Level
open import Category.Instance.AmbientCategory open import Category.Ambient using (Ambient)
open import Monad.Commutative open import Monad.Commutative
open import Categories.Monad.Strong open import Categories.Monad.Strong
open import Data.Product using (_,_) renaming (_×_ to _×f_) open import Data.Product using (_,_) renaming (_×_ to _×f_)

View file

@ -2,7 +2,7 @@
```agda ```agda
{-# OPTIONS --allow-unsolved-metas #-} {-# OPTIONS --allow-unsolved-metas #-}
open import Level open import Level
open import Category.Instance.AmbientCategory open import Category.Ambient using (Ambient)
open import Data.Product using (_,_) open import Data.Product using (_,_)
open import Categories.FreeObjects.Free open import Categories.FreeObjects.Free
open import Categories.Category.Construction.Kleisli open import Categories.Category.Construction.Kleisli

View file

@ -3,7 +3,7 @@
{-# OPTIONS --allow-unsolved-metas #-} {-# OPTIONS --allow-unsolved-metas #-}
open import Level open import Level
open import Category.Instance.AmbientCategory open import Category.Ambient using (Ambient)
open import Categories.Category open import Categories.Category
open import Categories.Category.Instance.Setoids open import Categories.Category.Instance.Setoids
open import Categories.Monad open import Categories.Monad
@ -16,32 +16,29 @@ open import Relation.Binary
open import Data.Sum using (_⊎_; inj₁; inj₂) open import Data.Sum using (_⊎_; inj₁; inj₂)
open import Data.Sum.Function.Setoid open import Data.Sum.Function.Setoid
open import Data.Sum.Relation.Binary.Pointwise open import Data.Sum.Relation.Binary.Pointwise
open import Agda.Builtin.Unit using (tt) open import Data.Unit.Polymorphic using (tt; )
open import Data.Unit.Polymorphic using () renaming ( to ⊤ₚ) open import Data.Empty.Polymorphic using (⊥)
open import Data.Empty.Polymorphic using () renaming (⊥ to ⊥ₚ)
open import Categories.NaturalTransformation using (ntHelper) open import Categories.NaturalTransformation using (ntHelper)
open import Function.Base using (id) open import Function.Base using (id)
``` ```
--> -->
```agda ```agda
module Monad.Instance.K.Instance.Maybe {o e} (ambient : Ambient o e) where module Monad.Instance.K.Instance.Maybe {c } where
open Ambient ambient using ()
``` ```
# The Maybe Monad as instance of K # The Maybe Monad as instance of K
Assuming the axiom of choice, the maybe monad is an instance of K in the category of setoids. Assuming the axiom of choice, the maybe monad is an instance of K in the category of setoids.
```agda ```agda
module _ {c : Level} where
data Maybe (A : Set c) : Set c where data Maybe (A : Set c) : Set c where
nothing : Maybe A nothing : Maybe A
just : A → Maybe A just : A → Maybe A
maybe-eq : ∀ (A : Setoid c ) → Maybe (Setoid.Carrier A) → Maybe (Setoid.Carrier A) → Set maybe-eq : ∀ (A : Setoid c ) → Maybe (Setoid.Carrier A) → Maybe (Setoid.Carrier A) → Set
maybe-eq _ nothing nothing = maybe-eq _ nothing nothing =
maybe-eq _ nothing (just y) = ⊥ maybe-eq _ nothing (just y) = ⊥
maybe-eq _ (just x) nothing = ⊥ maybe-eq _ (just x) nothing = ⊥
maybe-eq A (just x) (just y) = Setoid._≈_ A x y maybe-eq A (just x) (just y) = Setoid._≈_ A x y
maybeSetoid : Setoid c → Setoid c maybeSetoid : Setoid c → Setoid c
@ -49,7 +46,7 @@ module _ {c : Level} where
where where
module A = Setoid A module A = Setoid A
refl' : Reflexive (maybe-eq A) refl' : Reflexive (maybe-eq A)
refl' {nothing} = lift tt refl' {nothing} = tt
refl' {just x} = IsEquivalence.refl A.isEquivalence refl' {just x} = IsEquivalence.refl A.isEquivalence
sym' : Symmetric (maybe-eq A) sym' : Symmetric (maybe-eq A)
sym' {nothing} {nothing} = id sym' {nothing} {nothing} = id
@ -59,7 +56,7 @@ module _ {c : Level} where
trans' : Transitive (maybe-eq A) trans' : Transitive (maybe-eq A)
trans' {nothing} {nothing} {nothing} = λ _ → id trans' {nothing} {nothing} {nothing} = λ _ → id
trans' {nothing} {nothing} {just z} = λ _ → id trans' {nothing} {nothing} {just z} = λ _ → id
trans' {nothing} {just y} {nothing} = λ _ _ lift tt trans' {nothing} {just y} {nothing} = λ _ _ → tt
trans' {nothing} {just y} {just z} = λ () trans' {nothing} {just y} {just z} = λ ()
trans' {just x} {nothing} {nothing} = λ () trans' {just x} {nothing} {nothing} = λ ()
trans' {just x} {nothing} {just z} = λ () trans' {just x} {nothing} {just z} = λ ()
@ -78,15 +75,27 @@ module _ {c : Level} where
_≋_ : ∀ {A B : Setoid c } → A ⟶ B → A ⟶ B → Set (c ⊔ ) _≋_ : ∀ {A B : Setoid c } → A ⟶ B → A ⟶ B → Set (c ⊔ )
_≋_ {A} {B} f g = Setoid._≈_ (A ⇨ B) f g _≋_ {A} {B} f g = Setoid._≈_ (A ⇨ B) f g
≋-sym : ∀ {A B : Setoid c } {f g : A ⟶ B} → f ≋ g → g ≋ f
≋-sym {A} {B} {f} {g} = IsEquivalence.sym (Setoid.isEquivalence (A ⇨ B)) {f} {g}
maybeFun-id : ∀ {A : Setoid c } → (maybeFun idₛ) ≋ idₛ {A = maybeSetoid A} maybeFun-id : ∀ {A : Setoid c } → (maybeFun idₛ) ≋ idₛ {A = maybeSetoid A}
maybeFun-id {A} {nothing} {nothing} i≈j = i≈j maybeFun-id {A} {nothing} {nothing} i≈j = i≈j
maybeFun-id {A} {just _} {just _} i≈j = i≈j maybeFun-id {A} {just _} {just _} i≈j = i≈j
maybeFun-comp : ∀ {A B C : Setoid c } (f : A ⟶ B) (g : B ⟶ C) → maybeFun (g ∘ f) ≋ ((maybeFun g) ∘ (maybeFun f))
maybeFun-comp {A} {B} {C} f g {nothing} {nothing} i≈j = i≈j
maybeFun-comp {A} {B} {C} f g {just _} {just _} i≈j = cong g (cong f i≈j)
maybeFun-resp-≈ : ∀ {A B : Setoid c } {f g : A ⟶ B} → f ≋ g → maybeFun f ≋ maybeFun g
maybeFun-resp-≈ {A} {B} {f} {g} f≈g {nothing} {nothing} i≈j = i≈j
maybeFun-resp-≈ {A} {B} {f} {g} f≈g {just _} {just _} i≈j = f≈g i≈j
η : ∀ (A : Setoid c ) → A ⟶ maybeSetoid A η : ∀ (A : Setoid c ) → A ⟶ maybeSetoid A
η A = record { _⟨$⟩_ = just ; cong = id } η A = record { _⟨$⟩_ = just ; cong = id }
η-natural : ∀ {A B : Setoid c } (f : A ⟶ B) → (η B ∘ f) ≋ (maybeFun f ∘ η A)
η-natural {A} {B} f {i} {j} i≈j = cong f i≈j
μ : ∀ (A : Setoid c ) → maybeSetoid (maybeSetoid A) ⟶ maybeSetoid A μ : ∀ (A : Setoid c ) → maybeSetoid (maybeSetoid A) ⟶ maybeSetoid A
μ A = record { _⟨$⟩_ = app ; cong = λ {i} {j} → cong' i j } μ A = record { _⟨$⟩_ = app ; cong = λ {i} {j} → cong' i j }
where where
@ -96,6 +105,25 @@ module _ {c : Level} where
cong' : ∀ (i j : Maybe (Maybe (Setoid.Carrier A))) → maybe-eq (maybeSetoid A) i j → maybe-eq A (app i) (app j) cong' : ∀ (i j : Maybe (Maybe (Setoid.Carrier A))) → maybe-eq (maybeSetoid A) i j → maybe-eq A (app i) (app j)
cong' nothing nothing i≈j = i≈j cong' nothing nothing i≈j = i≈j
cong' (just i) (just j) i≈j = i≈j cong' (just i) (just j) i≈j = i≈j
μ-natural : ∀ {A B : Setoid c } (f : A ⟶ B) → (μ B ∘ maybeFun (maybeFun f)) ≋ (maybeFun f ∘ μ A)
μ-natural {A} {B} f {nothing} {nothing} i≈j = i≈j
μ-natural {A} {B} f {just i} {just j} i≈j = cong (maybeFun f) {i} {j} i≈j
μ-assoc : ∀ {A : Setoid c } → (μ A ∘ maybeFun (μ A)) ≋ (μ A ∘ μ (maybeSetoid A))
μ-assoc {A} {nothing} {nothing} i≈j = i≈j
μ-assoc {A} {just i} {just j} i≈j = cong (μ A) {i} {j} i≈j
μ-sym-assoc : ∀ {A : Setoid c } → (μ A ∘ μ (maybeSetoid A)) ≋ (μ A ∘ maybeFun (μ A))
μ-sym-assoc {A} {nothing} {nothing} i≈j = i≈j
μ-sym-assoc {A} {just i} {just j} i≈j = cong (μ A) {i} {j} i≈j
identityˡ : ∀ {A : Setoid c } → (μ A ∘ maybeFun (η A)) ≋ idₛ
identityˡ {A} {nothing} {nothing} i≈j = i≈j
identityˡ {A} {just _} {just _} i≈j = i≈j
identityʳ : ∀ {A : Setoid c } → (μ A ∘ η (maybeSetoid A)) ≋ idₛ
identityʳ {A} {i} {j} i≈j = i≈j
maybeMonad : Monad (Setoids c ) maybeMonad : Monad (Setoids c )
maybeMonad = record maybeMonad = record
@ -103,21 +131,21 @@ module _ {c : Level} where
{ F₀ = maybeSetoid { F₀ = maybeSetoid
; F₁ = maybeFun ; F₁ = maybeFun
; identity = λ {A} {x} {y} → maybeFun-id {A = A} {x} {y} ; identity = λ {A} {x} {y} → maybeFun-id {A = A} {x} {y}
; homomorphism = {! !} ; homomorphism = λ {A} {B} {C} {f} {g} {i} {j} → maybeFun-comp {A} {B} {C} f g {i} {j}
; F-resp-≈ = {! !} ; F-resp-≈ = maybeFun-resp-≈
} }
; η = ntHelper (record ; η = ntHelper (record
{ η = η { η = η
; commute = {! !} ; commute = η-natural
}) })
; μ = ntHelper (record ; μ = ntHelper (record
{ η = μ { η = μ
; commute = {! !} ; commute = μ-natural
}) })
; assoc = {! !} ; assoc = λ {A} {i} {j} → μ-assoc {A} {i} {j}
; sym-assoc = {! !} ; sym-assoc = λ {A} {i} {j} → μ-sym-assoc {A} {i} {j}
; identityˡ = {! !} ; identityˡ = λ {A} {i} {j} → identityˡ {A} {i} {j}
; identityʳ = {! !} ; identityʳ = λ {A} {i} {j} → identityʳ {A} {i} {j}
} }

View file

@ -3,7 +3,7 @@
{-# OPTIONS --allow-unsolved-metas #-} {-# OPTIONS --allow-unsolved-metas #-}
open import Level open import Level
open import Data.Product using (_,_) open import Data.Product using (_,_)
open import Category.Instance.AmbientCategory open import Category.Ambient using (Ambient)
open import Categories.Object.Terminal open import Categories.Object.Terminal
open import Categories.Functor.Algebra open import Categories.Functor.Algebra
open import Categories.Object.Initial open import Categories.Object.Initial

View file

@ -1,7 +1,7 @@
<!-- <!--
```agda ```agda
open import Level open import Level
open import Category.Instance.AmbientCategory open import Category.Ambient using (Ambient)
open import Categories.FreeObjects.Free open import Categories.FreeObjects.Free
open import Categories.Object.Initial open import Categories.Object.Initial
open import Categories.NaturalTransformation open import Categories.NaturalTransformation

View file

@ -11,7 +11,7 @@ open import Categories.Adjoint.Properties
open import Categories.Monad open import Categories.Monad
open import Categories.Monad.Strong open import Categories.Monad.Strong
open import Categories.Monad.Relative renaming (Monad to RMonad) open import Categories.Monad.Relative renaming (Monad to RMonad)
open import Category.Instance.AmbientCategory using (Ambient) open import Category.Ambient using (Ambient)
open import Categories.NaturalTransformation open import Categories.NaturalTransformation
open import Categories.Object.Terminal open import Categories.Object.Terminal

View file

@ -1,7 +1,7 @@
<!-- <!--
```agda ```agda
open import Level open import Level
open import Category.Instance.AmbientCategory open import Category.Ambient using (Ambient)
open import Categories.FreeObjects.Free open import Categories.FreeObjects.Free
open import Categories.Object.Initial open import Categories.Object.Initial
open import Categories.NaturalTransformation open import Categories.NaturalTransformation

View file

@ -1,9 +1,7 @@
<!-- <!--
```agda ```agda
{-# OPTIONS --allow-unsolved-metas #-}
open import Level open import Level
open import Category.Instance.AmbientCategory using (Ambient) open import Category.Ambient using (Ambient)
open import Categories.Monad.Construction.Kleisli open import Categories.Monad.Construction.Kleisli
open import Categories.Monad open import Categories.Monad
open import Categories.Monad.Strong open import Categories.Monad.Strong

View file

@ -16,7 +16,7 @@ This is an implementation of this paper by Sergey Goncharov: [arxiv](https://arx
The work takes place in an ambient category that fits our needs: The work takes place in an ambient category that fits our needs:
```agda ```agda
open import Category.Instance.AmbientCategory open import Category.Ambient using (Ambient)
``` ```
### Delay Monad ### Delay Monad