scalabook

Форк
0
63 строки · 2.1 Кб

Абелева группа

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

AbGroup[A]

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

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

  • Замыкание (closure): для \(\forall x, y \in G\) выполняется \(x + y \in G\).
  • Ассоциативность (associativity): для \(\forall x, y, z \in G\) выполняется \((x + y) + z = x + (y + z)\).
  • Тождественность или существования нейтрального элемента (identity): существует \(\exists e \in G\) такой, что для \(\forall x \in G\) выполняется \(e + x = x + e = x\)
  • Обратимость: для \(\forall x \in G\) существует \((-x)\) такой, что \(x + (-x) = (-x) + x = 0\)

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

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

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

trait AbGroup[A] extends Group[A], CMonoid[A]

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

trait AbGroupLaw extends GroupLaw, CMonoidLaw:
def checkAbGroupLaw[A: AbGroup](
x: A,
y: A,
z: A
): ValidatedNel[String, Unit] =
checkGroupLaw(x, y, z) combine checkCMonoidLaw(x, y, z)

Примеры

Целые числа Z являются абелевой группой по сложению

given AbGroup[Int] with
override val empty = 0
override def combine(x: Int, y: Int): Int = x + y
extension (a: Int) override def inverse: Int = -a

Реализация

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

import spire.algebra.AbGroup
AbGroup[Int].inverse(1) // -1

Ссылки:

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

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

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

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