Documentation

TauCeti.NumberTheory.NewtonPolygon.Basic

Newton polygons of polynomials and power series #

Given an additive valuation v with real values, a polynomial or power series f has the coefficient heights n ↦ v (coeff n f), plotted at the points (n, v (coeff n f)), with height ⊤ at the vanishing coefficients. Its Newton polygon is the lower convex envelope of these heights. With this orientation slopes increase from left to right, and a slope m corresponds to a nonzero root of valuation -m.

The valuation is real valued. A valuation with values in another ordered group WithTop Γ is normalised first by an order-preserving additive embedding Γ → ℝ, for example through AddValuation.map.

A polynomial has only finitely many nonzero coefficients, so its heights are always admissible and its Newton polygon is their lower convex envelope. A power series need not have admissible heights; its newtonPolygon is then the all-infinite fallback of TauCeti.lowerConvexEnvelope, and geometric statements assume admissibility.

Main definitions #

Main results #

References #

noncomputable def PowerSeries.newtonPolygon {R : Type u_1} [Ring R] (f : PowerSeries R) (v : AddValuation R (WithTop ℝ)) :

The Newton polygon of a power series f with respect to a real additive valuation v: the lower convex envelope of the coefficient heights n ↦ v (coeff n f). If these heights have no real affine lower bound, it is the all-infinite fallback.

Instances For

    The Newton polygon is the lower convex envelope of the coefficient heights.

    The Newton polygon is convex, including the all-infinite fallback.

    theorem PowerSeries.isLowerConvexEnvelope_newtonPolygon {R : Type u_1} [Ring R] {f : PowerSeries R} {v : AddValuation R (WithTop ℝ)} (hf : TauCeti.IsAdmissible fun (n : ℕ) => v ((coeff n) f)) :
    TauCeti.IsLowerConvexEnvelope (fun (n : ℕ) => v ((coeff n) f)) (f.newtonPolygon v)

    For admissible coefficient heights, the Newton polygon is their greatest convex minorant.

    theorem PowerSeries.newtonPolygon_le {R : Type u_1} [Ring R] {f : PowerSeries R} {v : AddValuation R (WithTop ℝ)} (hf : TauCeti.IsAdmissible fun (n : ℕ) => v ((coeff n) f)) (n : ℕ) :
    f.newtonPolygon v n ≤ v ((coeff n) f)

    For admissible coefficient heights, the Newton polygon lies below every coefficient point.

    theorem PowerSeries.le_newtonPolygon {R : Type u_1} [Ring R] {f : PowerSeries R} {v : AddValuation R (WithTop ℝ)} {H : ℕ → WithTop ℝ} (hH : TauCeti.IsConvexSeq H) (hHf : ∀ (n : ℕ), H n ≤ v ((coeff n) f)) :

    A convex sequence lying below every coefficient height lies below the Newton polygon.

    For admissible coefficient heights, the Newton polygon has the same supporting values as the coefficient heights.

    @[simp]

    The zero power series has the empty Newton polygon.

    theorem PowerSeries.newtonPolygon_eq_top_of_lt_order {R : Type u_1} [Ring R] {f : PowerSeries R} (v : AddValuation R (WithTop ℝ)) {n : ℕ} (hn : ↑n < f.order) :

    Every point of the Newton polygon before the order of vanishing at zero is infinite.

    theorem PowerSeries.newtonPolygon_eq_of_order_eq {R : Type u_1} [Ring R] {f : PowerSeries R} (v : AddValuation R (WithTop ℝ)) {n : ℕ} (hf : TauCeti.IsAdmissible fun (n : ℕ) => v ((coeff n) f)) (hn : f.order = ↑n) :
    f.newtonPolygon v n = v ((coeff n) f)

    For admissible coefficient heights, the Newton polygon begins at the first nonzero coefficient.

    @[simp]

    Negation does not change the Newton polygon.

    theorem PowerSeries.newtonPolygon_smul {R : Type u_1} [Ring R] (f : PowerSeries R) (v : AddValuation R (WithTop ℝ)) (c : R) :
    (c • f).newtonPolygon v = fun (n : ℕ) => v c + f.newtonPolygon v n

    Multiplying by a scalar translates the Newton polygon by the valuation of the scalar.

    theorem PowerSeries.newtonPolygon_C_mul {R : Type u_1} [Ring R] (f : PowerSeries R) (v : AddValuation R (WithTop ℝ)) (c : R) :
    (C c * f).newtonPolygon v = fun (n : ℕ) => v c + f.newtonPolygon v n

    Multiplying by a constant translates the Newton polygon by the valuation of the constant.

    theorem PowerSeries.newtonPolygon_X_pow_mul {R : Type u_1} [Ring R] (f : PowerSeries R) (v : AddValuation R (WithTop ℝ)) (k : ℕ) :
    (X ^ k * f).newtonPolygon v = fun (n : ℕ) => if k ≤ n then f.newtonPolygon v (n - k) else ⊤

    Multiplying by X ^ k shifts the Newton polygon k places to the right.

    theorem PowerSeries.newtonPolygon_rescale {R : Type u_3} [CommRing R] (f : PowerSeries R) (v : AddValuation R (WithTop ℝ)) {c : R} (hc : v c ≠ ⊤) :
    ((rescale c) f).newtonPolygon v = fun (n : ℕ) => f.newtonPolygon v n + n • v c

    Substituting c X for X shears the Newton polygon by the valuation of c, provided that valuation is finite.

    theorem PowerSeries.newtonPolygon_map {R : Type u_1} {S : Type u_2} [Ring R] [Ring S] (f : PowerSeries R) (v : AddValuation R (WithTop ℝ)) (φ : R →+* S) {w : AddValuation S (WithTop ℝ)} (hφ : ∀ (x : R), w (φ x) = v x) :

    Mapping the coefficients along a ring homomorphism compatible with the valuations preserves the Newton polygon.

    theorem PowerSeries.newtonPolygon_map_eq_map_mul {R : Type u_1} {S : Type u_2} [Ring R] [Ring S] (f : PowerSeries R) (v : AddValuation R (WithTop ℝ)) (φ : R →+* S) {w : AddValuation S (WithTop ℝ)} {c : ℝ} (hc : 0 < c) (hφ : ∀ (x : R), w (φ x) = WithTop.map (fun (x : ℝ) => c * x) (v x)) :
    ((map φ) f).newtonPolygon w = fun (n : ℕ) => WithTop.map (fun (x : ℝ) => c * x) (f.newtonPolygon v n)

    Mapping the coefficients along a ring homomorphism that multiplies the valuations by a positive real factor multiplies the Newton polygon by that factor.

    noncomputable def Polynomial.newtonPolygon {R : Type u_1} [Ring R] (f : Polynomial R) (v : AddValuation R (WithTop ℝ)) :

    The Newton polygon of a polynomial f with respect to a real additive valuation v: the lower convex envelope of the coefficient heights n ↦ v (f.coeff n).

    Instances For

      The Newton polygon is the lower convex envelope of the coefficient heights.

      @[simp]

      The Newton polygon of a polynomial is that of the corresponding power series.

      The coefficient heights of a polynomial are admissible: they are infinite beyond the degree.

      A polynomial has only finitely many coefficients of finite height.

      The Newton polygon of a polynomial is the greatest convex minorant of its coefficient heights.

      The Newton polygon is convex.

      theorem Polynomial.newtonPolygon_le {R : Type u_1} [Ring R] (f : Polynomial R) (v : AddValuation R (WithTop ℝ)) (n : ℕ) :
      f.newtonPolygon v n ≤ v (f.coeff n)

      The Newton polygon lies below every coefficient point.

      @[simp]
      theorem Polynomial.newtonPolygon_apply_zero {R : Type u_1} [Ring R] (f : Polynomial R) (v : AddValuation R (WithTop ℝ)) :
      f.newtonPolygon v 0 = v (f.coeff 0)

      At index zero the Newton polygon is the height of the constant coefficient, which may be infinite.

      theorem Polynomial.le_newtonPolygon {R : Type u_1} [Ring R] {f : Polynomial R} {v : AddValuation R (WithTop ℝ)} {H : ℕ → WithTop ℝ} (hH : TauCeti.IsConvexSeq H) (hHf : ∀ (n : ℕ), H n ≤ v (f.coeff n)) :

      A convex sequence lying below every coefficient height lies below the Newton polygon.

      The Newton polygon has the same supporting values as the coefficient heights.

      @[simp]

      The zero polynomial has the empty Newton polygon.

      theorem Polynomial.newtonPolygon_eq_top_iff {R : Type u_1} [Ring R] (f : Polynomial R) (v : AddValuation R (WithTop ℝ)) :
      f.newtonPolygon v = ⊤ ↔ ∀ (n : ℕ), v (f.coeff n) = ⊤

      The Newton polygon of a polynomial is empty exactly when every coefficient has infinite valuation.

      Elementary operations #

      @[simp]

      Negation does not change the Newton polygon.

      theorem Polynomial.newtonPolygon_smul {R : Type u_1} [Ring R] (f : Polynomial R) (v : AddValuation R (WithTop ℝ)) (c : R) :
      (c • f).newtonPolygon v = fun (n : ℕ) => v c + f.newtonPolygon v n

      Multiplying by a scalar translates the Newton polygon by the valuation of the scalar.

      theorem Polynomial.newtonPolygon_C_mul {R : Type u_1} [Ring R] (f : Polynomial R) (v : AddValuation R (WithTop ℝ)) (c : R) :
      (C c * f).newtonPolygon v = fun (n : ℕ) => v c + f.newtonPolygon v n

      Multiplying by a constant translates the Newton polygon by the valuation of the constant.

      theorem Polynomial.newtonPolygon_X_pow_mul {R : Type u_1} [Ring R] (f : Polynomial R) (v : AddValuation R (WithTop ℝ)) (k : ℕ) :
      (X ^ k * f).newtonPolygon v = fun (n : ℕ) => if k ≤ n then f.newtonPolygon v (n - k) else ⊤

      Multiplying by X ^ k shifts the Newton polygon k places to the right.

      theorem Polynomial.newtonPolygon_reflect {R : Type u_1} [Ring R] (f : Polynomial R) (v : AddValuation R (WithTop ℝ)) {N : ℕ} (hN : f.natDegree ≤ N) :
      (reflect N f).newtonPolygon v = fun (n : ℕ) => if n ≤ N then f.newtonPolygon v (N - n) else ⊤

      Reflecting the coefficients in an index N at least the degree reflects the Newton polygon in N: its point at n ≤ N moves to N - n.

      Reversing a polynomial of degree d reflects its Newton polygon by n ↦ d - n.

      theorem Polynomial.newtonPolygon_comp_C_mul_X {R : Type u_1} [Ring R] (f : Polynomial R) (v : AddValuation R (WithTop ℝ)) (c : R) :
      (f.comp (C c * X)).newtonPolygon v = fun (n : ℕ) => f.newtonPolygon v n + n • v c

      Substituting c X for X shears the Newton polygon by the valuation of c. No finiteness is needed: when that valuation is infinite, the height at index 0 is unchanged and every later point becomes ⊤.

      theorem Polynomial.newtonPolygon_map {R : Type u_1} {S : Type u_2} [Ring R] [Ring S] (f : Polynomial R) (v : AddValuation R (WithTop ℝ)) (φ : R →+* S) {w : AddValuation S (WithTop ℝ)} (hφ : ∀ (x : R), w (φ x) = v x) :

      Mapping the coefficients along a ring homomorphism compatible with the valuations preserves the Newton polygon.

      theorem Polynomial.newtonPolygon_map_eq_map_mul {R : Type u_1} {S : Type u_2} [Ring R] [Ring S] (f : Polynomial R) (v : AddValuation R (WithTop ℝ)) (φ : R →+* S) {w : AddValuation S (WithTop ℝ)} {c : ℝ} (hc : 0 < c) (hφ : ∀ (x : R), w (φ x) = WithTop.map (fun (x : ℝ) => c * x) (v x)) :
      (map φ f).newtonPolygon w = fun (n : ℕ) => WithTop.map (fun (x : ℝ) => c * x) (f.newtonPolygon v n)

      Mapping the coefficients along a ring homomorphism that multiplies the valuations by a positive real factor multiplies the Newton polygon by that factor. For instance, the ramification X ↦ X ^ q of Laurent series coefficients multiplies their orders by q.

      Endpoints and finite domain #

      Every point of the Newton polygon before the order of vanishing at zero is infinite.

      Every point of the Newton polygon beyond the degree is infinite.

      @[simp]

      The Newton polygon begins at the trailing coefficient.

      theorem Polynomial.newtonPolygon_eq_of_natDegree_le {R : Type u_1} [Ring R] (f : Polynomial R) (v : AddValuation R (WithTop ℝ)) {n : ℕ} (hn : f.natDegree ≤ n) :
      f.newtonPolygon v n = v (f.coeff n)

      At any index n at least the degree, the Newton polygon is the height of the coefficient of X ^ n: the leading coefficient when n is the degree, and ⊤ beyond it.

      @[simp]

      The Newton polygon ends at the leading coefficient.

      If the trailing and leading coefficients of f have finite valuation, the finite domain of the Newton polygon of f runs from its order of vanishing at zero to its degree.

      theorem Polynomial.newtonPolygon_ne_top_iff {R : Type u_1} [Ring R] (v : AddValuation R (WithTop ℝ)) (hv : ∀ (x : R), v x = ⊤ → x = 0) {f : Polynomial R} (hf : f ≠ 0) {n : ℕ} :

      If only zero has infinite valuation, the finite domain of the Newton polygon of a nonzero polynomial runs from its order of vanishing at zero to its degree. Over a division ring the hypothesis on v is AddValuation.top_iff.

      theorem Polynomial.newtonPolygon_ne_top_of_ne_zero {R : Type u_1} [Ring R] {f : Polynomial R} {v : AddValuation R (WithTop ℝ)} (hv : ∀ (x : R), v x = ⊤ → x = 0) (hf : f ≠ 0) :

      If only zero has infinite valuation, a nonzero polynomial has a nonempty Newton polygon. Over a division ring the hypothesis on v is AddValuation.top_iff.

      A monic polynomial has a nonempty Newton polygon: its leading coefficient has valuation zero.

      If the trailing and leading coefficients of f have finite valuation, the finite unit edges of the Newton polygon of f are those between its order of vanishing at zero and its degree.

      theorem Polynomial.finiteEdges_newtonPolygon {R : Type u_1} [Ring R] (f : Polynomial R) (v : AddValuation R (WithTop ℝ)) (hv : ∀ (x : R), v x = ⊤ → x = 0) :

      If only zero has infinite valuation, the finite unit edges of the Newton polygon of a polynomial are those between its order of vanishing at zero and its degree.

      If only zero has infinite valuation, a polynomial of degree d and order of vanishing a at zero has exactly d - a finite unit edges.

      A monomial, in particular a constant, has no finite unit edges.