Documentation

LeanPool.ArchonFirstProofResults.FirstProof4.Auxiliary.Continuity

Continuity of invPhiNPoly at Squarefree Points #

This file proves that invPhiNPoly is continuous at squarefree points with respect to coefficient perturbation. The argument proceeds in three steps:

  1. Root continuity: Roots of a squarefree polynomial depend continuously on its coefficients (Hurwitz-type theorem for real-rooted polynomials).
  2. PhiN continuity: PhiN, being a rational function of roots, is continuous where roots are distinct (i.e., at squarefree polynomials).
  3. Inverse continuity: 1/x is continuous at positive values.

Main theorems #

Phase 1: Root perturbation under coefficient changes #

Helper: polynomial eval bound on compact set #

theorem Problem4.poly_eval_bound_on_ball (f : Polynomial ℝ) (n : ℕ) (hn : f.natDegree ≤ n) (max_coeff R : ℝ) (_hR : 0 < R) (hR1 : 1 ≤ R) (hcoeff : ∀ (k : ℕ), |f.coeff k| ≤ max_coeff) (x : ℝ) :
|x| ≤ R → |Polynomial.eval x f| ≤ (↑n + 1) * max_coeff * R ^ n

Bound |f.eval(x)| by coefficient norm times power of radius. For f of degree ≤ n, |f.eval(x)| ≤ (n+1) * max_coeff * R^n when |x| ≤ R.

Helper: same-sign from closeness #

theorem Problem4.same_sign_of_close (a b m : ℝ) (hm : 0 < m) (ha : m ≤ |a|) (hclose : |b - a| < m / 2) :
0 < a * b

If |p(x)| ≥ m and |q(x) - p(x)| < m/2, then p(x) and q(x) have the same sign.

Helper: squarefree monic poly changes sign at simple root #

theorem Problem4.sign_change_at_root (n : ℕ) (hn : 2 ≤ n) (p : Polynomial ℝ) (hp_monic : p.Monic) (hp_deg : p.natDegree = n) (_hp_sf : Squarefree p) (roots_p : Fin n → ℝ) (hroots_p : StrictMono roots_p) (hroots_p_are : ∀ (i : Fin n), p.IsRoot (roots_p i)) (δ : ℝ) (hδ : 0 < δ) (hδ_small : ∀ (j : Fin (n - 1)), δ < (roots_p ⟨↑j + 1, ⋯⟩ - roots_p ⟨↑j, ⋯⟩) / 2) (i : Fin n) :
Polynomial.eval (roots_p i - δ) p * Polynomial.eval (roots_p i + δ) p < 0

For a monic squarefree polynomial with sorted roots, p changes sign at each root: p.eval(root - δ) and p.eval(root + δ) have opposite signs for small δ.

Helper: disjoint intervals force sorted roots into intervals #

theorem Problem4.sorted_roots_in_disjoint_intervals (n : ℕ) (_hn : 2 ≤ n) (centers : Fin n → ℝ) (hcenters : StrictMono centers) (radius : ℝ) (_hradius : 0 < radius) (hdisjoint : ∀ (i j : Fin n), i < j → centers i + radius ≤ centers j - radius) (roots : Fin n → ℝ) (hroots : StrictMono roots) (hroot_in_interval : ∀ (i : Fin n), ∃ (j : Fin n), centers i - radius < roots j ∧ roots j < centers i + radius) (i : Fin n) :
centers i - radius < roots i ∧ roots i < centers i + radius

If n sorted values land in n disjoint sorted intervals (one per interval), then value(i) is in interval(i). Pigeonhole + monotonicity.

Auxiliary: Inverse continuity at positive reals #

theorem Problem4.inv_continuous_at_pos (a : ℝ) (ha : 0 < a) (ε : ℝ) (hε : 0 < ε) :
∃ δ > 0, ∀ (y : ℝ), 0 < y → |y - a| < δ → |1 / y - 1 / a| < ε

1/x is continuous at a > 0: for any ε > 0, there exists δ > 0 such that if |y - a| < δ and y > 0, then |1/y - 1/a| < ε. This is the epsilon-delta formulation of continuity of inversion away from zero.

Root perturbation for squarefree real-rooted polynomials #

theorem Problem4.roots_perturb_close (n : ℕ) (hn : 2 ≤ n) (p : Polynomial ℝ) (hp_monic : p.Monic) (hp_deg : p.natDegree = n) (_hp_sf : Squarefree p) (_hp_real : ∀ (z : ℂ), (Polynomial.map (algebraMap ℝ ℂ) p).IsRoot z → z.im = 0) (roots_p : Fin n → ℝ) (hroots_p : StrictMono roots_p) (hroots_p_are : ∀ (i : Fin n), p.IsRoot (roots_p i)) (ε : ℝ) (hε : 0 < ε) :
∃ δ > 0, ∀ (q : Polynomial ℝ), q.Monic → q.natDegree = n → Squarefree q → (∀ (z : ℂ), (Polynomial.map (algebraMap ℝ ℂ) q).IsRoot z → z.im = 0) → (∀ (k : ℕ), |q.coeff k - p.coeff k| < δ) → ∃ (roots_q : Fin n → ℝ), StrictMono roots_q ∧ (∀ (i : Fin n), q.IsRoot (roots_q i)) ∧ ∀ (i : Fin n), |roots_q i - roots_p i| < ε

Root perturbation bound: If p is monic, squarefree, degree n, with all real roots, then for any ε > 0, there exists δ > 0 such that any monic polynomial q of degree n with all real roots and coefficients within δ of p's has ordered roots within ε of p's ordered roots (pointwise).

Phase 2: PhiN continuity in root space #

theorem Problem4.PhiN_continuous_at_roots (n : ℕ) (hn : 2 ≤ n) (roots_p : Fin n → ℝ) (hInj_p : Function.Injective roots_p) (ε : ℝ) (hε : 0 < ε) :
∃ δ > 0, ∀ (roots_q : Fin n → ℝ), Function.Injective roots_q → (∀ (i : Fin n), |roots_q i - roots_p i| < δ) → |PhiN n roots_q - PhiN n roots_p| < ε

Phase 3: invPhiNPoly continuity at squarefree polynomials #

theorem Problem4.invPhiN_poly_continuous_at_squarefree (n : ℕ) (hn : 2 ≤ n) (p : Polynomial ℝ) (hp_monic : p.Monic) (hp_deg : p.natDegree = n) (hp_sf : Squarefree p) (hp_real : ∀ (z : ℂ), (Polynomial.map (algebraMap ℝ ℂ) p).IsRoot z → z.im = 0) (ε : ℝ) :
ε > 0 → ∃ δ > 0, ∀ (q : Polynomial ℝ), q.Monic → q.natDegree = n → Squarefree q → (∀ (z : ℂ), (Polynomial.map (algebraMap ℝ ℂ) q).IsRoot z → z.im = 0) → (∀ (k : ℕ), |q.coeff k - p.coeff k| < δ) → |invPhiNPoly n q - invPhiNPoly n p| < ε

invPhiNPoly is continuous at squarefree points: For a monic squarefree polynomial p of degree n ≥ 2 with all real roots, for any ε > 0, there exists δ > 0 such that any monic squarefree polynomial q of the same degree with all real roots and coefficients within δ of p's satisfies |invPhiNPoly n q - invPhiNPoly n p| < ε.

Strategy: Compose three continuity results:

  1. Roots depend continuously on coefficients (roots_perturb_close)
  2. PhiN depends continuously on roots (PhiN_continuous_at_roots)
  3. 1/x is continuous at PhiN(p) > 0 (inv_continuous_at_pos)