Integer-valued sequences near polynomial branches are polynomial on progressions
Provedexists_polynomial_eq_on_arithProgFix natural numbers , , , and with , a complex number , and a family of complex polynomials each of degree at most (in the sense that for every , with the degree taken as a natural number). Let be a sequence subject to two conditions on its tail: for every the rational number equals an integer, and for every there is an index with , the absolute value being that of , where is viewed in and is evaluated at . The conclusion is that there exist natural numbers and with and , and a polynomial of degree at most , such that for all natural numbers . Thus the sequence agrees exactly with a single rational polynomial of degree along an arithmetic progression of any prescribed length inside the range ; no bound on or is asserted.
This is the combinatorial and finite-difference step of Dörge's elementary proof of Hilbert's irreducibility theorem: a sequence whose tail is -integral and everywhere close to one of finitely many polynomial branches is genuinely polynomial along long arithmetic progressions. It is used in the proof of Polynomial.exists_forall_not_isRoot_of_weighted, where it rules out rational roots of specialisations along progressions.
import Mathlib.Analysis.Complex.Basic import Mathlib.Algebra.Polynomial.Eval.Degree set_option maxHeartbeats 4000000 set_option synthInstance.maxHeartbeats 400000 set_option backward.isDefEq.respectTransparency.types false open Polynomial
theorem exists_polynomial_eq_on_arithProg {n w L m₀ D : ℕ} (hD : 0 < D) (μ : ℂ) (P : Fin n → Polynomial ℂ) (hP : ∀ i, (P i).natDegree ≤ w) (x : ℕ → ℚ) (hint : ∀ m, m₀ ≤ m → ∃ z : ℤ, (D : ℚ) * x m = z) (hnear : ∀ m, m₀ ≤ m → ∃ i, ‖(x m : ℂ) - (P i).eval (μ * m)‖ < 1 / ((D : ℝ) * 2 ^ (w + 1))) : ∃ a b : ℕ, 0 < a ∧ m₀ ≤ b ∧ ∃ G : Polynomial ℚ, G.natDegree ≤ w ∧ ∀ j < L, x (b + a * j) = G.eval (j : ℚ) := by sorry