Идемпотентная полугруппа

Что такое идемпотентная полугруппа?

Идемпотентная полугруппа — это алгебраическая структура, представляющая собой полугруппу, в которой все элементы обладают свойством идемпотентности. Идемпотентность означает, что результат операции над любым элементом множества с самим собой дает тот же элемент, то есть для любого \(a \in S\) выполняется \(a \cdot a = a\)

Таким образом, идемпотентная полугруппа — это полугруппа, в которой каждый элемент является "самостоятельным" в том смысле, что его умножение на себя не меняет его.

Зачем нужна идемпотентная полугруппа?

Идемпотентные полугруппы играют важную роль в различных областях математики и прикладных наук. Вот несколько причин:

Примеры идемпотентных полугрупп

Идемпотентные полугруппы — это мощный инструмент для моделирования операций, которые не изменяют состояние системы или объекта. Они находят применение в теории решеток, теории автоматов, информатике и других областях, где важную роль играют ассоциативные и идемпотентные операции.

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

Band — это полугруппа, которая также является идемпотентной, т.е. добавление значения к самому себе приводит к тому же значению.

Band должна удовлетворять следующим законам:

Код

trait Band[A] extends Semigroup[A]

Множества

Некоторые операции над множествами являются идемпотентными: объединение, пересечение и т.п. Например, объединение множеств образуют Band:

given [A]: Band[Set[A]] =
  (x: Set[A], y: Set[A]) => x ++ y
  
summon[Band[Set[Int]]].combine(Set(1, 2), Set(1, 2))
// Set(1, 2)  

Законы

... // Законы полугруппы

def checkIdempotency[A](x: A)(using s: Band[A]): ValidatedNel[String, Unit] =
  Either.cond[String, Unit](
    s.combine(x, x) == x,
    (),
    "Не соблюдается идемпотентность: x + x должно быть равно x"
  ).toValidatedNel

Схема

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

Ссылки: