Sign sequences #
One can define a sequence of approximations for any surreal number x
, such that the n
-th
approximant is the number {s | t}
where s
and t
are the numbers with birthday less than n
which are lesser and greater to x
, respectively. This yields an ordinal-indexed sequence of signs,
where the n
-th entry represents whether the n
-th approximant to x
is lesser, equal, or greater
than x
.
As it turns out, the correspondence between surreal numbers and sign sequences is both bijective and order-preserving, where the order given to sign sequences is the lexicographic ordering.
Todo #
- Define the sign sequence for a surreal number
- Prove that the correspondence is an order isomorphism
- Define the operation
x : y
on games.
Signs #
Equations
- instFintypeSign = { elems := { val := ↑Sign.enumList, nodup := Sign.enumList_nodup }, complete := instFintypeSign._proof_1 }
Equations
- Sign.instNeg = { neg := fun (x : Sign) => match x with | Sign.plus => Sign.minus | Sign.zero => Sign.zero | Sign.minus => Sign.plus }
Equations
- Sign.instInvolutiveNeg = { toNeg := Sign.instNeg, neg_neg := Sign.instInvolutiveNeg._proof_1 }
Equations
- Sign.instOrderBot = { toBot := Sign.instBot, bot_le := Sign.instOrderBot._proof_1 }
Equations
- Sign.instOrderTop = { toTop := Sign.instTop, le_top := Sign.instOrderTop._proof_1 }
Sign sequences #
A sign sequence is a sequence Ordinal → Sign
, which is equal to 0
after some point, and only
takes ⊥
or ⊤
as values before that point.
Sign sequences are ordered lexicographically. We show that sign sequences are order-isomorphic to the surreal numbers.
Equations
- SignSeq = { s : Lex (Ordinal.{?u.6} → Sign) // ∃ (l : Ordinal.{?u.6}), ∀ (a : Ordinal.{?u.6}), s a = 0 ↔ l ≤ a }
Instances For
Equations
- SignSeq.instLinearOrder = inferInstanceAs (LinearOrder { s : Lex (Ordinal.{?u.8} → Sign) // ∃ (l : Ordinal.{?u.8}), ∀ (a : Ordinal.{?u.8}), s a = 0 ↔ l ≤ a })
Construct a sign sequence from a function.
Equations
- SignSeq.mk s l h = ⟨toLex s, ⋯⟩
Instances For
Equations
- SignSeq.instGetElemOrdinalSignTrue = { getElem := fun (s : SignSeq) (o : Ordinal.{?u.15}) (x : True) => ofLex (↑s) o }
The length of a sign sequence is the first ordinal o
such that s[o] = 0
.
Equations
- s.length = Classical.choose ⋯
Instances For
The constant 0
sequence.
Equations
- SignSeq.instZero = { zero := SignSeq.mk (fun (x : Ordinal.{?u.3}) => 0) 0 SignSeq.instZero._proof_1 }
The negative of a sign sequence is created by flipping all signs.
Equations
- SignSeq.instNeg = { neg := fun (s : SignSeq) => SignSeq.mk (fun (a : Ordinal.{?u.6}) => -s[a]) s.length ⋯ }