Documentation

Mathlib.SetTheory.Game.Ordinal

Ordinals as games #

We define the canonical map OrdinalSetTheory.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}
    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
            @[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.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