Nimber multiplication and division #
The nim product a * b
is recursively defined as the least nimber not equal to any
a' * b + a * b' + a' * b'
for a' < a
and b' < b
. When endowed with this operation, the nimbers
form a field.
It's possible to show the existence of the nimber inverse implicitly via the simplicity theorem.
Instead, we employ the explicit formula given in On Numbers And Games (p. 56), which
uses mutual induction and mimics the definition for the surreal inverse. This definition invAux
"accidentally" gives the inverse of 0
as 1
, which the real inverse corrects.
Todo #
- Show the nimbers are algebraically closed.
Nimber multiplication #
Nimber multiplication is recursively defined so that a * b
is the smallest nimber not equal to
a' * b + a * b' + a' * b'
for a' < a
and b' < b
.
Equations
Instances For
Equations
- Nimber.instMulZeroClass = { toMul := Nimber.instMul, toZero := instNimberZero, zero_mul := Nimber.instMulZeroClass._proof_5, mul_zero := Nimber.instMulZeroClass._proof_6 }
Equations
- One or more equations did not get rendered due to their size.
Equations
- Nimber.instCancelMonoidWithZero = { toMonoidWithZero := Semiring.toMonoidWithZero, toIsCancelMulZero := Nimber.instIsCancelMulZero }
Nimber division #
The nimber inverse a⁻¹
is mutually recursively defined as the smallest nimber not in the set
s = invSet a
, which itself is defined as the smallest set with 0 ∈ s
and
(1 + (a + a') * b) / a' ∈ s
for 0 < a' < a
and b ∈ s
.
This preliminary definition "accidentally" satisfies invAux 0 = 1
, which the real inverse
corrects. The lemma inv_eq_invAux
can be used to transfer between the two.
Instances For
Equations
- One or more equations did not get rendered due to their size.