diff options
Diffstat (limited to 'Data/Monoid.agda')
| -rw-r--r-- | Data/Monoid.agda | 94 |
1 files changed, 58 insertions, 36 deletions
diff --git a/Data/Monoid.agda b/Data/Monoid.agda index ae2ded9..dba3e79 100644 --- a/Data/Monoid.agda +++ b/Data/Monoid.agda @@ -4,7 +4,7 @@ open import Level using (Level) module Data.Monoid {c ℓ : Level} where open import Categories.Category.Monoidal.Bundle using (SymmetricMonoidalCategory) -open import Category.Instance.Setoids.SymmetricMonoidal {c} {ℓ} using (Setoids-×) +open import Category.Instance.Setoids.SymmetricMonoidal {c} {ℓ} using (Setoids-×; ×-monoidal′) open import Categories.Object.Monoid using (Monoid; Monoid⇒) module Setoids-× = SymmetricMonoidalCategory Setoids-× @@ -14,31 +14,50 @@ import Algebra.Bundles as Alg open import Data.Setoid using (∣_∣) open import Relation.Binary using (Setoid) open import Function using (Func) -open import Data.Product using (curry′; _,_) +open import Data.Product using (curry′; uncurry′; _,_) open Func -- A monoid object in the (monoidal) category of setoids is just a monoid -toMonoid : Monoid Setoids-×.monoidal → Alg.Monoid c ℓ -toMonoid M = record - { Carrier = Carrier - ; _≈_ = _≈_ - ; _∙_ = curry′ (to μ) - ; ε = to η _ - ; isMonoid = record - { isSemigroup = record - { isMagma = record - { isEquivalence = isEquivalence - ; ∙-cong = curry′ (cong μ) - } - ; assoc = λ x y z → assoc {(x , y) , z} - } - ; identity = (λ x → sym (identityˡ {_ , x}) ) , λ x → sym (identityʳ {x , _}) - } - } - where - open Monoid M renaming (Carrier to A) - open Setoid A +open import Function.Construct.Constant using () renaming (function to Const) +open import Categories.Category.Instance.SingletonSet using () renaming (SingletonSetoid to ⊤ₛ) + +opaque + unfolding ×-monoidal′ + toMonoid : Monoid Setoids-×.monoidal → Alg.Monoid c ℓ + toMonoid M = record + { Carrier = Carrier + ; _≈_ = _≈_ + ; _∙_ = curry′ (to μ) + ; ε = to η _ + ; isMonoid = record + { isSemigroup = record + { isMagma = record + { isEquivalence = isEquivalence + ; ∙-cong = curry′ (cong μ) + } + ; assoc = λ x y z → assoc {(x , y) , z} + } + ; identity = (λ x → sym (identityˡ {_ , x}) ) , λ x → sym (identityʳ {x , _}) + } + } + where + open Monoid M renaming (Carrier to A) + open Setoid A + + fromMonoid : Alg.Monoid c ℓ → Monoid Setoids-×.monoidal + fromMonoid M = record + { Carrier = setoid + ; isMonoid = record + { μ = record { to = uncurry′ _∙_ ; cong = uncurry′ ∙-cong } + ; η = Const ⊤ₛ setoid ε + ; assoc = λ { {(x , y) , z} → assoc x y z } + ; identityˡ = λ { {_ , x} → sym (identityˡ x) } + ; identityʳ = λ { {x , _} → sym (identityʳ x) } + } + } + where + open Alg.Monoid M -- A morphism of monoids in the (monoidal) category of setoids is a monoid homomorphism @@ -48,19 +67,22 @@ module _ (M N : Monoid Setoids-×.monoidal) where module N = Alg.Monoid (toMonoid N) open import Data.Product using (Σ; _,_) - open import Function using (_⟶ₛ_; _⟨$⟩_) + open import Function using (_⟶ₛ_) open import Algebra.Morphism using (IsMonoidHomomorphism) open Monoid⇒ - toMonoid⇒ - : Monoid⇒ Setoids-×.monoidal M N - → Σ (M.setoid ⟶ₛ N.setoid) (λ f - → IsMonoidHomomorphism M.rawMonoid N.rawMonoid (to f)) - toMonoid⇒ f = arr f , record - { isMagmaHomomorphism = record - { isRelHomomorphism = record - { cong = cong (arr f) - } - ; homo = λ x y → preserves-μ f {x , y} - } - ; ε-homo = preserves-η f - } + + opaque + + unfolding toMonoid + + toMonoid⇒ + : Monoid⇒ Setoids-×.monoidal M N + → Σ (M.setoid ⟶ₛ N.setoid) (λ f + → IsMonoidHomomorphism M.rawMonoid N.rawMonoid (to f)) + toMonoid⇒ f = arr f , record + { isMagmaHomomorphism = record + { isRelHomomorphism = record { cong = cong (arr f) } + ; homo = λ x y → preserves-μ f {x , y} + } + ; ε-homo = preserves-η f + } |
