scalabook

Форк
0
/
csemigroup.md 
60 строк · 1.6 Кб

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

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

CSemigroup[A]

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

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

  • Замыкание (closure): для \(\forall x, y \in CS\) выполняется \(x + y \in CS\).
  • Ассоциативность (associativity): для \(\forall x, y, z \in CS\) выполняется \((x + y) + z = x + (y + z)\).

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

  • Коммутативность (commutative): для \(\forall x, y \in CS\) выполняется \(x + y = y + x\).

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

trait CSemigroup[A] extends Semigroup[A]

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

trait CSemigroupLaw extends SemigroupLaw:
def checkCSemigroupLaw[A: CSemigroup](
x: A,
y: A,
z: A
): ValidatedNel[String, Unit] =
checkSemigroupLaw(x, y, z) combine
check(
CSemigroup[A].combine(x, y) == CSemigroup[A].combine(y, x),
"commutative: x + y = y + x"
)

Примеры

Натуральные числа N образуют коммутативную полугруппу относительно сложения

given CSemigroup[Int] = (x: Int, y: Int) => x + y

Реализация

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

import spire.algebra.CSemigroup
CSemigroup.combine(1, 2) == CSemigroup.combine(2, 1)

Ссылки:

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.