Documentation

Mathlib.SetTheory.Game.Ordinal

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 #

@[irreducible]

Converts an ordinal into the corresponding pre-game.

Equations
Instances For
    @[deprecated]
    theorem Ordinal.toPGame_def (o : Ordinal.{u_1}) :
    o.toPGame = SetTheory.PGame.mk o.toType PEmpty.{u_1 + 1} (fun (x : o.toType) => (↑(o.enumIsoToType.symm x)).toPGame) PEmpty.elim
    @[simp]
    theorem Ordinal.toPGame_leftMoves (o : Ordinal.{u_1}) :
    o.toPGame.LeftMoves = o.toType
    @[simp]
    theorem Ordinal.toPGame_rightMoves (o : Ordinal.{u_1}) :
    o.toPGame.RightMoves = PEmpty.{u_1 + 1}
    instance Ordinal.isEmpty_toPGame_rightMoves (o : Ordinal.{u_1}) :
    IsEmpty o.toPGame.RightMoves
    Equations
    • ⋯ = ⋯
    noncomputable def Ordinal.toLeftMovesToPGame {o : Ordinal.{u_1}} :
    ↑(Set.Iio o) ≃ o.toPGame.LeftMoves

    Converts an ordinal less than o into a move for the PGame corresponding to o, and vice versa.

    Equations
    • Ordinal.toLeftMovesToPGame = o.enumIsoToType.trans (Equiv.cast ⋯)
    Instances For
      @[simp]
      theorem Ordinal.toLeftMovesToPGame_symm_lt {o : Ordinal.{u_1}} (i : o.toPGame.LeftMoves) :
      ↑(Ordinal.toLeftMovesToPGame.symm i) < o
      theorem Ordinal.toPGame_moveLeft_hEq {o : Ordinal.{u_1}} :
      HEq o.toPGame.moveLeft fun (x : o.toType) => (↑(o.enumIsoToType.symm x)).toPGame
      @[simp]
      theorem Ordinal.toPGame_moveLeft' {o : Ordinal.{u_1}} (i : o.toPGame.LeftMoves) :
      o.toPGame.moveLeft i = (↑(Ordinal.toLeftMovesToPGame.symm i)).toPGame
      theorem Ordinal.toPGame_moveLeft {o : Ordinal.{u_1}} (i : ↑(Set.Iio o)) :
      o.toPGame.moveLeft (Ordinal.toLeftMovesToPGame i) = (↑i).toPGame
      noncomputable def Ordinal.zeroToPGameRelabelling :
      (Ordinal.toPGame 0).Relabelling 0

      0.toPGame has the same moves as 0.

      Equations
      Instances For
        @[simp]
        theorem Ordinal.one_toPGame_leftMoves_default_eq :
        default = Ordinal.toLeftMovesToPGame ⟨0, ⋯⟩
        @[simp]
        theorem Ordinal.to_leftMoves_one_toPGame_symm (i : (Ordinal.toPGame 1).LeftMoves) :
        Ordinal.toLeftMovesToPGame.symm i = ⟨0, ⋯⟩
        noncomputable def Ordinal.oneToPGameRelabelling :
        (Ordinal.toPGame 1).Relabelling 1

        1.toPGame has the same moves as 1.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          theorem Ordinal.toPGame_lf {a b : Ordinal.{u_1}} (h : a < b) :
          a.toPGame.LF b.toPGame
          theorem Ordinal.toPGame_le {a b : Ordinal.{u_1}} (h : a ≤ b) :
          a.toPGame ≤ b.toPGame
          theorem Ordinal.toPGame_lt {a b : Ordinal.{u_1}} (h : a < b) :
          a.toPGame < b.toPGame
          @[simp]
          theorem Ordinal.toPGame_lf_iff {a b : Ordinal.{u_1}} :
          a.toPGame.LF b.toPGame ↔ a < b
          @[simp]
          theorem Ordinal.toPGame_le_iff {a b : Ordinal.{u_1}} :
          a.toPGame ≤ b.toPGame ↔ a ≤ b
          @[simp]
          theorem Ordinal.toPGame_lt_iff {a b : Ordinal.{u_1}} :
          a.toPGame < b.toPGame ↔ a < b
          @[simp]
          theorem Ordinal.toPGame_equiv_iff {a b : Ordinal.{u_1}} :
          a.toPGame ≈ b.toPGame ↔ a = b
          @[simp]
          theorem Ordinal.toPGame_eq_iff {a b : Ordinal.{u_1}} :
          a.toPGame = b.toPGame ↔ a = b

          The order embedding version of toPGame.

          Equations
          Instances For
            @[simp]
            theorem Ordinal.toPGameEmbedding_apply (o : Ordinal.{u}) :
            Ordinal.toPGameEmbedding o = o.toPGame
            @[reducible, inline]
            noncomputable abbrev Ordinal.toGame (o : Ordinal.{u_1}) :

            Converts an ordinal into the corresponding game.

            Equations
            • o.toGame = ⟦o.toPGame⟧
            Instances For

              The order embedding version of toGame.

              Equations
              Instances For
                @[simp]
                theorem Ordinal.toGameEmbedding_apply (o : Ordinal.{u}) :
                Ordinal.toGameEmbedding o = o.toGame
                @[simp]
                theorem Ordinal.toGame_lf_iff {a b : Ordinal.{u_1}} :
                a.toGame.LF b.toGame ↔ a < b
                @[simp]
                theorem Ordinal.toGame_le_iff {a b : Ordinal.{u_1}} :
                a.toGame ≤ b.toGame ↔ a ≤ b
                @[simp]
                theorem Ordinal.toGame_lt_iff {a b : Ordinal.{u_1}} :
                a.toGame < b.toGame ↔ a < b
                theorem Ordinal.toGame_eq_iff {a b : Ordinal.{u_1}} :
                a.toGame = b.toGame ↔ a = b
                @[irreducible]
                theorem Ordinal.toPGame_nadd (a b : Ordinal.{u_1}) :
                (a.nadd b).toPGame ≈ a.toPGame + b.toPGame

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

                theorem Ordinal.toGame_nadd (a b : Ordinal.{u_1}) :
                (a.nadd b).toGame = a.toGame + b.toGame
                @[irreducible]
                theorem Ordinal.toPGame_nmul (a b : Ordinal.{u_1}) :
                (a.nmul b).toPGame ≈ a.toPGame * b.toPGame

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

                theorem Ordinal.toGame_nmul (a b : Ordinal.{u_1}) :
                (a.nmul b).toGame = ⟦a.toPGame * b.toPGame⟧
                @[simp]
                theorem Ordinal.toGame_natCast (n : ℕ) :
                (↑n).toGame = ↑n
                theorem Ordinal.toPGame_natCast (n : ℕ) :
                (↑n).toPGame ≈ ↑n