The descent step of Schneider's method
ProvedSX.descent_stepThe descent step — the analytic and arithmetic halves of Schneider's method, in one statement.
Under the standing hypotheses, if the auxiliary function has coefficients of size at most and vanishes at every lattice point with all , for some , then it vanishes at every such point with all .
Iterating from the supplied by the Siegel step, the function vanishes on the whole lattice.
Why the two halves cannot be separate rungs. The analytic half says: an entire function with prescribed zeros is small on a disc, by dividing out the zeros and applying the maximum modulus principle. The arithmetic half says: the value at a new lattice point is an algebraic integer, so if it is non-zero its norm is at least 1. Each half is an inequality about a single value , and nothing links them except the balance of parameters, which is the body of the proof rather than a lemma. Stated apart they do not meet; stated together they are the induction step.
The balance is against , and it closes precisely when .
Where it anchors. Complex.norm_le_of_forall_mem_frontier_norm_le for the maximum modulus; NumberField.one_le_house_of_isIntegral and NumberField.norm_norm_le_norm_mul_house_pow for the arithmetic. The "many prescribed zeros implies small" estimate does not exist in Mathlib and has to be built — note that Analysis/Complex/Schwarz.lean is the ball-to-ball Schwarz lemma, which is a different statement. This is where essentially all the difficulty of the theorem lives.
import Definitions.Def_SX open Complex
namespace SX
theorem descent_step
{d l : ℕ} (hdl : d + l < d * l)
(x : Fin d → ℂ) (y : Fin l → ℂ)
(hx : LinearIndependent ℚ x) (hy : LinearIndependent ℚ y)
(K : IntermediateField ℚ ℂ) [FiniteDimensional ℚ K]
(hK : ∀ i j, Complex.exp (x i * y j) ∈ K)
(c : ℝ) (hc : 0 < c) :
∃ M₀ : ℕ, ∀ M : ℕ, M₀ ≤ M → ∀ L : ℕ, 0 < L → (L : ℝ) ^ d ≤ c * (M : ℝ) ^ l →
∀ p : (Fin d → ℕ) → ℤ, (∀ lam, |(p lam : ℝ)| ≤ Real.exp (c * L * M)) →
∀ N : ℕ, M ≤ N →
(∀ m : Fin l → ℕ, (∀ j, m j < N) → SX.expSum x L p (SX.latticeSum y m) = 0) →
(∀ m : Fin l → ℕ, (∀ j, m j < N + 1) → SX.expSum x L p (SX.latticeSum y m) = 0) := by
sorry
end SX