Shifting the Perron contour into the zero-free region
ProvedWeil.perron_contour_shiftThe contour shift. Fix a region constant and a bound constant . There are constants and , depending only on and , such that the following holds for every modulus , every , every finite set of poles and every assignment of residues satisfying:
- is analytic in a neighbourhood of each point of ;
- every satisfies ;
- ;
- on that same region, off ,
Then for every integer and every there exists a height with
where .
This is the analytic heart of the de la Vallée Poussin argument. The vertical line at is moved left to , which lies inside the region for once is small enough in terms of ; the residues are what the shift releases, and the three remaining sides of the rectangle are estimated by hypothesis 4.
Two features of the statement are deliberate rather than incidental. First, the height is quantified existentially inside a dyadic window rather than prescribed: the horizontal sides of the contour must avoid the ordinates of the poles, and a suitable is produced by averaging over the window, the singularity being integrable. A version of this statement holding for every would be false, since a pole may sit on the contour. Second, poles lying outside the shifted rectangle — to the left of , or above height — are not released by the shift; their total contribution to is nevertheless inside the stated error, by hypotheses 2 and 3.
Context. The theorem this lemma was introduced to decompose, Davenport.perron_of_region_bound, was proved independently — via the smoothed Perron route (Davenport.perron_smoothed_eq_integral and its siblings), which replaces the sharp cutoff by a smooth weight and so avoids the truncation error entirely. The statement here belongs to the classical sharp-cutoff route of Davenport Sections 17-18 and is left standing as a self-contained, reusable statement in its own right; it is not on the critical path of any current mission.
import Definitions.Def_Weil_perron import Definitions.Def_Davenport_siegelWalfisz import Mathlib.NumberTheory.LSeries.Basic import Mathlib.NumberTheory.ArithmeticFunction.VonMangoldt import Mathlib.Analysis.Analytic.Order import Mathlib.Analysis.SpecialFunctions.Pow.Real import Mathlib.Analysis.SpecialFunctions.Log.Basic import Mathlib.Analysis.SpecialFunctions.Exp import Mathlib.Analysis.SpecialFunctions.Sqrt set_option autoImplicit false open Finset
namespace Weil
theorem perron_contour_shift (c C₀ : ℝ) (hc : 0 < c) (hC₀ : 0 < C₀) :
∃ c' K : ℝ, 0 < c' ∧ 0 < K ∧
∀ (q : ℕ) [NeZero q] (G : ℂ → ℂ) (P : Finset ℂ) (r : ℂ → ℂ),
AnalyticOnNhd ℂ G ({s : ℂ | Davenport.InRegion c q s ∧ 3 / 4 ≤ s.re} \ ↑P) →
(∀ p ∈ P, 1 / 2 ≤ p.re ∧ p.re ≤ 1) →
(∑ p ∈ P, ‖r p‖) ≤ C₀ * Real.log (2 * q) →
(∀ s : ℂ, Davenport.InRegion c q s → 3 / 4 ≤ s.re → s ∉ P →
‖G s - ∑ p ∈ P, r p / (s - p)‖ ≤ C₀ * Real.log ((q : ℝ) * (|s.im| + 2)) ^ 2) →
∀ N : ℕ, 2 ≤ N → ∀ T₀ : ℝ, 2 ≤ T₀ →
∃ T : ℝ, T₀ ≤ T ∧ T ≤ 2 * T₀ ∧
‖perronIntegral G N (1 + 1 / Real.log N) T - ∑ p ∈ P, r p * (N : ℂ) ^ p / p‖
≤ K * ((N : ℝ) ^ (1 - c' / Real.log ((q : ℝ) * T₀))
* Real.log ((q : ℝ) * T₀) ^ 3
+ (N : ℝ) * Real.log ((q : ℝ) * T₀) ^ 2 / T₀) := by sorry
end Weil