Абелева группа
Формальное определение
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
Ссылки: