Documentation

CombinatorialGames.NatOrdinal.Pow

Natural operations on ω ^ x #

This file characterizes natural operations on powers of ω. In particular, we show:

These two results imply the validity of an algorithm to evaluate natural addition and multiplication: write down the base ω Cantor Normal Forms of both ordinals, and add/multiply them as polynomials.

Implementation notes #

Surreal exponentiation is not closed on the ordinals. Because of this, we opt against defining a Pow instance on NatOrdinal. Instead, we implement our own custom typeclass Wpow, giving us notation ω^ x for of (ω ^ x.val). This typeclass will get reused for IGame and Surreal in CombinatorialGames.Surreal.Pow.

theorem Ordinal.lt_mul_add_one {x y z : Ordinal.{u_1}} :
x < y * (z + 1) w < y, x y * z + w
class Wpow (α : Type u_1) :
Type u_1

A typeclass for the the ω^ notation.

  • wpow : αα

    The ω-map, i.e. base ω exponentiation.

Instances

    The ω-map, i.e. base ω exponentiation.

    Conventions for notations in identifiers:

    • The recommended spelling of ω^ in identifiers is wpow.
    Equations
    Instances For
      @[simp]
      @[simp]
      theorem NatOrdinal.wpow_pos (x : NatOrdinal) :
      0 < ω^ x
      @[simp]
      @[simp]
      theorem NatOrdinal.wpow_lt_wpow {x y : NatOrdinal} :
      ω^ x < ω^ y x < y
      @[simp]
      @[simp]
      theorem NatOrdinal.wpow_inj {x y : NatOrdinal} :
      ω^ x = ω^ y x = y
      theorem NatOrdinal.add_lt_wpow {x y z : NatOrdinal} (hx : x < ω^ z) (hy : y < ω^ z) :
      x + y < ω^ z
      theorem NatOrdinal.wpow_mul_natCast_add_of_lt' {x y : NatOrdinal} (hy : y < ω^ x) (n : ) :
      ω^ x * n + y = of (Ordinal.omega0 ^ val x * n + val y)

      See wpow_mul_natCast_add_of_lt for a stronger version.

      theorem NatOrdinal.wpow_add_of_lt' {x y : NatOrdinal} (hy : y < ω^ x) :

      See wpow_add_of_lt for a stronger version.

      theorem NatOrdinal.wpow_mul_natCast_lt {a b : NatOrdinal} (h : a < b) (n : ) :
      ω^ a * n < ω^ b
      theorem NatOrdinal.lt_wpow_iff {x y : NatOrdinal} (hx : x 0) :
      y < ω^ x z < x, ∃ (n : ), y < ω^ z * n
      theorem NatOrdinal.wpow_le_iff {x y : NatOrdinal} (hx : x 0) :
      ω^ x y z < x, ∀ (n : ), ω^ z * n y
      theorem NatOrdinal.lt_wpow_add_one_iff {x y : NatOrdinal} :
      y < ω^ (x + 1) ∃ (n : ), y < ω^ x * n
      theorem NatOrdinal.wpow_add_one_le_iff {x y : NatOrdinal} :
      ω^ (x + 1) y ∀ (n : ), ω^ x * n y
      theorem NatOrdinal.wpow_mul_natCast_add_of_lt {x y : NatOrdinal} (hy : y < ω^ (x + 1)) (n : ) :
      ω^ x * n + y = of (Ordinal.omega0 ^ val x * n + val y)
      theorem NatOrdinal.wpow_add_of_lt {x y : NatOrdinal} (hy : y < ω^ (x + 1)) :
      @[irreducible]
      theorem NatOrdinal.wpow_add (x y : NatOrdinal) :
      ω^ (x + y) = ω^ x * ω^ y