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

bounded_of_continuous_of_isBigO_exp_atBot_atTop

PrimeNumberTheoremAnd.LaplaceInversion · PrimeNumberTheoremAnd/LaplaceInversion.lean:2466 to 2530

Source documentation

A continuous function that decays like a negative exponential at +∞ and is controlled by a positive exponential at -∞ is globally bounded.

Exact Lean statement

lemma bounded_of_continuous_of_isBigO_exp_atBot_atTop
    {f : ℝ → ℂ} (hf_cont : Continuous f) {cTop cBot : ℝ}
    (hcTop : cTop < 0) (hcBot : 0 < cBot)
    (htop : f =O[Filter.atTop] fun y : ℝ => Real.exp (cTop * y))
    (hbot : f =O[Filter.atBot] fun y : ℝ => Real.exp (cBot * y)) :
    ∃ B : ℝ, 0 ≤ B ∧ ∀ y : ℝ, ‖f y‖ ≤ B

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma bounded_of_continuous_of_isBigO_exp_atBot_atTop    {f :   ℂ} (hf_cont : Continuous f) {cTop cBot : }    (hcTop : cTop < 0) (hcBot : 0 < cBot)    (htop : f =O[Filter.atTop] fun y :  => Real.exp (cTop * y))    (hbot : f =O[Filter.atBot] fun y :  => Real.exp (cBot * y)) :     B : , 0  B   y : , ‖f y‖  B := by  obtain Ctop, hCtop := htop.bound  let Ctop' :  := max Ctop 0  have hCtop'_nonneg : 0  Ctop' := le_max_right _ _  have htop_ev : ᶠ y in Filter.atTop, ‖f y‖  Ctop' := by    filter_upwards [hCtop, Filter.eventually_ge_atTop (0 : )] with y hCy hy0    have hnorm : ‖Real.exp (cTop * y)‖ = Real.exp (cTop * y) := by      rw [Real.norm_eq_abs, abs_of_pos (Real.exp_pos _)]    have hexp_le : Real.exp (cTop * y)  1 := by      rw [ Real.exp_zero]      exact Real.exp_le_exp.mpr (mul_nonpos_of_nonpos_of_nonneg hcTop.le hy0)    calc      ‖f y‖  Ctop *Real.exp (cTop * y)‖ := hCy      _ = Ctop * Real.exp (cTop * y) := by rw [hnorm]      _  Ctop' * Real.exp (cTop * y) := by        exact mul_le_mul_of_nonneg_right (le_max_left _ _) (Real.exp_nonneg _)      _  Ctop' * 1 := by        exact mul_le_mul_of_nonneg_left hexp_le hCtop'_nonneg      _ = Ctop' := by ring  obtain Ytop, hYtop := Filter.eventually_atTop.mp htop_ev  obtain Cbot, hCbot := hbot.bound  let Cbot' :  := max Cbot 0  have hCbot'_nonneg : 0  Cbot' := le_max_right _ _  have hbot_ev : ᶠ y in Filter.atBot, ‖f y‖  Cbot' := by    filter_upwards [hCbot, Filter.eventually_le_atBot (0 : )] with y hCy hy0    have hnorm : ‖Real.exp (cBot * y)‖ = Real.exp (cBot * y) := by      rw [Real.norm_eq_abs, abs_of_pos (Real.exp_pos _)]    have hexp_le : Real.exp (cBot * y)  1 := by      rw [ Real.exp_zero]      exact Real.exp_le_exp.mpr (mul_nonpos_of_nonneg_of_nonpos hcBot.le hy0)    calc      ‖f y‖  Cbot *Real.exp (cBot * y)‖ := hCy      _ = Cbot * Real.exp (cBot * y) := by rw [hnorm]      _  Cbot' * Real.exp (cBot * y) := by        exact mul_le_mul_of_nonneg_right (le_max_left _ _) (Real.exp_nonneg _)      _  Cbot' * 1 := by        exact mul_le_mul_of_nonneg_left hexp_le hCbot'_nonneg      _ = Cbot' := by ring  obtain Ybot, hYbot := Filter.eventually_atBot.mp hbot_ev  let lo :  := min Ybot Ytop  let hi :  := max Ybot Ytop  obtain Cmid, hCmid := isCompact_Icc.exists_bound_of_continuousOn    (s := Set.Icc lo hi) hf_cont.continuousOn  let B :  := max Ctop' (max Cbot' (max Cmid 0))  refine B, ?_, ?_  · exact le_max_of_le_right (le_max_of_le_right (le_max_right _ _))  · intro y    by_cases htop_case : Ytop  y    · exact (hYtop y htop_case).trans (le_max_left _ _)    · by_cases hbot_case : y  Ybot      · exact (hYbot y hbot_case).trans          ((le_max_left _ _).trans (le_max_right _ _))      · have hy_gt_bot : Ybot < y := lt_of_not_ge hbot_case        have hy_lt_top : y < Ytop := lt_of_not_ge htop_case        have hylo : lo  y :=          (min_le_left Ybot Ytop).trans hy_gt_bot.le        have hyhi : y  hi :=          hy_lt_top.le.trans (le_max_right Ybot Ytop)        exact (hCmid y hylo, hyhi).trans          ((le_max_left _ _).trans ((le_max_right _ _).trans (le_max_right _ _)))