Идемпотентное полукольцо

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

Идемпотентное полукольцо - это полукольцо, которое также является идемпотентным, т.е. добавление значения к самому себе приводит к тому же значению.

Для полукольца с единицей должны соблюдаться все законы полукольца:

, а также закон идемпотентности сложения:

Определение в виде кода на Scala

trait CSemiring[A] extends Semiring[A]

Законы в виде кода на Scala

trait CSemiringLaw extends SemiringLaw:
  def checkCSemiringLaw[A: CSemiring](
      x: A,
      y: A,
      z: A
  ): ValidatedNel[String, Unit] =
    checkSemiringLaw(x, y, z) combine
      check(
        CSemiring[A].times(x, y) == CSemiring[A].times(y, x),
        "commutative: x * y = y * x"
      )

Примеры

Множества

given [A]: ISemiring[Set[A]] with
  val empty: Set[A]                         = Set.empty[A]
  def combine(x: Set[A], y: Set[A]): Set[A] = x ++ y
  def times(x: Set[A], y: Set[A]): Set[A]   = x.intersect(y)

Реализация


Ссылки: