Кольцо

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

Кольцо (Ring) - это полукольцо, являющееся абелевой группой по сложению.

Учитывая множество R и операции + и *, мы говорим, что (R, +, *) - это кольцо, если оно удовлетворяет следующим свойствам:

Законы кольца:

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

trait Ring[A] extends AbGroup[A], Semiring[A]

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

trait RingLaw extends AbGroupLaw, SemiringLaw:
  def checkRingLaw[A: Ring](x: A, y: A, z: A): ValidatedNel[String, Unit] =
    checkAbGroupLaw(x, y, z) combine
      checkSemiringLaw(x, y, z)

Примеры

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

(Z, +, *)

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

Матрицы

Набор квадратных матриц заданного размера представляет собой кольцо.

Реализация

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

import spire.algebra.Rng
import spire.math.Rational

Rng.plus(Rational(1, 2), Rational(1, 3))
// val res0: spire.math.Rational = 5/6
Rng.times(Rational(1, 2), Rational(1, 3))
// val res1: spire.math.Rational = 1/6
Rng.pow(Rational(1, 2), 3)
// val res2: spire.math.Rational = 1/8
Rng.negate(Rational(1, 2))
// val res3: spire.math.Rational = -1/2
Rng.minus(Rational(1, 2), Rational(1, 3))
// val res4: spire.math.Rational = 1/6
Rng.zero[Rational]
// val res5: spire.math.Rational = 0

Ссылки: