Function monoids

module group-theory.function-monoids where
Imports
open import foundation.identity-types
open import foundation.sets
open import foundation.universe-levels

open import group-theory.dependent-products-monoids
open import group-theory.monoids
open import group-theory.semigroups

Idea

Given a monoid M and a type X, the function monoid M^X consists of functions from X to the underlying type of M. The multiplicative operation and the unit are given pointwise.

Definition

module _
  {l1 l2 : Level} (M : Monoid l1) (X : UU l2)
  where

  function-Monoid : Monoid (l1  l2)
  function-Monoid = Π-Monoid X  _  M)

  semigroup-function-Monoid : Semigroup (l1  l2)
  semigroup-function-Monoid = semigroup-Π-Monoid X  _  M)

  set-function-Monoid : Set (l1  l2)
  set-function-Monoid = set-Π-Monoid X  _  M)

  type-function-Monoid : UU (l1  l2)
  type-function-Monoid = type-Π-Monoid X  _  M)

  mul-function-Monoid :
    (f g : type-function-Monoid)  type-function-Monoid
  mul-function-Monoid = mul-Π-Monoid X  _  M)

  associative-mul-function-Monoid :
    (f g h : type-function-Monoid) 
    mul-function-Monoid (mul-function-Monoid f g) h 
    mul-function-Monoid f (mul-function-Monoid g h)
  associative-mul-function-Monoid =
    associative-mul-Π-Monoid X  _  M)

  unit-function-Monoid : type-function-Monoid
  unit-function-Monoid = unit-Π-Monoid X  _  M)

  left-unit-law-mul-function-Monoid :
    (f : type-function-Monoid) 
    mul-function-Monoid unit-function-Monoid f  f
  left-unit-law-mul-function-Monoid =
    left-unit-law-mul-Π-Monoid X  _  M)

  right-unit-law-mul-function-Monoid :
    (f : type-function-Monoid) 
    mul-function-Monoid f unit-function-Monoid  f
  right-unit-law-mul-function-Monoid =
    right-unit-law-mul-Π-Monoid X  _  M)

  is-unital-function-Monoid :
    is-unital-Semigroup semigroup-function-Monoid
  is-unital-function-Monoid = is-unital-Π-Monoid X  _  M)