Коммутативный моноид
CMonoid[A] - моноид, который коммутативен.
Помимо законов моноида:
- Замыкание (closure): для \(\forall x, y \in CM\) выполняется \(x + y \in CM\).
- Ассоциативность (associativity): для \(\forall x, y, z \in CM\) выполняется \((x + y) + z = x + (y + z)\).
- Тождественность или существования нейтрального элемента (identity): существует \(\exists e \in CM\) такой, что для \(\forall x \in CM\) выполняется \(e + x = x + e = x\)
должен соблюдаться закон:
- Коммутативность (commutative): для \(\forall x, y \in CM\) выполняется \(x + y = y + x\).
Код
trait CMonoid[A] extends Monoid[A], CSemigroup[A]
Законы
Законы наследуются от моноида и коммутативной полугруппы.
Схема
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
CMonoid[A] - моноид, который коммутативен.
import spire.algebra.CMonoid
CMonoid.combine(100, CMonoid.empty[Int]) // 100
Ссылки: