Siegel's lemma builds the auxiliary function from presentations whose degree in ω grows with T·a
ProvedFourExp.auxiliary_function_alg_columnLet , and let have -degree and be minimal at : no non-zero of -degree less than vanishes there. Suppose that the derivatives of the auxiliary function have the reduced presentations in the conclusion of FourExp.exists_iteratedDeriv_reduced_presentation_column. Then there is such that for every large , with , and , there are and integers (, , , ) with such that the numbers are not all zero, satisfy , and give a function
with for all , , .
This is Lemme 4 of Waldschmidt (1973). FourExp.auxiliary_function_alg assumes all four algebraic and derives the presentation from them; here the presentation is the hypothesis, and the conclusion is the same. The proof is FourExp.aux_linear_system_column followed by Siegel's lemma in the form FourExp.siegel_aux, where the minimality of makes some non-zero.
import Mathlib
namespace FourExp
/-- Siegel's auxiliary function of Waldschmidt's argument, from a reduced presentation of the
derivatives whose `X`-degrees grow with `T a`.
Write `φ(P) = P(ω, ω₁)` for `P ∈ ℤ[X][Y]`, with `Q ∈ ℤ[X][Y]` of positive `Y`-degree such that no
non-zero `A` of smaller `Y`-degree has `φ(A) = 0`. The hypothesis `hpres` is the conclusion of
`FourExp.exists_iteratedDeriv_reduced_presentation_column`. Then there are `κ > 0` and, for large
`N`, integers `q_{ijkμν}`, not all giving zero coefficients, with `|q| ≤ e^(κ N² √(log N))` and
`μ < M ≤ κ S`, such that `F(z) = ∑ c_{ijk} z^i e^((j x₁ + k x₂) z)` with
`c_{ijk} = ∑ q_{ijkμν} ω^μ ω₁^ν` vanishes to order `S` at the points `a y₁ + b y₂`, `a < t₁`,
`b < t₂`. The conclusion is that of `FourExp.auxiliary_function_alg`; the proof is
`FourExp.aux_linear_system_column` followed by `FourExp.siegel_aux`. -/
theorem auxiliary_function_alg_column
(x₁ x₂ y₁ y₂ : ℂ) (ω ω₁ : ℂ) (Q : Polynomial (Polynomial ℤ)) (hQd : 0 < Q.natDegree)
(hQmin : ∀ A : Polynomial (Polynomial ℤ), A.natDegree < Q.natDegree → Polynomial.eval₂ (Polynomial.eval₂RingHom (Int.castRingHom ℂ) ω) ω₁ A = 0 → A = 0)
(hpres : ∃ c : ℕ, ∀ S T M a b m : ℕ, ∃ Λ : ℂ, Λ ≠ 0 ∧
‖Λ‖ ≤ (c : ℝ) ^ (c * (1 + m + S + T * (a + b))) ∧
∃ R : Fin S → Fin T → Fin T → Fin M → Fin Q.natDegree → Polynomial (Polynomial ℤ),
(∀ i j k μ ν, (R i j k μ ν).natDegree < Q.natDegree) ∧
(∀ i j k μ ν, ∑ r ∈ (R i j k μ ν).support, ∑ h ∈ ((R i j k μ ν).coeff r).support,
(((R i j k μ ν).coeff r).coeff h).natAbs ≤
c ^ (c * (1 + m + S + T * (a + b))) * (1 + m + S + T + a + b) ^ (c * (1 + m + S))) ∧
(∀ i j k μ ν r, ((R i j k μ ν).coeff r).natDegree ≤ M + c * (1 + m + S + T * a)) ∧
∀ q : Fin S → Fin T → Fin T → Fin M → Fin Q.natDegree → ℤ,
Λ * iteratedDeriv m (fun z : ℂ => ∑ i : Fin S, ∑ j : Fin T, ∑ k : Fin T,
(∑ μ : Fin M, ∑ ν : Fin Q.natDegree,
((q i j k μ ν : ℤ) : ℂ) * ω ^ (μ : ℕ) * ω₁ ^ (ν : ℕ)) * z ^ (i : ℕ) *
Complex.exp ((((j : ℕ) : ℂ) * x₁ + ((k : ℕ) : ℂ) * x₂) * z))
((a : ℂ) * y₁ + (b : ℂ) * y₂) =
Polynomial.eval₂ (Polynomial.eval₂RingHom (Int.castRingHom ℂ) ω) ω₁
(∑ i : Fin S, ∑ j : Fin T, ∑ k : Fin T, ∑ μ : Fin M, ∑ ν : Fin Q.natDegree,
Polynomial.C (Polynomial.C (q i j k μ ν)) * R i j k μ ν)) :
∃ κ : ℝ, 0 < κ ∧ ∃ N₀ : ℕ, ∀ N : ℕ, N₀ < N →
∃ M : ℕ, (M : ℝ) ≤ κ * ⌊(N : ℝ) ^ 2 / Real.sqrt (Real.log (N : ℝ))⌋₊ ∧
∃ q : Fin ⌊(N : ℝ) ^ 2 / Real.sqrt (Real.log (N : ℝ))⌋₊ → Fin (2 * N) → Fin (2 * N) → Fin M → Fin Q.natDegree → ℤ,
(∀ i j k' μ ν, |((q i j k' μ ν : ℤ) : ℝ)| ≤ Real.exp (κ * ((N : ℝ) ^ 2 * Real.sqrt (Real.log (N : ℝ))))) ∧
(∃ i j k', (fun i j k' => ∑ μ : Fin M, ∑ ν : Fin Q.natDegree, ((q i j k' μ ν : ℤ) : ℂ) * ω ^ (μ : ℕ) * ω₁ ^ (ν : ℕ)) i j k' ≠ 0) ∧
(∀ i j k', ‖(fun i j k' => ∑ μ : Fin M, ∑ ν : Fin Q.natDegree, ((q i j k' μ ν : ℤ) : ℂ) * ω ^ (μ : ℕ) * ω₁ ^ (ν : ℕ)) i j k'‖ ≤ Real.exp (κ * ((N : ℝ) ^ 2 * Real.sqrt (Real.log (N : ℝ))))) ∧
(∀ a b m : ℕ, a < ⌊(N : ℝ) / Real.sqrt (Real.log (N : ℝ))⌋₊ → b < ⌊(N : ℝ) * Real.sqrt (Real.log (N : ℝ))⌋₊ → m < ⌊(N : ℝ) ^ 2 / Real.sqrt (Real.log (N : ℝ))⌋₊ →
iteratedDeriv m (fun z : ℂ => ∑ i : Fin ⌊(N : ℝ) ^ 2 / Real.sqrt (Real.log (N : ℝ))⌋₊, ∑ j : Fin (2 * N), ∑ k' : Fin (2 * N),
(fun i j k' => ∑ μ : Fin M, ∑ ν : Fin Q.natDegree, ((q i j k' μ ν : ℤ) : ℂ) * ω ^ (μ : ℕ) * ω₁ ^ (ν : ℕ)) i j k' * z ^ (i : ℕ) * Complex.exp ((((j : ℕ) : ℂ) * x₁ + ((k' : ℕ) : ℂ) * x₂) * z)) ((a : ℂ) * y₁ + (b : ℂ) * y₂) = 0) := by
sorry
end FourExp