Documentation

CombinatorialGames.Game.Ordinal

Ordinals as games #

We define the canonical map NatOrdinalIGame, where every ordinal is mapped to the game whose left set consists of all previous ordinals. We make use of the type alias NatOrdinal rather than Ordinal, as this map also preserves addition, and in the case of surreals, multiplication. The map to surreals is defined in NatOrdinal.toSurreal.

We also prove some properties about NatCast, which is related to the previous construction by toIGame (↑n) ≈ ↑n.

Main declarations #

Lemmas to upstream #

@[simp]
theorem OrderEmbedding.antisymmRel_iff_antisymmRel {α : Type u_1} {β : Type u_2} [Preorder α] [Preorder β] {a b : α} (f : α ↪o β) :
f af b ab
theorem OrderEmbedding.antisymmRel_iff_eq {α : Type u_1} {β : Type u_2} [Preorder α] [PartialOrder β] {a b : α} (f : α ↪o β) :
f af b a = b
@[simp]
theorem NatOrdinal.forall_lt_natCast {P : NatOrdinalProp} {n : } :
(∀ a < n, P a) a < n, P a
@[simp]
theorem NatOrdinal.exists_lt_natCast {P : NatOrdinalProp} {n : } :
(∃ a < n, P a) a < n, P a
@[simp]
theorem NatOrdinal.zero_le (o : NatOrdinal) :
0 o
@[simp]
theorem NatOrdinal.lt_add_iff {a b c : NatOrdinal} :
a < b + c (∃ b' < b, a b' + c) c' < c, a b + c'
theorem NatOrdinal.add_le_iff {a b c : NatOrdinal} :
b + c a (∀ b' < b, b' + c < a) c' < c, b + c' < a
theorem NatOrdinal.lt_mul_iff {a b c : NatOrdinal} :
c < a * b a' < a, b' < b, c + a' * b' a' * b + a * b'
theorem NatOrdinal.mul_le_iff {a b c : NatOrdinal} :
a * b c a' < a, b' < b, a' * b + a * b' < c + a' * b'
theorem NatOrdinal.mul_add_lt {a b a' b' : NatOrdinal} (ha : a' < a) (hb : b' < b) :
a' * b + a * b' < a * b + a' * b'
theorem NatOrdinal.nmul_nadd_le {a b a' b' : NatOrdinal} (ha : a' a) (hb : b' b) :
a' * b + a * b' a * b + a' * b'

NatOrdinal to IGame #

theorem NatOrdinal.forall_leftMoves_toIGame_natCast {P : IGameProp} {n : } :
(∀ x(toIGame n).leftMoves, P x) m < n, P (toIGame m)
theorem NatOrdinal.exists_leftMoves_toIGame_natCast {P : IGameProp} {n : } :
(∃ x(toIGame n).leftMoves, P x) m < n, P (toIGame m)
theorem NatOrdinal.forall_leftMoves_toIGame_ofNat {P : IGameProp} {n : } [n.AtLeastTwo] :
(∀ x(toIGame (OfNat.ofNat n)).leftMoves, P x) m < n, P (toIGame m)
theorem NatOrdinal.exists_leftMoves_toIGame_ofNat {P : IGameProp} {n : } [n.AtLeastTwo] :
(∃ x(toIGame (OfNat.ofNat n)).leftMoves, P x) m < n, P (toIGame m)

NatOrdinal to Game #

Converts an ordinal into the corresponding game.

Equations
Instances For
    @[simp]
    @[irreducible]
    theorem NatOrdinal.toIGame_add (a b : NatOrdinal) :
    toIGame (a + b)toIGame a + toIGame b

    The natural addition of ordinals corresponds to their sum as games.

    @[simp]
    @[irreducible]
    theorem NatOrdinal.toIGame_mul (a b : NatOrdinal) :
    toIGame (a * b)toIGame a * toIGame b

    The natural multiplication of ordinals corresponds to their product as games.

    @[simp]

    NatCast properties #

    @[simp]
    theorem NatOrdinal.toGame_natCast (n : ) :
    toGame n = n
    theorem NatOrdinal.toIGame_natCast_equiv (n : ) :
    toIGame nn

    Note that the equality doesn't hold, as e.g. ↑2 = {1 | }, while toIGame 2 = {0, 1 | }.

    @[irreducible]
    theorem IGame.Short.exists_lt_natCast (x : IGame) [x.Short] :
    ∃ (n : ), x < n
    theorem IGame.Short.exists_neg_natCast_lt (x : IGame) [x.Short] :
    ∃ (n : ), -n < x