Кольцо с единицей

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

Кольцо с единицей - это кольцо, которое имеет мультипликативную единицу.

Для кольца с единицей должны соблюдаться все законы кольца:

, а также закон тождественности по умножению:

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

trait RingWithUnity[A] extends Ring[A], SemiringWithUnity[A]

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

trait RingWithUnityLaw extends RingLaw, SemiringWithUnityLaw:
  def checkRingWithUnityLaw[A: RingWithUnity](
      x: A,
      y: A,
      z: A
  ): ValidatedNel[String, Unit] =
    checkRingLaw(x, y, z) combine checkSemiringWithUnityLaw(x, y, z)

Примеры

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

(Z, +, *)

given RingWithUnity[Int] with
  val empty: Int                               = 0
  val one: Int                                 = 1
  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.Ring
import spire.math.Rational

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

Ссылки: