Коммутативный моноид

Коммутативный моноид — это алгебраическая структура, которая объединяет свойства моноида и коммутативности. Разберем эти понятия по отдельности, а затем объединим их.

а) Моноид

Моноид — это множество \(M\), на котором определена бинарная операция \(\cdot\) (обычно называемая умножением или композицией), удовлетворяющая следующим свойствам:

б) Коммутативность

Операция \(\cdot\) называется коммутативной, если для любых \(a, b \in M\) выполняется:

\(a \cdot b = b \cdot a.\)

Таким образом, коммутативный моноид — это моноид, в котором операция \(\cdot\) коммутативна. То есть:

Примеры коммутативных моноидов

Зачем нужны коммутативные моноиды?

Коммутативные моноиды находят применение в различных областях:

Формальное определение

CMonoid[A] - моноид, который коммутативен.

Помимо законов моноида:

должен соблюдаться закон:

Код

trait CMonoid[A] extends Monoid[A], CSemigroup[A]

Натуральные числа N образуют коммутативный моноид относительно сложения и 0

given CMonoid[Int] with
  val empty                        = 0
  def combine(x: Int, y: Int): Int = x + y

Законы

Законы наследуются от моноида и коммутативной полугруппы.

Схема

classDiagram
    class Semigroup~A~{
        +combine(x: A, y: A) A
    }  
    class Monoid~A~{
        +empty() A
    }
    Semigroup <|-- Monoid
    class CommutativeSemigroup~A~
    Semigroup <|-- CommutativeSemigroup  
    class CommutativeMonoid~A~
    Monoid <|-- CommutativeMonoid
    CommutativeSemigroup <|-- CommutativeMonoid

Реализация в библиотеках

Реализация в Spire

import spire.algebra.CMonoid

CMonoid.combine(100, CMonoid.empty[Int]) // 100

Ссылки: