Ordinals as games #
We define the canonical map Ordinal → SetTheory.PGame
, where every ordinal is mapped to the
game whose left set consists of all previous ordinals.
The map to surreals is defined in Ordinal.toSurreal
.
Main declarations #
Ordinal.toPGame
: The canonical map between ordinals and pre-games.Ordinal.toPGameEmbedding
: The order embedding version of the previous map.
Converts an ordinal into the corresponding pre-game.
Equations
- One or more equations did not get rendered due to their size.
Instances For
theorem
Ordinal.toPGame_def
(o : Ordinal.{u_1})
:
let_fun this := (_ : IsWellOrder (Quotient.out o).α fun (x x_1 : (Quotient.out o).α) => x < x_1);
Ordinal.toPGame o = SetTheory.PGame.mk (Quotient.out o).α PEmpty.{u_1 + 1}
(fun (x : (Quotient.out o).α) => Ordinal.toPGame (Ordinal.typein (fun (x x_1 : (Quotient.out o).α) => x < x_1) x))
PEmpty.elim
@[simp]
@[simp]
Equations
- (_ : IsEmpty (SetTheory.PGame.RightMoves (Ordinal.toPGame o))) = (_ : IsEmpty (SetTheory.PGame.RightMoves (Ordinal.toPGame o)))
noncomputable def
Ordinal.toLeftMovesToPGame
{o : Ordinal.{u_1}}
:
↑(Set.Iio o) ≃ SetTheory.PGame.LeftMoves (Ordinal.toPGame o)
Converts an ordinal less than o
into a move for the PGame
corresponding to o
, and vice
versa.
Equations
- Ordinal.toLeftMovesToPGame = (Ordinal.enumIsoOut o).trans (Equiv.cast (_ : (Quotient.out o).α = SetTheory.PGame.LeftMoves (Ordinal.toPGame o)))
Instances For
@[simp]
theorem
Ordinal.toLeftMovesToPGame_symm_lt
{o : Ordinal.{u_1}}
(i : SetTheory.PGame.LeftMoves (Ordinal.toPGame o))
:
↑(Ordinal.toLeftMovesToPGame.symm i) < o
theorem
Ordinal.toPGame_moveLeft_hEq
{o : Ordinal.{u_1}}
:
let_fun this := (_ : IsWellOrder (Quotient.out o).α fun (x x_1 : (Quotient.out o).α) => x < x_1);
HEq (SetTheory.PGame.moveLeft (Ordinal.toPGame o)) fun (x : (Quotient.out o).α) =>
Ordinal.toPGame (Ordinal.typein (fun (x x_1 : (Quotient.out o).α) => x < x_1) x)
@[simp]
theorem
Ordinal.toPGame_moveLeft'
{o : Ordinal.{u_1}}
(i : SetTheory.PGame.LeftMoves (Ordinal.toPGame o))
:
SetTheory.PGame.moveLeft (Ordinal.toPGame o) i = Ordinal.toPGame ↑(Ordinal.toLeftMovesToPGame.symm i)
theorem
Ordinal.toPGame_moveLeft
{o : Ordinal.{u_1}}
(i : ↑(Set.Iio o))
:
SetTheory.PGame.moveLeft (Ordinal.toPGame o) (Ordinal.toLeftMovesToPGame i) = Ordinal.toPGame ↑i
0.toPGame
has the same moves as 0
.
Instances For
@[simp]
@[simp]
1.toPGame
has the same moves as 1
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem
Ordinal.toPGame_lf_iff
{a : Ordinal.{u_1}}
{b : Ordinal.{u_1}}
:
SetTheory.PGame.LF (Ordinal.toPGame a) (Ordinal.toPGame b) ↔ a < b
@[simp]
theorem
Ordinal.toPGame_le_iff
{a : Ordinal.{u_1}}
{b : Ordinal.{u_1}}
:
Ordinal.toPGame a ≤ Ordinal.toPGame b ↔ a ≤ b
@[simp]
theorem
Ordinal.toPGame_lt_iff
{a : Ordinal.{u_1}}
{b : Ordinal.{u_1}}
:
Ordinal.toPGame a < Ordinal.toPGame b ↔ a < b
@[simp]
theorem
Ordinal.toPGame_equiv_iff
{a : Ordinal.{u_1}}
{b : Ordinal.{u_1}}
:
Ordinal.toPGame a ≈ Ordinal.toPGame b ↔ a = b
@[simp]
theorem
Ordinal.toPGame_eq_iff
{a : Ordinal.{u_1}}
{b : Ordinal.{u_1}}
:
Ordinal.toPGame a = Ordinal.toPGame b ↔ a = b
@[simp]
theorem
Ordinal.toPGameEmbedding_apply :
∀ (a : Ordinal.{u}), Ordinal.toPGameEmbedding a = Ordinal.toPGame a
The order embedding version of toPGame
.
Equations
- Ordinal.toPGameEmbedding = { toEmbedding := { toFun := Ordinal.toPGame, inj' := Ordinal.toPGame_injective }, map_rel_iff' := @Ordinal.toPGame_le_iff }
Instances For
theorem
Ordinal.toPGame_add
(a : Ordinal.{u})
(b : Ordinal.{u})
:
Ordinal.toPGame a + Ordinal.toPGame b ≈ Ordinal.toPGame (Ordinal.nadd a b)
The sum of ordinals as games corresponds to natural addition of ordinals.
@[simp]
theorem
Ordinal.toPGame_add_mk'
(a : Ordinal.{u_1})
(b : Ordinal.{u_1})
:
⟦Ordinal.toPGame a⟧ + ⟦Ordinal.toPGame b⟧ = ⟦Ordinal.toPGame (Ordinal.nadd a b)⟧