Documentation

CombinatorialGames.Game.Birthday

Birthdays of games #

There are two related but distinct notions of a birthday within combinatorial game theory. One is the birthday of an IGame, which represents the "step" at which it is constructed. We define it recursively as the least ordinal larger than the birthdays of its left and right options. On the other hand, the birthday of a Game is the smallest birthday among all IGames that quotient to it.

The birthday of an IGame can be understood as representing the depth of its game tree. Meanwhile, the birthday of a Game more closely matches Conway's original description. The lemma Game.birthday_eq_iGameBirthday links both definitions together.

Stuff for Mathlib #

theorem ciSup_eq_bot {α : Type u_1} {ι : Sort u_2} [ConditionallyCompleteLinearOrderBot α] {f : ια} (hf : BddAbove (Set.range f)) :
⨆ (i : ι), f i = ∀ (i : ι), f i =
@[simp]
theorem Set.empty_ne_singleton {α : Type u_1} (a : α) :
@[simp]
theorem NatOrdinal.le_zero {x : NatOrdinal} :
x 0 x = 0
theorem NatOrdinal.lt_iSup_iff {ι : Type u_1} [Small.{u, u_1} ι] (f : ιNatOrdinal) {x : NatOrdinal} :
x < ⨆ (i : ι), f i ∃ (i : ι), x < f i
theorem NatOrdinal.iSup_eq_zero_iff {ι : Type u_1} [Small.{u, u_1} ι] {f : ιNatOrdinal} :
⨆ (i : ι), f i = 0 ∀ (i : ι), f i = 0

IGame birthday #

@[irreducible]
noncomputable def IGame.birthday (x : IGame) :

The birthday of an IGame is inductively defined as the least strict upper bound of the birthdays of its options. It may be thought as the "step" in which a certain game is constructed.

Equations
Instances For
    theorem IGame.birthday_le_iff' {x : IGame} {o : NatOrdinal} :
    x.birthday o ∀ (y : IGame), y.IsOption xy.birthday < o
    theorem IGame.lt_birthday_iff {x : IGame} {o : NatOrdinal} :
    o < x.birthday (∃ yx.leftMoves, o y.birthday) yx.rightMoves, o y.birthday
    theorem IGame.birthday_le_iff {x : IGame} {o : NatOrdinal} :
    x.birthday o (∀ yx.leftMoves, y.birthday < o) yx.rightMoves, y.birthday < o
    theorem IGame.birthday_eq_max (x : IGame) :
    x.birthday = max (⨆ (y : x.leftMoves), Order.succ (↑y).birthday) (⨆ (y : x.rightMoves), Order.succ (↑y).birthday)
    @[irreducible]
    @[simp]
    theorem IGame.birthday_eq_zero {x : IGame} :
    x.birthday = 0 x = 0
    @[simp]
    @[simp]
    @[simp, irreducible]
    @[simp, irreducible]
    @[simp, irreducible]
    theorem IGame.birthday_add (x y : IGame) :
    @[simp]
    theorem IGame.birthday_sub (x y : IGame) :
    @[simp]
    theorem IGame.birthday_natCast (n : ) :
    (↑n).birthday = n
    @[simp]
    @[simp]
    @[simp]
    @[irreducible]

    Games with a bounded birthday form a small set.

    Games with a bounded birthday form a small set.

    Short games #

    noncomputable def IGame.birthdayFinset :

    The finset of all games with birthday ≤ n.

    Equations
    Instances For
      theorem IGame.birthdayFinset_one :
      birthdayFinset 1 = { val := [0, 1, -1, ], nodup := }
      theorem IGame.mem_birthdayFinset_of_isOption {x y : IGame} {n : } (hnx : x birthdayFinset (n + 1)) (hy : y.IsOption x) :
      @[simp]

      Game birthday #

      noncomputable def Game.birthday (x : Game) :

      The birthday of a game is defined as the least birthday among all pre-games that define it.

      Equations
      Instances For
        @[simp]
        @[simp]
        theorem Game.birthday_eq_zero {x : Game} :
        x.birthday = 0 x = 0
        @[simp]
        @[simp]
        theorem Game.birthday_natCast (n : ) :
        (↑n).birthday = n
        @[simp]
        @[simp]

        Games with a bounded birthday form a small set.

        Games with a bounded birthday form a small set.