Коммутативная полугруппа

CSemigroup[A] - полугруппа, которая является коммутативной.

Помимо законов полугруппы:

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

Код

trait CSemigroup[A] extends Semigroup[A]

Законы

Коммутативность означает, что порядок элементов при объединении не важен. Другими словами, результат операции combine будет одинаковым, независимо от того, в каком порядке вы передаёте элементы x и y. Это можно записать так: cs.combine(x, y) == cs.combine(y, x)

Схема

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

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

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

import spire.algebra.CSemigroup

CSemigroup.combine(1, 2) == CSemigroup.combine(2, 1)

Ссылки: