Documentation

CombinatorialGames.Surreal.HahnSeries.Basic

Surreal Hahn series #

Hahn series are a generalization of power series and Puiseux series. A Hahn series R⟦Γ⟧ is defined as a function Γ → R whose support is well-founded. This condition is sufficient to define addition and multiplication as with polynomials, so that under suitable conditions, R⟦Γ⟧ has the structure of an ordered field.

The aphorism goes that surreals are real Hahn series over themselves. However, there are a few technicalities. Hahn series are conventionally defined so that the support has well-founded <, whereas for surreals it's more natural to assume well-founded >. Moreover, the Hahn series that correspond to surreals must have a Small support. Because of this, we often prefer to identify these surreal Hahn series with ordinal-indexed sequences of surreal exponents and their coefficients.

This file provides the translation layer between Hahn series as they're implemented in Mathlib, and the Hahn series relevant to surreal numbers, by defining the type SurrealHahnSeries for the latter.

For Mathlib #

theorem Set.IsWF.to_subtype {α : Type u_1} [LT α] {s : Set α} (h : s.IsWF) :
@[simp]
theorem equivShrink_le_equivShrink_iff {α : Type u_1} [Preorder α] [Small.{u, u_1} α] {x y : α} :
(equivShrink α) x (equivShrink α) y x y
@[simp]
theorem equivShrink_lt_equivShrink_iff {α : Type u_1} [Preorder α] [Small.{u, u_1} α] {x y : α} :
(equivShrink α) x < (equivShrink α) y x < y
@[simp]
theorem Ordinal.type_lt_Iio (o : Ordinal.{u}) :
(type fun (x1 x2 : (Set.Iio o)) => x1 < x2) = lift.{u + 1, u} o
def RelIso.subrel {α : Type u_1} (r : ααProp) {p q : αProp} (H : ∀ (x : α), p x q x) :
Equations
Instances For

    Basic defs and instances #

    def SurrealHahnSeries :
    Type (u + 1)

    The type of u-small Hahn series over Surrealᵒᵈ, endowed with the lexicographic ordering. We will show that this type is isomorphic as an ordered field to the surreals themselves.

    Equations
    Instances For

      A constructor for SurrealHahnSeries which hides various implementation details.

      Equations
      Instances For

        coeff #

        Returns the coefficient for X ^ i.

        Equations
        Instances For
          @[simp]
          theorem SurrealHahnSeries.coeff_mk (f : Surreal) (small : Small.{u_1, u_1 + 1} (Function.support f)) (wf : (Function.support f).WellFoundedOn fun (x1 x2 : Surreal) => x1 > x2) :
          (mk f small wf).coeff = f

          support #

          The support of the Hahn series.

          Equations
          Instances For
            @[simp]
            theorem SurrealHahnSeries.support_mk (f : Surreal) (small : Small.{u_1, u_1 + 1} (Function.support f)) (wf : (Function.support f).WellFoundedOn fun (x1 x2 : Surreal) => x1 > x2) :
            (mk f small wf).support = Function.support f
            @[simp]

            single #

            The Hahn series with a single entry.

            Equations
            Instances For
              @[simp]
              theorem SurrealHahnSeries.coeff_single_of_ne {x y : Surreal} (h : x y) (r : ) :
              (single x r).coeff y = 0

              trunc #

              Zeroes out any terms of the Hahn series less than or equal to i.

              Equations
              Instances For
                @[simp]
                theorem SurrealHahnSeries.coeff_trunc_of_lt {x : SurrealHahnSeries} {i j : Surreal} (h : i < j) :
                (x.trunc i).coeff j = x.coeff j
                @[simp]
                theorem SurrealHahnSeries.coeff_trunc_of_le {x : SurrealHahnSeries} {i j : Surreal} (h : j i) :
                (x.trunc i).coeff j = 0
                @[simp]
                theorem SurrealHahnSeries.trunc_add (x y : SurrealHahnSeries) (i : Surreal) :
                (x + y).trunc i = x.trunc i + y.trunc i
                @[simp]
                theorem SurrealHahnSeries.trunc_sub (x y : SurrealHahnSeries) (i : Surreal) :
                (x - y).trunc i = x.trunc i - y.trunc i
                @[simp]
                theorem SurrealHahnSeries.trunc_single_of_le {i j : Surreal} {r : } (h : i j) :
                (single i r).trunc j = 0
                @[simp]
                theorem SurrealHahnSeries.trunc_single_of_lt {i j : Surreal} {r : } (h : j < i) :
                (single i r).trunc j = single i r
                @[simp]
                theorem SurrealHahnSeries.trunc_eq_self {x : SurrealHahnSeries} {i : Surreal} :
                (∀ jx.support, i < j)x.trunc i = x

                Alias of the reverse direction of SurrealHahnSeries.trunc_eq_self_iff.

                theorem SurrealHahnSeries.trunc_eq_trunc {x : SurrealHahnSeries} {i j : Surreal} (h : i j) (H : ∀ (k : Surreal), i < kk jx.coeff k = 0) :
                x.trunc i = x.trunc j

                Indexing the support by ordinals #

                length #

                The length of a surreal Hahn series is the order type of its support.

                Equations
                Instances For

                  exp #

                  def SurrealHahnSeries.exp (x : SurrealHahnSeries) :
                  (fun (x1 x2 : (Set.Iio x.length)) => x1 < x2) ≃r fun (x1 x2 : x.support) => x1 > x2

                  Returns the i-th largest exponent with a non-zero coefficient.

                  This is registered as a RelIso between Iio x.length and x.support, so that x.exp.symm can be used to return the index of an element in the support.

                  Equations
                  Instances For
                    @[simp]
                    @[simp]
                    theorem SurrealHahnSeries.exp_lt_exp_iff {x : SurrealHahnSeries} {i j : (Set.Iio x.length)} :
                    x.exp i < x.exp j j < i
                    @[simp]
                    theorem SurrealHahnSeries.eq_exp_of_mem_support {x : SurrealHahnSeries} {i : Surreal} (h : i x.support) :
                    ∃ (j : (Set.Iio x.length)), (x.exp j) = i
                    theorem SurrealHahnSeries.exp_congr {x y : SurrealHahnSeries} (h : x = y) (i : (Set.Iio x.length)) :
                    (x.exp i) = (y.exp i, )

                    This lemma is useful for rewriting.

                    coeffIdx #

                    Returns the coefficient which corresponds to the i-th largest exponent, or 0 if no such coefficient exists.

                    Equations
                    Instances For
                      @[simp]
                      theorem SurrealHahnSeries.coeff_exp (x : SurrealHahnSeries) (i : (Set.Iio x.length)) :
                      x.coeff (x.exp i) = x.coeffIdx i
                      @[simp]

                      truncIdx #

                      Truncates the series at the i-th largest exponent, or returns it unchanged if no such coefficient exists.

                      Equations
                      Instances For
                        @[simp]
                        theorem SurrealHahnSeries.trunc_exp (x : SurrealHahnSeries) (i : (Set.Iio x.length)) :
                        x.trunc (x.exp i) = x.truncIdx i
                        @[simp]

                        term #

                        Returns the i-th largest term of the sum, or 0 if it doesn't exist.

                        Equations
                        Instances For
                          theorem SurrealHahnSeries.term_of_lt {x : SurrealHahnSeries} {i : Ordinal.{u_1}} (hi : i < x.length) :
                          x.term i = (x.coeffIdx i) * ω^ (x.exp i, hi)

                          Alias of the reverse direction of SurrealHahnSeries.term_eq_zero.