package ring

Ordering
  1. Alphabetic
Visibility
  1. Public
  2. Protected

Type Members

  1. trait AdditiveCommutativeGroup[A] extends AdditiveGroup[A] with AdditiveCommutativeMonoid[A]
  2. trait AdditiveCommutativeMonoid[A] extends AdditiveMonoid[A] with AdditiveCommutativeSemigroup[A]
  3. trait AdditiveCommutativeSemigroup[A] extends AdditiveSemigroup[A]
  4. trait AdditiveGroup[A] extends AdditiveMonoid[A]
  5. trait AdditiveGroupFunctions[G[T] <: AdditiveGroup[T]] extends AdditiveMonoidFunctions[G]
  6. trait AdditiveMonoid[A] extends AdditiveSemigroup[A]
  7. trait AdditiveMonoidFunctions[M[T] <: AdditiveMonoid[T]] extends AdditiveSemigroupFunctions[M]
  8. trait AdditiveSemigroup[A] extends Serializable
  9. trait AdditiveSemigroupFunctions[S[T] <: AdditiveSemigroup[T]] extends AnyRef
  10. trait BoolRing[A] extends BoolRng[A] with CommutativeRing[A]

    A Boolean ring is a ring whose multiplication is idempotent, that is a⋅a = a for all elements a.

    A Boolean ring is a ring whose multiplication is idempotent, that is a⋅a = a for all elements a. This property also implies a+a = 0 for all a, and a⋅b = b⋅a (commutativity of multiplication).

    Every Boolean ring is equivalent to a Boolean algebra. See algebra.lattice.BoolFromBoolRing for details.

  11. trait BoolRng[A] extends CommutativeRng[A]

    A Boolean rng is a rng whose multiplication is idempotent, that is a⋅a = a for all elements a.

    A Boolean rng is a rng whose multiplication is idempotent, that is a⋅a = a for all elements a. This property also implies a+a = 0 for all a, and a⋅b = b⋅a (commutativity of multiplication).

    Every BoolRng is equivalent to algebra.lattice.GenBool. See algebra.lattice.GenBoolFromBoolRng for details.

  12. trait CommutativeRig[A] extends Rig[A] with CommutativeSemiring[A] with MultiplicativeCommutativeMonoid[A]

    CommutativeRig is a Rig that is commutative under multiplication.

  13. trait CommutativeRing[A] extends Ring[A] with CommutativeRig[A] with CommutativeRng[A]

    CommutativeRing is a Ring that is commutative under multiplication.

  14. trait CommutativeRng[A] extends Rng[A] with CommutativeSemiring[A]

    CommutativeRng is a Rng that is commutative under multiplication.

  15. trait CommutativeSemifield[A] extends Semifield[A] with CommutativeRig[A] with MultiplicativeCommutativeGroup[A]

    CommutativeSemifield is a Semifield that is commutative under multiplication.

  16. trait CommutativeSemiring[A] extends Semiring[A] with MultiplicativeCommutativeSemigroup[A]

    CommutativeSemiring is a Semiring that is commutative under multiplication.

  17. trait DivisionRing[A] extends Ring[A] with Semifield[A]
  18. trait DivisionRingFunctions[F[T] <: DivisionRing[T]] extends RingFunctions[F] with MultiplicativeGroupFunctions[F]
  19. trait EuclideanRing[A] extends GCDRing[A]

    EuclideanRing implements a Euclidean domain.

    EuclideanRing implements a Euclidean domain.

    The formal definition says that every euclidean domain A has (at least one) euclidean function f: A -> N (the natural numbers) where:

    (for every x and non-zero y) x = yq + r, and r = 0 or f(r) < f(y).

    This generalizes the Euclidean division of integers, where f represents a measure of length (or absolute value), and the previous equation represents finding the quotient and remainder of x and y. So:

    quot(x, y) = q mod(x, y) = r

  20. trait EuclideanRingFunctions[R[T] <: EuclideanRing[T]] extends GCDRingFunctions[R]
  21. trait Field[A] extends EuclideanRing[A] with DivisionRing[A] with CommutativeSemifield[A]
  22. trait FieldFunctions[F[T] <: Field[T]] extends EuclideanRingFunctions[F] with MultiplicativeGroupFunctions[F]
  23. trait GCDRing[A] extends CommutativeRing[A]

    GCDRing implements a GCD ring.

    GCDRing implements a GCD ring.

    For two elements x and y in a GCD ring, we can choose two elements d and m such that:

    d = gcd(x, y) m = lcm(x, y)

    d * m = x * y

    Additionally, we require:

    gcd(0, 0) = 0 lcm(x, 0) = lcm(0, x) = 0

    and commutativity:

    gcd(x, y) = gcd(y, x) lcm(x, y) = lcm(y, x)

  24. trait GCDRingFunctions[R[T] <: GCDRing[T]] extends RingFunctions[R]
  25. trait MultiplicativeCommutativeGroup[A] extends MultiplicativeGroup[A] with MultiplicativeCommutativeMonoid[A]
  26. trait MultiplicativeCommutativeMonoid[A] extends MultiplicativeMonoid[A] with MultiplicativeCommutativeSemigroup[A]
  27. trait MultiplicativeCommutativeSemigroup[A] extends MultiplicativeSemigroup[A]
  28. trait MultiplicativeGroup[A] extends MultiplicativeMonoid[A]
  29. trait MultiplicativeGroupFunctions[G[T] <: MultiplicativeGroup[T]] extends MultiplicativeMonoidFunctions[G]
  30. trait MultiplicativeMonoid[A] extends MultiplicativeSemigroup[A]
  31. trait MultiplicativeMonoidFunctions[M[T] <: MultiplicativeMonoid[T]] extends MultiplicativeSemigroupFunctions[M]
  32. trait MultiplicativeSemigroup[A] extends Serializable
  33. trait MultiplicativeSemigroupFunctions[S[T] <: MultiplicativeSemigroup[T]] extends AnyRef
  34. trait Rig[A] extends Semiring[A] with MultiplicativeMonoid[A]

    Rig consists of:

    Rig consists of:

    • a commutative monoid for addition (+)
    • a monoid for multiplication (*)

    Alternately, a Rig can be thought of as a ring without multiplicative or additive inverses (or as a semiring with a multiplicative identity).

    Mnemonic: "Rig is a Ring without 'N'egation."

  35. trait Ring[A] extends Rig[A] with Rng[A]

    Ring consists of:

    Ring consists of:

    • a commutative group for addition (+)
    • a monoid for multiplication (*)

    Additionally, multiplication must distribute over addition.

    Ring implements some methods (for example fromInt) in terms of other more fundamental methods (zero, one and plus). Where possible, these methods should be overridden by more efficient implementations.

  36. trait RingFunctions[R[T] <: Ring[T]] extends AdditiveGroupFunctions[R] with MultiplicativeMonoidFunctions[R]
  37. trait Rng[A] extends Semiring[A] with AdditiveCommutativeGroup[A]

    Rng (pronounced "Rung") consists of:

    Rng (pronounced "Rung") consists of:

    • a commutative group for addition (+)
    • a semigroup for multiplication (*)

    Alternately, a Rng can be thought of as a ring without a multiplicative identity (or as a semiring with an additive inverse).

    Mnemonic: "Rng is a Ring without multiplicative 'I'dentity."

  38. trait Semifield[A] extends Rig[A] with MultiplicativeGroup[A]

    Semifield consists of:

    Semifield consists of:

    • a commutative monoid for addition (+)
    • a group for multiplication (*)

    Alternately, a Semifield can be thought of as a DivisionRing without an additive inverse.

  39. trait Semiring[A] extends AdditiveCommutativeMonoid[A] with MultiplicativeSemigroup[A]

    Semiring consists of:

    Semiring consists of:

    • a commutative monoid for addition (+)
    • a semigroup for multiplication (*)

    Alternately, a Semiring can be thought of as a ring without a multiplicative identity or an additive inverse.

    A Semiring with an additive inverse (-) is a Rng. A Semiring with a multiplicative identity (1) is a Rig. A Semiring with both of those is a Ring.

  40. trait Signed[A] extends Any

    A trait that expresses the existence of signs and absolute values on linearly ordered additive commutative monoids (i.e.

    A trait that expresses the existence of signs and absolute values on linearly ordered additive commutative monoids (i.e. types with addition and a zero).

    The following laws holds:

    (1) if a <= b then a + c <= b + c (linear order), (2) signum(x) = -1 if x < 0, signum(x) = 1 if x > 0, signum(x) = 0 otherwise,

    Negative elements only appear when the scalar is taken from a additive abelian group. Then:

    (3) abs(x) = -x if x < 0, or x otherwise,

    Laws (1) and (2) lead to the triange inequality:

    (4) abs(a + b) <= abs(a) + abs(b)

    Signed should never be extended in implementations, rather the Signed.forAdditiveCommutativeMonoid and subtraits.

    It's better to have the Signed hierarchy separate from the Ring/Order hierarchy, so that we do not end up with duplicate implicits.

  41. trait SignedFunctions[S[T] <: Signed[T]] extends OrderFunctions[Order]
  42. trait TruncatedDivision[A] extends Signed[A]

    Division and modulus for computer scientists taken from https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf

    Division and modulus for computer scientists taken from https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf

    For two numbers x (dividend) and y (divisor) on an ordered ring with y != 0, there exists a pair of numbers q (quotient) and r (remainder) such that these laws are satisfied:

    (1) q is an integer (2) x = y * q + r (division rule) (3) |r| < |y|, (4t) r = 0 or sign(r) = sign(x), (4f) r = 0 or sign(r) = sign(y).

    where sign is the sign function, and the absolute value function |x| is defined as |x| = x if x >=0, and |x| = -x otherwise.

    We define functions tmod and tquot such that: q = tquot(x, y) and r = tmod(x, y) obey rule (4t), (which truncates effectively towards zero) and functions fmod and fquot such that: q = fquot(x, y) and r = fmod(x, y) obey rule (4f) (which floors the quotient and effectively rounds towards negative infinity).

    Law (4t) corresponds to ISO C99 and Haskell's quot/rem. Law (4f) is described by Knuth and used by Haskell, and fmod corresponds to the REM function of the IEEE floating-point standard.

  43. trait TruncatedDivisionFunctions[S[T] <: TruncatedDivision[T]] extends OrderFunctions[Order] with SignedFunctions[S]

Value Members

  1. object AdditiveCommutativeGroup extends AdditiveGroupFunctions[AdditiveCommutativeGroup] with Serializable
  2. object AdditiveCommutativeMonoid extends AdditiveMonoidFunctions[AdditiveCommutativeMonoid] with Serializable
  3. object AdditiveCommutativeSemigroup extends AdditiveSemigroupFunctions[AdditiveCommutativeSemigroup] with Serializable
  4. object AdditiveGroup extends AdditiveGroupFunctions[AdditiveGroup] with Serializable
  5. object AdditiveMonoid extends AdditiveMonoidFunctions[AdditiveMonoid] with Serializable
  6. object AdditiveSemigroup extends AdditiveSemigroupFunctions[AdditiveSemigroup] with Serializable
  7. object BoolRing extends RingFunctions[BoolRing] with Serializable
  8. object BoolRng extends AdditiveGroupFunctions[BoolRng] with MultiplicativeSemigroupFunctions[BoolRng] with Serializable
  9. object CommutativeRig extends AdditiveMonoidFunctions[CommutativeRig] with MultiplicativeMonoidFunctions[CommutativeRig] with Serializable
  10. object CommutativeRing extends RingFunctions[CommutativeRing] with Serializable
  11. object CommutativeRng extends AdditiveGroupFunctions[CommutativeRng] with MultiplicativeSemigroupFunctions[CommutativeRng] with Serializable
  12. object CommutativeSemifield extends AdditiveMonoidFunctions[CommutativeSemifield] with MultiplicativeGroupFunctions[CommutativeSemifield] with Serializable
  13. object CommutativeSemiring extends AdditiveMonoidFunctions[CommutativeSemiring] with MultiplicativeSemigroupFunctions[CommutativeSemiring] with Serializable
  14. object DivisionRing extends DivisionRingFunctions[DivisionRing] with Serializable
  15. object EuclideanRing extends EuclideanRingFunctions[EuclideanRing] with Serializable
  16. object Field extends FieldFunctions[Field] with Serializable
  17. object GCDRing extends GCDRingFunctions[GCDRing] with Serializable
  18. object MultiplicativeCommutativeGroup extends MultiplicativeGroupFunctions[MultiplicativeCommutativeGroup] with Serializable
  19. object MultiplicativeCommutativeMonoid extends MultiplicativeMonoidFunctions[MultiplicativeCommutativeMonoid] with Serializable
  20. object MultiplicativeCommutativeSemigroup extends MultiplicativeSemigroupFunctions[MultiplicativeCommutativeSemigroup] with Serializable
  21. object MultiplicativeGroup extends MultiplicativeGroupFunctions[MultiplicativeGroup] with Serializable
  22. object MultiplicativeMonoid extends MultiplicativeMonoidFunctions[MultiplicativeMonoid] with Serializable
  23. object MultiplicativeSemigroup extends MultiplicativeSemigroupFunctions[MultiplicativeSemigroup] with Serializable
  24. object Rig extends AdditiveMonoidFunctions[Rig] with MultiplicativeMonoidFunctions[Rig] with Serializable
  25. object Ring extends RingFunctions[Ring] with Serializable
  26. object Rng extends AdditiveGroupFunctions[Rng] with MultiplicativeSemigroupFunctions[Rng] with Serializable
  27. object Semifield extends AdditiveMonoidFunctions[Semifield] with MultiplicativeGroupFunctions[Semifield] with Serializable
  28. object Semiring extends AdditiveMonoidFunctions[Semiring] with MultiplicativeSemigroupFunctions[Semiring] with Serializable
  29. object Signed extends OrderFunctions[Order] with SignedFunctions[Signed]
  30. object TruncatedDivision extends OrderFunctions[Order] with TruncatedDivisionFunctions[TruncatedDivision]

Ungrouped