Коммутативное полукольцо

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

Коммутативное полукольцо - это полукольцо, с коммутативной операцией умножения: для \(\forall x, y \in S\) выполняется \(x * y = y * x\).

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

, а также закон коммутативности умножения:

Определение в виде кода на 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"
      )

Примеры

Числа относительно сложения с 0 и умножения с 1

(Z, +, *)

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

Реализация


Ссылки: