aboutsummaryrefslogtreecommitdiff
path: root/Data/Monoid.agda
diff options
context:
space:
mode:
authorJacques Comeaux <jacquesrcomeaux@protonmail.com>2025-12-06 16:37:22 -0600
committerJacques Comeaux <jacquesrcomeaux@protonmail.com>2025-12-06 16:37:22 -0600
commita643b7e119c5f086c67205072afaed3a1da2252e (patch)
treeaa8ba3c1f9ae2056695b14558a2cbd01a6a63d8e /Data/Monoid.agda
parente62bc618513cd9daa9f5cbcc98daa3a4fbf9fb99 (diff)
Add commutative monoid conversions
Diffstat (limited to 'Data/Monoid.agda')
-rw-r--r--Data/Monoid.agda94
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
+ }