Skip to main content
AlexKontorovich/PrimeNumberTheoremAnd
Source indexedtheorem · leanprover/lean4:v4.32.0

Kadiri.kadiri_laplace_exp_hasDerivAt_of_full_strip

PrimeNumberTheoremAnd.IEANTN.KadiriEq12Foundations · PrimeNumberTheoremAnd/IEANTN/KadiriEq12Foundations.lean:341 to 450

Mathematical statement

Exact Lean statement

theorem kadiri_laplace_exp_hasDerivAt_of_full_strip {φ : ℝ → ℂ}
    (hφ : ContDiff ℝ 1 φ) {b : ℝ} {s0 : ℂ}
    (hs0lo : -b < s0.re) (hs0hi : s0.re < 1 + b)
    (hφ_decay : (fun x : ℝ ↦ φ x * exp ((x : ℂ) / 2))
        =O[Filter.cocompact ℝ] fun x : ℝ ↦ Real.exp (-(1/2 + b) * |x|)) :
    HasDerivAt
      (fun s : ℂ => ∫ y : ℝ, φ y * exp (s * (y : ℂ)) ∂volume)
      (∫ y : ℝ, φ y * ((y : ℂ) * exp (s0 * (y : ℂ))) ∂volume) s0

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
theorem kadiri_laplace_exp_hasDerivAt_of_full_strip {φ :   ℂ}    (hφ : ContDiff  1 φ) {b : } {s0 : ℂ}    (hs0lo : -b < s0.re) (hs0hi : s0.re < 1 + b)    (hφ_decay : (fun x :   φ x * exp ((x : ℂ) / 2))        =O[Filter.cocompact ] fun x :   Real.exp (-(1/2 + b) * |x|)) :    HasDerivAt      (fun s : ℂ => ∫ y : , φ y * exp (s * (y : ℂ)) ∂volume)      (∫ y : , φ y * ((y : ℂ) * exp (s0 * (y : ℂ))) ∂volume) s0 := by  let lo :  := (-b + s0.re) / 2  let hi :  := (s0.re + (1 + b)) / 2  let ε :  := min (s0.re - lo) (hi - s0.re) / 2  have hlo_lt_s0 : lo < s0.re := by    dsimp [lo]    linarith  have hs0_lt_hi : s0.re < hi := by    dsimp [hi]    linarith  have hεpos : 0 < ε := by    dsimp [ε]    exact half_pos (lt_min (sub_pos.mpr hlo_lt_s0) (sub_pos.mpr hs0_lt_hi))  have hlo_bound : -b < lo := by    dsimp [lo]    linarith  have hhi_bound : hi < 1 + b := by    dsimp [hi]    linarith  have hlohi : lo  hi := by    linarith [hlo_lt_s0.le, hs0_lt_hi.le]  let F : ℂ   := fun s y => φ y * exp (s * (y : ℂ))  let F' : ℂ   := fun s y => φ y * ((y : ℂ) * exp (s * (y : ℂ)))  let bound :    := fun y =>    ‖(y : ℂ)‖ * ‖φ y‖ * (Real.exp (lo * y) + Real.exp (hi * y))  have hball_re_bounds :       s  Metric.ball s0 ε, lo  s.re  s.re  hi := by    intro s hs    have hre_diff : |s.re - s0.re|  ‖s - s0‖ := by      simpa [sub_re] using Complex.abs_re_le_norm (s - s0)    have hnorm_lt : ‖s - s0‖ < ε := by      simpa [dist_eq_norm] using Metric.mem_ball.mp hs    have hε_le_left : ε  s0.re - lo := by      dsimp [ε]      exact (half_le_self (by positivity)).trans (min_le_left _ _)    have hε_le_right : ε  hi - s0.re := by      dsimp [ε]      exact (half_le_self (by positivity)).trans (min_le_right _ _)    have hdiff_le : |s.re - s0.re|  ε := le_trans hre_diff (le_of_lt hnorm_lt)    constructor    · have hleft := (abs_le.mp hdiff_le).1      linarith    · have hright := (abs_le.mp hdiff_le).2      linarith  have hF_meas : ᶠ s in 𝓝 s0, AEStronglyMeasurable (F s) volume := by    exact Eventually.of_forall fun s => by      dsimp [F]      exact (hφ.continuous.mul (continuous_exp.comp (by fun_prop))).aestronglyMeasurable  have hF_int : Integrable (F s0) volume := by    have hbase : Integrable (fun y :  => exp (((s0.re : ) : ℂ) * (y : ℂ)) * φ y) :=      kadiri_laplace_full_strip_weight_integrable_of_continuous:= φ) hφ.continuous hs0lo hs0hi hφ_decay    refine hbase.congr' ?_ ?_    · dsimp [F]      exact (hφ.continuous.mul (continuous_exp.comp (by fun_prop))).aestronglyMeasurable    · filter_upwards with y      dsimp [F]      rw [norm_mul, norm_mul, Complex.norm_exp, Complex.norm_exp]      have h1 : (s0 * (y : ℂ)).re = s0.re * y := by norm_num [Complex.mul_re]      have h2 : ((((s0.re : ) : ℂ) * (y : ℂ)) : ℂ).re = s0.re * y := by norm_num      rw [h1, h2]      ring  have hF'_meas : AEStronglyMeasurable (F' s0) volume := by    dsimp [F']    exact (hφ.continuous.mul ((continuous_ofReal.mul (continuous_exp.comp (by fun_prop))))).aestronglyMeasurable  have h_bound : ᵐ y ∂volume,  s  Metric.ball s0 ε, ‖F' s y‖  bound y := by    filter_upwards with y s hs    obtain hslo, hshi := hball_re_bounds s hs    dsimp [F', bound]    rw [norm_mul, norm_mul, Complex.norm_exp]    have hre : (s * (y : ℂ)).re = s.re * y := by norm_num [Complex.mul_re]    rw [hre]    have hexp_le : Real.exp (s.re * y)  Real.exp (lo * y) + Real.exp (hi * y) := by      by_cases hy : 0  y      · have hmul : s.re * y  hi * y := mul_le_mul_of_nonneg_right hshi hy        exact (Real.exp_le_exp.mpr hmul).trans          (le_add_of_nonneg_left (Real.exp_nonneg _))      · have hy' : y  0 := le_of_not_ge hy        have hmul : s.re * y  lo * y := mul_le_mul_of_nonpos_right hslo hy'        exact (Real.exp_le_exp.mpr hmul).trans          (le_add_of_nonneg_right (Real.exp_nonneg _))    calc      ‖φ y‖ * (‖(y : ℂ)‖ * Real.exp (s.re * y))           ‖φ y‖ * (‖(y : ℂ)‖ *              (Real.exp (lo * y) + Real.exp (hi * y))) := by            gcongr      _ = ‖(y : ℂ)‖ * ‖φ y‖ *          (Real.exp (lo * y) + Real.exp (hi * y)) := by ring  have hbound_int : Integrable bound volume :=    kadiri_laplace_full_strip_exp_interval_moment_integrable_of_continuous      hφ.continuous hlo_bound hhi_bound hlohi hφ_decay  have h_diff : ᵐ y ∂volume,  s  Metric.ball s0 ε,      HasDerivAt (fun w : ℂ => F w y) (F' s y) s := by    filter_upwards with y s _hs    dsimp [F, F']    simpa [mul_assoc, mul_comm, mul_left_comm] using      (((hasDerivAt_id s).mul_const (y : ℂ)).cexp.const_mul (φ y))  have hderiv :=    (hasDerivAt_integral_of_dominated_loc_of_deriv_le      (F := F) (F' := F') (x₀ := s0) (s := Metric.ball s0 ε)      (bound := bound) (μ := volume) (Metric.ball_mem_nhds s0 hεpos)      hF_meas hF_int hF'_meas h_bound hbound_int h_diff).2  simpa [F, F'] using hderiv