# Commutative monoids
```agda
module group-theory.commutative-monoids where
```
<details><summary>Imports</summary>
```agda
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.identity-types
open import foundation.interchange-law
open import foundation.iterated-dependent-product-types
open import foundation.propositions
open import foundation.sets
open import foundation.unital-binary-operations
open import foundation.universe-levels
open import group-theory.monoids
open import group-theory.semigroups
```
</details>
## Idea
A {{#concept "commutative monoid" Agda=Commutative-Monoid}} is a
[monoid](group-theory.monoids.md) `M` in which `xy = yx` holds for all
`x y : M`.
## Definitions
### The predicate on monoids of being commutative
```agda
module _
{l : Level} (M : Monoid l)
where
is-commutative-Monoid : UU l
is-commutative-Monoid =
(x y : type-Monoid M) → mul-Monoid M x y = mul-Monoid M y x
is-prop-is-commutative-Monoid : is-prop is-commutative-Monoid
is-prop-is-commutative-Monoid =
is-prop-iterated-Π 2
( λ x y → is-set-type-Monoid M (mul-Monoid M x y) (mul-Monoid M y x))
is-commutative-prop-Monoid : Prop l
is-commutative-prop-Monoid =
( is-commutative-Monoid , is-prop-is-commutative-Monoid)
```
### Commutative monoids
```agda
Commutative-Monoid : (l : Level) → UU (lsuc l)
Commutative-Monoid l = Σ (Monoid l) is-commutative-Monoid
module _
{l : Level} (M : Commutative-Monoid l)
where
monoid-Commutative-Monoid : Monoid l
monoid-Commutative-Monoid = pr1 M
semigroup-Commutative-Monoid : Semigroup l
semigroup-Commutative-Monoid = semigroup-Monoid monoid-Commutative-Monoid
set-Commutative-Monoid : Set l
set-Commutative-Monoid = set-Monoid monoid-Commutative-Monoid
type-Commutative-Monoid : UU l
type-Commutative-Monoid = type-Monoid monoid-Commutative-Monoid
is-set-type-Commutative-Monoid : is-set type-Commutative-Monoid
is-set-type-Commutative-Monoid = is-set-type-Monoid monoid-Commutative-Monoid
```
### The multiplicative operation of a commutative monoid
```agda
has-associative-mul-Commutative-Monoid :
has-associative-mul-Set set-Commutative-Monoid
has-associative-mul-Commutative-Monoid =
has-associative-mul-Semigroup semigroup-Commutative-Monoid
mul-Commutative-Monoid :
(x y : type-Commutative-Monoid) → type-Commutative-Monoid
mul-Commutative-Monoid = mul-Monoid monoid-Commutative-Monoid
mul-Commutative-Monoid' :
(x y : type-Commutative-Monoid) → type-Commutative-Monoid
mul-Commutative-Monoid' =
mul-Monoid' monoid-Commutative-Monoid
ap-mul-Commutative-Monoid :
{x x' y y' : type-Commutative-Monoid} →
x = x' → y = y' →
mul-Commutative-Monoid x y = mul-Commutative-Monoid x' y'
ap-mul-Commutative-Monoid =
ap-mul-Monoid monoid-Commutative-Monoid
associative-mul-Commutative-Monoid :
(x y z : type-Commutative-Monoid) →
( mul-Commutative-Monoid (mul-Commutative-Monoid x y) z) =
( mul-Commutative-Monoid x (mul-Commutative-Monoid y z))
associative-mul-Commutative-Monoid =
associative-mul-Monoid monoid-Commutative-Monoid
commutative-mul-Commutative-Monoid :
(x y : type-Commutative-Monoid) →
mul-Commutative-Monoid x y = mul-Commutative-Monoid y x
commutative-mul-Commutative-Monoid = pr2 M
interchange-mul-mul-Commutative-Monoid :
(x y x' y' : type-Commutative-Monoid) →
( mul-Commutative-Monoid
( mul-Commutative-Monoid x y)
( mul-Commutative-Monoid x' y')) =
( mul-Commutative-Monoid
( mul-Commutative-Monoid x x')
( mul-Commutative-Monoid y y'))
interchange-mul-mul-Commutative-Monoid =
interchange-law-commutative-and-associative
mul-Commutative-Monoid
commutative-mul-Commutative-Monoid
associative-mul-Commutative-Monoid
right-swap-mul-Commutative-Monoid :
(x y z : type-Commutative-Monoid) →
mul-Commutative-Monoid (mul-Commutative-Monoid x y) z =
mul-Commutative-Monoid (mul-Commutative-Monoid x z) y
right-swap-mul-Commutative-Monoid x y z =
( associative-mul-Commutative-Monoid x y z) ∙
( ap
( mul-Commutative-Monoid x)
( commutative-mul-Commutative-Monoid y z)) ∙
( inv (associative-mul-Commutative-Monoid x z y))
left-swap-mul-Commutative-Monoid :
(x y z : type-Commutative-Monoid) →
mul-Commutative-Monoid x (mul-Commutative-Monoid y z) =
mul-Commutative-Monoid y (mul-Commutative-Monoid x z)
left-swap-mul-Commutative-Monoid x y z =
( inv (associative-mul-Commutative-Monoid x y z)) ∙
( ap
( mul-Commutative-Monoid' z)
( commutative-mul-Commutative-Monoid x y)) ∙
( associative-mul-Commutative-Monoid y x z)
```
### The unit element of a commutative monoid
```agda
module _
{l : Level} (M : Commutative-Monoid l)
where
has-unit-Commutative-Monoid : is-unital (mul-Commutative-Monoid M)
has-unit-Commutative-Monoid =
has-unit-Monoid (monoid-Commutative-Monoid M)
unit-Commutative-Monoid : type-Commutative-Monoid M
unit-Commutative-Monoid = unit-Monoid (monoid-Commutative-Monoid M)
left-unit-law-mul-Commutative-Monoid :
(x : type-Commutative-Monoid M) →
mul-Commutative-Monoid M unit-Commutative-Monoid x = x
left-unit-law-mul-Commutative-Monoid =
left-unit-law-mul-Monoid (monoid-Commutative-Monoid M)
right-unit-law-mul-Commutative-Monoid :
(x : type-Commutative-Monoid M) →
mul-Commutative-Monoid M x unit-Commutative-Monoid = x
right-unit-law-mul-Commutative-Monoid =
right-unit-law-mul-Monoid (monoid-Commutative-Monoid M)
is-unit-Commutative-Monoid : type-Commutative-Monoid M → UU l
is-unit-Commutative-Monoid x = Id x unit-Commutative-Monoid
is-unit-prop-Commutative-Monoid : type-Commutative-Monoid M → Prop l
is-unit-prop-Commutative-Monoid x =
Id-Prop (set-Commutative-Monoid M) x unit-Commutative-Monoid
```