# Wild monoids
```agda
module structured-types.wild-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.unit-type
open import foundation.universe-levels
open import structured-types.h-spaces
open import structured-types.pointed-types
```
</details>
## Idea
A **wild monoid** is a first–order approximation to an ∞-monoid, i.e. a
∞-monoid-like structure whose laws hold at least up to the first homotopy level,
but may fail at higher levels.
A wild monoid consists of
- an underlying type `A`
- a unit, say `e : A`
- a binary operation on `A`, say `_*_`
- left and right unit laws `e * x = x` and `x * e = x`
- a coherence between the left and right unit laws at the unit
- an associator `(x y z : A) → (x * y) * z = x * (y * z)`
- coherences between the associator and the left and right unit laws
We call such an associator **unital**. It may be described as a coherence of the
following diagram
```text
map-associative-product
(A × A) × A ----> A × (A × A)
| |
(_*_ , id) | | (id, _*_)
∨ ∨
A × A A × A
\ /
(_*_) \ / (_*_)
∨ ∨
A
```
such that the three diagrams below cohere
```text
associator
(e * x) * y ===== e * (x * y)
\\ //
left \\ // left
unit law \\ // unit law
y * z,
```
```text
associator
(x * e) * y ===== x * (e * y)
\\ //
right \\ // left
unit law \\ // unit law
x * y,
```
and
```text
associator
(x * y) * e ===== x * (y * e)
\\ //
right \\ // right
unit law \\ // unit law
x * y
```
for all `x y : A`.
Concretely, we define wild monoids to be
[H-spaces](structured-types.h-spaces.md) equipped with a unital associator.
## Definition
### Unital associators on H-spaces
```agda
module _
{l : Level} (M : H-Space l)
where
associator-H-Space : UU l
associator-H-Space =
(x y z : type-H-Space M) →
Id
( mul-H-Space M (mul-H-Space M x y) z)
( mul-H-Space M x (mul-H-Space M y z))
is-unital-associator : (α : associator-H-Space) → UU l
is-unital-associator α111 =
Σ ( (y z : type-H-Space M) →
Id
( ( α111 (unit-H-Space M) y z) ∙
( left-unit-law-mul-H-Space M
( mul-H-Space M y z)))
( ap
( mul-H-Space' M z)
( left-unit-law-mul-H-Space M y)))
( λ α011 →
Σ ( (x z : type-H-Space M) →
Id
( ( α111 x (unit-H-Space M) z) ∙
( ap
( mul-H-Space M x)
( left-unit-law-mul-H-Space M z)))
( ap
( mul-H-Space' M z)
( right-unit-law-mul-H-Space M x)))
( λ α101 →
Σ ( (x y : type-H-Space M) →
Id
( ( α111 x y (unit-H-Space M)) ∙
( ap
( mul-H-Space M x)
( right-unit-law-mul-H-Space M y)))
( right-unit-law-mul-H-Space M
( mul-H-Space M x y)))
( λ α110 → unit)))
unital-associator : UU l
unital-associator = Σ (associator-H-Space) (is-unital-associator)
```
### Wild monoids
```agda
Wild-Monoid : (l : Level) → UU (lsuc l)
Wild-Monoid l =
Σ (H-Space l) unital-associator
module _
{l : Level} (M : Wild-Monoid l)
where
h-space-Wild-Monoid : H-Space l
h-space-Wild-Monoid = pr1 M
type-Wild-Monoid : UU l
type-Wild-Monoid = type-H-Space h-space-Wild-Monoid
unit-Wild-Monoid : type-Wild-Monoid
unit-Wild-Monoid = unit-H-Space h-space-Wild-Monoid
pointed-type-Wild-Monoid : Pointed-Type l
pointed-type-Wild-Monoid =
pointed-type-H-Space h-space-Wild-Monoid
coherent-unital-mul-Wild-Monoid :
coherent-unital-mul-Pointed-Type pointed-type-Wild-Monoid
coherent-unital-mul-Wild-Monoid =
coherent-unital-mul-H-Space h-space-Wild-Monoid
mul-Wild-Monoid : type-Wild-Monoid → type-Wild-Monoid → type-Wild-Monoid
mul-Wild-Monoid = mul-H-Space h-space-Wild-Monoid
mul-Wild-Monoid' : type-Wild-Monoid → type-Wild-Monoid → type-Wild-Monoid
mul-Wild-Monoid' = mul-H-Space' h-space-Wild-Monoid
ap-mul-Wild-Monoid :
{a b c d : type-Wild-Monoid} →
a = b → c = d → mul-Wild-Monoid a c = mul-Wild-Monoid b d
ap-mul-Wild-Monoid = ap-mul-H-Space h-space-Wild-Monoid
left-unit-law-mul-Wild-Monoid :
(x : type-Wild-Monoid) → mul-Wild-Monoid unit-Wild-Monoid x = x
left-unit-law-mul-Wild-Monoid =
left-unit-law-mul-H-Space h-space-Wild-Monoid
right-unit-law-mul-Wild-Monoid :
(x : type-Wild-Monoid) → mul-Wild-Monoid x unit-Wild-Monoid = x
right-unit-law-mul-Wild-Monoid =
right-unit-law-mul-H-Space h-space-Wild-Monoid
coh-unit-laws-mul-Wild-Monoid :
( left-unit-law-mul-Wild-Monoid unit-Wild-Monoid) =
( right-unit-law-mul-Wild-Monoid unit-Wild-Monoid)
coh-unit-laws-mul-Wild-Monoid =
coh-unit-laws-mul-H-Space h-space-Wild-Monoid
unital-associator-Wild-Monoid :
unital-associator h-space-Wild-Monoid
unital-associator-Wild-Monoid = pr2 M
associator-Wild-Monoid :
associator-H-Space h-space-Wild-Monoid
associator-Wild-Monoid = pr1 unital-associator-Wild-Monoid
associative-mul-Wild-Monoid :
(x y z : type-Wild-Monoid) →
( mul-Wild-Monoid (mul-Wild-Monoid x y) z) =
( mul-Wild-Monoid x (mul-Wild-Monoid y z))
associative-mul-Wild-Monoid = pr1 unital-associator-Wild-Monoid
unit-law-110-associative-Wild-Monoid :
(x y : type-Wild-Monoid) →
Id
( ( associative-mul-Wild-Monoid x y unit-Wild-Monoid) ∙
( ap (mul-Wild-Monoid x) (right-unit-law-mul-Wild-Monoid y)))
( right-unit-law-mul-Wild-Monoid (mul-Wild-Monoid x y))
unit-law-110-associative-Wild-Monoid = pr1 (pr2 (pr2 (pr2 (pr2 M))))
```