AlexKontorovich/PrimeNumberTheoremAnd
Source indexedlemma · leanprover/lean4:v4.32.0
Kadiri.kadiri_laplace_positive_line_weight_integrable_of_continuous
PrimeNumberTheoremAnd.IEANTN.KadiriEq13 · PrimeNumberTheoremAnd/IEANTN/KadiriEq13.lean:38 to 126
Mathematical statement
Exact Lean statement
lemma kadiri_laplace_positive_line_weight_integrable_of_continuous {ψ : ℝ → ℂ}
(hψ : Continuous ψ) {b : ℝ}
(hψ_decay : (fun x : ℝ ↦ ψ x * exp ((x : ℂ) / 2))
=O[Filter.cocompact ℝ] fun x : ℝ ↦ Real.exp (-(1/2 + b) * |x|))
{a : ℝ} (ha : 0 < a) (hab : a < b) :
Integrable (fun y : ℝ => exp (-((a : ℂ) * (y : ℂ))) * ψ y)Complete declaration
Lean source
Full Lean sourceLean 4
lemma kadiri_laplace_positive_line_weight_integrable_of_continuous {ψ : ℝ → ℂ} (hψ : Continuous ψ) {b : ℝ} (hψ_decay : (fun x : ℝ ↦ ψ x * exp ((x : ℂ) / 2)) =O[Filter.cocompact ℝ] fun x : ℝ ↦ Real.exp (-(1/2 + b) * |x|)) {a : ℝ} (ha : 0 < a) (hab : a < b) : Integrable (fun y : ℝ => exp (-((a : ℂ) * (y : ℂ))) * ψ y) := by let F : ℝ → ℂ := fun y => exp (-((a : ℂ) * (y : ℂ))) * ψ y have hF_cont : Continuous F := by dsimp [F] fun_prop have hF_loc : LocallyIntegrable F volume := hF_cont.locallyIntegrable have hshape : ∀ x : ℝ, ‖F x‖ = Real.exp (-(a + 1 / 2) * x) * ‖ψ x * exp ((x : ℂ) / 2)‖ := by intro x dsimp [F] rw [norm_mul, norm_mul, Complex.norm_exp, Complex.norm_exp] have h1 : (-(↑a * ↑x) : ℂ).re = -a * x := by norm_num [Complex.mul_re] have h2 : ((x : ℂ) / 2).re = x / 2 := by norm_num rw [h1, h2] calc Real.exp (-a * x) * ‖ψ x‖ = (Real.exp (-(a + 1 / 2) * x) * Real.exp (x / 2)) * ‖ψ x‖ := by rw [← Real.exp_add] congr 1 ring_nf _ = Real.exp (-(a + 1 / 2) * x) * (‖ψ x‖ * Real.exp (x / 2)) := by ring_nf have htop_decay := hψ_decay.mono (show Filter.atTop ≤ Filter.cocompact ℝ from atTop_le_cocompact) have hbot_decay := hψ_decay.mono (show Filter.atBot ≤ Filter.cocompact ℝ from atBot_le_cocompact) have htop : F =O[Filter.atTop] fun x : ℝ => Real.exp (-(a + b + 1) * x) := by rw [Asymptotics.isBigO_iff] at htop_decay ⊢ obtain ⟨C, hC⟩ := htop_decay refine ⟨C, ?_⟩ filter_upwards [hC, Filter.eventually_gt_atTop (0 : ℝ)] with x hxC hxpos rw [hshape] calc Real.exp (-(a + 1 / 2) * x) * ‖ψ x * exp ((x : ℂ) / 2)‖ ≤ Real.exp (-(a + 1 / 2) * x) * (C * ‖Real.exp (-(1 / 2 + b) * |x|)‖) := by exact mul_le_mul_of_nonneg_left hxC (Real.exp_nonneg _) _ = C * ‖Real.exp (-(a + b + 1) * x)‖ := by rw [Real.norm_eq_abs, Real.norm_eq_abs, abs_of_pos (Real.exp_pos _), abs_of_pos (Real.exp_pos _), abs_of_pos hxpos] calc Real.exp (-(a + 1 / 2) * x) * (C * Real.exp (-(1 / 2 + b) * x)) = C * (Real.exp (-(a + 1 / 2) * x) * Real.exp (-(1 / 2 + b) * x)) := by ring_nf _ = C * Real.exp (-(a + 1 / 2) * x + (-(1 / 2 + b) * x)) := by rw [Real.exp_add] _ = C * Real.exp (-(a + b + 1) * x) := by ring_nf have hbot : F =O[Filter.atBot] fun x : ℝ => Real.exp ((b - a) * x) := by rw [Asymptotics.isBigO_iff] at hbot_decay ⊢ obtain ⟨C, hC⟩ := hbot_decay refine ⟨C, ?_⟩ filter_upwards [hC, Filter.eventually_lt_atBot (0 : ℝ)] with x hxC hxneg rw [hshape] calc Real.exp (-(a + 1 / 2) * x) * ‖ψ x * exp ((x : ℂ) / 2)‖ ≤ Real.exp (-(a + 1 / 2) * x) * (C * ‖Real.exp (-(1 / 2 + b) * |x|)‖) := by exact mul_le_mul_of_nonneg_left hxC (Real.exp_nonneg _) _ = C * ‖Real.exp ((b - a) * x)‖ := by rw [Real.norm_eq_abs, Real.norm_eq_abs, abs_of_pos (Real.exp_pos _), abs_of_pos (Real.exp_pos _), abs_of_neg hxneg] calc Real.exp (-(a + 1 / 2) * x) * (C * Real.exp (-(1 / 2 + b) * -x)) = C * (Real.exp (-(a + 1 / 2) * x) * Real.exp (-(1 / 2 + b) * -x)) := by ring_nf _ = C * Real.exp (-(a + 1 / 2) * x + (-(1 / 2 + b) * -x)) := by rw [Real.exp_add] _ = C * Real.exp ((b - a) * x) := by ring_nf have htop_int : IntegrableAtFilter (fun x : ℝ => Real.exp (-(a + b + 1) * x)) Filter.atTop volume := by refine ⟨Set.Ioi 0, Filter.Ioi_mem_atTop 0, ?_⟩ exact exp_neg_integrableOn_Ioi 0 (show 0 < a + b + 1 by linarith) have hbot_int : IntegrableAtFilter (fun x : ℝ => Real.exp ((b - a) * x)) Filter.atBot volume := by rw [← Filter.map_neg_atTop, measurableEmbedding_neg.integrableAtFilter_iff_comap] have hvol : (volume : Measure ℝ).comap Neg.neg = volume := by convert! (MeasurableEquiv.neg ℝ).map_symm.symm using 1; simp rw [hvol, Function.comp_def] refine ⟨Set.Ioi 0, Filter.Ioi_mem_atTop 0, ?_⟩ convert exp_neg_integrableOn_Ioi 0 (sub_pos.mpr hab) using 1 ext x ring_nf exact hF_loc.integrable_of_isBigO_atBot_atTop hbot hbot_int htop htop_int