natIsSemiring

com.phasmidsoftware.number.algebra.eager.Nat.natIsSemiring
object natIsSemiring extends Semiring[Nat], Ordering[Nat]

Provides an implementation of the Semiring type class for natural numbers (Nat), enabling operations such as addition and multiplication following the rules of Peano arithmetic.

This instance defines the behavior for:

  • zero: The base natural number NatZero, representing the additive identity.
  • one: The smallest positive natural number, represented as the successor of NatZero.
  • plus: Addition of two natural numbers, defined recursively.
  • times: Multiplication of two natural numbers, defined recursively using addition.
  • compare: Comparison of two natural numbers, defined recursively.

Attributes

Graph
Supertypes
trait Ordering[Nat]
trait PartialOrdering[Nat]
trait Equiv[Nat]
trait Comparator[Nat]
trait Semiring[Nat]
trait MultiplicativeSemigroup[Nat]
trait AdditiveCommutativeMonoid[Nat]
trait AdditiveCommutativeSemigroup[Nat]
trait AdditiveMonoid[Nat]
trait AdditiveSemigroup[Nat]
trait Serializable
class Object
trait Matchable
class Any
Show all
Self type

Members list

Type members

Inherited classlikes

class OrderingOps(lhs: Ordering.this.T)

This inner class defines comparison operators available for T.

This inner class defines comparison operators available for T.

It can't extend AnyVal because it is not a top-level class or a member of a statically accessible object.

Value parameters

lhs

the left-hand side value for infix comparison operations

Attributes

Inherited from:
Ordering
Supertypes
class Object
trait Matchable
class Any

Value members

Concrete methods

def compare(x: Nat, y: Nat): Int

Compares two natural numbers represented using Peano arithmetic.

Compares two natural numbers represented using Peano arithmetic.

The comparison is performed as follows:

  • If both numbers are NatZero, they are considered equal, and the result is 0.
  • If one number is NatZero and the other is not, the result is -1 or 1 depending on the order.
  • If both numbers are successors, the comparison is performed recursively on their predecessors.

Value parameters

x

the first natural number to be compared

y

the second natural number to be compared

Attributes

Returns

an integer representing the result of the comparison: - 0 if x and y are equal - -1 if x is less than y - 1 if x is greater than y

def plus(x: Nat, y: Nat): Nat

Computes the sum of two natural numbers represented using Peano arithmetic.

Computes the sum of two natural numbers represented using Peano arithmetic.

The addition operation is implemented iteratively with tail recursion:

  • If both numbers are NatZero, the result is NatZero.
  • If at least one of the numbers has a successor (Succ), the result is recursively incremented by adding the predecessors of the numbers.

Value parameters

x

the first natural number to be added

y

the second natural number to be added

Attributes

Returns

the sum of the two natural numbers x and y

def times(x: Nat, y: Nat): Nat

Computes the product of two natural numbers represented using Peano arithmetic.

Computes the product of two natural numbers represented using Peano arithmetic.

The multiplication operation is implemented iteratively with tail recursion:

  • If either number is NatZero, the result is NatZero.
  • Otherwise, the result is computed by recursively adding one number to itself based on the value of the other number.

Value parameters

x

the first natural number to be multiplied

y

the second natural number to be multiplied

Attributes

Returns

the product of the two natural numbers x and y

Inherited methods

override def additive: CommutativeMonoid[Nat]

Attributes

Definition Classes
AdditiveCommutativeMonoid -> AdditiveCommutativeSemigroup -> AdditiveMonoid -> AdditiveSemigroup
Inherited from:
AdditiveCommutativeMonoid
override def equiv(x: Nat, y: Nat): Boolean

Returns true if x == y in the ordering.

Returns true if x == y in the ordering.

Value parameters

x

the first value to compare

y

the second value to compare

Attributes

Definition Classes
Ordering -> PartialOrdering -> Equiv
Inherited from:
Ordering
override def gt(x: Nat, y: Nat): Boolean

Returns true if x > y in the ordering.

Returns true if x > y in the ordering.

Value parameters

x

the first value to compare

y

the second value to compare

Attributes

Definition Classes
Ordering -> PartialOrdering
Inherited from:
Ordering
override def gteq(x: Nat, y: Nat): Boolean

Returns true if x >= y in the ordering.

Returns true if x >= y in the ordering.

Value parameters

x

the first value to compare

y

the second value to compare

Attributes

Definition Classes
Ordering -> PartialOrdering
Inherited from:
Ordering
def isReverseOf(other: Ordering[_]): Boolean

Returns whether or not the other ordering is the opposite ordering of this one.

Returns whether or not the other ordering is the opposite ordering of this one.

Equivalent to other == this.reverse.

Implementations should only override this method if they are overriding reverse as well.

Value parameters

other

the ordering to check

Attributes

Returns

true if other is the reverse of this ordering, false otherwise

Inherited from:
Ordering
def isZero(a: Nat)(implicit ev: Eq[Nat]): Boolean

Tests if a is zero.

Tests if a is zero.

Attributes

Inherited from:
AdditiveMonoid
override def lt(x: Nat, y: Nat): Boolean

Returns true if x < y in the ordering.

Returns true if x < y in the ordering.

Value parameters

x

the first value to compare

y

the second value to compare

Attributes

Definition Classes
Ordering -> PartialOrdering
Inherited from:
Ordering
override def lteq(x: Nat, y: Nat): Boolean

Returns true if x <= y in the ordering.

Returns true if x <= y in the ordering.

Value parameters

x

the first value to compare

y

the second value to compare

Attributes

Definition Classes
Ordering -> PartialOrdering
Inherited from:
Ordering
def max[U <: Nat](x: U, y: U): U

Returns x if x >= y, otherwise y.

Returns x if x >= y, otherwise y.

Type parameters

U

a subtype of T, used to preserve the specific type in the return value

Value parameters

x

the first candidate value

y

the second candidate value

Attributes

Inherited from:
Ordering
def min[U <: Nat](x: U, y: U): U

Returns x if x <= y, otherwise y.

Returns x if x <= y, otherwise y.

Type parameters

U

a subtype of T, used to preserve the specific type in the return value

Value parameters

x

the first candidate value

y

the second candidate value

Attributes

Inherited from:
Ordering
def multiplicative: Semigroup[Nat]

Attributes

Inherited from:
MultiplicativeSemigroup
def on[U](f: U => Nat): Ordering[U]

Given f, a function from U into T, creates an Ordering[U] whose compare function is equivalent to:

Given f, a function from U into T, creates an Ordering[U] whose compare function is equivalent to:

def compare[U, T: Ordering](x: U, y: U, f: U => T) = Ordering[T].compare(f(x), f(y))

Type parameters

U

the type of the values to be ordered

Value parameters

f

the function to extract a T value from a U value

Attributes

Returns

an Ordering[U] that orders values by applying f and comparing the results using this ordering

Inherited from:
Ordering
def orElse(other: Ordering[Nat]): Ordering[Nat]

Creates an Ordering[T] whose compare function returns the result of this Ordering's compare function, if it is non-zero, or else the result of others compare function.

Creates an Ordering[T] whose compare function returns the result of this Ordering's compare function, if it is non-zero, or else the result of others compare function.

Value parameters

other

an Ordering to use if this Ordering returns zero

Attributes

Returns

an Ordering[T] that uses this ordering first, falling back to other when values are equal

Example
case class Pair(a: Int, b: Int)
val pairOrdering = Ordering.by[Pair, Int](_.a)
                          .orElse(Ordering.by[Pair, Int](_.b))
Inherited from:
Ordering
def orElseBy[S](f: Nat => S)(implicit ord: Ordering[S]): Ordering[Nat]

Given f, a function from T into S, creates an Ordering[T] whose compare function returns the result of this Ordering's compare function, if it is non-zero, or else a result equivalent to:

Given f, a function from T into S, creates an Ordering[T] whose compare function returns the result of this Ordering's compare function, if it is non-zero, or else a result equivalent to:

def compare[T, S: Ordering](x: T, y: T, f: T => S) = Ordering[S].compare(f(x), f(y))

This function is equivalent to passing the result of Ordering.by(f) to orElse.

Type parameters

S

the type returned by the extraction function f

Value parameters

f

the function to extract a comparison key from a T value

ord

the implicit ordering for the extracted key type S

Attributes

Returns

an Ordering[T] that uses this ordering first, falling back to comparing by f when values are equal

Example
case class Pair(a: Int, b: Int)
val pairOrdering = Ordering.by[Pair, Int](_.a)
                          .orElseBy[Int](_.b)
Inherited from:
Ordering
def pow(a: Nat, n: Int): Nat

Attributes

Inherited from:
MultiplicativeSemigroup
override def reverse: Ordering[Nat]

Returns the opposite ordering of this one.

Returns the opposite ordering of this one.

Implementations overriding this method MUST override isReverseOf as well if they change the behavior at all (for example, caching does not require overriding it).

Attributes

Returns

an Ordering[T] that compares elements in the reverse order of this ordering

Definition Classes
Ordering -> PartialOrdering
Inherited from:
Ordering
def reversed(): Comparator[Nat]

Attributes

Inherited from:
Comparator
def sum(as: IterableOnce[Nat]): Nat

Given a sequence of as, compute the sum.

Given a sequence of as, compute the sum.

Attributes

Inherited from:
AdditiveMonoid
override def sumN(a: Nat, n: Int): Nat

Attributes

Definition Classes
AdditiveMonoid -> AdditiveSemigroup
Inherited from:
AdditiveMonoid
def thenComparing[U <: Comparable[_ >: U <: <FromJavaObject>]](x$0: Function[_ >: Nat <: <FromJavaObject>, _ <: U]): Comparator[Nat]

Attributes

Inherited from:
Comparator
def thenComparing[U <: <FromJavaObject>](x$0: Function[_ >: Nat <: <FromJavaObject>, _ <: U], x$1: Comparator[_ >: U <: <FromJavaObject>]): Comparator[Nat]

Attributes

Inherited from:
Comparator
def thenComparing(x$0: Comparator[_ >: Nat <: <FromJavaObject>]): Comparator[Nat]

Attributes

Inherited from:
Comparator
def thenComparingDouble(x$0: ToDoubleFunction[_ >: Nat <: <FromJavaObject>]): Comparator[Nat]

Attributes

Inherited from:
Comparator
def thenComparingInt(x$0: ToIntFunction[_ >: Nat <: <FromJavaObject>]): Comparator[Nat]

Attributes

Inherited from:
Comparator
def thenComparingLong(x$0: ToLongFunction[_ >: Nat <: <FromJavaObject>]): Comparator[Nat]

Attributes

Inherited from:
Comparator
def tryCompare(x: Nat, y: Nat): Some[Int]

Returns whether a comparison between x and y is defined, and if so the result of compare(x, y).

Returns whether a comparison between x and y is defined, and if so the result of compare(x, y).

Value parameters

x

the first value to compare

y

the second value to compare

Attributes

Inherited from:
Ordering
def tryProduct(as: IterableOnce[Nat]): Option[Nat]

Given a sequence of as, combine them and return the total.

Given a sequence of as, combine them and return the total.

If the sequence is empty, returns None. Otherwise, returns Some(total).

Attributes

Inherited from:
MultiplicativeSemigroup
override def trySum(as: IterableOnce[Nat]): Option[Nat]

Given a sequence of as, combine them and return the total.

Given a sequence of as, combine them and return the total.

If the sequence is empty, returns None. Otherwise, returns Some(total).

Attributes

Definition Classes
AdditiveMonoid -> AdditiveSemigroup
Inherited from:
AdditiveMonoid

Concrete fields

val one: Nat

Represents the natural number one in Peano arithmetic.

Represents the natural number one in Peano arithmetic.

Attributes

Returns

A value of type Nat representing the successor of zero.

val zero: Nat

Represents the zero value of a natural number.

Represents the zero value of a natural number.

Attributes

Returns

the NatZero instance of the Nat type, representing the starting point of natural numbers.

Implicits

Inherited implicits

implicit def mkOrderingOps(lhs: Nat): OrderingOps

This implicit method augments T with the comparison operators defined in scala.math.Ordering.Ops.

This implicit method augments T with the comparison operators defined in scala.math.Ordering.Ops.

Value parameters

lhs

the value to enrich with ordering operators

Attributes

Inherited from:
Ordering