Ordinals as games #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
We define the canonical map ordinal → 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.to_surreal
.
Main declarations #
ordinal.to_pgame
: The canonical map between ordinals and pre-games.ordinal.to_pgame_embedding
: The order embedding version of the previous map.
Converts an ordinal into the corresponding pre-game.
Equations
- o.to_pgame = pgame.mk (quotient.out o).α pempty (λ (x : (quotient.out o).α), let hwf : ordinal.typein has_lt.lt x < o := _ in (ordinal.typein has_lt.lt x).to_pgame) pempty.elim
theorem
ordinal.to_pgame_def
(o : ordinal) :
o.to_pgame = pgame.mk (quotient.out o).α pempty (λ (x : (quotient.out o).α), (ordinal.typein has_lt.lt x).to_pgame) pempty.elim
@[simp]
@[protected, instance]
@[protected, instance]
noncomputable
def
ordinal.to_left_moves_to_pgame
{o : ordinal} :
↥(set.Iio o) ≃ o.to_pgame.left_moves
Converts an ordinal less than o
into a move for the pgame
corresponding to o
, and vice
versa.
Equations
- ordinal.to_left_moves_to_pgame = o.enum_iso_out.to_equiv.trans (equiv.cast ordinal.to_left_moves_to_pgame._proof_1)
@[simp]
theorem
ordinal.to_left_moves_to_pgame_symm_lt
{o : ordinal}
(i : o.to_pgame.left_moves) :
↑(⇑(ordinal.to_left_moves_to_pgame.symm) i) < o
theorem
ordinal.to_pgame_move_left_heq
{o : ordinal} :
o.to_pgame.move_left == λ (x : (quotient.out o).α), (ordinal.typein has_lt.lt x).to_pgame
@[simp]
0.to_pgame
has the same moves as 0
.
@[protected, instance]
Equations
- ordinal.unique_one_to_pgame_left_moves = (equiv.cast ordinal.unique_one_to_pgame_left_moves._proof_1).unique
@[simp]
@[simp]
theorem
ordinal.to_left_moves_one_to_pgame_symm
(i : 1.to_pgame.left_moves) :
⇑(ordinal.to_left_moves_to_pgame.symm) i = ⟨0, _⟩
1.to_pgame
has the same moves as 1
.
Equations
- ordinal.one_to_pgame_relabelling = pgame.relabelling.mk (equiv.equiv_of_unique 1.to_pgame.left_moves 1.left_moves) (equiv.equiv_of_is_empty 1.to_pgame.right_moves 1.right_moves) (λ (i : 1.to_pgame.left_moves), _.mpr (ordinal.one_to_pgame_relabelling._proof_3.mp ordinal.zero_to_pgame_relabelling)) is_empty_elim
@[simp]
The order embedding version of to_pgame
.