# Monoid actions
```agda
module group-theory.monoid-actions where
```
<details><summary>Imports</summary>
```agda
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.endomorphisms
open import foundation.function-extensionality
open import foundation.identity-types
open import foundation.sets
open import foundation.universe-levels
open import group-theory.homomorphisms-monoids
open import group-theory.monoids
```
</details>
## Idea
A **monoid action** of a [monoid](group-theory.monoids.md) `M` on a
[set](foundation-core.sets.md) `X` is a
[monoid homomorphism](group-theory.homomorphisms-monoids.md) from `M` into the
monoid of [endomorphisms](foundation.endomorphisms.md) `X → X`. The fact that
monoid homomorphisms preserve the monoid operation and the unit implies that a
monoid action `μ` of `M` on `X` satisfies the following laws:
```text
μ mn x = μ m (μ n x)
μ 1 x = x.
```
## Definition
### Monoid actions
```agda
action-Monoid : {l1 : Level} (l : Level) (M : Monoid l1) → UU (l1 ⊔ lsuc l)
action-Monoid l M = Σ (Set l) (λ X → hom-Monoid M (endo-Monoid X))
module _
{l1 l2 : Level} (M : Monoid l1) (X : action-Monoid l2 M)
where
set-action-Monoid : Set l2
set-action-Monoid = pr1 X
type-action-Monoid : UU l2
type-action-Monoid = type-Set set-action-Monoid
is-set-type-action-Monoid : is-set type-action-Monoid
is-set-type-action-Monoid = is-set-type-Set set-action-Monoid
mul-hom-monoid-action-Monoid : hom-Monoid M (endo-Monoid set-action-Monoid)
mul-hom-monoid-action-Monoid = pr2 X
mul-action-Monoid : type-Monoid M → type-action-Monoid → type-action-Monoid
mul-action-Monoid =
map-hom-Monoid M
( endo-Monoid set-action-Monoid)
( mul-hom-monoid-action-Monoid)
ap-mul-action-Monoid :
{m : type-Monoid M} {x y : type-action-Monoid} →
x = y → mul-action-Monoid m x = mul-action-Monoid m y
ap-mul-action-Monoid {m} = ap (mul-action-Monoid m)
ap-mul-action-Monoid' :
{m n : type-Monoid M} (p : m = n) {x : type-action-Monoid} →
mul-action-Monoid m x = mul-action-Monoid n x
ap-mul-action-Monoid' p {x} = ap (λ t → mul-action-Monoid t x) p
associative-mul-action-Monoid :
(x y : type-Monoid M) (z : type-action-Monoid) →
mul-action-Monoid (mul-Monoid M x y) z =
mul-action-Monoid x (mul-action-Monoid y z)
associative-mul-action-Monoid x y =
htpy-eq
( preserves-mul-hom-Monoid M
( endo-Monoid set-action-Monoid)
( mul-hom-monoid-action-Monoid))
unit-law-mul-action-Monoid :
(x : type-action-Monoid) → mul-action-Monoid (unit-Monoid M) x = x
unit-law-mul-action-Monoid =
htpy-eq
( preserves-unit-hom-Monoid M
( endo-Monoid set-action-Monoid)
( mul-hom-monoid-action-Monoid))
```