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

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

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

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

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

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

Ссылки: