{-# OPTIONS --without-K --safe #-} open import Categories.Category.Core using (Category) open import Categories.Category.Monoidal.Core using (Monoidal) open import Categories.Category.Monoidal.Symmetric using (Symmetric) open import Level using (Level; _βŠ”_) module Category.Construction.CMonoids.Properties {o β„“ e : Level} {π’ž : Category o β„“ e} {monoidal : Monoidal π’ž} (symmetric : Symmetric monoidal) where import Categories.Category.Monoidal.Reasoning monoidal as βŠ—-Reasoning import Categories.Morphism.Reasoning π’ž as β‡’-Reasoning import Category.Construction.Monoids.Properties {o} {β„“} {e} {π’ž} monoidal as Monoids open import Categories.Category using (_[_,_]) open import Categories.Category.Monoidal.Symmetric.Properties symmetric using (module Shorthands) open import Categories.Morphism using (_β‰…_) open import Categories.Morphism.Notation using (_[_β‰…_]) open import Categories.Object.Monoid monoidal using (Monoid) open import Category.Construction.CMonoids symmetric using (CMonoids) open import Data.Product using (Ξ£-syntax; _,_) open import Object.Monoid.Commutative symmetric using (CommutativeMonoid) module π’ž = Category π’ž open CommutativeMonoid using (monoid) renaming (Carrier to ∣_∣) transport-by-iso : {X : π’ž.Obj} β†’ (M : CommutativeMonoid) β†’ π’ž [ ∣ M ∣ β‰… X ] β†’ Ξ£[ Xβ‚˜ ∈ CommutativeMonoid ] CMonoids [ M β‰… Xβ‚˜ ] transport-by-iso {X} M ∣Mβˆ£β‰…X using (Xβ‚˜β€² , Mβ‰…Xβ‚˜β€²) ← Monoids.transport-by-iso {X} (monoid M) ∣Mβˆ£β‰…X = Xβ‚˜ , Mβ‰…Xβ‚˜ where module Mβ‰…Xβ‚˜β€² = _β‰…_ Mβ‰…Xβ‚˜β€² open _β‰…_ ∣Mβˆ£β‰…X module Xβ‚˜β€² = Monoid Xβ‚˜β€² open CommutativeMonoid M open π’ž using (_β‰ˆ_; _∘_) open Shorthands open βŠ—-Reasoning open β‡’-Reasoning open Symmetric symmetric using (_βŠ—β‚_; module braiding) comm : from ∘ ΞΌ ∘ to βŠ—β‚ to β‰ˆ (from ∘ ΞΌ ∘ to βŠ—β‚ to) ∘ Οƒβ‡’ comm = begin from ∘ ΞΌ ∘ to βŠ—β‚ to β‰ˆβŸ¨ push-center (commutative) ⟩ from ∘ ΞΌ ∘ Οƒβ‡’ ∘ to βŠ—β‚ to β‰ˆβŸ¨ pushΚ³ (pushΚ³ (braiding.β‡’.commute (to , to))) ⟩ (from ∘ ΞΌ ∘ to βŠ—β‚ to) ∘ Οƒβ‡’ ∎ Xβ‚˜ : CommutativeMonoid Xβ‚˜ = record { Carrier = X ; isCommutativeMonoid = record { isMonoid = Xβ‚˜β€².isMonoid ; commutative = comm } } Mβ‡’Xβ‚˜ : CMonoids [ M , Xβ‚˜ ] Mβ‡’Xβ‚˜ = record { monoidβ‡’ = Mβ‰…Xβ‚˜β€².from } Xβ‚˜β‡’M : CMonoids [ Xβ‚˜ , M ] Xβ‚˜β‡’M = record { monoidβ‡’ = Mβ‰…Xβ‚˜β€².to } Mβ‰…Xβ‚˜ : CMonoids [ M β‰… Xβ‚˜ ] Mβ‰…Xβ‚˜ = record { from = Mβ‡’Xβ‚˜ ; to = Xβ‚˜β‡’M ; iso = record { isoΛ‘ = isoΛ‘ ; isoΚ³ = isoΚ³ } }