Documentation

CombinatorialGames.Nimber.SimplestExtension.Algebraic

Nimbers are algebraically closed #

This file proves the last part of the simplest extension theorem (see CombinatorialGames.Nimber.SimplestExtension.Basic), and deduces as a corollary that the nimbers are algebraically closed.

For Mathlib #

@[simp]
theorem Ordinal.one_lt_opow {x y : Ordinal.{u_1}} (h : 1 < x) :
1 < x ^ y y 0
@[simp]
theorem Ordinal.one_lt_pow {x : Ordinal.{u_1}} {n : } (h : 1 < x) :
1 < x ^ n n 0

n-th degree closed fields #

structure Nimber.IsNthDegreeClosed (n : ) (x : Nimber) extends x.IsRing :

A nimber x is n-th degree closed when IsRing x, and every non-constant polynomial in the nimbers with degree less or equal to n and coefficients less than x has a root that's less than x.

We don't extend IsField x, as for 1 ≤ n, this predicate implies it.

For simplicity, the constructor takes a 0 < p.degree assumption. The theorem IsNthDegreeClosed.exists_root proves that this theorem applies (vacuously) when p = 0 as well.

Instances For
    theorem Nimber.isNthDegreeClosed_iff (n : ) (x : Nimber) :
    IsNthDegreeClosed n x x.IsRing ∀ ⦃p : Polynomial Nimber⦄, 0 < p.degreep.degree n(∀ (k : ), p.coeff k < x)r < x, p.IsRoot r
    theorem Nimber.IsNthDegreeClosed.exists_root {n : } {x : Nimber} (h : IsNthDegreeClosed n x) {p : Polynomial Nimber} (hp₀ : p.degree 0) (hpn : p.degree n) (hp : ∀ (k : ), p.coeff k < x) :
    r < x, p.IsRoot r
    theorem Nimber.IsNthDegreeClosed.le {m n : } {x : Nimber} (h : IsNthDegreeClosed n x) (hmn : m n) :
    theorem Nimber.IsNthDegreeClosed.sSup {n : } {s : Set Nimber} (H : xs, IsNthDegreeClosed n x) (ne : s.Nonempty) (bdd : BddAbove s) :
    theorem Nimber.IsNthDegreeClosed.iSup {n : } {ι : Sort u_1} [Nonempty ι] {f : ιNimber} (H : ∀ (i : ι), IsNthDegreeClosed n (f i)) (bdd : BddAbove (Set.range f) := by apply Nimber.bddAbove_of_small) :
    IsNthDegreeClosed n (⨆ (i : ι), f i)
    theorem Nimber.IsNthDegreeClosed.ofMonic {n : } {x : Nimber} (h : x.IsField) (hp : ∀ (p : Polynomial Nimber), p.Monic0 < p.degreep.degree n(∀ (k : ), p.coeff k < x)r < x, p.IsRoot r) :

    If x is a field, to prove it n-th degree closed, it suffices to check monic polynomials of degree less or equal to n.

    theorem Nimber.IsField.sSup {s : Set Nimber} (H : xs, x.IsField) (ne : s.Nonempty) (bdd : BddAbove s) :
    theorem Nimber.IsField.iSup {ι : Sort u_1} [Nonempty ι] {f : ιNimber} (H : ∀ (i : ι), (f i).IsField) (bdd : BddAbove (Set.range f) := by apply Nimber.bddAbove_of_small) :
    (⨆ (i : ι), f i).IsField
    theorem Nimber.IsNthDegreeClosed.root_lt {n : } {x r : Nimber} (h : IsNthDegreeClosed n x) {p : Polynomial Nimber} (hpn : p.degree n) (hpk : ∀ (k : ), p.coeff k < x) (hr : r p.roots) :
    r < x
    theorem Nimber.IsNthDegreeClosed.eval_eq_of_lt {n : } {x : Nimber} (h : IsNthDegreeClosed n x) {p : Polynomial Nimber} (hpn : p.degree n) (hpk : ∀ (k : ), p.coeff k < x) :
    theorem Nimber.IsNthDegreeClosed.pow_mul_eq {n : } {x y : Nimber} (h : IsNthDegreeClosed n x) (hy : y < x) :
    x ^ n * y = of (val x ^ n * val y)
    theorem Nimber.IsNthDegreeClosed.pow_eq {n : } {x : Nimber} (h : IsNthDegreeClosed n x) :
    x ^ n = of (val x ^ n)

    Algebraically closed fields #

    structure Nimber.IsAlgClosed (x : Nimber) extends x.IsRing :

    A nimber x is algebraically closed when IsRing x, and every non-constant polynomial in the nimbers with coefficients less than x has a root that's less than x. Note that 0 and 1 are algebraically closed under this definition.

    For simplicity, the constructor takes a 0 < p.degree assumption. The theorem IsAlgClosed.exists_root proves that this theorem applies (vacuously) when p = 0 as well.

    Instances For
      theorem Nimber.isAlgClosed_iff (x : Nimber) :
      x.IsAlgClosed x.IsRing ∀ ⦃p : Polynomial Nimber⦄, 0 < p.degree(∀ (k : ), p.coeff k < x)r < x, p.IsRoot r
      theorem Nimber.IsAlgClosed.exists_root {x : Nimber} (h : x.IsAlgClosed) {p : Polynomial Nimber} (hp₀ : p.degree 0) (hp : ∀ (n : ), p.coeff n < x) :
      r < x, p.IsRoot r
      theorem Nimber.IsAlgClosed.sSup {s : Set Nimber} (H : xs, x.IsAlgClosed) (ne : s.Nonempty) (bdd : BddAbove s) :
      theorem Nimber.IsAlgClosed.iSup {ι : Sort u_1} [Nonempty ι] {f : ιNimber} (H : ∀ (i : ι), (f i).IsAlgClosed) (bdd : BddAbove (Set.range f) := by apply Nimber.bddAbove_of_small) :
      (⨆ (i : ι), f i).IsAlgClosed
      theorem Nimber.IsAlgClosed.ofMonic {x : Nimber} (h : x.IsField) (hp : ∀ (p : Polynomial Nimber), p.Monic0 < p.degree(∀ (k : ), p.coeff k < x)r < x, p.IsRoot r) :

      If x is a field, to prove it algebraically closed, it suffices to check monic polynomials.

      theorem Nimber.IsAlgClosed.eval_eq_of_lt {x : Nimber} (h : x.IsAlgClosed) {p : Polynomial Nimber} (hpk : ∀ (k : ), p.coeff k < x) :

      The fourth simplest extension theorem: if x is a ring that isn't algebraically closed, then x is the root of some polynomial with coefficients < x.

      theorem Nimber.IsRing.pow_degree_leastNoRoots {x : Nimber} (h : x.IsRing) (ht : x.leastNoRoots ) {n : } (hn : (x.leastNoRoots.untop ht).degree = n) :
      (of (val x ^ n)).IsRing
      theorem Nimber.IsField.pow_degree_leastNoRoots {x : Nimber} (hf : x.IsField) (ht : x.leastNoRoots ) {n : } (hn : (x.leastNoRoots.untop ht).degree = n) :
      (of (val x ^ n)).IsField

      Nimbers are algebraically closed #

      noncomputable def Nimber.algClosure (x : Nimber) :

      Returns the smallest IsAlgClosed that's at least x.

      Equations
      Instances For
        @[simp]

        The nimbers are an algebraically closed field.