analysis.complex.phragmen_lindelof
⟷
Mathlib.Analysis.Complex.PhragmenLindelof
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -561,7 +561,7 @@ theorem quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
(hre : ∀ x : ℝ, x ≤ 0 → ‖f x‖ ≤ C) (him : ∀ x : ℝ, 0 ≤ x → ‖f (x * I)‖ ≤ C) (hz_re : z.re ≤ 0)
(hz_im : 0 ≤ z.im) : ‖f z‖ ≤ C :=
by
- obtain ⟨z, rfl⟩ : ∃ z', z' * I = z; exact ⟨z / I, div_mul_cancel _ I_ne_zero⟩
+ obtain ⟨z, rfl⟩ : ∃ z', z' * I = z; exact ⟨z / I, div_mul_cancel₀ _ I_ne_zero⟩
simp only [mul_I_re, mul_I_im, neg_nonpos] at hz_re hz_im
change ‖(f ∘ (· * I)) z‖ ≤ C
have H : maps_to (· * I) (Ioi 0 ×ℂ Ioi 0) (Iio 0 ×ℂ Ioi 0) :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -148,7 +148,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
(hzb : im z ≤ b) : ‖f z‖ ≤ C :=
by
-- If `im z = a` or `im z = b`, then we apply `hle_a` or `hle_b`, otherwise `im z ∈ Ioo a b`.
- rw [le_iff_eq_or_lt] at hza hzb
+ rw [le_iff_eq_or_lt] at hza hzb
cases' hza with hza hza; · exact hle_a _ hza.symm
cases' hzb with hzb hzb; · exact hle_b _ hzb
-- WLOG, `0 < C`.
@@ -167,7 +167,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
⟨(a + b) / 2, (b - a) / 2, by ring, by ring⟩
have hab : a - b < a + b := hza.trans hzb
have hb : 0 < b := by simpa only [sub_eq_add_neg, add_lt_add_iff_left, neg_lt_self_iff] using hab
- rw [add_sub_sub_cancel, ← two_mul, div_mul_eq_div_div] at hB
+ rw [add_sub_sub_cancel, ← two_mul, div_mul_eq_div_div] at hB
have hπb : 0 < π / 2 / b := div_pos Real.pi_div_two_pos hb
-- Choose some `c B : ℝ` satisfying `hB`, then choose `max c 0 < d < π / 2 / b`.
rcases hB with ⟨c, hc, B, hO⟩
@@ -184,7 +184,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
refine' le_of_tendsto (tendsto.mono_left _ nhdsWithin_le_nhds) this
apply ((continuous_of_real.mul continuous_const).cexp.smul continuous_const).norm.tendsto'
simp; infer_instance
- filter_upwards [self_mem_nhdsWithin] with ε ε₀; change ε < 0 at ε₀
+ filter_upwards [self_mem_nhdsWithin] with ε ε₀; change ε < 0 at ε₀
-- An upper estimate on `‖g ε w‖` that will be used in two branches of the proof.
obtain ⟨δ, δ₀, hδ⟩ :
∃ δ : ℝ,
@@ -196,7 +196,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
(Real.cos_pos_of_mem_Ioo <| abs_lt.1 <| (abs_of_pos (mul_pos hd₀ hb)).symm ▸ hb'),
fun w hw => _⟩
replace hw : |im (aff w)| ≤ d * b
- · rw [← Real.closedBall_eq_Icc] at hw
+ · rw [← Real.closedBall_eq_Icc] at hw
rwa [of_real_mul_im, sub_im, mul_I_im, of_real_re, _root_.abs_mul, abs_of_pos hd₀,
mul_le_mul_left hd₀]
simpa only [of_real_mul_re, _root_.abs_mul, abs_of_pos hd₀, sub_re, mul_I_re, of_real_im,
@@ -216,7 +216,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
refine' ((eventually_gt_at_top _).And _).exists
rcases hO.exists_pos with ⟨A, hA₀, hA⟩
simp only [is_O_with_iff, eventually_inf_principal, eventually_comap, mem_Ioo, ← abs_lt,
- mem_preimage, (· ∘ ·), Real.norm_eq_abs, abs_of_pos (Real.exp_pos _)] at hA
+ mem_preimage, (· ∘ ·), Real.norm_eq_abs, abs_of_pos (Real.exp_pos _)] at hA
suffices tendsto (fun R => expR (δ * expR (d * R) + B * expR (c * R) + Real.log A)) at_top (𝓝 0)
by
filter_upwards [this.eventually (ge_mem_nhds hC₀), hA] with R hR Hle w hre him
@@ -229,7 +229,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
(Real.exp_pos _).le
refine' real.tendsto_exp_at_bot.comp _
suffices H : tendsto (fun R => δ + B * (expR ((d - c) * R))⁻¹) at_top (𝓝 (δ + B * 0))
- · rw [MulZeroClass.mul_zero, add_zero] at H
+ · rw [MulZeroClass.mul_zero, add_zero] at H
refine' tendsto.at_bot_add _ tendsto_const_nhds
simpa only [id, (· ∘ ·), add_mul, mul_assoc, ← div_eq_inv_mul, ← Real.exp_sub, ← sub_mul,
sub_sub_cancel] using
@@ -254,13 +254,13 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
(fun w hw => _) _
· have hwc := frontier_subset_closure hw
rw [frontier_re_prod_im, closure_Ioo (neg_lt_self hR₀).Ne, frontier_Ioo hab, closure_Ioo hab.ne,
- frontier_Ioo (neg_lt_self hR₀)] at hw
+ frontier_Ioo (neg_lt_self hR₀)] at hw
by_cases him : w.im = a - b ∨ w.im = a + b
- · rw [closure_re_prod_im, closure_Ioo (neg_lt_self hR₀).Ne] at hwc
+ · rw [closure_re_prod_im, closure_Ioo (neg_lt_self hR₀).Ne] at hwc
rw [norm_smul, ← one_mul C]
exact mul_le_mul (hg₁ _ him) (him.by_cases (hle_a _) (hle_b _)) (norm_nonneg _) zero_le_one
· replace hw : w ∈ {-R, R} ×ℂ Icc (a - b) (a + b); exact hw.resolve_left fun h => him h.2
- have hw' := eq_endpoints_or_mem_Ioo_of_mem_Icc hw.2; rw [← or_assoc] at hw'
+ have hw' := eq_endpoints_or_mem_Ioo_of_mem_Icc hw.2; rw [← or_assoc] at hw'
exact hR _ ((abs_eq hR₀.le).2 hw.1.symm) (hw'.resolve_left him)
· rw [closure_re_prod_im, closure_Ioo hab.ne, closure_Ioo (neg_lt_self hR₀).Ne]
exact ⟨abs_le.1 hzR.le, ⟨hza.le, hzb.le⟩⟩
@@ -562,7 +562,7 @@ theorem quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
(hz_im : 0 ≤ z.im) : ‖f z‖ ≤ C :=
by
obtain ⟨z, rfl⟩ : ∃ z', z' * I = z; exact ⟨z / I, div_mul_cancel _ I_ne_zero⟩
- simp only [mul_I_re, mul_I_im, neg_nonpos] at hz_re hz_im
+ simp only [mul_I_re, mul_I_im, neg_nonpos] at hz_re hz_im
change ‖(f ∘ (· * I)) z‖ ≤ C
have H : maps_to (· * I) (Ioi 0 ×ℂ Ioi 0) (Iio 0 ×ℂ Ioi 0) :=
by
@@ -642,7 +642,7 @@ theorem quadrant_III (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
(hz_im : z.im ≤ 0) : ‖f z‖ ≤ C :=
by
obtain ⟨z, rfl⟩ : ∃ z', -z' = z; exact ⟨-z, neg_neg z⟩
- simp only [neg_re, neg_im, neg_nonpos] at hz_re hz_im
+ simp only [neg_re, neg_im, neg_nonpos] at hz_re hz_im
change ‖(f ∘ Neg.neg) z‖ ≤ C
have H : maps_to Neg.neg (Ioi 0 ×ℂ Ioi 0) (Iio 0 ×ℂ Iio 0) :=
by
@@ -724,7 +724,7 @@ theorem quadrant_IV (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
(hz_im : z.im ≤ 0) : ‖f z‖ ≤ C :=
by
obtain ⟨z, rfl⟩ : ∃ z', -z' = z; exact ⟨-z, neg_neg z⟩
- simp only [neg_re, neg_im, neg_nonpos, neg_nonneg] at hz_re hz_im
+ simp only [neg_re, neg_im, neg_nonpos, neg_nonneg] at hz_re hz_im
change ‖(f ∘ Neg.neg) z‖ ≤ C
have H : maps_to Neg.neg (Iio 0 ×ℂ Ioi 0) (Ioi 0 ×ℂ Iio 0) :=
by
@@ -840,7 +840,7 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f {z | 0
rwa [closure_set_of_lt_re]
by_cases h₀ : ∀ x : ℝ, 0 ≤ x → f x = 0
· refine' ⟨0, le_rfl, fun y hy => _⟩; rw [h₀ y hy, h₀ 0 le_rfl]
- push_neg at h₀
+ push_neg at h₀
rcases h₀ with ⟨x₀, hx₀, hne⟩
have hlt : ‖(0 : E)‖ < ‖f x₀‖ := by rwa [norm_zero, norm_pos_iff]
suffices ∀ᶠ x : ℝ in cocompact ℝ ⊓ 𝓟 (Ici 0), ‖f x‖ ≤ ‖f x₀‖ by
@@ -862,7 +862,7 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f {z | 0
apply norm_eq_norm_of_is_max_on_of_ball_subset hd hmax
-- move to a lemma?
intro z hz
- rw [mem_ball, dist_zero_left, dist_eq, norm_eq_abs, Complex.abs_of_nonneg hx₀] at hz
+ rw [mem_ball, dist_zero_left, dist_eq, norm_eq_abs, Complex.abs_of_nonneg hx₀] at hz
rw [mem_set_of_eq]
contrapose! hz
calc
@@ -902,7 +902,7 @@ theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f {z | 0 < z.
refine' le_of_tendsto (tendsto.mono_left _ nhdsWithin_le_nhds) this
apply ((continuous_of_real.mul continuous_const).cexp.smul continuous_const).norm.tendsto'
simp; infer_instance
- filter_upwards [self_mem_nhdsWithin] with ε ε₀; change ε < 0 at ε₀
+ filter_upwards [self_mem_nhdsWithin] with ε ε₀; change ε < 0 at ε₀
set g : ℂ → E := fun z => NormedSpace.exp (ε * z) • f z; change ‖g z‖ ≤ C
replace hd : DiffContOnCl ℂ g {z : ℂ | 0 < z.re}
exact (differentiable_id.const_mul _).cexp.DiffContOnCl.smul hd
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -143,8 +143,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
(hB :
∃ c < π / (b - a),
∃ B,
- f =O[comap (Abs.abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)] fun z =>
- expR (B * expR (c * |z.re|)))
+ f =O[comap (abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)] fun z => expR (B * expR (c * |z.re|)))
(hle_a : ∀ z : ℂ, im z = a → ‖f z‖ ≤ C) (hle_b : ∀ z, im z = b → ‖f z‖ ≤ C) (hza : a ≤ im z)
(hzb : im z ≤ b) : ‖f z‖ ≤ C :=
by
@@ -282,8 +281,7 @@ theorem eq_zero_on_horizontal_strip (hd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b)
(hB :
∃ c < π / (b - a),
∃ B,
- f =O[comap (Abs.abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)] fun z =>
- expR (B * expR (c * |z.re|)))
+ f =O[comap (abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)] fun z => expR (B * expR (c * |z.re|)))
(ha : ∀ z : ℂ, z.im = a → f z = 0) (hb : ∀ z : ℂ, z.im = b → f z = 0) :
EqOn f 0 (im ⁻¹' Icc a b) := fun z hz =>
norm_le_zero_iff.1 <|
@@ -307,14 +305,12 @@ theorem eqOn_horizontal_strip {g : ℂ → E} (hdf : DiffContOnCl ℂ f (im ⁻
(hBf :
∃ c < π / (b - a),
∃ B,
- f =O[comap (Abs.abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)] fun z =>
- expR (B * expR (c * |z.re|)))
+ f =O[comap (abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)] fun z => expR (B * expR (c * |z.re|)))
(hdg : DiffContOnCl ℂ g (im ⁻¹' Ioo a b))
(hBg :
∃ c < π / (b - a),
∃ B,
- g =O[comap (Abs.abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)] fun z =>
- expR (B * expR (c * |z.re|)))
+ g =O[comap (abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)] fun z => expR (B * expR (c * |z.re|)))
(ha : ∀ z : ℂ, z.im = a → f z = g z) (hb : ∀ z : ℂ, z.im = b → f z = g z) :
EqOn f g (im ⁻¹' Icc a b) := fun z hz =>
sub_eq_zero.1
@@ -344,8 +340,7 @@ theorem vertical_strip (hfd : DiffContOnCl ℂ f (re ⁻¹' Ioo a b))
(hB :
∃ c < π / (b - a),
∃ B,
- f =O[comap (Abs.abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)] fun z =>
- expR (B * expR (c * |z.im|)))
+ f =O[comap (abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)] fun z => expR (B * expR (c * |z.im|)))
(hle_a : ∀ z : ℂ, re z = a → ‖f z‖ ≤ C) (hle_b : ∀ z, re z = b → ‖f z‖ ≤ C) (hza : a ≤ re z)
(hzb : re z ≤ b) : ‖f z‖ ≤ C :=
by
@@ -357,8 +352,8 @@ theorem vertical_strip (hfd : DiffContOnCl ℂ f (re ⁻¹' Ioo a b))
(fun z hz => hle_a _ _) (fun z hz => hle_b _ _) _ _
· refine' Exists₃.imp (fun c hc B hO => _) hB
have :
- tendsto (fun z => z * -I) (comap (Abs.abs ∘ re) at_top ⊓ 𝓟 (im ⁻¹' Ioo a b))
- (comap (Abs.abs ∘ im) at_top ⊓ 𝓟 (re ⁻¹' Ioo a b)) :=
+ tendsto (fun z => z * -I) (comap (abs ∘ re) at_top ⊓ 𝓟 (im ⁻¹' Ioo a b))
+ (comap (abs ∘ im) at_top ⊓ 𝓟 (re ⁻¹' Ioo a b)) :=
by
refine' (tendsto_comap_iff.2 _).inf H.tendsto
simpa [(· ∘ ·)] using tendsto_comap
@@ -381,8 +376,7 @@ theorem eq_zero_on_vertical_strip (hd : DiffContOnCl ℂ f (re ⁻¹' Ioo a b))
(hB :
∃ c < π / (b - a),
∃ B,
- f =O[comap (Abs.abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)] fun z =>
- expR (B * expR (c * |z.im|)))
+ f =O[comap (abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)] fun z => expR (B * expR (c * |z.im|)))
(ha : ∀ z : ℂ, re z = a → f z = 0) (hb : ∀ z : ℂ, re z = b → f z = 0) :
EqOn f 0 (re ⁻¹' Icc a b) := fun z hz =>
norm_le_zero_iff.1 <|
@@ -406,14 +400,12 @@ theorem eqOn_vertical_strip {g : ℂ → E} (hdf : DiffContOnCl ℂ f (re ⁻¹'
(hBf :
∃ c < π / (b - a),
∃ B,
- f =O[comap (Abs.abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)] fun z =>
- expR (B * expR (c * |z.im|)))
+ f =O[comap (abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)] fun z => expR (B * expR (c * |z.im|)))
(hdg : DiffContOnCl ℂ g (re ⁻¹' Ioo a b))
(hBg :
∃ c < π / (b - a),
∃ B,
- g =O[comap (Abs.abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)] fun z =>
- expR (B * expR (c * |z.im|)))
+ g =O[comap (abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)] fun z => expR (B * expR (c * |z.im|)))
(ha : ∀ z : ℂ, re z = a → f z = g z) (hb : ∀ z : ℂ, re z = b → f z = g z) :
EqOn f g (re ⁻¹' Icc a b) := fun z hz =>
sub_eq_zero.1
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -111,7 +111,7 @@ theorem isBigO_sub_exp_rpow {a : ℝ} {f g : ℂ → E} {l : Filter ℂ}
rw [one_mul, Real.norm_eq_abs, Real.norm_eq_abs, Real.abs_exp, Real.abs_exp, Real.exp_le_exp]
exact
mul_le_mul hB (Real.rpow_le_rpow_of_exponent_le hz hc)
- (Real.rpow_nonneg_of_nonneg (complex.abs.nonneg _) _) hB₀
+ (Real.rpow_nonneg (complex.abs.nonneg _) _) hB₀
rcases hBf with ⟨cf, hcf, Bf, hOf⟩; rcases hBg with ⟨cg, hcg, Bg, hOg⟩
refine' ⟨max cf cg, max_lt hcf hcg, max 0 (max Bf Bg), _⟩
refine' (hOf.trans <| this _ _ _).sub (hOg.trans <| this _ _ _)
@@ -988,7 +988,7 @@ theorem eq_zero_on_right_half_plane_of_superexponential_decay (hd : DiffContOnCl
·
exact
mul_le_mul (le_max_left _ _) (Real.rpow_le_rpow_of_exponent_le hr (le_max_left _ _))
- (Real.rpow_nonneg_of_nonneg (complex.abs.nonneg _) _) (le_max_right _ _)
+ (Real.rpow_nonneg (complex.abs.nonneg _) _) (le_max_right _ _)
· rw [tendsto_zero_iff_norm_tendsto_zero]; simp only [hg]
exact hre n
· rw [hg, of_real_mul_re, I_re, MulZeroClass.mul_zero, Real.exp_zero, one_pow, one_mul]
@@ -1038,7 +1038,7 @@ theorem eqOn_right_half_plane_of_superexponential_decay {g : ℂ → E}
simp only [Real.norm_of_nonneg (Real.exp_pos _).le, Real.exp_le_exp, one_mul]
exact
mul_le_mul hB (Real.rpow_le_rpow_of_exponent_le hz hc)
- (Real.rpow_nonneg_of_nonneg (complex.abs.nonneg _) _) hB₂
+ (Real.rpow_nonneg (complex.abs.nonneg _) _) hB₂
· rcases hfim with ⟨Cf, hCf⟩; rcases hgim with ⟨Cg, hCg⟩
exact ⟨Cf + Cg, fun x => norm_sub_le_of_le (hCf x) (hCg x)⟩
#align phragmen_lindelof.eq_on_right_half_plane_of_superexponential_decay PhragmenLindelof.eqOn_right_half_plane_of_superexponential_decay
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -176,7 +176,8 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
simpa only [max_lt_iff] using exists_between (max_lt hc hπb)
have hb' : d * b < π / 2 := (lt_div_iff hb).1 hd
set aff : ℂ → ℂ := fun w => d * (w - a * I)
- set g : ℝ → ℂ → ℂ := fun ε w => exp (ε * (exp (aff w) + exp (-aff w)))
+ set g : ℝ → ℂ → ℂ := fun ε w =>
+ NormedSpace.exp (ε * (NormedSpace.exp (aff w) + NormedSpace.exp (-aff w)))
/- Since `g ε z → 1` as `ε → 0⁻`, it suffices to prove that `‖g ε z • f z‖ ≤ C`
for all negative `ε`. -/
suffices ∀ᶠ ε : ℝ in 𝓝[<] 0, ‖g ε z • f z‖ ≤ C
@@ -446,15 +447,15 @@ theorem quadrant_I (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
rcases eq_or_ne z 0 with (rfl | hzne);
· exact hre 0 le_rfl
-- Otherwise, `z = e ^ ζ` for some `ζ : ℂ`, `0 < Im ζ < π / 2`.
- obtain ⟨ζ, hζ, rfl⟩ : ∃ ζ : ℂ, ζ.im ∈ Icc 0 (π / 2) ∧ exp ζ = z :=
+ obtain ⟨ζ, hζ, rfl⟩ : ∃ ζ : ℂ, ζ.im ∈ Icc 0 (π / 2) ∧ NormedSpace.exp ζ = z :=
by
refine' ⟨log z, _, exp_log hzne⟩
rw [log_im]
exact ⟨arg_nonneg_iff.2 hz_im, arg_le_pi_div_two_iff.2 (Or.inl hz_re)⟩
clear hz_re hz_im hzne
-- We are going to apply `phragmen_lindelof.horizontal_strip` to `f ∘ complex.exp` and `ζ`.
- change ‖(f ∘ exp) ζ‖ ≤ C
- have H : maps_to exp (im ⁻¹' Ioo 0 (π / 2)) (Ioi 0 ×ℂ Ioi 0) :=
+ change ‖(f ∘ NormedSpace.exp) ζ‖ ≤ C
+ have H : maps_to NormedSpace.exp (im ⁻¹' Ioo 0 (π / 2)) (Ioi 0 ×ℂ Ioi 0) :=
by
intro z hz
rw [mem_re_prod_im, exp_re, exp_im, mem_Ioi, mem_Ioi]
@@ -904,13 +905,13 @@ theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f {z | 0 < z.
-- For each `ε < 0`, the function `λ z, exp (ε * z) • f z` satisfies assumptions of
-- `right_half_plane_of_tendsto_zero_on_real`, hence `‖exp (ε * z) • f z‖ ≤ C` for all `ε < 0`.
-- Taking the limit as `ε → 0`, we obtain the required inequality.
- suffices ∀ᶠ ε : ℝ in 𝓝[<] 0, ‖exp (ε * z) • f z‖ ≤ C
+ suffices ∀ᶠ ε : ℝ in 𝓝[<] 0, ‖NormedSpace.exp (ε * z) • f z‖ ≤ C
by
refine' le_of_tendsto (tendsto.mono_left _ nhdsWithin_le_nhds) this
apply ((continuous_of_real.mul continuous_const).cexp.smul continuous_const).norm.tendsto'
simp; infer_instance
filter_upwards [self_mem_nhdsWithin] with ε ε₀; change ε < 0 at ε₀
- set g : ℂ → E := fun z => exp (ε * z) • f z; change ‖g z‖ ≤ C
+ set g : ℂ → E := fun z => NormedSpace.exp (ε * z) • f z; change ‖g z‖ ≤ C
replace hd : DiffContOnCl ℂ g {z : ℂ | 0 < z.re}
exact (differentiable_id.const_mul _).cexp.DiffContOnCl.smul hd
have hgn : ∀ z, ‖g z‖ = expR (ε * z.re) * ‖f z‖ := by intro z;
@@ -954,7 +955,7 @@ theorem eq_zero_on_right_half_plane_of_superexponential_decay (hd : DiffContOnCl
simpa only [closure_set_of_lt_re] using
eq_on.of_subset_closure this hd.continuous_on continuousOn_const subset_closure subset.rfl
-- Consider $g_n(z)=e^{nz}f(z)$.
- set g : ℕ → ℂ → E := fun n z => exp z ^ n • f z
+ set g : ℕ → ℂ → E := fun n z => NormedSpace.exp z ^ n • f z
have hg : ∀ n z, ‖g n z‖ = expR z.re ^ n * ‖f z‖ := by intro n z;
simp only [norm_smul, norm_eq_abs, Complex.abs_pow, abs_exp]
intro z hz
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,8 +3,8 @@ Copyright (c) 2022 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-/
-import Mathbin.Analysis.Complex.AbsMax
-import Mathbin.Analysis.Asymptotics.SuperpolynomialDecay
+import Analysis.Complex.AbsMax
+import Analysis.Asymptotics.SuperpolynomialDecay
#align_import analysis.complex.phragmen_lindelof from "leanprover-community/mathlib"@"fd4551cfe4b7484b81c2c9ba3405edae27659676"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,15 +2,12 @@
Copyright (c) 2022 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module analysis.complex.phragmen_lindelof
-! leanprover-community/mathlib commit fd4551cfe4b7484b81c2c9ba3405edae27659676
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.Complex.AbsMax
import Mathbin.Analysis.Asymptotics.SuperpolynomialDecay
+#align_import analysis.complex.phragmen_lindelof from "leanprover-community/mathlib"@"fd4551cfe4b7484b81c2c9ba3405edae27659676"
+
/-!
# Phragmen-Lindelöf principle
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -55,7 +55,6 @@ open Set Function Filter Asymptotics Metric Complex
open scoped Topology Filter Real
--- mathport name: exprexpR
local notation "expR" => Real.exp
namespace PhragmenLindelof
@@ -67,6 +66,7 @@ namespace PhragmenLindelof
variable {E : Type _} [NormedAddCommGroup E]
+#print PhragmenLindelof.isBigO_sub_exp_exp /-
/-- An auxiliary lemma that combines two double exponential estimates into a similar estimate
on the difference of the functions. -/
theorem isBigO_sub_exp_exp {a : ℝ} {f g : ℂ → E} {l : Filter ℂ} {u : ℂ → ℝ}
@@ -90,7 +90,9 @@ theorem isBigO_sub_exp_exp {a : ℝ} {f g : ℂ → E} {l : Filter ℂ} {u : ℂ
exacts [le_max_left _ _, le_max_left _ _, (le_max_left _ _).trans (le_max_right _ _),
le_max_right _ _, le_max_left _ _, (le_max_right _ _).trans (le_max_right _ _)]
#align phragmen_lindelof.is_O_sub_exp_exp PhragmenLindelof.isBigO_sub_exp_exp
+-/
+#print PhragmenLindelof.isBigO_sub_exp_rpow /-
/-- An auxiliary lemma that combines two “exponential of a power” estimates into a similar estimate
on the difference of the functions. -/
theorem isBigO_sub_exp_rpow {a : ℝ} {f g : ℂ → E} {l : Filter ℂ}
@@ -119,6 +121,7 @@ theorem isBigO_sub_exp_rpow {a : ℝ} {f g : ℂ → E} {l : Filter ℂ}
exacts [le_max_left _ _, le_max_left _ _, (le_max_left _ _).trans (le_max_right _ _),
le_max_right _ _, le_max_left _ _, (le_max_right _ _).trans (le_max_right _ _)]
#align phragmen_lindelof.is_O_sub_exp_rpow PhragmenLindelof.isBigO_sub_exp_rpow
+-/
variable [NormedSpace ℂ E] {a b C : ℝ} {f g : ℂ → E} {z : ℂ}
@@ -127,6 +130,7 @@ variable [NormedSpace ℂ E] {a b C : ℝ} {f g : ℂ → E} {z : ℂ}
-/
+#print PhragmenLindelof.horizontal_strip /-
/-- **Phragmen-Lindelöf principle** in a strip `U = {z : ℂ | a < im z < b}`.
Let `f : ℂ → E` be a function such that
@@ -264,7 +268,9 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
· rw [closure_re_prod_im, closure_Ioo hab.ne, closure_Ioo (neg_lt_self hR₀).Ne]
exact ⟨abs_le.1 hzR.le, ⟨hza.le, hzb.le⟩⟩
#align phragmen_lindelof.horizontal_strip PhragmenLindelof.horizontal_strip
+-/
+#print PhragmenLindelof.eq_zero_on_horizontal_strip /-
/-- **Phragmen-Lindelöf principle** in a strip `U = {z : ℂ | a < im z < b}`.
Let `f : ℂ → E` be a function such that
@@ -286,7 +292,9 @@ theorem eq_zero_on_horizontal_strip (hd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b)
horizontal_strip hd hB (fun z hz => (ha z hz).symm ▸ norm_zero.le)
(fun z hz => (hb z hz).symm ▸ norm_zero.le) hz.1 hz.2
#align phragmen_lindelof.eq_zero_on_horizontal_strip PhragmenLindelof.eq_zero_on_horizontal_strip
+-/
+#print PhragmenLindelof.eqOn_horizontal_strip /-
/-- **Phragmen-Lindelöf principle** in a strip `U = {z : ℂ | a < im z < b}`.
Let `f g : ℂ → E` be functions such that
@@ -315,12 +323,14 @@ theorem eqOn_horizontal_strip {g : ℂ → E} (hdf : DiffContOnCl ℂ f (im ⁻
(eq_zero_on_horizontal_strip (hdf.sub hdg) (isBigO_sub_exp_exp hBf hBg)
(fun w hw => sub_eq_zero.2 (ha w hw)) (fun w hw => sub_eq_zero.2 (hb w hw)) hz)
#align phragmen_lindelof.eq_on_horizontal_strip PhragmenLindelof.eqOn_horizontal_strip
+-/
/-!
### Phragmen-Lindelöf principle in a vertical strip
-/
+#print PhragmenLindelof.vertical_strip /-
/-- **Phragmen-Lindelöf principle** in a strip `U = {z : ℂ | a < re z < b}`.
Let `f : ℂ → E` be a function such that
@@ -357,7 +367,9 @@ theorem vertical_strip (hfd : DiffContOnCl ℂ f (re ⁻¹' Ioo a b))
simpa [(· ∘ ·)] using hO.comp_tendsto this
all_goals simpa
#align phragmen_lindelof.vertical_strip PhragmenLindelof.vertical_strip
+-/
+#print PhragmenLindelof.eq_zero_on_vertical_strip /-
/-- **Phragmen-Lindelöf principle** in a strip `U = {z : ℂ | a < re z < b}`.
Let `f : ℂ → E` be a function such that
@@ -379,7 +391,9 @@ theorem eq_zero_on_vertical_strip (hd : DiffContOnCl ℂ f (re ⁻¹' Ioo a b))
vertical_strip hd hB (fun z hz => (ha z hz).symm ▸ norm_zero.le)
(fun z hz => (hb z hz).symm ▸ norm_zero.le) hz.1 hz.2
#align phragmen_lindelof.eq_zero_on_vertical_strip PhragmenLindelof.eq_zero_on_vertical_strip
+-/
+#print PhragmenLindelof.eqOn_vertical_strip /-
/-- **Phragmen-Lindelöf principle** in a strip `U = {z : ℂ | a < re z < b}`.
Let `f g : ℂ → E` be functions such that
@@ -408,12 +422,14 @@ theorem eqOn_vertical_strip {g : ℂ → E} (hdf : DiffContOnCl ℂ f (re ⁻¹'
(eq_zero_on_vertical_strip (hdf.sub hdg) (isBigO_sub_exp_exp hBf hBg)
(fun w hw => sub_eq_zero.2 (ha w hw)) (fun w hw => sub_eq_zero.2 (hb w hw)) hz)
#align phragmen_lindelof.eq_on_vertical_strip PhragmenLindelof.eqOn_vertical_strip
+-/
/-!
### Phragmen-Lindelöf principle in coordinate quadrants
-/
+#print PhragmenLindelof.quadrant_I /-
/-- **Phragmen-Lindelöf principle** in the first quadrant. Let `f : ℂ → E` be a function such that
* `f` is differentiable in the open first quadrant and is continuous on its closure;
@@ -491,7 +507,9 @@ theorem quadrant_I (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
of_real_exp]
exact him _ (Real.exp_pos _).le
#align phragmen_lindelof.quadrant_I PhragmenLindelof.quadrant_I
+-/
+#print PhragmenLindelof.eq_zero_on_quadrant_I /-
/-- **Phragmen-Lindelöf principle** in the first quadrant. Let `f : ℂ → E` be a function such that
* `f` is differentiable in the open first quadrant and is continuous on its closure;
@@ -510,7 +528,9 @@ theorem eq_zero_on_quadrant_I (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
quadrant_I hd hB (fun x hx => norm_le_zero_iff.2 <| hre x hx)
(fun x hx => norm_le_zero_iff.2 <| him x hx) hz.1 hz.2
#align phragmen_lindelof.eq_zero_on_quadrant_I PhragmenLindelof.eq_zero_on_quadrant_I
+-/
+#print PhragmenLindelof.eqOn_quadrant_I /-
/-- **Phragmen-Lindelöf principle** in the first quadrant. Let `f g : ℂ → E` be functions such that
* `f` and `g` are differentiable in the open first quadrant and are continuous on its closure;
@@ -533,7 +553,9 @@ theorem eqOn_quadrant_I (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
eq_zero_on_quadrant_I (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
(fun x hx => sub_eq_zero.2 <| hre x hx) (fun x hx => sub_eq_zero.2 <| him x hx) hz
#align phragmen_lindelof.eq_on_quadrant_I PhragmenLindelof.eqOn_quadrant_I
+-/
+#print PhragmenLindelof.quadrant_II /-
/-- **Phragmen-Lindelöf principle** in the second quadrant. Let `f : ℂ → E` be a function such that
* `f` is differentiable in the open second quadrant and is continuous on its closure;
@@ -565,7 +587,9 @@ theorem quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
· rw [comp_app, mul_assoc, I_mul_I, mul_neg_one, ← of_real_neg]
exact hre _ (neg_nonpos.2 hx)
#align phragmen_lindelof.quadrant_II PhragmenLindelof.quadrant_II
+-/
+#print PhragmenLindelof.eq_zero_on_quadrant_II /-
/-- **Phragmen-Lindelöf principle** in the second quadrant. Let `f : ℂ → E` be a function such that
* `f` is differentiable in the open second quadrant and is continuous on its closure;
@@ -584,7 +608,9 @@ theorem eq_zero_on_quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
quadrant_II hd hB (fun x hx => norm_le_zero_iff.2 <| hre x hx)
(fun x hx => norm_le_zero_iff.2 <| him x hx) hz.1 hz.2
#align phragmen_lindelof.eq_zero_on_quadrant_II PhragmenLindelof.eq_zero_on_quadrant_II
+-/
+#print PhragmenLindelof.eqOn_quadrant_II /-
/-- **Phragmen-Lindelöf principle** in the second quadrant. Let `f g : ℂ → E` be functions such that
* `f` and `g` are differentiable in the open second quadrant and are continuous on its closure;
@@ -607,7 +633,9 @@ theorem eqOn_quadrant_II (hdf : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
eq_zero_on_quadrant_II (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
(fun x hx => sub_eq_zero.2 <| hre x hx) (fun x hx => sub_eq_zero.2 <| him x hx) hz
#align phragmen_lindelof.eq_on_quadrant_II PhragmenLindelof.eqOn_quadrant_II
+-/
+#print PhragmenLindelof.quadrant_III /-
/-- **Phragmen-Lindelöf principle** in the third quadrant. Let `f : ℂ → E` be a function such that
* `f` is differentiable in the open third quadrant and is continuous on its closure;
@@ -641,7 +669,9 @@ theorem quadrant_III (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
· rw [comp_app, ← neg_mul, ← of_real_neg]
exact him (-x) (neg_nonpos.2 hx)
#align phragmen_lindelof.quadrant_III PhragmenLindelof.quadrant_III
+-/
+#print PhragmenLindelof.eq_zero_on_quadrant_III /-
/-- **Phragmen-Lindelöf principle** in the third quadrant. Let `f : ℂ → E` be a function such that
* `f` is differentiable in the open third quadrant and is continuous on its closure;
@@ -660,7 +690,9 @@ theorem eq_zero_on_quadrant_III (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
quadrant_III hd hB (fun x hx => norm_le_zero_iff.2 <| hre x hx)
(fun x hx => norm_le_zero_iff.2 <| him x hx) hz.1 hz.2
#align phragmen_lindelof.eq_zero_on_quadrant_III PhragmenLindelof.eq_zero_on_quadrant_III
+-/
+#print PhragmenLindelof.eqOn_quadrant_III /-
/-- **Phragmen-Lindelöf principle** in the third quadrant. Let `f g : ℂ → E` be functions such that
* `f` and `g` are differentiable in the open third quadrant and are continuous on its closure;
@@ -683,7 +715,9 @@ theorem eqOn_quadrant_III (hdf : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
eq_zero_on_quadrant_III (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
(fun x hx => sub_eq_zero.2 <| hre x hx) (fun x hx => sub_eq_zero.2 <| him x hx) hz
#align phragmen_lindelof.eq_on_quadrant_III PhragmenLindelof.eqOn_quadrant_III
+-/
+#print PhragmenLindelof.quadrant_IV /-
/-- **Phragmen-Lindelöf principle** in the fourth quadrant. Let `f : ℂ → E` be a function such that
* `f` is differentiable in the open fourth quadrant and is continuous on its closure;
@@ -717,7 +751,9 @@ theorem quadrant_IV (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
· rw [comp_app, ← neg_mul, ← of_real_neg]
exact him (-x) (neg_nonpos.2 hx)
#align phragmen_lindelof.quadrant_IV PhragmenLindelof.quadrant_IV
+-/
+#print PhragmenLindelof.eq_zero_on_quadrant_IV /-
/-- **Phragmen-Lindelöf principle** in the fourth quadrant. Let `f : ℂ → E` be a function such that
* `f` is differentiable in the open fourth quadrant and is continuous on its closure;
@@ -736,7 +772,9 @@ theorem eq_zero_on_quadrant_IV (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
quadrant_IV hd hB (fun x hx => norm_le_zero_iff.2 <| hre x hx)
(fun x hx => norm_le_zero_iff.2 <| him x hx) hz.1 hz.2
#align phragmen_lindelof.eq_zero_on_quadrant_IV PhragmenLindelof.eq_zero_on_quadrant_IV
+-/
+#print PhragmenLindelof.eqOn_quadrant_IV /-
/-- **Phragmen-Lindelöf principle** in the fourth quadrant. Let `f g : ℂ → E` be functions such that
* `f` and `g` are differentiable in the open fourth quadrant and are continuous on its closure;
@@ -759,12 +797,14 @@ theorem eqOn_quadrant_IV (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
eq_zero_on_quadrant_IV (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
(fun x hx => sub_eq_zero.2 <| hre x hx) (fun x hx => sub_eq_zero.2 <| him x hx) hz
#align phragmen_lindelof.eq_on_quadrant_IV PhragmenLindelof.eqOn_quadrant_IV
+-/
/-!
### Phragmen-Lindelöf principle in the right half-plane
-/
+#print PhragmenLindelof.right_half_plane_of_tendsto_zero_on_real /-
/-- **Phragmen-Lindelöf principle** in the right half-plane. Let `f : ℂ → E` be a function such that
* `f` is differentiable in the open right half-plane and is continuous on its closure;
@@ -844,7 +884,9 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f {z | 0
refine' (h.not_le <| this ▸ _).elim
simpa using him 0
#align phragmen_lindelof.right_half_plane_of_tendsto_zero_on_real PhragmenLindelof.right_half_plane_of_tendsto_zero_on_real
+-/
+#print PhragmenLindelof.right_half_plane_of_bounded_on_real /-
/-- **Phragmen-Lindelöf principle** in the right half-plane. Let `f : ℂ → E` be a function such that
* `f` is differentiable in the open right half-plane and is continuous on its closure;
@@ -890,7 +932,9 @@ theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f {z | 0 < z.
one_mul]
exact him y
#align phragmen_lindelof.right_half_plane_of_bounded_on_real PhragmenLindelof.right_half_plane_of_bounded_on_real
+-/
+#print PhragmenLindelof.eq_zero_on_right_half_plane_of_superexponential_decay /-
/-- **Phragmen-Lindelöf principle** in the right half-plane. Let `f : ℂ → E` be a function such that
* `f` is differentiable in the open right half-plane and is continuous on its closure;
@@ -952,7 +996,9 @@ theorem eq_zero_on_right_half_plane_of_superexponential_decay (hd : DiffContOnCl
· rw [hg, of_real_mul_re, I_re, MulZeroClass.mul_zero, Real.exp_zero, one_pow, one_mul]
exact hC y
#align phragmen_lindelof.eq_zero_on_right_half_plane_of_superexponential_decay PhragmenLindelof.eq_zero_on_right_half_plane_of_superexponential_decay
+-/
+#print PhragmenLindelof.eqOn_right_half_plane_of_superexponential_decay /-
/-- **Phragmen-Lindelöf principle** in the right half-plane. Let `f g : ℂ → E` be functions such
that
@@ -998,6 +1044,7 @@ theorem eqOn_right_half_plane_of_superexponential_decay {g : ℂ → E}
· rcases hfim with ⟨Cf, hCf⟩; rcases hgim with ⟨Cg, hCg⟩
exact ⟨Cf + Cg, fun x => norm_sub_le_of_le (hCf x) (hCg x)⟩
#align phragmen_lindelof.eq_on_right_half_plane_of_superexponential_decay PhragmenLindelof.eqOn_right_half_plane_of_superexponential_decay
+-/
end PhragmenLindelof
mathlib commit https://github.com/leanprover-community/mathlib/commit/c471da714c044131b90c133701e51b877c246677
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
! This file was ported from Lean 3 source module analysis.complex.phragmen_lindelof
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! leanprover-community/mathlib commit fd4551cfe4b7484b81c2c9ba3405edae27659676
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -14,6 +14,9 @@ import Mathbin.Analysis.Asymptotics.SuperpolynomialDecay
/-!
# Phragmen-Lindelöf principle
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
In this file we prove several versions of the Phragmen-Lindelöf principle, a version of the maximum
modulus principle for an unbounded domain.
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -419,7 +419,7 @@ theorem eqOn_vertical_strip {g : ℂ → E} (hdf : DiffContOnCl ℂ f (re ⁻¹'
* `‖f z‖` is bounded from above by a constant `C` on the boundary of the first quadrant.
Then `‖f z‖` is bounded from above by the same constant on the closed first quadrant. -/
-theorem quadrant_i (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
+theorem quadrant_I (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(hB :
∃ c < (2 : ℝ),
∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
@@ -487,7 +487,7 @@ theorem quadrant_i (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
Real.cos_pi_div_two, Real.sin_pi_div_two, of_real_zero, of_real_one, one_mul, zero_add, ←
of_real_exp]
exact him _ (Real.exp_pos _).le
-#align phragmen_lindelof.quadrant_I PhragmenLindelof.quadrant_i
+#align phragmen_lindelof.quadrant_I PhragmenLindelof.quadrant_I
/-- **Phragmen-Lindelöf principle** in the first quadrant. Let `f : ℂ → E` be a function such that
@@ -497,16 +497,16 @@ theorem quadrant_i (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
* `f` is equal to zero on the boundary of the first quadrant.
Then `f` is equal to zero on the closed first quadrant. -/
-theorem eq_zero_on_quadrant_i (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
+theorem eq_zero_on_quadrant_I (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(hB :
∃ c < (2 : ℝ),
∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → f x = 0) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = 0) :
EqOn f 0 {z | 0 ≤ z.re ∧ 0 ≤ z.im} := fun z hz =>
norm_le_zero_iff.1 <|
- quadrant_i hd hB (fun x hx => norm_le_zero_iff.2 <| hre x hx)
+ quadrant_I hd hB (fun x hx => norm_le_zero_iff.2 <| hre x hx)
(fun x hx => norm_le_zero_iff.2 <| him x hx) hz.1 hz.2
-#align phragmen_lindelof.eq_zero_on_quadrant_I PhragmenLindelof.eq_zero_on_quadrant_i
+#align phragmen_lindelof.eq_zero_on_quadrant_I PhragmenLindelof.eq_zero_on_quadrant_I
/-- **Phragmen-Lindelöf principle** in the first quadrant. Let `f g : ℂ → E` be functions such that
@@ -516,7 +516,7 @@ theorem eq_zero_on_quadrant_i (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
* `f` is equal to `g` on the boundary of the first quadrant.
Then `f` is equal to `g` on the closed first quadrant. -/
-theorem eqOn_quadrant_i (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
+theorem eqOn_quadrant_I (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(hBf :
∃ c < (2 : ℝ),
∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
@@ -527,9 +527,9 @@ theorem eqOn_quadrant_i (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(hre : ∀ x : ℝ, 0 ≤ x → f x = g x) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = g (x * I)) :
EqOn f g {z | 0 ≤ z.re ∧ 0 ≤ z.im} := fun z hz =>
sub_eq_zero.1 <|
- eq_zero_on_quadrant_i (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
+ eq_zero_on_quadrant_I (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
(fun x hx => sub_eq_zero.2 <| hre x hx) (fun x hx => sub_eq_zero.2 <| him x hx) hz
-#align phragmen_lindelof.eq_on_quadrant_I PhragmenLindelof.eqOn_quadrant_i
+#align phragmen_lindelof.eq_on_quadrant_I PhragmenLindelof.eqOn_quadrant_I
/-- **Phragmen-Lindelöf principle** in the second quadrant. Let `f : ℂ → E` be a function such that
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -219,7 +219,6 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
calc
‖g ε w • f w‖ ≤ expR (δ * expR (d * R) + B * expR (c * R) + Real.log A) := _
_ ≤ C := hR
-
rw [norm_smul, Real.exp_add, ← hre, Real.exp_add, Real.exp_log hA₀, mul_assoc, mul_comm _ A]
exact
mul_le_mul (hδ <| Ioo_subset_Icc_self him) (Hle _ hre him) (norm_nonneg _)
@@ -838,7 +837,6 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f {z | 0
_ ≤ |x₀ - z.re| := (le_abs_self _)
_ = |(z - x₀).re| := by rw [sub_re, of_real_re, _root_.abs_sub_comm]
_ ≤ abs (z - x₀) := abs_re_le_abs _
-
-- Thus we have `C < ‖f x₀‖ = ‖f 0‖ ≤ C`. Contradiction completes the proof.
refine' (h.not_le <| this ▸ _).elim
simpa using him 0
@@ -942,7 +940,6 @@ theorem eq_zero_on_right_half_plane_of_superexponential_decay (hd : DiffContOnCl
z.re ≤ abs z := re_le_abs _
_ = abs z ^ (1 : ℝ) := (Real.rpow_one _).symm
_ ≤ abs z ^ max c 1 := Real.rpow_le_rpow_of_exponent_le hr (le_max_right _ _)
-
·
exact
mul_le_mul (le_max_left _ _) (Real.rpow_le_rpow_of_exponent_le hr (le_max_left _ _))
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -180,7 +180,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
refine' le_of_tendsto (tendsto.mono_left _ nhdsWithin_le_nhds) this
apply ((continuous_of_real.mul continuous_const).cexp.smul continuous_const).norm.tendsto'
simp; infer_instance
- filter_upwards [self_mem_nhdsWithin]with ε ε₀; change ε < 0 at ε₀
+ filter_upwards [self_mem_nhdsWithin] with ε ε₀; change ε < 0 at ε₀
-- An upper estimate on `‖g ε w‖` that will be used in two branches of the proof.
obtain ⟨δ, δ₀, hδ⟩ :
∃ δ : ℝ,
@@ -215,7 +215,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
mem_preimage, (· ∘ ·), Real.norm_eq_abs, abs_of_pos (Real.exp_pos _)] at hA
suffices tendsto (fun R => expR (δ * expR (d * R) + B * expR (c * R) + Real.log A)) at_top (𝓝 0)
by
- filter_upwards [this.eventually (ge_mem_nhds hC₀), hA]with R hR Hle w hre him
+ filter_upwards [this.eventually (ge_mem_nhds hC₀), hA] with R hR Hle w hre him
calc
‖g ε w • f w‖ ≤ expR (δ * expR (d * R) + B * expR (c * R) + Real.log A) := _
_ ≤ C := hR
@@ -246,7 +246,8 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
_).cexp
replace hd : DiffContOnCl ℂ (fun w => g ε w • f w) (Ioo (-R) R ×ℂ Ioo (a - b) (a + b))
exact (hgd.diff_cont_on_cl.smul hfd).mono (inter_subset_right _ _)
- convert norm_le_of_forall_mem_frontier_norm_le ((bounded_Ioo _ _).reProdIm (bounded_Ioo _ _)) hd
+ convert
+ norm_le_of_forall_mem_frontier_norm_le ((bounded_Ioo _ _).reProdIm (bounded_Ioo _ _)) hd
(fun w hw => _) _
· have hwc := frontier_subset_closure hw
rw [frontier_re_prod_im, closure_Ioo (neg_lt_self hR₀).Ne, frontier_Ioo hab, closure_Ioo hab.ne,
@@ -502,7 +503,7 @@ theorem eq_zero_on_quadrant_i (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
∃ c < (2 : ℝ),
∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → f x = 0) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = 0) :
- EqOn f 0 { z | 0 ≤ z.re ∧ 0 ≤ z.im } := fun z hz =>
+ EqOn f 0 {z | 0 ≤ z.re ∧ 0 ≤ z.im} := fun z hz =>
norm_le_zero_iff.1 <|
quadrant_i hd hB (fun x hx => norm_le_zero_iff.2 <| hre x hx)
(fun x hx => norm_le_zero_iff.2 <| him x hx) hz.1 hz.2
@@ -525,7 +526,7 @@ theorem eqOn_quadrant_i (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
∃ c < (2 : ℝ),
∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → f x = g x) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = g (x * I)) :
- EqOn f g { z | 0 ≤ z.re ∧ 0 ≤ z.im } := fun z hz =>
+ EqOn f g {z | 0 ≤ z.re ∧ 0 ≤ z.im} := fun z hz =>
sub_eq_zero.1 <|
eq_zero_on_quadrant_i (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
(fun x hx => sub_eq_zero.2 <| hre x hx) (fun x hx => sub_eq_zero.2 <| him x hx) hz
@@ -576,7 +577,7 @@ theorem eq_zero_on_quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
∃ c < (2 : ℝ),
∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → f x = 0) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = 0) :
- EqOn f 0 { z | z.re ≤ 0 ∧ 0 ≤ z.im } := fun z hz =>
+ EqOn f 0 {z | z.re ≤ 0 ∧ 0 ≤ z.im} := fun z hz =>
norm_le_zero_iff.1 <|
quadrant_II hd hB (fun x hx => norm_le_zero_iff.2 <| hre x hx)
(fun x hx => norm_le_zero_iff.2 <| him x hx) hz.1 hz.2
@@ -599,7 +600,7 @@ theorem eqOn_quadrant_II (hdf : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
∃ c < (2 : ℝ),
∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → f x = g x) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = g (x * I)) :
- EqOn f g { z | z.re ≤ 0 ∧ 0 ≤ z.im } := fun z hz =>
+ EqOn f g {z | z.re ≤ 0 ∧ 0 ≤ z.im} := fun z hz =>
sub_eq_zero.1 <|
eq_zero_on_quadrant_II (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
(fun x hx => sub_eq_zero.2 <| hre x hx) (fun x hx => sub_eq_zero.2 <| him x hx) hz
@@ -652,7 +653,7 @@ theorem eq_zero_on_quadrant_III (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
∃ c < (2 : ℝ),
∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → f x = 0) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = 0) :
- EqOn f 0 { z | z.re ≤ 0 ∧ z.im ≤ 0 } := fun z hz =>
+ EqOn f 0 {z | z.re ≤ 0 ∧ z.im ≤ 0} := fun z hz =>
norm_le_zero_iff.1 <|
quadrant_III hd hB (fun x hx => norm_le_zero_iff.2 <| hre x hx)
(fun x hx => norm_le_zero_iff.2 <| him x hx) hz.1 hz.2
@@ -675,7 +676,7 @@ theorem eqOn_quadrant_III (hdf : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
∃ c < (2 : ℝ),
∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → f x = g x) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = g (x * I)) :
- EqOn f g { z | z.re ≤ 0 ∧ z.im ≤ 0 } := fun z hz =>
+ EqOn f g {z | z.re ≤ 0 ∧ z.im ≤ 0} := fun z hz =>
sub_eq_zero.1 <|
eq_zero_on_quadrant_III (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
(fun x hx => sub_eq_zero.2 <| hre x hx) (fun x hx => sub_eq_zero.2 <| him x hx) hz
@@ -728,7 +729,7 @@ theorem eq_zero_on_quadrant_IV (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
∃ c < (2 : ℝ),
∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → f x = 0) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = 0) :
- EqOn f 0 { z | 0 ≤ z.re ∧ z.im ≤ 0 } := fun z hz =>
+ EqOn f 0 {z | 0 ≤ z.re ∧ z.im ≤ 0} := fun z hz =>
norm_le_zero_iff.1 <|
quadrant_IV hd hB (fun x hx => norm_le_zero_iff.2 <| hre x hx)
(fun x hx => norm_le_zero_iff.2 <| him x hx) hz.1 hz.2
@@ -751,7 +752,7 @@ theorem eqOn_quadrant_IV (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
∃ c < (2 : ℝ),
∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → f x = g x) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = g (x * I)) :
- EqOn f g { z | 0 ≤ z.re ∧ z.im ≤ 0 } := fun z hz =>
+ EqOn f g {z | 0 ≤ z.re ∧ z.im ≤ 0} := fun z hz =>
sub_eq_zero.1 <|
eq_zero_on_quadrant_IV (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
(fun x hx => sub_eq_zero.2 <| hre x hx) (fun x hx => sub_eq_zero.2 <| him x hx) hz
@@ -772,10 +773,10 @@ theorem eqOn_quadrant_IV (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
Then `‖f z‖` is bounded from above by the same constant on the closed right half-plane.
See also `phragmen_lindelof.right_half_plane_of_bounded_on_real` for a stronger version. -/
-theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f { z | 0 < z.re })
+theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f {z | 0 < z.re})
(hexp :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z => expR (B * abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
(hre : Tendsto (fun x : ℝ => f x) atTop (𝓝 0)) (him : ∀ x : ℝ, ‖f (x * I)‖ ≤ C)
(hz : 0 ≤ z.re) : ‖f z‖ ≤ C :=
by
@@ -807,7 +808,7 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f { z |
rwa [closure_set_of_lt_re]
by_cases h₀ : ∀ x : ℝ, 0 ≤ x → f x = 0
· refine' ⟨0, le_rfl, fun y hy => _⟩; rw [h₀ y hy, h₀ 0 le_rfl]
- push_neg at h₀
+ push_neg at h₀
rcases h₀ with ⟨x₀, hx₀, hne⟩
have hlt : ‖(0 : E)‖ < ‖f x₀‖ := by rwa [norm_zero, norm_pos_iff]
suffices ∀ᶠ x : ℝ in cocompact ℝ ⊓ 𝓟 (Ici 0), ‖f x‖ ≤ ‖f x₀‖ by
@@ -819,7 +820,7 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f { z |
·-- If `‖f x₀‖ ≤ C`, then `hle` implies the required estimate
simpa only [max_eq_left h] using hle _ hmax
· -- Otherwise, `‖f z‖ ≤ ‖f x₀‖` for all `z` in the right half-plane due to `hle`.
- replace hmax : IsMaxOn (norm ∘ f) { z | 0 < z.re } x₀
+ replace hmax : IsMaxOn (norm ∘ f) {z | 0 < z.re} x₀
· rintro z (hz : 0 < z.re)
simpa [max_eq_right h.le] using hle _ hmax _ hz.le
-- Due to the maximum modulus principle applied to the closed ball of radius `x₀.re`,
@@ -853,10 +854,10 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f { z |
Then `‖f z‖` is bounded from above by `C` on the closed right half-plane.
See also `phragmen_lindelof.right_half_plane_of_tendsto_zero_on_real` for a weaker version. -/
-theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f { z | 0 < z.re })
+theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f {z | 0 < z.re})
(hexp :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z => expR (B * abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
(hre : IsBoundedUnder (· ≤ ·) atTop fun x : ℝ => ‖f x‖) (him : ∀ x : ℝ, ‖f (x * I)‖ ≤ C)
(hz : 0 ≤ z.re) : ‖f z‖ ≤ C :=
by
@@ -868,9 +869,9 @@ theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f { z | 0 < z
refine' le_of_tendsto (tendsto.mono_left _ nhdsWithin_le_nhds) this
apply ((continuous_of_real.mul continuous_const).cexp.smul continuous_const).norm.tendsto'
simp; infer_instance
- filter_upwards [self_mem_nhdsWithin]with ε ε₀; change ε < 0 at ε₀
+ filter_upwards [self_mem_nhdsWithin] with ε ε₀; change ε < 0 at ε₀
set g : ℂ → E := fun z => exp (ε * z) • f z; change ‖g z‖ ≤ C
- replace hd : DiffContOnCl ℂ g { z : ℂ | 0 < z.re }
+ replace hd : DiffContOnCl ℂ g {z : ℂ | 0 < z.re}
exact (differentiable_id.const_mul _).cexp.DiffContOnCl.smul hd
have hgn : ∀ z, ‖g z‖ = expR (ε * z.re) * ‖f z‖ := by intro z;
rw [norm_smul, norm_eq_abs, abs_exp, of_real_mul_re]
@@ -899,13 +900,12 @@ theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f { z | 0 < z
for any natural `n`, `exp (n * x) * ‖f x‖` tends to zero as `x → ∞`.
Then `f` is equal to zero on the closed right half-plane. -/
-theorem eq_zero_on_right_half_plane_of_superexponential_decay
- (hd : DiffContOnCl ℂ f { z | 0 < z.re })
+theorem eq_zero_on_right_half_plane_of_superexponential_decay (hd : DiffContOnCl ℂ f {z | 0 < z.re})
(hexp :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z => expR (B * abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
(hre : SuperpolynomialDecay atTop expR fun x => ‖f x‖) (him : ∃ C, ∀ x : ℝ, ‖f (x * I)‖ ≤ C) :
- EqOn f 0 { z : ℂ | 0 ≤ z.re } := by
+ EqOn f 0 {z : ℂ | 0 ≤ z.re} := by
rcases him with ⟨C, hC⟩
-- Due to continuity, it suffices to prove the equality on the open right half-plane.
suffices ∀ z : ℂ, 0 < z.re → f z = 0 by
@@ -935,7 +935,7 @@ theorem eq_zero_on_right_half_plane_of_superexponential_decay
refine' ((is_O_refl (fun z : ℂ => expR z.re ^ n) _).mul hO.norm_left).trans (is_O.of_bound 1 _)
simp only [← Real.exp_nat_mul, ← Real.exp_add, Real.norm_of_nonneg (Real.exp_pos _).le,
Real.exp_le_exp, add_mul, eventually_inf_principal, eventually_comap, one_mul]
- filter_upwards [eventually_ge_at_top (1 : ℝ)]with r hr z hzr hre; subst r
+ filter_upwards [eventually_ge_at_top (1 : ℝ)] with r hr z hzr hre; subst r
refine' add_le_add (mul_le_mul_of_nonneg_left _ n.cast_nonneg) _
·
calc
@@ -965,21 +965,21 @@ that
Then `f` is equal to `g` on the closed right half-plane. -/
theorem eqOn_right_half_plane_of_superexponential_decay {g : ℂ → E}
- (hfd : DiffContOnCl ℂ f { z | 0 < z.re }) (hgd : DiffContOnCl ℂ g { z | 0 < z.re })
+ (hfd : DiffContOnCl ℂ f {z | 0 < z.re}) (hgd : DiffContOnCl ℂ g {z | 0 < z.re})
(hfexp :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z => expR (B * abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
(hgexp :
∃ c < (2 : ℝ),
- ∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z => expR (B * abs z ^ c))
+ ∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
(hre : SuperpolynomialDecay atTop expR fun x => ‖f x - g x‖)
(hfim : ∃ C, ∀ x : ℝ, ‖f (x * I)‖ ≤ C) (hgim : ∃ C, ∀ x : ℝ, ‖g (x * I)‖ ≤ C) :
- EqOn f g { z : ℂ | 0 ≤ z.re } :=
+ EqOn f g {z : ℂ | 0 ≤ z.re} :=
by
- suffices eq_on (f - g) 0 { z : ℂ | 0 ≤ z.re } by
+ suffices eq_on (f - g) 0 {z : ℂ | 0 ≤ z.re} by
simpa only [eq_on, Pi.sub_apply, Pi.zero_apply, sub_eq_zero] using this
refine' eq_zero_on_right_half_plane_of_superexponential_decay (hfd.sub hgd) _ hre _
- · set l : Filter ℂ := comap Complex.abs at_top ⊓ 𝓟 { z : ℂ | 0 < z.re }
+ · set l : Filter ℂ := comap Complex.abs at_top ⊓ 𝓟 {z : ℂ | 0 < z.re}
suffices
∀ {c₁ c₂ B₁ B₂ : ℝ},
c₁ ≤ c₂ →
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -84,7 +84,7 @@ theorem isBigO_sub_exp_exp {a : ℝ} {f g : ℂ → E} {l : Filter ℂ} {u : ℂ
rcases hBf with ⟨cf, hcf, Bf, hOf⟩; rcases hBg with ⟨cg, hcg, Bg, hOg⟩
refine' ⟨max cf cg, max_lt hcf hcg, max 0 (max Bf Bg), _⟩
refine' (hOf.trans_le <| this _ _ _).sub (hOg.trans_le <| this _ _ _)
- exacts[le_max_left _ _, le_max_left _ _, (le_max_left _ _).trans (le_max_right _ _),
+ exacts [le_max_left _ _, le_max_left _ _, (le_max_left _ _).trans (le_max_right _ _),
le_max_right _ _, le_max_left _ _, (le_max_right _ _).trans (le_max_right _ _)]
#align phragmen_lindelof.is_O_sub_exp_exp PhragmenLindelof.isBigO_sub_exp_exp
@@ -113,7 +113,7 @@ theorem isBigO_sub_exp_rpow {a : ℝ} {f g : ℂ → E} {l : Filter ℂ}
rcases hBf with ⟨cf, hcf, Bf, hOf⟩; rcases hBg with ⟨cg, hcg, Bg, hOg⟩
refine' ⟨max cf cg, max_lt hcf hcg, max 0 (max Bf Bg), _⟩
refine' (hOf.trans <| this _ _ _).sub (hOg.trans <| this _ _ _)
- exacts[le_max_left _ _, le_max_left _ _, (le_max_left _ _).trans (le_max_right _ _),
+ exacts [le_max_left _ _, le_max_left _ _, (le_max_left _ _).trans (le_max_right _ _),
le_max_right _ _, le_max_left _ _, (le_max_right _ _).trans (le_max_right _ _)]
#align phragmen_lindelof.is_O_sub_exp_rpow PhragmenLindelof.isBigO_sub_exp_rpow
@@ -145,7 +145,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
(hzb : im z ≤ b) : ‖f z‖ ≤ C :=
by
-- If `im z = a` or `im z = b`, then we apply `hle_a` or `hle_b`, otherwise `im z ∈ Ioo a b`.
- rw [le_iff_eq_or_lt] at hza hzb
+ rw [le_iff_eq_or_lt] at hza hzb
cases' hza with hza hza; · exact hle_a _ hza.symm
cases' hzb with hzb hzb; · exact hle_b _ hzb
-- WLOG, `0 < C`.
@@ -156,7 +156,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
refine' le_of_forall_le_of_dense fun C' hC' => this C' _ (fun w hw => _) fun w hw => _
· refine' ((norm_nonneg (f (a * I))).trans (hle_a _ _)).trans_lt hC'
rw [mul_I_im, of_real_re]
- exacts[(hle_a _ hw).trans hC'.le, (hle_b _ hw).trans hC'.le]
+ exacts [(hle_a _ hw).trans hC'.le, (hle_b _ hw).trans hC'.le]
clear! C; intro C hC₀ hle_a hle_b
-- After a change of variables, we deal with the strip `a - b < im z < a + b` instead
-- of `a < im z < b`
@@ -164,7 +164,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
⟨(a + b) / 2, (b - a) / 2, by ring, by ring⟩
have hab : a - b < a + b := hza.trans hzb
have hb : 0 < b := by simpa only [sub_eq_add_neg, add_lt_add_iff_left, neg_lt_self_iff] using hab
- rw [add_sub_sub_cancel, ← two_mul, div_mul_eq_div_div] at hB
+ rw [add_sub_sub_cancel, ← two_mul, div_mul_eq_div_div] at hB
have hπb : 0 < π / 2 / b := div_pos Real.pi_div_two_pos hb
-- Choose some `c B : ℝ` satisfying `hB`, then choose `max c 0 < d < π / 2 / b`.
rcases hB with ⟨c, hc, B, hO⟩
@@ -180,7 +180,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
refine' le_of_tendsto (tendsto.mono_left _ nhdsWithin_le_nhds) this
apply ((continuous_of_real.mul continuous_const).cexp.smul continuous_const).norm.tendsto'
simp; infer_instance
- filter_upwards [self_mem_nhdsWithin]with ε ε₀; change ε < 0 at ε₀
+ filter_upwards [self_mem_nhdsWithin]with ε ε₀; change ε < 0 at ε₀
-- An upper estimate on `‖g ε w‖` that will be used in two branches of the proof.
obtain ⟨δ, δ₀, hδ⟩ :
∃ δ : ℝ,
@@ -192,7 +192,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
(Real.cos_pos_of_mem_Ioo <| abs_lt.1 <| (abs_of_pos (mul_pos hd₀ hb)).symm ▸ hb'),
fun w hw => _⟩
replace hw : |im (aff w)| ≤ d * b
- · rw [← Real.closedBall_eq_Icc] at hw
+ · rw [← Real.closedBall_eq_Icc] at hw
rwa [of_real_mul_im, sub_im, mul_I_im, of_real_re, _root_.abs_mul, abs_of_pos hd₀,
mul_le_mul_left hd₀]
simpa only [of_real_mul_re, _root_.abs_mul, abs_of_pos hd₀, sub_re, mul_I_re, of_real_im,
@@ -202,7 +202,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
have hg₁ : ∀ w, im w = a - b ∨ im w = a + b → abs (g ε w) ≤ 1 :=
by
refine' fun w hw => (hδ <| hw.byCases _ _).trans (Real.exp_le_one_iff.2 _)
- exacts[fun h => h.symm ▸ left_mem_Icc.2 hab.le, fun h => h.symm ▸ right_mem_Icc.2 hab.le,
+ exacts [fun h => h.symm ▸ left_mem_Icc.2 hab.le, fun h => h.symm ▸ right_mem_Icc.2 hab.le,
mul_nonpos_of_nonpos_of_nonneg δ₀.le (Real.exp_pos _).le]
/- Our apriori estimate on `f` implies that `g ε w • f w → 0` as `|w.re| → ∞` along the strip. In
particular, its norm is less than or equal to `C` for sufficiently large `|w.re|`. -/
@@ -212,7 +212,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
refine' ((eventually_gt_at_top _).And _).exists
rcases hO.exists_pos with ⟨A, hA₀, hA⟩
simp only [is_O_with_iff, eventually_inf_principal, eventually_comap, mem_Ioo, ← abs_lt,
- mem_preimage, (· ∘ ·), Real.norm_eq_abs, abs_of_pos (Real.exp_pos _)] at hA
+ mem_preimage, (· ∘ ·), Real.norm_eq_abs, abs_of_pos (Real.exp_pos _)] at hA
suffices tendsto (fun R => expR (δ * expR (d * R) + B * expR (c * R) + Real.log A)) at_top (𝓝 0)
by
filter_upwards [this.eventually (ge_mem_nhds hC₀), hA]with R hR Hle w hre him
@@ -226,7 +226,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
(Real.exp_pos _).le
refine' real.tendsto_exp_at_bot.comp _
suffices H : tendsto (fun R => δ + B * (expR ((d - c) * R))⁻¹) at_top (𝓝 (δ + B * 0))
- · rw [MulZeroClass.mul_zero, add_zero] at H
+ · rw [MulZeroClass.mul_zero, add_zero] at H
refine' tendsto.at_bot_add _ tendsto_const_nhds
simpa only [id, (· ∘ ·), add_mul, mul_assoc, ← div_eq_inv_mul, ← Real.exp_sub, ← sub_mul,
sub_sub_cancel] using
@@ -250,13 +250,13 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
(fun w hw => _) _
· have hwc := frontier_subset_closure hw
rw [frontier_re_prod_im, closure_Ioo (neg_lt_self hR₀).Ne, frontier_Ioo hab, closure_Ioo hab.ne,
- frontier_Ioo (neg_lt_self hR₀)] at hw
+ frontier_Ioo (neg_lt_self hR₀)] at hw
by_cases him : w.im = a - b ∨ w.im = a + b
- · rw [closure_re_prod_im, closure_Ioo (neg_lt_self hR₀).Ne] at hwc
+ · rw [closure_re_prod_im, closure_Ioo (neg_lt_self hR₀).Ne] at hwc
rw [norm_smul, ← one_mul C]
exact mul_le_mul (hg₁ _ him) (him.by_cases (hle_a _) (hle_b _)) (norm_nonneg _) zero_le_one
· replace hw : w ∈ {-R, R} ×ℂ Icc (a - b) (a + b); exact hw.resolve_left fun h => him h.2
- have hw' := eq_endpoints_or_mem_Ioo_of_mem_Icc hw.2; rw [← or_assoc] at hw'
+ have hw' := eq_endpoints_or_mem_Ioo_of_mem_Icc hw.2; rw [← or_assoc] at hw'
exact hR _ ((abs_eq hR₀.le).2 hw.1.symm) (hw'.resolve_left him)
· rw [closure_re_prod_im, closure_Ioo hab.ne, closure_Ioo (neg_lt_self hR₀).Ne]
exact ⟨abs_le.1 hzR.le, ⟨hza.le, hzb.le⟩⟩
@@ -547,7 +547,7 @@ theorem quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
(hz_im : 0 ≤ z.im) : ‖f z‖ ≤ C :=
by
obtain ⟨z, rfl⟩ : ∃ z', z' * I = z; exact ⟨z / I, div_mul_cancel _ I_ne_zero⟩
- simp only [mul_I_re, mul_I_im, neg_nonpos] at hz_re hz_im
+ simp only [mul_I_re, mul_I_im, neg_nonpos] at hz_re hz_im
change ‖(f ∘ (· * I)) z‖ ≤ C
have H : maps_to (· * I) (Ioi 0 ×ℂ Ioi 0) (Iio 0 ×ℂ Ioi 0) :=
by
@@ -621,7 +621,7 @@ theorem quadrant_III (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
(hz_im : z.im ≤ 0) : ‖f z‖ ≤ C :=
by
obtain ⟨z, rfl⟩ : ∃ z', -z' = z; exact ⟨-z, neg_neg z⟩
- simp only [neg_re, neg_im, neg_nonpos] at hz_re hz_im
+ simp only [neg_re, neg_im, neg_nonpos] at hz_re hz_im
change ‖(f ∘ Neg.neg) z‖ ≤ C
have H : maps_to Neg.neg (Ioi 0 ×ℂ Ioi 0) (Iio 0 ×ℂ Iio 0) :=
by
@@ -697,7 +697,7 @@ theorem quadrant_IV (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
(hz_im : z.im ≤ 0) : ‖f z‖ ≤ C :=
by
obtain ⟨z, rfl⟩ : ∃ z', -z' = z; exact ⟨-z, neg_neg z⟩
- simp only [neg_re, neg_im, neg_nonpos, neg_nonneg] at hz_re hz_im
+ simp only [neg_re, neg_im, neg_nonpos, neg_nonneg] at hz_re hz_im
change ‖(f ∘ Neg.neg) z‖ ≤ C
have H : maps_to Neg.neg (Iio 0 ×ℂ Ioi 0) (Ioi 0 ×ℂ Iio 0) :=
by
@@ -807,7 +807,7 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f { z |
rwa [closure_set_of_lt_re]
by_cases h₀ : ∀ x : ℝ, 0 ≤ x → f x = 0
· refine' ⟨0, le_rfl, fun y hy => _⟩; rw [h₀ y hy, h₀ 0 le_rfl]
- push_neg at h₀
+ push_neg at h₀
rcases h₀ with ⟨x₀, hx₀, hne⟩
have hlt : ‖(0 : E)‖ < ‖f x₀‖ := by rwa [norm_zero, norm_pos_iff]
suffices ∀ᶠ x : ℝ in cocompact ℝ ⊓ 𝓟 (Ici 0), ‖f x‖ ≤ ‖f x₀‖ by
@@ -829,7 +829,7 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f { z |
apply norm_eq_norm_of_is_max_on_of_ball_subset hd hmax
-- move to a lemma?
intro z hz
- rw [mem_ball, dist_zero_left, dist_eq, norm_eq_abs, Complex.abs_of_nonneg hx₀] at hz
+ rw [mem_ball, dist_zero_left, dist_eq, norm_eq_abs, Complex.abs_of_nonneg hx₀] at hz
rw [mem_set_of_eq]
contrapose! hz
calc
@@ -868,7 +868,7 @@ theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f { z | 0 < z
refine' le_of_tendsto (tendsto.mono_left _ nhdsWithin_le_nhds) this
apply ((continuous_of_real.mul continuous_const).cexp.smul continuous_const).norm.tendsto'
simp; infer_instance
- filter_upwards [self_mem_nhdsWithin]with ε ε₀; change ε < 0 at ε₀
+ filter_upwards [self_mem_nhdsWithin]with ε ε₀; change ε < 0 at ε₀
set g : ℂ → E := fun z => exp (ε * z) • f z; change ‖g z‖ ≤ C
replace hd : DiffContOnCl ℂ g { z : ℂ | 0 < z.re }
exact (differentiable_id.const_mul _).cexp.DiffContOnCl.smul hd
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -50,7 +50,7 @@ real plane has only finitely many limit cycles).
open Set Function Filter Asymptotics Metric Complex
-open Topology Filter Real
+open scoped Topology Filter Real
-- mathport name: exprexpR
local notation "expR" => Real.exp
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -81,8 +81,7 @@ theorem isBigO_sub_exp_exp {a : ℝ} {f g : ℂ → E} {l : Filter ℂ} {u : ℂ
exact
mul_le_mul hB (Real.exp_le_exp.2 <| mul_le_mul_of_nonneg_right hc <| abs_nonneg _)
(Real.exp_pos _).le hB₀
- rcases hBf with ⟨cf, hcf, Bf, hOf⟩
- rcases hBg with ⟨cg, hcg, Bg, hOg⟩
+ rcases hBf with ⟨cf, hcf, Bf, hOf⟩; rcases hBg with ⟨cg, hcg, Bg, hOg⟩
refine' ⟨max cf cg, max_lt hcf hcg, max 0 (max Bf Bg), _⟩
refine' (hOf.trans_le <| this _ _ _).sub (hOg.trans_le <| this _ _ _)
exacts[le_max_left _ _, le_max_left _ _, (le_max_left _ _).trans (le_max_right _ _),
@@ -111,8 +110,7 @@ theorem isBigO_sub_exp_rpow {a : ℝ} {f g : ℂ → E} {l : Filter ℂ}
exact
mul_le_mul hB (Real.rpow_le_rpow_of_exponent_le hz hc)
(Real.rpow_nonneg_of_nonneg (complex.abs.nonneg _) _) hB₀
- rcases hBf with ⟨cf, hcf, Bf, hOf⟩
- rcases hBg with ⟨cg, hcg, Bg, hOg⟩
+ rcases hBf with ⟨cf, hcf, Bf, hOf⟩; rcases hBg with ⟨cg, hcg, Bg, hOg⟩
refine' ⟨max cf cg, max_lt hcf hcg, max 0 (max Bf Bg), _⟩
refine' (hOf.trans <| this _ _ _).sub (hOg.trans <| this _ _ _)
exacts[le_max_left _ _, le_max_left _ _, (le_max_left _ _).trans (le_max_right _ _),
@@ -148,10 +146,8 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
by
-- If `im z = a` or `im z = b`, then we apply `hle_a` or `hle_b`, otherwise `im z ∈ Ioo a b`.
rw [le_iff_eq_or_lt] at hza hzb
- cases' hza with hza hza
- · exact hle_a _ hza.symm
- cases' hzb with hzb hzb
- · exact hle_b _ hzb
+ cases' hza with hza hza; · exact hle_a _ hza.symm
+ cases' hzb with hzb hzb; · exact hle_b _ hzb
-- WLOG, `0 < C`.
suffices
∀ C' : ℝ,
@@ -161,8 +157,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
· refine' ((norm_nonneg (f (a * I))).trans (hle_a _ _)).trans_lt hC'
rw [mul_I_im, of_real_re]
exacts[(hle_a _ hw).trans hC'.le, (hle_b _ hw).trans hC'.le]
- clear! C
- intro C hC₀ hle_a hle_b
+ clear! C; intro C hC₀ hle_a hle_b
-- After a change of variables, we deal with the strip `a - b < im z < a + b` instead
-- of `a < im z < b`
obtain ⟨a, b, rfl, rfl⟩ : ∃ a' b', a = a' - b' ∧ b = a' + b' :=
@@ -184,10 +179,8 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
by
refine' le_of_tendsto (tendsto.mono_left _ nhdsWithin_le_nhds) this
apply ((continuous_of_real.mul continuous_const).cexp.smul continuous_const).norm.tendsto'
- simp
- infer_instance
- filter_upwards [self_mem_nhdsWithin]with ε ε₀
- change ε < 0 at ε₀
+ simp; infer_instance
+ filter_upwards [self_mem_nhdsWithin]with ε ε₀; change ε < 0 at ε₀
-- An upper estimate on `‖g ε w‖` that will be used in two branches of the proof.
obtain ⟨δ, δ₀, hδ⟩ :
∃ δ : ℝ,
@@ -262,10 +255,8 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
· rw [closure_re_prod_im, closure_Ioo (neg_lt_self hR₀).Ne] at hwc
rw [norm_smul, ← one_mul C]
exact mul_le_mul (hg₁ _ him) (him.by_cases (hle_a _) (hle_b _)) (norm_nonneg _) zero_le_one
- · replace hw : w ∈ {-R, R} ×ℂ Icc (a - b) (a + b)
- exact hw.resolve_left fun h => him h.2
- have hw' := eq_endpoints_or_mem_Ioo_of_mem_Icc hw.2
- rw [← or_assoc] at hw'
+ · replace hw : w ∈ {-R, R} ×ℂ Icc (a - b) (a + b); exact hw.resolve_left fun h => him h.2
+ have hw' := eq_endpoints_or_mem_Ioo_of_mem_Icc hw.2; rw [← or_assoc] at hw'
exact hR _ ((abs_eq hR₀.le).2 hw.1.symm) (hw'.resolve_left him)
· rw [closure_re_prod_im, closure_Ioo hab.ne, closure_Ioo (neg_lt_self hR₀).Ne]
exact ⟨abs_le.1 hzR.le, ⟨hza.le, hzb.le⟩⟩
@@ -348,9 +339,7 @@ theorem vertical_strip (hfd : DiffContOnCl ℂ f (re ⁻¹' Ioo a b))
(hzb : re z ≤ b) : ‖f z‖ ≤ C :=
by
suffices ‖(fun z => f (z * -I)) (z * I)‖ ≤ C by simpa [mul_assoc] using this
- have H : maps_to (fun z => z * -I) (im ⁻¹' Ioo a b) (re ⁻¹' Ioo a b) :=
- by
- intro z hz
+ have H : maps_to (fun z => z * -I) (im ⁻¹' Ioo a b) (re ⁻¹' Ioo a b) := by intro z hz;
simpa using hz
refine'
horizontal_strip (hfd.comp (differentiable_id.mul_const _).DiffContOnCl H) _
@@ -438,7 +427,7 @@ theorem quadrant_i (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(hz_im : 0 ≤ z.im) : ‖f z‖ ≤ C :=
by
-- The case `z = 0` is trivial.
- rcases eq_or_ne z 0 with (rfl | hzne)
+ rcases eq_or_ne z 0 with (rfl | hzne);
· exact hre 0 le_rfl
-- Otherwise, `z = e ^ ζ` for some `ζ : ℂ`, `0 < Im ζ < π / 2`.
obtain ⟨ζ, hζ, rfl⟩ : ∃ ζ : ℂ, ζ.im ∈ Icc 0 (π / 2) ∧ exp ζ = z :=
@@ -489,8 +478,7 @@ theorem quadrant_i (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
rw [hz, _root_.abs_of_nonneg hx, mul_comm _ c]
exact mul_le_mul_of_nonneg_right (le_max_left _ _) (Real.exp_pos _).le
· -- If `ζ.im = 0`, then `complex.exp ζ` is a positive real number
- intro ζ hζ
- lift ζ to ℝ using hζ
+ intro ζ hζ; lift ζ to ℝ using hζ
rw [comp_app, ← of_real_exp]
exact hre _ (Real.exp_pos _).le
· -- If `ζ.im = π / 2`, then `complex.exp ζ` is a purely imaginary number with positive `im`
@@ -558,8 +546,7 @@ theorem quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
(hre : ∀ x : ℝ, x ≤ 0 → ‖f x‖ ≤ C) (him : ∀ x : ℝ, 0 ≤ x → ‖f (x * I)‖ ≤ C) (hz_re : z.re ≤ 0)
(hz_im : 0 ≤ z.im) : ‖f z‖ ≤ C :=
by
- obtain ⟨z, rfl⟩ : ∃ z', z' * I = z
- exact ⟨z / I, div_mul_cancel _ I_ne_zero⟩
+ obtain ⟨z, rfl⟩ : ∃ z', z' * I = z; exact ⟨z / I, div_mul_cancel _ I_ne_zero⟩
simp only [mul_I_re, mul_I_im, neg_nonpos] at hz_re hz_im
change ‖(f ∘ (· * I)) z‖ ≤ C
have H : maps_to (· * I) (Ioi 0 ×ℂ Ioi 0) (Iio 0 ×ℂ Ioi 0) :=
@@ -633,8 +620,7 @@ theorem quadrant_III (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
(hre : ∀ x : ℝ, x ≤ 0 → ‖f x‖ ≤ C) (him : ∀ x : ℝ, x ≤ 0 → ‖f (x * I)‖ ≤ C) (hz_re : z.re ≤ 0)
(hz_im : z.im ≤ 0) : ‖f z‖ ≤ C :=
by
- obtain ⟨z, rfl⟩ : ∃ z', -z' = z
- exact ⟨-z, neg_neg z⟩
+ obtain ⟨z, rfl⟩ : ∃ z', -z' = z; exact ⟨-z, neg_neg z⟩
simp only [neg_re, neg_im, neg_nonpos] at hz_re hz_im
change ‖(f ∘ Neg.neg) z‖ ≤ C
have H : maps_to Neg.neg (Ioi 0 ×ℂ Ioi 0) (Iio 0 ×ℂ Iio 0) :=
@@ -710,8 +696,7 @@ theorem quadrant_IV (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
(hre : ∀ x : ℝ, 0 ≤ x → ‖f x‖ ≤ C) (him : ∀ x : ℝ, x ≤ 0 → ‖f (x * I)‖ ≤ C) (hz_re : 0 ≤ z.re)
(hz_im : z.im ≤ 0) : ‖f z‖ ≤ C :=
by
- obtain ⟨z, rfl⟩ : ∃ z', -z' = z
- exact ⟨-z, neg_neg z⟩
+ obtain ⟨z, rfl⟩ : ∃ z', -z' = z; exact ⟨-z, neg_neg z⟩
simp only [neg_re, neg_im, neg_nonpos, neg_nonneg] at hz_re hz_im
change ‖(f ∘ Neg.neg) z‖ ≤ C
have H : maps_to Neg.neg (Iio 0 ×ℂ Ioi 0) (Ioi 0 ×ℂ Iio 0) :=
@@ -821,8 +806,7 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f { z |
refine' hd.continuous_on.comp continuous_of_real.continuous_on fun x hx => _
rwa [closure_set_of_lt_re]
by_cases h₀ : ∀ x : ℝ, 0 ≤ x → f x = 0
- · refine' ⟨0, le_rfl, fun y hy => _⟩
- rw [h₀ y hy, h₀ 0 le_rfl]
+ · refine' ⟨0, le_rfl, fun y hy => _⟩; rw [h₀ y hy, h₀ 0 le_rfl]
push_neg at h₀
rcases h₀ with ⟨x₀, hx₀, hne⟩
have hlt : ‖(0 : E)‖ < ‖f x₀‖ := by rwa [norm_zero, norm_pos_iff]
@@ -883,17 +867,12 @@ theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f { z | 0 < z
by
refine' le_of_tendsto (tendsto.mono_left _ nhdsWithin_le_nhds) this
apply ((continuous_of_real.mul continuous_const).cexp.smul continuous_const).norm.tendsto'
- simp
- infer_instance
- filter_upwards [self_mem_nhdsWithin]with ε ε₀
- change ε < 0 at ε₀
- set g : ℂ → E := fun z => exp (ε * z) • f z
- change ‖g z‖ ≤ C
+ simp; infer_instance
+ filter_upwards [self_mem_nhdsWithin]with ε ε₀; change ε < 0 at ε₀
+ set g : ℂ → E := fun z => exp (ε * z) • f z; change ‖g z‖ ≤ C
replace hd : DiffContOnCl ℂ g { z : ℂ | 0 < z.re }
exact (differentiable_id.const_mul _).cexp.DiffContOnCl.smul hd
- have hgn : ∀ z, ‖g z‖ = expR (ε * z.re) * ‖f z‖ :=
- by
- intro z
+ have hgn : ∀ z, ‖g z‖ = expR (ε * z.re) * ‖f z‖ := by intro z;
rw [norm_smul, norm_eq_abs, abs_exp, of_real_mul_re]
refine' right_half_plane_of_tendsto_zero_on_real hd _ _ (fun y => _) hz
· refine' Exists₃.imp (fun c hc B hO => (is_O.of_bound 1 _).trans hO) hexp
@@ -934,9 +913,7 @@ theorem eq_zero_on_right_half_plane_of_superexponential_decay
eq_on.of_subset_closure this hd.continuous_on continuousOn_const subset_closure subset.rfl
-- Consider $g_n(z)=e^{nz}f(z)$.
set g : ℕ → ℂ → E := fun n z => exp z ^ n • f z
- have hg : ∀ n z, ‖g n z‖ = expR z.re ^ n * ‖f z‖ :=
- by
- intro n z
+ have hg : ∀ n z, ‖g n z‖ = expR z.re ^ n * ‖f z‖ := by intro n z;
simp only [norm_smul, norm_eq_abs, Complex.abs_pow, abs_exp]
intro z hz
-- Since `e^{nz} → ∞` as `n → ∞`, it suffices to show that each `g_n` is bounded from above by `C`
@@ -958,8 +935,7 @@ theorem eq_zero_on_right_half_plane_of_superexponential_decay
refine' ((is_O_refl (fun z : ℂ => expR z.re ^ n) _).mul hO.norm_left).trans (is_O.of_bound 1 _)
simp only [← Real.exp_nat_mul, ← Real.exp_add, Real.norm_of_nonneg (Real.exp_pos _).le,
Real.exp_le_exp, add_mul, eventually_inf_principal, eventually_comap, one_mul]
- filter_upwards [eventually_ge_at_top (1 : ℝ)]with r hr z hzr hre
- subst r
+ filter_upwards [eventually_ge_at_top (1 : ℝ)]with r hr z hzr hre; subst r
refine' add_le_add (mul_le_mul_of_nonneg_left _ n.cast_nonneg) _
·
calc
@@ -971,8 +947,7 @@ theorem eq_zero_on_right_half_plane_of_superexponential_decay
exact
mul_le_mul (le_max_left _ _) (Real.rpow_le_rpow_of_exponent_le hr (le_max_left _ _))
(Real.rpow_nonneg_of_nonneg (complex.abs.nonneg _) _) (le_max_right _ _)
- · rw [tendsto_zero_iff_norm_tendsto_zero]
- simp only [hg]
+ · rw [tendsto_zero_iff_norm_tendsto_zero]; simp only [hg]
exact hre n
· rw [hg, of_real_mul_re, I_re, MulZeroClass.mul_zero, Real.exp_zero, one_pow, one_mul]
exact hC y
@@ -1010,8 +985,7 @@ theorem eqOn_right_half_plane_of_superexponential_decay {g : ℂ → E}
c₁ ≤ c₂ →
B₁ ≤ B₂ → 0 ≤ B₂ → (fun z => expR (B₁ * abs z ^ c₁)) =O[l] fun z => expR (B₂ * abs z ^ c₂)
by
- rcases hfexp with ⟨cf, hcf, Bf, hOf⟩
- rcases hgexp with ⟨cg, hcg, Bg, hOg⟩
+ rcases hfexp with ⟨cf, hcf, Bf, hOf⟩; rcases hgexp with ⟨cg, hcg, Bg, hOg⟩
refine' ⟨max cf cg, max_lt hcf hcg, max 0 (max Bf Bg), _⟩
refine' is_O.sub (hOf.trans <| this _ _ _) (hOg.trans <| this _ _ _) <;> simp
intro c₁ c₂ B₁ B₂ hc hB hB₂
@@ -1021,8 +995,7 @@ theorem eqOn_right_half_plane_of_superexponential_decay {g : ℂ → E}
exact
mul_le_mul hB (Real.rpow_le_rpow_of_exponent_le hz hc)
(Real.rpow_nonneg_of_nonneg (complex.abs.nonneg _) _) hB₂
- · rcases hfim with ⟨Cf, hCf⟩
- rcases hgim with ⟨Cg, hCg⟩
+ · rcases hfim with ⟨Cf, hCf⟩; rcases hgim with ⟨Cg, hCg⟩
exact ⟨Cf + Cg, fun x => norm_sub_le_of_le (hCf x) (hCg x)⟩
#align phragmen_lindelof.eq_on_right_half_plane_of_superexponential_decay PhragmenLindelof.eqOn_right_half_plane_of_superexponential_decay
mathlib commit https://github.com/leanprover-community/mathlib/commit/039ef89bef6e58b32b62898dd48e9d1a4312bb65
@@ -66,7 +66,7 @@ variable {E : Type _} [NormedAddCommGroup E]
/-- An auxiliary lemma that combines two double exponential estimates into a similar estimate
on the difference of the functions. -/
-theorem isO_sub_exp_exp {a : ℝ} {f g : ℂ → E} {l : Filter ℂ} {u : ℂ → ℝ}
+theorem isBigO_sub_exp_exp {a : ℝ} {f g : ℂ → E} {l : Filter ℂ} {u : ℂ → ℝ}
(hBf : ∃ c < a, ∃ B, f =O[l] fun z => expR (B * expR (c * |u z|)))
(hBg : ∃ c < a, ∃ B, g =O[l] fun z => expR (B * expR (c * |u z|))) :
∃ c < a, ∃ B, (f - g) =O[l] fun z => expR (B * expR (c * |u z|)) :=
@@ -87,11 +87,11 @@ theorem isO_sub_exp_exp {a : ℝ} {f g : ℂ → E} {l : Filter ℂ} {u : ℂ
refine' (hOf.trans_le <| this _ _ _).sub (hOg.trans_le <| this _ _ _)
exacts[le_max_left _ _, le_max_left _ _, (le_max_left _ _).trans (le_max_right _ _),
le_max_right _ _, le_max_left _ _, (le_max_right _ _).trans (le_max_right _ _)]
-#align phragmen_lindelof.is_O_sub_exp_exp PhragmenLindelof.isO_sub_exp_exp
+#align phragmen_lindelof.is_O_sub_exp_exp PhragmenLindelof.isBigO_sub_exp_exp
/-- An auxiliary lemma that combines two “exponential of a power” estimates into a similar estimate
on the difference of the functions. -/
-theorem isO_sub_exp_rpow {a : ℝ} {f g : ℂ → E} {l : Filter ℂ}
+theorem isBigO_sub_exp_rpow {a : ℝ} {f g : ℂ → E} {l : Filter ℂ}
(hBf : ∃ c < a, ∃ B, f =O[comap Complex.abs atTop ⊓ l] fun z => expR (B * abs z ^ c))
(hBg : ∃ c < a, ∃ B, g =O[comap Complex.abs atTop ⊓ l] fun z => expR (B * abs z ^ c)) :
∃ c < a, ∃ B, (f - g) =O[comap Complex.abs atTop ⊓ l] fun z => expR (B * abs z ^ c) :=
@@ -117,7 +117,7 @@ theorem isO_sub_exp_rpow {a : ℝ} {f g : ℂ → E} {l : Filter ℂ}
refine' (hOf.trans <| this _ _ _).sub (hOg.trans <| this _ _ _)
exacts[le_max_left _ _, le_max_left _ _, (le_max_left _ _).trans (le_max_right _ _),
le_max_right _ _, le_max_left _ _, (le_max_right _ _).trans (le_max_right _ _)]
-#align phragmen_lindelof.is_O_sub_exp_rpow PhragmenLindelof.isO_sub_exp_rpow
+#align phragmen_lindelof.is_O_sub_exp_rpow PhragmenLindelof.isBigO_sub_exp_rpow
variable [NormedSpace ℂ E] {a b C : ℝ} {f g : ℂ → E} {z : ℂ}
@@ -318,7 +318,7 @@ theorem eqOn_horizontal_strip {g : ℂ → E} (hdf : DiffContOnCl ℂ f (im ⁻
(ha : ∀ z : ℂ, z.im = a → f z = g z) (hb : ∀ z : ℂ, z.im = b → f z = g z) :
EqOn f g (im ⁻¹' Icc a b) := fun z hz =>
sub_eq_zero.1
- (eq_zero_on_horizontal_strip (hdf.sub hdg) (isO_sub_exp_exp hBf hBg)
+ (eq_zero_on_horizontal_strip (hdf.sub hdg) (isBigO_sub_exp_exp hBf hBg)
(fun w hw => sub_eq_zero.2 (ha w hw)) (fun w hw => sub_eq_zero.2 (hb w hw)) hz)
#align phragmen_lindelof.eq_on_horizontal_strip PhragmenLindelof.eqOn_horizontal_strip
@@ -413,7 +413,7 @@ theorem eqOn_vertical_strip {g : ℂ → E} (hdf : DiffContOnCl ℂ f (re ⁻¹'
(ha : ∀ z : ℂ, re z = a → f z = g z) (hb : ∀ z : ℂ, re z = b → f z = g z) :
EqOn f g (re ⁻¹' Icc a b) := fun z hz =>
sub_eq_zero.1
- (eq_zero_on_vertical_strip (hdf.sub hdg) (isO_sub_exp_exp hBf hBg)
+ (eq_zero_on_vertical_strip (hdf.sub hdg) (isBigO_sub_exp_exp hBf hBg)
(fun w hw => sub_eq_zero.2 (ha w hw)) (fun w hw => sub_eq_zero.2 (hb w hw)) hz)
#align phragmen_lindelof.eq_on_vertical_strip PhragmenLindelof.eqOn_vertical_strip
@@ -478,7 +478,7 @@ theorem quadrant_i (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
refine' (hd.continuous_on _ _).mono subset_closure
simp [closure_re_prod_im, mem_re_prod_im]
refine'
- ((hc.tendsto.comp <| tendsto_exp_comap_re_at_bot.inf H.tendsto).isO_one ℝ).trans
+ ((hc.tendsto.comp <| tendsto_exp_comap_re_at_bot.inf H.tendsto).isBigO_one ℝ).trans
(is_O_of_le _ fun w => _)
rw [norm_one, Real.norm_of_nonneg (Real.exp_pos _).le, Real.one_le_exp_iff]
exact mul_nonneg (le_max_right _ _) (Real.exp_pos _).le
@@ -539,7 +539,7 @@ theorem eqOn_quadrant_i (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(hre : ∀ x : ℝ, 0 ≤ x → f x = g x) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = g (x * I)) :
EqOn f g { z | 0 ≤ z.re ∧ 0 ≤ z.im } := fun z hz =>
sub_eq_zero.1 <|
- eq_zero_on_quadrant_i (hdf.sub hdg) (isO_sub_exp_rpow hBf hBg)
+ eq_zero_on_quadrant_i (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
(fun x hx => sub_eq_zero.2 <| hre x hx) (fun x hx => sub_eq_zero.2 <| him x hx) hz
#align phragmen_lindelof.eq_on_quadrant_I PhragmenLindelof.eqOn_quadrant_i
@@ -614,7 +614,7 @@ theorem eqOn_quadrant_II (hdf : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
(hre : ∀ x : ℝ, x ≤ 0 → f x = g x) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = g (x * I)) :
EqOn f g { z | z.re ≤ 0 ∧ 0 ≤ z.im } := fun z hz =>
sub_eq_zero.1 <|
- eq_zero_on_quadrant_II (hdf.sub hdg) (isO_sub_exp_rpow hBf hBg)
+ eq_zero_on_quadrant_II (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
(fun x hx => sub_eq_zero.2 <| hre x hx) (fun x hx => sub_eq_zero.2 <| him x hx) hz
#align phragmen_lindelof.eq_on_quadrant_II PhragmenLindelof.eqOn_quadrant_II
@@ -691,7 +691,7 @@ theorem eqOn_quadrant_III (hdf : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
(hre : ∀ x : ℝ, x ≤ 0 → f x = g x) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = g (x * I)) :
EqOn f g { z | z.re ≤ 0 ∧ z.im ≤ 0 } := fun z hz =>
sub_eq_zero.1 <|
- eq_zero_on_quadrant_III (hdf.sub hdg) (isO_sub_exp_rpow hBf hBg)
+ eq_zero_on_quadrant_III (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
(fun x hx => sub_eq_zero.2 <| hre x hx) (fun x hx => sub_eq_zero.2 <| him x hx) hz
#align phragmen_lindelof.eq_on_quadrant_III PhragmenLindelof.eqOn_quadrant_III
@@ -768,7 +768,7 @@ theorem eqOn_quadrant_IV (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
(hre : ∀ x : ℝ, 0 ≤ x → f x = g x) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = g (x * I)) :
EqOn f g { z | 0 ≤ z.re ∧ z.im ≤ 0 } := fun z hz =>
sub_eq_zero.1 <|
- eq_zero_on_quadrant_IV (hdf.sub hdg) (isO_sub_exp_rpow hBf hBg)
+ eq_zero_on_quadrant_IV (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
(fun x hx => sub_eq_zero.2 <| hre x hx) (fun x hx => sub_eq_zero.2 <| him x hx) hz
#align phragmen_lindelof.eq_on_quadrant_IV PhragmenLindelof.eqOn_quadrant_IV
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce7e9d53d4bbc38065db3b595cd5bd73c323bc1d
@@ -253,8 +253,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
_).cexp
replace hd : DiffContOnCl ℂ (fun w => g ε w • f w) (Ioo (-R) R ×ℂ Ioo (a - b) (a + b))
exact (hgd.diff_cont_on_cl.smul hfd).mono (inter_subset_right _ _)
- convert
- norm_le_of_forall_mem_frontier_norm_le ((bounded_Ioo _ _).reProdIm (bounded_Ioo _ _)) hd
+ convert norm_le_of_forall_mem_frontier_norm_le ((bounded_Ioo _ _).reProdIm (bounded_Ioo _ _)) hd
(fun w hw => _) _
· have hwc := frontier_subset_closure hw
rw [frontier_re_prod_im, closure_Ioo (neg_lt_self hR₀).Ne, frontier_Ioo hab, closure_Ioo hab.ne,
mathlib commit https://github.com/leanprover-community/mathlib/commit/2af0836443b4cfb5feda0df0051acdb398304931
@@ -92,30 +92,19 @@ theorem isO_sub_exp_exp {a : ℝ} {f g : ℂ → E} {l : Filter ℂ} {u : ℂ
/-- An auxiliary lemma that combines two “exponential of a power” estimates into a similar estimate
on the difference of the functions. -/
theorem isO_sub_exp_rpow {a : ℝ} {f g : ℂ → E} {l : Filter ℂ}
- (hBf :
- ∃ c < a,
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ l] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
- (hBg :
- ∃ c < a,
- ∃ B,
- g =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ l] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c)) :
- ∃ c < a,
- ∃ B,
- (f - g) =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ l] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c) :=
+ (hBf : ∃ c < a, ∃ B, f =O[comap Complex.abs atTop ⊓ l] fun z => expR (B * abs z ^ c))
+ (hBg : ∃ c < a, ∃ B, g =O[comap Complex.abs atTop ⊓ l] fun z => expR (B * abs z ^ c)) :
+ ∃ c < a, ∃ B, (f - g) =O[comap Complex.abs atTop ⊓ l] fun z => expR (B * abs z ^ c) :=
by
have :
∀ {c₁ c₂ B₁ B₂ : ℝ},
c₁ ≤ c₂ →
0 ≤ B₂ →
B₁ ≤ B₂ →
- (fun z : ℂ => expR (B₁ * abs z ^ c₁)) =O[comap Complex.AbsTheory.Complex.abs at_top ⊓ l]
- fun z => expR (B₂ * abs z ^ c₂) :=
+ (fun z : ℂ => expR (B₁ * abs z ^ c₁)) =O[comap Complex.abs at_top ⊓ l] fun z =>
+ expR (B₂ * abs z ^ c₂) :=
by
- have : ∀ᶠ z : ℂ in comap Complex.AbsTheory.Complex.abs at_top ⊓ l, 1 ≤ abs z :=
+ have : ∀ᶠ z : ℂ in comap Complex.abs at_top ⊓ l, 1 ≤ abs z :=
((eventually_ge_at_top 1).comap _).filter_mono inf_le_left
refine' fun c₁ c₂ B₁ B₂ hc hB₀ hB => is_O.of_bound 1 (this.mono fun z hz => _)
rw [one_mul, Real.norm_eq_abs, Real.norm_eq_abs, Real.abs_exp, Real.abs_exp, Real.exp_le_exp]
@@ -445,9 +434,7 @@ Then `‖f z‖` is bounded from above by the same constant on the closed first
theorem quadrant_i (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → ‖f x‖ ≤ C) (him : ∀ x : ℝ, 0 ≤ x → ‖f (x * I)‖ ≤ C) (hz_re : 0 ≤ z.re)
(hz_im : 0 ≤ z.im) : ‖f z‖ ≤ C :=
by
@@ -526,9 +513,7 @@ Then `f` is equal to zero on the closed first quadrant. -/
theorem eq_zero_on_quadrant_i (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → f x = 0) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = 0) :
EqOn f 0 { z | 0 ≤ z.re ∧ 0 ≤ z.im } := fun z hz =>
norm_le_zero_iff.1 <|
@@ -547,15 +532,11 @@ Then `f` is equal to `g` on the closed first quadrant. -/
theorem eqOn_quadrant_i (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(hBf :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hdg : DiffContOnCl ℂ g (Ioi 0 ×ℂ Ioi 0))
(hBg :
∃ c < (2 : ℝ),
- ∃ B,
- g =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → f x = g x) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = g (x * I)) :
EqOn f g { z | 0 ≤ z.re ∧ 0 ≤ z.im } := fun z hz =>
sub_eq_zero.1 <|
@@ -574,9 +555,7 @@ Then `‖f z‖` is bounded from above by the same constant on the closed second
theorem quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → ‖f x‖ ≤ C) (him : ∀ x : ℝ, 0 ≤ x → ‖f (x * I)‖ ≤ C) (hz_re : z.re ≤ 0)
(hz_im : 0 ≤ z.im) : ‖f z‖ ≤ C :=
by
@@ -609,9 +588,7 @@ Then `f` is equal to zero on the closed second quadrant. -/
theorem eq_zero_on_quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → f x = 0) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = 0) :
EqOn f 0 { z | z.re ≤ 0 ∧ 0 ≤ z.im } := fun z hz =>
norm_le_zero_iff.1 <|
@@ -630,15 +607,11 @@ Then `f` is equal to `g` on the closed second quadrant. -/
theorem eqOn_quadrant_II (hdf : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
(hBf :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hdg : DiffContOnCl ℂ g (Iio 0 ×ℂ Ioi 0))
(hBg :
∃ c < (2 : ℝ),
- ∃ B,
- g =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → f x = g x) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = g (x * I)) :
EqOn f g { z | z.re ≤ 0 ∧ 0 ≤ z.im } := fun z hz =>
sub_eq_zero.1 <|
@@ -657,9 +630,7 @@ Then `‖f z‖` is bounded from above by the same constant on the closed third
theorem quadrant_III (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → ‖f x‖ ≤ C) (him : ∀ x : ℝ, x ≤ 0 → ‖f (x * I)‖ ≤ C) (hz_re : z.re ≤ 0)
(hz_im : z.im ≤ 0) : ‖f z‖ ≤ C :=
by
@@ -694,9 +665,7 @@ Then `f` is equal to zero on the closed third quadrant. -/
theorem eq_zero_on_quadrant_III (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → f x = 0) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = 0) :
EqOn f 0 { z | z.re ≤ 0 ∧ z.im ≤ 0 } := fun z hz =>
norm_le_zero_iff.1 <|
@@ -715,15 +684,11 @@ Then `f` is equal to `g` on the closed third quadrant. -/
theorem eqOn_quadrant_III (hdf : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
(hBf :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hdg : DiffContOnCl ℂ g (Iio 0 ×ℂ Iio 0))
(hBg :
∃ c < (2 : ℝ),
- ∃ B,
- g =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → f x = g x) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = g (x * I)) :
EqOn f g { z | z.re ≤ 0 ∧ z.im ≤ 0 } := fun z hz =>
sub_eq_zero.1 <|
@@ -742,9 +707,7 @@ Then `‖f z‖` is bounded from above by the same constant on the closed fourth
theorem quadrant_IV (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → ‖f x‖ ≤ C) (him : ∀ x : ℝ, x ≤ 0 → ‖f (x * I)‖ ≤ C) (hz_re : 0 ≤ z.re)
(hz_im : z.im ≤ 0) : ‖f z‖ ≤ C :=
by
@@ -779,9 +742,7 @@ Then `f` is equal to zero on the closed fourth quadrant. -/
theorem eq_zero_on_quadrant_IV (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → f x = 0) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = 0) :
EqOn f 0 { z | 0 ≤ z.re ∧ z.im ≤ 0 } := fun z hz =>
norm_le_zero_iff.1 <|
@@ -800,15 +761,11 @@ Then `f` is equal to `g` on the closed fourth quadrant. -/
theorem eqOn_quadrant_IV (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
(hBf :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hdg : DiffContOnCl ℂ g (Ioi 0 ×ℂ Iio 0))
(hBg :
∃ c < (2 : ℝ),
- ∃ B,
- g =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → f x = g x) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = g (x * I)) :
EqOn f g { z | 0 ≤ z.re ∧ z.im ≤ 0 } := fun z hz =>
sub_eq_zero.1 <|
@@ -834,9 +791,7 @@ See also `phragmen_lindelof.right_half_plane_of_bounded_on_real` for a stronger
theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f { z | 0 < z.re })
(hexp :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z => expR (B * abs z ^ c))
(hre : Tendsto (fun x : ℝ => f x) atTop (𝓝 0)) (him : ∀ x : ℝ, ‖f (x * I)‖ ≤ C)
(hz : 0 ≤ z.re) : ‖f z‖ ≤ C :=
by
@@ -918,9 +873,7 @@ See also `phragmen_lindelof.right_half_plane_of_tendsto_zero_on_real` for a weak
theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f { z | 0 < z.re })
(hexp :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z => expR (B * abs z ^ c))
(hre : IsBoundedUnder (· ≤ ·) atTop fun x : ℝ => ‖f x‖) (him : ∀ x : ℝ, ‖f (x * I)‖ ≤ C)
(hz : 0 ≤ z.re) : ‖f z‖ ≤ C :=
by
@@ -972,9 +925,7 @@ theorem eq_zero_on_right_half_plane_of_superexponential_decay
(hd : DiffContOnCl ℂ f { z | 0 < z.re })
(hexp :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z => expR (B * abs z ^ c))
(hre : SuperpolynomialDecay atTop expR fun x => ‖f x‖) (him : ∃ C, ∀ x : ℝ, ‖f (x * I)‖ ≤ C) :
EqOn f 0 { z : ℂ | 0 ≤ z.re } := by
rcases him with ⟨C, hC⟩
@@ -1043,14 +994,10 @@ theorem eqOn_right_half_plane_of_superexponential_decay {g : ℂ → E}
(hfd : DiffContOnCl ℂ f { z | 0 < z.re }) (hgd : DiffContOnCl ℂ g { z | 0 < z.re })
(hfexp :
∃ c < (2 : ℝ),
- ∃ B,
- f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z => expR (B * abs z ^ c))
(hgexp :
∃ c < (2 : ℝ),
- ∃ B,
- g =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z =>
- expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ ∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z => expR (B * abs z ^ c))
(hre : SuperpolynomialDecay atTop expR fun x => ‖f x - g x‖)
(hfim : ∃ C, ∀ x : ℝ, ‖f (x * I)‖ ≤ C) (hgim : ∃ C, ∀ x : ℝ, ‖g (x * I)‖ ≤ C) :
EqOn f g { z : ℂ | 0 ≤ z.re } :=
@@ -1058,7 +1005,7 @@ theorem eqOn_right_half_plane_of_superexponential_decay {g : ℂ → E}
suffices eq_on (f - g) 0 { z : ℂ | 0 ≤ z.re } by
simpa only [eq_on, Pi.sub_apply, Pi.zero_apply, sub_eq_zero] using this
refine' eq_zero_on_right_half_plane_of_superexponential_decay (hfd.sub hgd) _ hre _
- · set l : Filter ℂ := comap Complex.AbsTheory.Complex.abs at_top ⊓ 𝓟 { z : ℂ | 0 < z.re }
+ · set l : Filter ℂ := comap Complex.abs at_top ⊓ 𝓟 { z : ℂ | 0 < z.re }
suffices
∀ {c₁ c₂ B₁ B₂ : ℝ},
c₁ ≤ c₂ →
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -214,7 +214,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
rwa [of_real_mul_im, sub_im, mul_I_im, of_real_re, _root_.abs_mul, abs_of_pos hd₀,
mul_le_mul_left hd₀]
simpa only [of_real_mul_re, _root_.abs_mul, abs_of_pos hd₀, sub_re, mul_I_re, of_real_im,
- zero_mul, neg_zero, sub_zero] using
+ MulZeroClass.zero_mul, neg_zero, sub_zero] using
abs_exp_mul_exp_add_exp_neg_le_of_abs_im_le ε₀.le hw hb'.le
-- `abs (g ε w) ≤ 1` on the lines `w.im = a ± b` (actually, it holds everywhere in the strip)
have hg₁ : ∀ w, im w = a - b ∨ im w = a + b → abs (g ε w) ≤ 1 :=
@@ -244,7 +244,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
(Real.exp_pos _).le
refine' real.tendsto_exp_at_bot.comp _
suffices H : tendsto (fun R => δ + B * (expR ((d - c) * R))⁻¹) at_top (𝓝 (δ + B * 0))
- · rw [mul_zero, add_zero] at H
+ · rw [MulZeroClass.mul_zero, add_zero] at H
refine' tendsto.at_bot_add _ tendsto_const_nhds
simpa only [id, (· ∘ ·), add_mul, mul_assoc, ← div_eq_inv_mul, ← Real.exp_sub, ← sub_mul,
sub_sub_cancel] using
@@ -953,7 +953,8 @@ theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f { z | 0 < z
have h₀ : tendsto (fun x : ℝ => expR (ε * x)) at_top (𝓝 0) :=
real.tendsto_exp_at_bot.comp (tendsto_const_nhds.neg_mul_at_top ε₀ tendsto_id)
exact h₀.zero_smul_is_bounded_under_le hre
- · rw [hgn, of_real_mul_re, I_re, mul_zero, mul_zero, Real.exp_zero, one_mul]
+ · rw [hgn, of_real_mul_re, I_re, MulZeroClass.mul_zero, MulZeroClass.mul_zero, Real.exp_zero,
+ one_mul]
exact him y
#align phragmen_lindelof.right_half_plane_of_bounded_on_real PhragmenLindelof.right_half_plane_of_bounded_on_real
@@ -1023,7 +1024,7 @@ theorem eq_zero_on_right_half_plane_of_superexponential_decay
· rw [tendsto_zero_iff_norm_tendsto_zero]
simp only [hg]
exact hre n
- · rw [hg, of_real_mul_re, I_re, mul_zero, Real.exp_zero, one_pow, one_mul]
+ · rw [hg, of_real_mul_re, I_re, MulZeroClass.mul_zero, Real.exp_zero, one_pow, one_mul]
exact hC y
#align phragmen_lindelof.eq_zero_on_right_half_plane_of_superexponential_decay PhragmenLindelof.eq_zero_on_right_half_plane_of_superexponential_decay
mathlib commit https://github.com/leanprover-community/mathlib/commit/ddec54a71a0dd025c05445d467f1a2b7d586a3ba
@@ -92,19 +92,30 @@ theorem isO_sub_exp_exp {a : ℝ} {f g : ℂ → E} {l : Filter ℂ} {u : ℂ
/-- An auxiliary lemma that combines two “exponential of a power” estimates into a similar estimate
on the difference of the functions. -/
theorem isO_sub_exp_rpow {a : ℝ} {f g : ℂ → E} {l : Filter ℂ}
- (hBf : ∃ c < a, ∃ B, f =O[comap Complex.abs atTop ⊓ l] fun z => expR (B * abs z ^ c))
- (hBg : ∃ c < a, ∃ B, g =O[comap Complex.abs atTop ⊓ l] fun z => expR (B * abs z ^ c)) :
- ∃ c < a, ∃ B, (f - g) =O[comap Complex.abs atTop ⊓ l] fun z => expR (B * abs z ^ c) :=
+ (hBf :
+ ∃ c < a,
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ l] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hBg :
+ ∃ c < a,
+ ∃ B,
+ g =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ l] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c)) :
+ ∃ c < a,
+ ∃ B,
+ (f - g) =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ l] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c) :=
by
have :
∀ {c₁ c₂ B₁ B₂ : ℝ},
c₁ ≤ c₂ →
0 ≤ B₂ →
B₁ ≤ B₂ →
- (fun z : ℂ => expR (B₁ * abs z ^ c₁)) =O[comap Complex.abs at_top ⊓ l] fun z =>
- expR (B₂ * abs z ^ c₂) :=
+ (fun z : ℂ => expR (B₁ * abs z ^ c₁)) =O[comap Complex.AbsTheory.Complex.abs at_top ⊓ l]
+ fun z => expR (B₂ * abs z ^ c₂) :=
by
- have : ∀ᶠ z : ℂ in comap Complex.abs at_top ⊓ l, 1 ≤ abs z :=
+ have : ∀ᶠ z : ℂ in comap Complex.AbsTheory.Complex.abs at_top ⊓ l, 1 ≤ abs z :=
((eventually_ge_at_top 1).comap _).filter_mono inf_le_left
refine' fun c₁ c₂ B₁ B₂ hc hB₀ hB => is_O.of_bound 1 (this.mono fun z hz => _)
rw [one_mul, Real.norm_eq_abs, Real.norm_eq_abs, Real.abs_exp, Real.abs_exp, Real.exp_le_exp]
@@ -434,8 +445,10 @@ Then `‖f z‖` is bounded from above by the same constant on the closed first
theorem quadrant_i (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
- (hre : ∀ x : ℝ, 0 ≤ x → ‖f x‖ ≤ C) (him : ∀ x : ℝ, 0 ≤ x → ‖f (x * i)‖ ≤ C) (hz_re : 0 ≤ z.re)
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hre : ∀ x : ℝ, 0 ≤ x → ‖f x‖ ≤ C) (him : ∀ x : ℝ, 0 ≤ x → ‖f (x * I)‖ ≤ C) (hz_re : 0 ≤ z.re)
(hz_im : 0 ≤ z.im) : ‖f z‖ ≤ C :=
by
-- The case `z = 0` is trivial.
@@ -513,8 +526,10 @@ Then `f` is equal to zero on the closed first quadrant. -/
theorem eq_zero_on_quadrant_i (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
- (hre : ∀ x : ℝ, 0 ≤ x → f x = 0) (him : ∀ x : ℝ, 0 ≤ x → f (x * i) = 0) :
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hre : ∀ x : ℝ, 0 ≤ x → f x = 0) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = 0) :
EqOn f 0 { z | 0 ≤ z.re ∧ 0 ≤ z.im } := fun z hz =>
norm_le_zero_iff.1 <|
quadrant_i hd hB (fun x hx => norm_le_zero_iff.2 <| hre x hx)
@@ -532,12 +547,16 @@ Then `f` is equal to `g` on the closed first quadrant. -/
theorem eqOn_quadrant_i (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(hBf :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
(hdg : DiffContOnCl ℂ g (Ioi 0 ×ℂ Ioi 0))
(hBg :
∃ c < (2 : ℝ),
- ∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
- (hre : ∀ x : ℝ, 0 ≤ x → f x = g x) (him : ∀ x : ℝ, 0 ≤ x → f (x * i) = g (x * i)) :
+ ∃ B,
+ g =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hre : ∀ x : ℝ, 0 ≤ x → f x = g x) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = g (x * I)) :
EqOn f g { z | 0 ≤ z.re ∧ 0 ≤ z.im } := fun z hz =>
sub_eq_zero.1 <|
eq_zero_on_quadrant_i (hdf.sub hdg) (isO_sub_exp_rpow hBf hBg)
@@ -555,8 +574,10 @@ Then `‖f z‖` is bounded from above by the same constant on the closed second
theorem quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
- (hre : ∀ x : ℝ, x ≤ 0 → ‖f x‖ ≤ C) (him : ∀ x : ℝ, 0 ≤ x → ‖f (x * i)‖ ≤ C) (hz_re : z.re ≤ 0)
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hre : ∀ x : ℝ, x ≤ 0 → ‖f x‖ ≤ C) (him : ∀ x : ℝ, 0 ≤ x → ‖f (x * I)‖ ≤ C) (hz_re : z.re ≤ 0)
(hz_im : 0 ≤ z.im) : ‖f z‖ ≤ C :=
by
obtain ⟨z, rfl⟩ : ∃ z', z' * I = z
@@ -588,8 +609,10 @@ Then `f` is equal to zero on the closed second quadrant. -/
theorem eq_zero_on_quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
- (hre : ∀ x : ℝ, x ≤ 0 → f x = 0) (him : ∀ x : ℝ, 0 ≤ x → f (x * i) = 0) :
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hre : ∀ x : ℝ, x ≤ 0 → f x = 0) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = 0) :
EqOn f 0 { z | z.re ≤ 0 ∧ 0 ≤ z.im } := fun z hz =>
norm_le_zero_iff.1 <|
quadrant_II hd hB (fun x hx => norm_le_zero_iff.2 <| hre x hx)
@@ -607,12 +630,16 @@ Then `f` is equal to `g` on the closed second quadrant. -/
theorem eqOn_quadrant_II (hdf : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
(hBf :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
(hdg : DiffContOnCl ℂ g (Iio 0 ×ℂ Ioi 0))
(hBg :
∃ c < (2 : ℝ),
- ∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
- (hre : ∀ x : ℝ, x ≤ 0 → f x = g x) (him : ∀ x : ℝ, 0 ≤ x → f (x * i) = g (x * i)) :
+ ∃ B,
+ g =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hre : ∀ x : ℝ, x ≤ 0 → f x = g x) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = g (x * I)) :
EqOn f g { z | z.re ≤ 0 ∧ 0 ≤ z.im } := fun z hz =>
sub_eq_zero.1 <|
eq_zero_on_quadrant_II (hdf.sub hdg) (isO_sub_exp_rpow hBf hBg)
@@ -630,8 +657,10 @@ Then `‖f z‖` is bounded from above by the same constant on the closed third
theorem quadrant_III (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
- (hre : ∀ x : ℝ, x ≤ 0 → ‖f x‖ ≤ C) (him : ∀ x : ℝ, x ≤ 0 → ‖f (x * i)‖ ≤ C) (hz_re : z.re ≤ 0)
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hre : ∀ x : ℝ, x ≤ 0 → ‖f x‖ ≤ C) (him : ∀ x : ℝ, x ≤ 0 → ‖f (x * I)‖ ≤ C) (hz_re : z.re ≤ 0)
(hz_im : z.im ≤ 0) : ‖f z‖ ≤ C :=
by
obtain ⟨z, rfl⟩ : ∃ z', -z' = z
@@ -665,8 +694,10 @@ Then `f` is equal to zero on the closed third quadrant. -/
theorem eq_zero_on_quadrant_III (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
- (hre : ∀ x : ℝ, x ≤ 0 → f x = 0) (him : ∀ x : ℝ, x ≤ 0 → f (x * i) = 0) :
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hre : ∀ x : ℝ, x ≤ 0 → f x = 0) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = 0) :
EqOn f 0 { z | z.re ≤ 0 ∧ z.im ≤ 0 } := fun z hz =>
norm_le_zero_iff.1 <|
quadrant_III hd hB (fun x hx => norm_le_zero_iff.2 <| hre x hx)
@@ -684,12 +715,16 @@ Then `f` is equal to `g` on the closed third quadrant. -/
theorem eqOn_quadrant_III (hdf : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
(hBf :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
(hdg : DiffContOnCl ℂ g (Iio 0 ×ℂ Iio 0))
(hBg :
∃ c < (2 : ℝ),
- ∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
- (hre : ∀ x : ℝ, x ≤ 0 → f x = g x) (him : ∀ x : ℝ, x ≤ 0 → f (x * i) = g (x * i)) :
+ ∃ B,
+ g =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hre : ∀ x : ℝ, x ≤ 0 → f x = g x) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = g (x * I)) :
EqOn f g { z | z.re ≤ 0 ∧ z.im ≤ 0 } := fun z hz =>
sub_eq_zero.1 <|
eq_zero_on_quadrant_III (hdf.sub hdg) (isO_sub_exp_rpow hBf hBg)
@@ -707,8 +742,10 @@ Then `‖f z‖` is bounded from above by the same constant on the closed fourth
theorem quadrant_IV (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
- (hre : ∀ x : ℝ, 0 ≤ x → ‖f x‖ ≤ C) (him : ∀ x : ℝ, x ≤ 0 → ‖f (x * i)‖ ≤ C) (hz_re : 0 ≤ z.re)
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hre : ∀ x : ℝ, 0 ≤ x → ‖f x‖ ≤ C) (him : ∀ x : ℝ, x ≤ 0 → ‖f (x * I)‖ ≤ C) (hz_re : 0 ≤ z.re)
(hz_im : z.im ≤ 0) : ‖f z‖ ≤ C :=
by
obtain ⟨z, rfl⟩ : ∃ z', -z' = z
@@ -742,8 +779,10 @@ Then `f` is equal to zero on the closed fourth quadrant. -/
theorem eq_zero_on_quadrant_IV (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
(hB :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
- (hre : ∀ x : ℝ, 0 ≤ x → f x = 0) (him : ∀ x : ℝ, x ≤ 0 → f (x * i) = 0) :
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hre : ∀ x : ℝ, 0 ≤ x → f x = 0) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = 0) :
EqOn f 0 { z | 0 ≤ z.re ∧ z.im ≤ 0 } := fun z hz =>
norm_le_zero_iff.1 <|
quadrant_IV hd hB (fun x hx => norm_le_zero_iff.2 <| hre x hx)
@@ -761,12 +800,16 @@ Then `f` is equal to `g` on the closed fourth quadrant. -/
theorem eqOn_quadrant_IV (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
(hBf :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
(hdg : DiffContOnCl ℂ g (Ioi 0 ×ℂ Iio 0))
(hBg :
∃ c < (2 : ℝ),
- ∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
- (hre : ∀ x : ℝ, 0 ≤ x → f x = g x) (him : ∀ x : ℝ, x ≤ 0 → f (x * i) = g (x * i)) :
+ ∃ B,
+ g =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hre : ∀ x : ℝ, 0 ≤ x → f x = g x) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = g (x * I)) :
EqOn f g { z | 0 ≤ z.re ∧ z.im ≤ 0 } := fun z hz =>
sub_eq_zero.1 <|
eq_zero_on_quadrant_IV (hdf.sub hdg) (isO_sub_exp_rpow hBf hBg)
@@ -791,8 +834,10 @@ See also `phragmen_lindelof.right_half_plane_of_bounded_on_real` for a stronger
theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f { z | 0 < z.re })
(hexp :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z => expR (B * abs z ^ c))
- (hre : Tendsto (fun x : ℝ => f x) atTop (𝓝 0)) (him : ∀ x : ℝ, ‖f (x * i)‖ ≤ C)
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hre : Tendsto (fun x : ℝ => f x) atTop (𝓝 0)) (him : ∀ x : ℝ, ‖f (x * I)‖ ≤ C)
(hz : 0 ≤ z.re) : ‖f z‖ ≤ C :=
by
/- We are going to apply the Phragmen-Lindelöf principle in the first and fourth quadrants.
@@ -873,8 +918,10 @@ See also `phragmen_lindelof.right_half_plane_of_tendsto_zero_on_real` for a weak
theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f { z | 0 < z.re })
(hexp :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z => expR (B * abs z ^ c))
- (hre : IsBoundedUnder (· ≤ ·) atTop fun x : ℝ => ‖f x‖) (him : ∀ x : ℝ, ‖f (x * i)‖ ≤ C)
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hre : IsBoundedUnder (· ≤ ·) atTop fun x : ℝ => ‖f x‖) (him : ∀ x : ℝ, ‖f (x * I)‖ ≤ C)
(hz : 0 ≤ z.re) : ‖f z‖ ≤ C :=
by
-- For each `ε < 0`, the function `λ z, exp (ε * z) • f z` satisfies assumptions of
@@ -924,8 +971,10 @@ theorem eq_zero_on_right_half_plane_of_superexponential_decay
(hd : DiffContOnCl ℂ f { z | 0 < z.re })
(hexp :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z => expR (B * abs z ^ c))
- (hre : SuperpolynomialDecay atTop expR fun x => ‖f x‖) (him : ∃ C, ∀ x : ℝ, ‖f (x * i)‖ ≤ C) :
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
+ (hre : SuperpolynomialDecay atTop expR fun x => ‖f x‖) (him : ∃ C, ∀ x : ℝ, ‖f (x * I)‖ ≤ C) :
EqOn f 0 { z : ℂ | 0 ≤ z.re } := by
rcases him with ⟨C, hC⟩
-- Due to continuity, it suffices to prove the equality on the open right half-plane.
@@ -993,18 +1042,22 @@ theorem eqOn_right_half_plane_of_superexponential_decay {g : ℂ → E}
(hfd : DiffContOnCl ℂ f { z | 0 < z.re }) (hgd : DiffContOnCl ℂ g { z | 0 < z.re })
(hfexp :
∃ c < (2 : ℝ),
- ∃ B, f =O[comap Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z => expR (B * abs z ^ c))
+ ∃ B,
+ f =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
(hgexp :
∃ c < (2 : ℝ),
- ∃ B, g =O[comap Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z => expR (B * abs z ^ c))
+ ∃ B,
+ g =O[comap Complex.AbsTheory.Complex.abs atTop ⊓ 𝓟 { z | 0 < z.re }] fun z =>
+ expR (B * Complex.AbsTheory.Complex.abs z ^ c))
(hre : SuperpolynomialDecay atTop expR fun x => ‖f x - g x‖)
- (hfim : ∃ C, ∀ x : ℝ, ‖f (x * i)‖ ≤ C) (hgim : ∃ C, ∀ x : ℝ, ‖g (x * i)‖ ≤ C) :
+ (hfim : ∃ C, ∀ x : ℝ, ‖f (x * I)‖ ≤ C) (hgim : ∃ C, ∀ x : ℝ, ‖g (x * I)‖ ≤ C) :
EqOn f g { z : ℂ | 0 ≤ z.re } :=
by
suffices eq_on (f - g) 0 { z : ℂ | 0 ≤ z.re } by
simpa only [eq_on, Pi.sub_apply, Pi.zero_apply, sub_eq_zero] using this
refine' eq_zero_on_right_half_plane_of_superexponential_decay (hfd.sub hgd) _ hre _
- · set l : Filter ℂ := comap Complex.abs at_top ⊓ 𝓟 { z : ℂ | 0 < z.re }
+ · set l : Filter ℂ := comap Complex.AbsTheory.Complex.abs at_top ⊓ 𝓟 { z : ℂ | 0 < z.re }
suffices
∀ {c₁ c₂ B₁ B₂ : ℝ},
c₁ ≤ c₂ →
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -851,7 +851,7 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f { z |
contrapose! hz
calc
x₀ ≤ x₀ - z.re := (le_sub_self_iff _).2 hz
- _ ≤ |x₀ - z.re| := le_abs_self _
+ _ ≤ |x₀ - z.re| := (le_abs_self _)
_ = |(z - x₀).re| := by rw [sub_re, of_real_re, _root_.abs_sub_comm]
_ ≤ abs (z - x₀) := abs_re_le_abs _
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -469,8 +469,8 @@ theorem quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
have H : MapsTo (· * I) (Ioi 0 ×ℂ Ioi 0) (Iio 0 ×ℂ Ioi 0) := fun w hw ↦ by
simpa only [mem_reProdIm, mul_I_re, mul_I_im, neg_lt_zero, mem_Iio] using hw.symm
rcases hB with ⟨c, hc, B, hO⟩
- refine' quadrant_I (hd.comp (differentiable_id.mul_const _).diffContOnCl H) ⟨c, hc, B, ?_⟩ him
- (fun x hx => _) hz_im hz_re
+ refine quadrant_I (hd.comp (differentiable_id.mul_const _).diffContOnCl H) ⟨c, hc, B, ?_⟩ him
+ (fun x hx => ?_) hz_im hz_re
· simpa only [(· ∘ ·), map_mul, abs_I, mul_one]
using hO.comp_tendsto ((tendsto_mul_right_cobounded I_ne_zero).inf H.tendsto)
· rw [comp_apply, mul_assoc, I_mul_I, mul_neg_one, ← ofReal_neg]
@@ -693,7 +693,7 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f {z | 0
(fun x hx => (hC' x hx).trans <| le_max_right _ _)
(fun x _ => (him x).trans (le_max_left _ _)) hz h
exact hO.mono (inf_le_inf_left _ <| principal_mono.2 fun _ => And.left)
- · refine' quadrant_I (hd.mono fun _ => And.left) ⟨c, hc, B, ?_⟩
+ · refine quadrant_I (hd.mono fun _ => And.left) ⟨c, hc, B, ?_⟩
(fun x hx => (hC' x hx).trans <| le_max_right _ _)
(fun x _ => (him x).trans (le_max_left _ _)) hz h
exact hO.mono (inf_le_inf_left _ <| principal_mono.2 fun _ => And.left)
@@ -731,7 +731,7 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f {z | 0
contrapose! hz
calc
x₀ ≤ x₀ - z.re := (le_sub_self_iff _).2 hz
- _ ≤ |x₀ - z.re| := (le_abs_self _)
+ _ ≤ |x₀ - z.re| := le_abs_self _
_ = |(z - x₀).re| := by rw [sub_re, ofReal_re, _root_.abs_sub_comm]
_ ≤ abs (z - x₀) := abs_re_le_abs _
-- Thus we have `C < ‖f x₀‖ = ‖f 0‖ ≤ C`. Contradiction completes the proof.
mul
-div
cancellation lemmas (#11530)
Lemma names around cancellation of multiplication and division are a mess.
This PR renames a handful of them according to the following table (each big row contains the multiplicative statement, then the three rows contain the GroupWithZero
lemma name, the Group
lemma, the AddGroup
lemma name).
| Statement | New name | Old name | |
@@ -463,7 +463,7 @@ theorem quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
f =O[cobounded ℂ ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → ‖f x‖ ≤ C) (him : ∀ x : ℝ, 0 ≤ x → ‖f (x * I)‖ ≤ C) (hz_re : z.re ≤ 0)
(hz_im : 0 ≤ z.im) : ‖f z‖ ≤ C := by
- obtain ⟨z, rfl⟩ : ∃ z', z' * I = z := ⟨z / I, div_mul_cancel _ I_ne_zero⟩
+ obtain ⟨z, rfl⟩ : ∃ z', z' * I = z := ⟨z / I, div_mul_cancel₀ _ I_ne_zero⟩
simp only [mul_I_re, mul_I_im, neg_nonpos] at hz_re hz_im
change ‖(f ∘ (· * I)) z‖ ≤ C
have H : MapsTo (· * I) (Ioi 0 ×ℂ Ioi 0) (Iio 0 ×ℂ Ioi 0) := fun w hw ↦ by
This is a very large PR, but it has been reviewed piecemeal already in PRs to the bump/v4.7.0
branch as we update to intermediate nightlies.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: damiano <adomani@gmail.com>
@@ -774,7 +774,7 @@ theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f {z | 0 < z.
rw [hgn, one_mul]
refine' mul_le_of_le_one_left (norm_nonneg _) (Real.exp_le_one_iff.2 _)
exact mul_nonpos_of_nonpos_of_nonneg ε₀.le (le_of_lt hz)
- · simp_rw [← ofReal_mul, ← ofReal_exp, coe_smul]
+ · simp_rw [g, ← ofReal_mul, ← ofReal_exp, coe_smul]
have h₀ : Tendsto (fun x : ℝ => expR (ε * x)) atTop (𝓝 0) :=
Real.tendsto_exp_atBot.comp (tendsto_const_nhds.neg_mul_atTop ε₀ tendsto_id)
exact h₀.zero_smul_isBoundedUnder_le hre
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -361,7 +361,7 @@ nonrec theorem quadrant_I (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
refine' ⟨log z, _, exp_log hzne⟩
rw [log_im]
exact ⟨arg_nonneg_iff.2 hz_im, arg_le_pi_div_two_iff.2 (Or.inl hz_re)⟩
- -- porting note: failed to clear `clear hz_re hz_im hzne`
+ -- Porting note: failed to clear `clear hz_re hz_im hzne`
-- We are going to apply `PhragmenLindelof.horizontal_strip` to `f ∘ Complex.exp` and `ζ`.
change ‖(f ∘ exp) ζ‖ ≤ C
have H : MapsTo exp (im ⁻¹' Ioo 0 (π / 2)) (Ioi 0 ×ℂ Ioi 0) := fun z hz ↦ by
@@ -371,7 +371,7 @@ nonrec theorem quadrant_I (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
Real.sin_pos_of_mem_Ioo ⟨hz.1, hz.2.trans (half_lt_self Real.pi_pos)⟩
constructor <;> positivity
refine' horizontal_strip (hd.comp differentiable_exp.diffContOnCl H) _ _ _ hζ.1 hζ.2
- -- porting note: failed to clear hζ ζ
+ -- Porting note: failed to clear hζ ζ
· -- The estimate `hB` on `f` implies the required estimate on
-- `f ∘ exp` with the same `c` and `B' = max B 0`.
rw [sub_zero, div_div_cancel' Real.pi_pos.ne']
@@ -463,7 +463,7 @@ theorem quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
f =O[cobounded ℂ ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → ‖f x‖ ≤ C) (him : ∀ x : ℝ, 0 ≤ x → ‖f (x * I)‖ ≤ C) (hz_re : z.re ≤ 0)
(hz_im : 0 ≤ z.im) : ‖f z‖ ≤ C := by
- obtain ⟨z, rfl⟩ : ∃ z', z' * I = z; exact ⟨z / I, div_mul_cancel _ I_ne_zero⟩
+ obtain ⟨z, rfl⟩ : ∃ z', z' * I = z := ⟨z / I, div_mul_cancel _ I_ne_zero⟩
simp only [mul_I_re, mul_I_im, neg_nonpos] at hz_re hz_im
change ‖(f ∘ (· * I)) z‖ ≤ C
have H : MapsTo (· * I) (Ioi 0 ×ℂ Ioi 0) (Iio 0 ×ℂ Ioi 0) := fun w hw ↦ by
@@ -531,7 +531,7 @@ theorem quadrant_III (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
f =O[cobounded ℂ ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → ‖f x‖ ≤ C) (him : ∀ x : ℝ, x ≤ 0 → ‖f (x * I)‖ ≤ C) (hz_re : z.re ≤ 0)
(hz_im : z.im ≤ 0) : ‖f z‖ ≤ C := by
- obtain ⟨z, rfl⟩ : ∃ z', -z' = z; exact ⟨-z, neg_neg z⟩
+ obtain ⟨z, rfl⟩ : ∃ z', -z' = z := ⟨-z, neg_neg z⟩
simp only [neg_re, neg_im, neg_nonpos] at hz_re hz_im
change ‖(f ∘ Neg.neg) z‖ ≤ C
have H : MapsTo Neg.neg (Ioi 0 ×ℂ Ioi 0) (Iio 0 ×ℂ Iio 0) := by
@@ -162,7 +162,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
rw [← Real.closedBall_eq_Icc] at hw
rwa [im_ofReal_mul, sub_im, mul_I_im, ofReal_re, _root_.abs_mul, abs_of_pos hd₀,
mul_le_mul_left hd₀]
- simpa only [re_ofReal_mul, _root_.abs_mul, abs_of_pos hd₀, sub_re, mul_I_re, ofReal_im,
+ simpa only [aff, re_ofReal_mul, _root_.abs_mul, abs_of_pos hd₀, sub_re, mul_I_re, ofReal_im,
zero_mul, neg_zero, sub_zero] using
abs_exp_mul_exp_add_exp_neg_le_of_abs_im_le ε₀.le hw hb'.le
-- `abs (g ε w) ≤ 1` on the lines `w.im = a ± b` (actually, it holds everywhere in the strip)
@@ -806,7 +806,7 @@ theorem eq_zero_on_right_half_plane_of_superexponential_decay (hd : DiffContOnCl
-- Consider $g_n(z)=e^{nz}f(z)$.
set g : ℕ → ℂ → E := fun (n : ℕ) (z : ℂ) => exp z ^ n • f z
have hg : ∀ n z, ‖g n z‖ = expR z.re ^ n * ‖f z‖ := fun n z ↦ by
- simp only [norm_smul, norm_eq_abs, Complex.abs_pow, abs_exp]
+ simp only [g, norm_smul, norm_eq_abs, Complex.abs_pow, abs_exp]
intro z hz
-- Since `e^{nz} → ∞` as `n → ∞`, it suffices to show that each `g_n` is bounded from above by `C`
suffices H : ∀ n : ℕ, ‖g n z‖ ≤ C by
have
, replace
and suffices
(#10640)
No changes to tactic file, it's just boring fixes throughout the library.
This follows on from #6964.
Co-authored-by: sgouezel <sebastien.gouezel@univ-rennes1.fr> Co-authored-by: Eric Wieser <wieser.eric@gmail.com>
@@ -144,8 +144,8 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
set g := fun (ε : ℝ) (w : ℂ) => exp (ε * (exp (aff w) + exp (-aff w)))
/- Since `g ε z → 1` as `ε → 0⁻`, it suffices to prove that `‖g ε z • f z‖ ≤ C`
for all negative `ε`. -/
- suffices : ∀ᶠ ε : ℝ in 𝓝[<] (0 : ℝ), ‖g ε z • f z‖ ≤ C
- · refine' le_of_tendsto (Tendsto.mono_left _ nhdsWithin_le_nhds) this
+ suffices ∀ᶠ ε : ℝ in 𝓝[<] (0 : ℝ), ‖g ε z • f z‖ ≤ C by
+ refine' le_of_tendsto (Tendsto.mono_left _ nhdsWithin_le_nhds) this
apply ((continuous_ofReal.mul continuous_const).cexp.smul continuous_const).norm.tendsto'
simp
filter_upwards [self_mem_nhdsWithin] with ε ε₀; change ε < 0 at ε₀
@@ -158,8 +158,8 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
mul_neg_of_neg_of_pos ε₀
(Real.cos_pos_of_mem_Ioo <| abs_lt.1 <| (abs_of_pos (mul_pos hd₀ hb)).symm ▸ hb'),
fun w hw => _⟩
- replace hw : |im (aff w)| ≤ d * b
- · rw [← Real.closedBall_eq_Icc] at hw
+ replace hw : |im (aff w)| ≤ d * b := by
+ rw [← Real.closedBall_eq_Icc] at hw
rwa [im_ofReal_mul, sub_im, mul_I_im, ofReal_re, _root_.abs_mul, abs_of_pos hd₀,
mul_le_mul_left hd₀]
simpa only [re_ofReal_mul, _root_.abs_mul, abs_of_pos hd₀, sub_re, mul_I_re, ofReal_im,
@@ -178,9 +178,9 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
rcases hO.exists_pos with ⟨A, hA₀, hA⟩
simp only [isBigOWith_iff, eventually_inf_principal, eventually_comap, mem_Ioo, ← abs_lt,
mem_preimage, (· ∘ ·), Real.norm_eq_abs, abs_of_pos (Real.exp_pos _)] at hA
- suffices :
- Tendsto (fun R => expR (δ * expR (d * R) + B * expR (c * R) + Real.log A)) atTop (𝓝 0)
- · filter_upwards [this.eventually (ge_mem_nhds hC₀), hA] with R hR Hle w hre him
+ suffices
+ Tendsto (fun R => expR (δ * expR (d * R) + B * expR (c * R) + Real.log A)) atTop (𝓝 0) by
+ filter_upwards [this.eventually (ge_mem_nhds hC₀), hA] with R hR Hle w hre him
calc
‖g ε w • f w‖ ≤ expR (δ * expR (d * R) + B * expR (c * R) + Real.log A) := ?_
_ ≤ C := hR
@@ -188,8 +188,8 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
gcongr
exacts [hδ <| Ioo_subset_Icc_self him, Hle _ hre him]
refine' Real.tendsto_exp_atBot.comp _
- suffices H : Tendsto (fun R => δ + B * (expR ((d - c) * R))⁻¹) atTop (𝓝 (δ + B * 0))
- · rw [mul_zero, add_zero] at H
+ suffices H : Tendsto (fun R => δ + B * (expR ((d - c) * R))⁻¹) atTop (𝓝 (δ + B * 0)) by
+ rw [mul_zero, add_zero] at H
refine' Tendsto.atBot_add _ tendsto_const_nhds
simpa only [id, (· ∘ ·), add_mul, mul_assoc, ← div_eq_inv_mul, ← Real.exp_sub, ← sub_mul,
sub_sub_cancel]
@@ -205,8 +205,8 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
have hgd : Differentiable ℂ (g ε) :=
((((differentiable_id.sub_const _).const_mul _).cexp.add
((differentiable_id.sub_const _).const_mul _).neg.cexp).const_mul _).cexp
- replace hd : DiffContOnCl ℂ (fun w => g ε w • f w) (Ioo (-R) R ×ℂ Ioo (a - b) (a + b))
- exact (hgd.diffContOnCl.smul hfd).mono (inter_subset_right _ _)
+ replace hd : DiffContOnCl ℂ (fun w => g ε w • f w) (Ioo (-R) R ×ℂ Ioo (a - b) (a + b)) :=
+ (hgd.diffContOnCl.smul hfd).mono (inter_subset_right _ _)
convert norm_le_of_forall_mem_frontier_norm_le ((isBounded_Ioo _ _).reProdIm (isBounded_Ioo _ _))
hd (fun w hw => _) _
· rw [frontier_reProdIm, closure_Ioo (neg_lt_self hR₀).ne, frontier_Ioo hab, closure_Ioo hab.ne,
@@ -214,7 +214,7 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
by_cases him : w.im = a - b ∨ w.im = a + b
· rw [norm_smul, ← one_mul C]
exact mul_le_mul (hg₁ _ him) (him.by_cases (hle_a _) (hle_b _)) (norm_nonneg _) zero_le_one
- · replace hw : w ∈ {-R, R} ×ℂ Icc (a - b) (a + b); exact hw.resolve_left fun h => him h.2
+ · replace hw : w ∈ {-R, R} ×ℂ Icc (a - b) (a + b) := hw.resolve_left fun h ↦ him h.2
have hw' := eq_endpoints_or_mem_Ioo_of_mem_Icc hw.2; rw [← or_assoc] at hw'
exact hR _ ((abs_eq hR₀.le).2 hw.1.symm) (hw'.resolve_left him)
· rw [closure_reProdIm, closure_Ioo hab.ne, closure_Ioo (neg_lt_self hR₀).ne]
@@ -717,8 +717,8 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f {z | 0
·-- If `‖f x₀‖ ≤ C`, then `hle` implies the required estimate
simpa only [max_eq_left h] using hle _ hmax
· -- Otherwise, `‖f z‖ ≤ ‖f x₀‖` for all `z` in the right half-plane due to `hle`.
- replace hmax : IsMaxOn (norm ∘ f) {z | 0 < z.re} x₀
- · rintro z (hz : 0 < z.re)
+ replace hmax : IsMaxOn (norm ∘ f) {z | 0 < z.re} x₀ := by
+ rintro z (hz : 0 < z.re)
simpa [max_eq_right h.le] using hle _ hmax _ hz.le
-- Due to the maximum modulus principle applied to the closed ball of radius `x₀.re`,
-- `‖f 0‖ = ‖f x₀‖`.
@@ -763,8 +763,8 @@ theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f {z | 0 < z.
simp
filter_upwards [self_mem_nhdsWithin] with ε ε₀; change ε < 0 at ε₀
set g : ℂ → E := fun z => exp (ε * z) • f z; change ‖g z‖ ≤ C
- replace hd : DiffContOnCl ℂ g {z : ℂ | 0 < z.re}
- exact (differentiable_id.const_mul _).cexp.diffContOnCl.smul hd
+ replace hd : DiffContOnCl ℂ g {z : ℂ | 0 < z.re} :=
+ (differentiable_id.const_mul _).cexp.diffContOnCl.smul hd
have hgn : ∀ z, ‖g z‖ = expR (ε * z.re) * ‖f z‖ := fun z ↦ by
rw [norm_smul, norm_eq_abs, abs_exp, re_ofReal_mul]
refine' right_half_plane_of_tendsto_zero_on_real hd _ _ (fun y => _) hz
@@ -809,8 +809,8 @@ theorem eq_zero_on_right_half_plane_of_superexponential_decay (hd : DiffContOnCl
simp only [norm_smul, norm_eq_abs, Complex.abs_pow, abs_exp]
intro z hz
-- Since `e^{nz} → ∞` as `n → ∞`, it suffices to show that each `g_n` is bounded from above by `C`
- suffices H : ∀ n : ℕ, ‖g n z‖ ≤ C
- · contrapose! H
+ suffices H : ∀ n : ℕ, ‖g n z‖ ≤ C by
+ contrapose! H
simp only [hg]
exact (((tendsto_pow_atTop_atTop_of_one_lt (Real.one_lt_exp_iff.2 hz)).atTop_mul
(norm_pos_iff.2 H) tendsto_const_nhds).eventually (eventually_gt_atTop C)).exists
@@ -710,7 +710,7 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f {z | 0
have hlt : ‖(0 : E)‖ < ‖f x₀‖ := by rwa [norm_zero, norm_pos_iff]
suffices ∀ᶠ x : ℝ in cocompact ℝ ⊓ 𝓟 (Ici 0), ‖f x‖ ≤ ‖f x₀‖ by
simpa only [exists_prop] using hfc.norm.exists_forall_ge' isClosed_Ici hx₀ this
- rw [Real.cocompact_eq, inf_sup_right, (disjoint_atBot_principal_Ici (0 : ℝ)).eq_bot,
+ rw [cocompact_eq_atBot_atTop, inf_sup_right, (disjoint_atBot_principal_Ici (0 : ℝ)).eq_bot,
bot_sup_eq]
exact (hre.norm.eventually <| ge_mem_nhds hlt).filter_mono inf_le_left
rcases le_or_lt ‖f x₀‖ C with h | h
abs
(#9553)
The current design for abs
is flawed:
Abs
notation typeclass has exactly two instances: one for [Neg α] [Sup α]
, one for [Inv α] [Sup α]
. This means that:
Abs.abs
Abs
instances!Algebra.Order.Group.Abs
are about the additive version.Algebra.Order.Group.PosPart
, and they get additivised to duplicates of the lemmas in Algebra.Order.Group.Abs
!This PR changes the notation typeclass with two new definitions (related through to_additive
): mabs
and abs
. abs
inherits the |a|
notation and mabs
gets |a|ₘ
instead.
The first half of Algebra.Order.Group.Abs
gets multiplicativised. A later PR will multiplicativise the second half, and another one will deduplicate the lemmas in Algebra.Order.Group.PosPart
.
Part of #9411.
Co-authored-by: Jeremy Tan Jie Rui <reddeloostw@gmail.com>
@@ -113,8 +113,8 @@ Then `‖f z‖` is bounded by the same constant on the closed strip
only for sufficiently large values of `|re z|`.
-/
theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
- (hB : ∃ c < π / (b - a), ∃ B,
- f =O[comap (Abs.abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)] fun z ↦ expR (B * expR (c * |z.re|)))
+ (hB : ∃ c < π / (b - a), ∃ B, f =O[comap (_root_.abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)]
+ fun z ↦ expR (B * expR (c * |z.re|)))
(hle_a : ∀ z : ℂ, im z = a → ‖f z‖ ≤ C) (hle_b : ∀ z, im z = b → ‖f z‖ ≤ C) (hza : a ≤ im z)
(hzb : im z ≤ b) : ‖f z‖ ≤ C := by
-- If `im z = a` or `im z = b`, then we apply `hle_a` or `hle_b`, otherwise `im z ∈ Ioo a b`.
@@ -231,8 +231,8 @@ Let `f : ℂ → E` be a function such that
Then `f` is equal to zero on the closed strip `{z : ℂ | a ≤ im z ≤ b}`.
-/
theorem eq_zero_on_horizontal_strip (hd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
- (hB : ∃ c < π / (b - a), ∃ B,
- f =O[comap (Abs.abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)] fun z ↦ expR (B * expR (c * |z.re|)))
+ (hB : ∃ c < π / (b - a), ∃ B, f =O[comap (_root_.abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)]
+ fun z ↦ expR (B * expR (c * |z.re|)))
(ha : ∀ z : ℂ, z.im = a → f z = 0) (hb : ∀ z : ℂ, z.im = b → f z = 0) :
EqOn f 0 (im ⁻¹' Icc a b) := fun _z hz =>
norm_le_zero_iff.1 <| horizontal_strip hd hB (fun z hz => (ha z hz).symm ▸ norm_zero.le)
@@ -250,11 +250,11 @@ Let `f g : ℂ → E` be functions such that
Then `f` is equal to `g` on the closed strip `{z : ℂ | a ≤ im z ≤ b}`.
-/
theorem eqOn_horizontal_strip {g : ℂ → E} (hdf : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
- (hBf : ∃ c < π / (b - a), ∃ B,
- f =O[comap (Abs.abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)] fun z ↦ expR (B * expR (c * |z.re|)))
+ (hBf : ∃ c < π / (b - a), ∃ B, f =O[comap (_root_.abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)]
+ fun z ↦ expR (B * expR (c * |z.re|)))
(hdg : DiffContOnCl ℂ g (im ⁻¹' Ioo a b))
- (hBg : ∃ c < π / (b - a), ∃ B,
- g =O[comap (Abs.abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)] fun z ↦ expR (B * expR (c * |z.re|)))
+ (hBg : ∃ c < π / (b - a), ∃ B, g =O[comap (_root_.abs ∘ re) atTop ⊓ 𝓟 (im ⁻¹' Ioo a b)]
+ fun z ↦ expR (B * expR (c * |z.re|)))
(ha : ∀ z : ℂ, z.im = a → f z = g z) (hb : ∀ z : ℂ, z.im = b → f z = g z) :
EqOn f g (im ⁻¹' Icc a b) := fun _z hz =>
sub_eq_zero.1 (eq_zero_on_horizontal_strip (hdf.sub hdg) (isBigO_sub_exp_exp hBf hBg)
@@ -277,8 +277,8 @@ Then `‖f z‖` is bounded by the same constant on the closed strip
only for sufficiently large values of `|im z|`.
-/
theorem vertical_strip (hfd : DiffContOnCl ℂ f (re ⁻¹' Ioo a b))
- (hB : ∃ c < π / (b - a), ∃ B,
- f =O[comap (Abs.abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)] fun z ↦ expR (B * expR (c * |z.im|)))
+ (hB : ∃ c < π / (b - a), ∃ B, f =O[comap (_root_.abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)]
+ fun z ↦ expR (B * expR (c * |z.im|)))
(hle_a : ∀ z : ℂ, re z = a → ‖f z‖ ≤ C) (hle_b : ∀ z, re z = b → ‖f z‖ ≤ C) (hza : a ≤ re z)
(hzb : re z ≤ b) : ‖f z‖ ≤ C := by
suffices ‖f (z * I * -I)‖ ≤ C by simpa [mul_assoc] using this
@@ -306,8 +306,8 @@ Let `f : ℂ → E` be a function such that
Then `f` is equal to zero on the closed strip `{z : ℂ | a ≤ re z ≤ b}`.
-/
theorem eq_zero_on_vertical_strip (hd : DiffContOnCl ℂ f (re ⁻¹' Ioo a b))
- (hB : ∃ c < π / (b - a), ∃ B,
- f =O[comap (Abs.abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)] fun z ↦ expR (B * expR (c * |z.im|)))
+ (hB : ∃ c < π / (b - a), ∃ B, f =O[comap (_root_.abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)]
+ fun z ↦ expR (B * expR (c * |z.im|)))
(ha : ∀ z : ℂ, re z = a → f z = 0) (hb : ∀ z : ℂ, re z = b → f z = 0) :
EqOn f 0 (re ⁻¹' Icc a b) := fun _z hz =>
norm_le_zero_iff.1 <| vertical_strip hd hB (fun z hz => (ha z hz).symm ▸ norm_zero.le)
@@ -325,11 +325,11 @@ Let `f g : ℂ → E` be functions such that
Then `f` is equal to `g` on the closed strip `{z : ℂ | a ≤ re z ≤ b}`.
-/
theorem eqOn_vertical_strip {g : ℂ → E} (hdf : DiffContOnCl ℂ f (re ⁻¹' Ioo a b))
- (hBf : ∃ c < π / (b - a), ∃ B,
- f =O[comap (Abs.abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)] fun z ↦ expR (B * expR (c * |z.im|)))
+ (hBf : ∃ c < π / (b - a), ∃ B, f =O[comap (_root_.abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)]
+ fun z ↦ expR (B * expR (c * |z.im|)))
(hdg : DiffContOnCl ℂ g (re ⁻¹' Ioo a b))
- (hBg : ∃ c < π / (b - a), ∃ B,
- g =O[comap (Abs.abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)] fun z ↦ expR (B * expR (c * |z.im|)))
+ (hBg : ∃ c < π / (b - a), ∃ B, g =O[comap (_root_.abs ∘ im) atTop ⊓ 𝓟 (re ⁻¹' Ioo a b)]
+ fun z ↦ expR (B * expR (c * |z.im|)))
(ha : ∀ z : ℂ, re z = a → f z = g z) (hb : ∀ z : ℂ, re z = b → f z = g z) :
EqOn f g (re ⁻¹' Icc a b) := fun _z hz =>
sub_eq_zero.1 (eq_zero_on_vertical_strip (hdf.sub hdg) (isBigO_sub_exp_exp hBf hBg)
Complex
lemmas (#9527)
and rename ofReal_mul_re → re_mul_ofReal
, ofReal_mul_im → im_mul_ofReal
.
From LeanAPAP
@@ -160,9 +160,9 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
fun w hw => _⟩
replace hw : |im (aff w)| ≤ d * b
· rw [← Real.closedBall_eq_Icc] at hw
- rwa [ofReal_mul_im, sub_im, mul_I_im, ofReal_re, _root_.abs_mul, abs_of_pos hd₀,
+ rwa [im_ofReal_mul, sub_im, mul_I_im, ofReal_re, _root_.abs_mul, abs_of_pos hd₀,
mul_le_mul_left hd₀]
- simpa only [ofReal_mul_re, _root_.abs_mul, abs_of_pos hd₀, sub_re, mul_I_re, ofReal_im,
+ simpa only [re_ofReal_mul, _root_.abs_mul, abs_of_pos hd₀, sub_re, mul_I_re, ofReal_im,
zero_mul, neg_zero, sub_zero] using
abs_exp_mul_exp_add_exp_neg_le_of_abs_im_le ε₀.le hw hb'.le
-- `abs (g ε w) ≤ 1` on the lines `w.im = a ± b` (actually, it holds everywhere in the strip)
@@ -766,7 +766,7 @@ theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f {z | 0 < z.
replace hd : DiffContOnCl ℂ g {z : ℂ | 0 < z.re}
exact (differentiable_id.const_mul _).cexp.diffContOnCl.smul hd
have hgn : ∀ z, ‖g z‖ = expR (ε * z.re) * ‖f z‖ := fun z ↦ by
- rw [norm_smul, norm_eq_abs, abs_exp, ofReal_mul_re]
+ rw [norm_smul, norm_eq_abs, abs_exp, re_ofReal_mul]
refine' right_half_plane_of_tendsto_zero_on_real hd _ _ (fun y => _) hz
· rcases hexp with ⟨c, hc, B, hO⟩
refine ⟨c, hc, B, (IsBigO.of_bound 1 ?_).trans hO⟩
@@ -778,7 +778,7 @@ theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f {z | 0 < z.
have h₀ : Tendsto (fun x : ℝ => expR (ε * x)) atTop (𝓝 0) :=
Real.tendsto_exp_atBot.comp (tendsto_const_nhds.neg_mul_atTop ε₀ tendsto_id)
exact h₀.zero_smul_isBoundedUnder_le hre
- · rw [hgn, ofReal_mul_re, I_re, mul_zero, mul_zero, Real.exp_zero,
+ · rw [hgn, re_ofReal_mul, I_re, mul_zero, mul_zero, Real.exp_zero,
one_mul]
exact him y
#align phragmen_lindelof.right_half_plane_of_bounded_on_real PhragmenLindelof.right_half_plane_of_bounded_on_real
@@ -832,7 +832,7 @@ theorem eq_zero_on_right_half_plane_of_superexponential_decay (hd : DiffContOnCl
exacts [le_max_left _ _, hz, le_max_left _ _]
· rw [tendsto_zero_iff_norm_tendsto_zero]; simp only [hg]
exact hre n
- · rw [hg, ofReal_mul_re, I_re, mul_zero, Real.exp_zero, one_pow, one_mul]
+ · rw [hg, re_ofReal_mul, I_re, mul_zero, Real.exp_zero, one_pow, one_mul]
exact hC y
#align phragmen_lindelof.eq_zero_on_right_half_plane_of_superexponential_decay PhragmenLindelof.eq_zero_on_right_half_plane_of_superexponential_decay
@@ -386,17 +386,16 @@ nonrec theorem quadrant_I (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
have hc : ContinuousWithinAt f (Ioi 0 ×ℂ Ioi 0) 0 := by
refine' (hd.continuousOn _ _).mono subset_closure
simp [closure_reProdIm, mem_reProdIm]
- refine'
- ((hc.tendsto.comp <| tendsto_exp_comap_re_atBot.inf H.tendsto).isBigO_one ℝ).trans
- (isBigO_of_le _ fun w => _)
+ refine ((hc.tendsto.comp <| tendsto_exp_comap_re_atBot.inf H.tendsto).isBigO_one ℝ).trans
+ (isBigO_of_le _ fun w => ?_)
rw [norm_one, Real.norm_of_nonneg (Real.exp_pos _).le, Real.one_le_exp_iff]
- exact mul_nonneg (le_max_right _ _) (Real.exp_pos _).le
+ positivity
· -- For the estimate as `ζ.re → ∞`, we reuse the upper estimate on `f`
simp only [eventually_inf_principal, eventually_comap, comp_apply, one_mul,
Real.norm_of_nonneg (Real.exp_pos _).le, abs_exp, ← Real.exp_mul, Real.exp_le_exp]
refine' (eventually_ge_atTop 0).mono fun x hx z hz _ => _
rw [hz, _root_.abs_of_nonneg hx, mul_comm _ c]
- exact mul_le_mul_of_nonneg_right (le_max_left _ _) (Real.exp_pos _).le
+ gcongr; apply le_max_left
· -- If `ζ.im = 0`, then `Complex.exp ζ` is a positive real number
intro ζ hζ; lift ζ to ℝ using hζ
rw [comp_apply, ← ofReal_exp]
cases'
(#9171)
I literally went through and regex'd some uses of cases'
, replacing them with rcases
; this is meant to be a low effort PR as I hope that tools can do this in the future.
rcases
is an easier replacement than cases
, though with better tools we could in future do a second pass converting simple rcases
added here (and existing ones) to cases
.
@@ -689,7 +689,7 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f {z | 0
have hle : ∀ C', (∀ x : ℝ, 0 ≤ x → ‖f x‖ ≤ C') →
∀ z : ℂ, 0 ≤ z.re → ‖f z‖ ≤ max C C' := fun C' hC' z hz ↦ by
rcases hexp with ⟨c, hc, B, hO⟩
- cases' le_total z.im 0 with h h
+ rcases le_total z.im 0 with h | h
· refine quadrant_IV (hd.mono fun _ => And.left) ⟨c, hc, B, ?_⟩
(fun x hx => (hC' x hx).trans <| le_max_right _ _)
(fun x _ => (him x).trans (le_max_left _ _)) hz h
@@ -714,7 +714,7 @@ theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f {z | 0
rw [Real.cocompact_eq, inf_sup_right, (disjoint_atBot_principal_Ici (0 : ℝ)).eq_bot,
bot_sup_eq]
exact (hre.norm.eventually <| ge_mem_nhds hlt).filter_mono inf_le_left
- cases' le_or_lt ‖f x₀‖ C with h h
+ rcases le_or_lt ‖f x₀‖ C with h | h
·-- If `‖f x₀‖ ≤ C`, then `hle` implies the required estimate
simpa only [max_eq_left h] using hle _ hmax
· -- Otherwise, `‖f z‖ ≤ ‖f x₀‖` for all `z` in the right half-plane due to `hle`.
@@ -44,7 +44,7 @@ useful for Ilyashenko's proof of the individual finiteness theorem (a polynomial
real plane has only finitely many limit cycles).
-/
-open Set Function Filter Asymptotics Metric Complex
+open Set Function Filter Asymptotics Metric Complex Bornology
open scoped Topology Filter Real
local notation "expR" => Real.exp
@@ -66,10 +66,7 @@ theorem isBigO_sub_exp_exp {a : ℝ} {f g : ℂ → E} {l : Filter ℂ} {u : ℂ
∃ c < a, ∃ B, (f - g) =O[l] fun z => expR (B * expR (c * |u z|)) := by
have : ∀ {c₁ c₂ B₁ B₂}, c₁ ≤ c₂ → 0 ≤ B₂ → B₁ ≤ B₂ → ∀ z,
‖expR (B₁ * expR (c₁ * |u z|))‖ ≤ ‖expR (B₂ * expR (c₂ * |u z|))‖ := fun hc hB₀ hB z ↦ by
- rw [Real.norm_eq_abs, Real.norm_eq_abs, Real.abs_exp, Real.abs_exp, Real.exp_le_exp]
- exact
- mul_le_mul hB (Real.exp_le_exp.2 <| mul_le_mul_of_nonneg_right hc <| abs_nonneg _)
- (Real.exp_pos _).le hB₀
+ simp only [Real.norm_eq_abs, Real.abs_exp]; gcongr
rcases hBf with ⟨cf, hcf, Bf, hOf⟩; rcases hBg with ⟨cg, hcg, Bg, hOg⟩
refine' ⟨max cf cg, max_lt hcf hcg, max 0 (max Bf Bg), _⟩
refine' (hOf.trans_le <| this _ _ _).sub (hOg.trans_le <| this _ _ _)
@@ -81,18 +78,15 @@ set_option linter.uppercaseLean3 false in
/-- An auxiliary lemma that combines two “exponential of a power” estimates into a similar estimate
on the difference of the functions. -/
theorem isBigO_sub_exp_rpow {a : ℝ} {f g : ℂ → E} {l : Filter ℂ}
- (hBf : ∃ c < a, ∃ B, f =O[comap Complex.abs atTop ⊓ l] fun z => expR (B * abs z ^ c))
- (hBg : ∃ c < a, ∃ B, g =O[comap Complex.abs atTop ⊓ l] fun z => expR (B * abs z ^ c)) :
- ∃ c < a, ∃ B, (f - g) =O[comap Complex.abs atTop ⊓ l] fun z => expR (B * abs z ^ c) := by
+ (hBf : ∃ c < a, ∃ B, f =O[cobounded ℂ ⊓ l] fun z => expR (B * abs z ^ c))
+ (hBg : ∃ c < a, ∃ B, g =O[cobounded ℂ ⊓ l] fun z => expR (B * abs z ^ c)) :
+ ∃ c < a, ∃ B, (f - g) =O[cobounded ℂ ⊓ l] fun z => expR (B * abs z ^ c) := by
have : ∀ {c₁ c₂ B₁ B₂ : ℝ}, c₁ ≤ c₂ → 0 ≤ B₂ → B₁ ≤ B₂ →
- (fun z : ℂ => expR (B₁ * abs z ^ c₁)) =O[comap Complex.abs atTop ⊓ l]
+ (fun z : ℂ => expR (B₁ * abs z ^ c₁)) =O[cobounded ℂ ⊓ l]
fun z => expR (B₂ * abs z ^ c₂) := fun hc hB₀ hB ↦ .of_bound 1 <| by
- have : ∀ᶠ z : ℂ in comap Complex.abs atTop ⊓ l, 1 ≤ abs z :=
- ((eventually_ge_atTop 1).comap _).filter_mono inf_le_left
- refine this.mono fun z hz => ?_
- rw [one_mul, Real.norm_eq_abs, Real.norm_eq_abs, Real.abs_exp, Real.abs_exp, Real.exp_le_exp]
- exact mul_le_mul hB (Real.rpow_le_rpow_of_exponent_le hz hc)
- (Real.rpow_nonneg_of_nonneg (Complex.abs.nonneg _) _) hB₀
+ filter_upwards [(eventually_cobounded_le_norm 1).filter_mono inf_le_left] with z hz
+ simp only [one_mul, Real.norm_eq_abs, Real.abs_exp]
+ gcongr; assumption
rcases hBf with ⟨cf, hcf, Bf, hOf⟩; rcases hBg with ⟨cg, hcg, Bg, hOg⟩
refine' ⟨max cf cg, max_lt hcf hcg, max 0 (max Bf Bg), _⟩
refine' (hOf.trans <| this _ _ _).sub (hOg.trans <| this _ _ _)
@@ -191,8 +185,8 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
‖g ε w • f w‖ ≤ expR (δ * expR (d * R) + B * expR (c * R) + Real.log A) := ?_
_ ≤ C := hR
rw [norm_smul, Real.exp_add, ← hre, Real.exp_add, Real.exp_log hA₀, mul_assoc, mul_comm _ A]
- exact mul_le_mul (hδ <| Ioo_subset_Icc_self him) (Hle _ hre him) (norm_nonneg _)
- (Real.exp_pos _).le
+ gcongr
+ exacts [hδ <| Ioo_subset_Icc_self him, Hle _ hre him]
refine' Real.tendsto_exp_atBot.comp _
suffices H : Tendsto (fun R => δ + B * (expR ((d - c) * R))⁻¹) atTop (𝓝 (δ + B * 0))
· rw [mul_zero, add_zero] at H
@@ -356,7 +350,7 @@ theorem eqOn_vertical_strip {g : ℂ → E} (hdf : DiffContOnCl ℂ f (re ⁻¹'
Then `‖f z‖` is bounded from above by the same constant on the closed first quadrant. -/
nonrec theorem quadrant_I (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(hB : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → ‖f x‖ ≤ C) (him : ∀ x : ℝ, 0 ≤ x → ‖f (x * I)‖ ≤ C) (hz_re : 0 ≤ z.re)
(hz_im : 0 ≤ z.im) : ‖f z‖ ≤ C := by
-- The case `z = 0` is trivial.
@@ -426,7 +420,7 @@ set_option linter.uppercaseLean3 false in
Then `f` is equal to zero on the closed first quadrant. -/
theorem eq_zero_on_quadrant_I (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(hB : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → f x = 0) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = 0) :
EqOn f 0 {z | 0 ≤ z.re ∧ 0 ≤ z.im} := fun _z hz =>
norm_le_zero_iff.1 <|
@@ -445,10 +439,10 @@ set_option linter.uppercaseLean3 false in
Then `f` is equal to `g` on the closed first quadrant. -/
theorem eqOn_quadrant_I (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(hBf : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hdg : DiffContOnCl ℂ g (Ioi 0 ×ℂ Ioi 0))
(hBg : ∃ c < (2 : ℝ), ∃ B,
- g =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
+ g =O[cobounded ℂ ⊓ 𝓟 (Ioi 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → f x = g x) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = g (x * I)) :
EqOn f g {z | 0 ≤ z.re ∧ 0 ≤ z.im} := fun _z hz =>
sub_eq_zero.1 <|
@@ -467,7 +461,7 @@ set_option linter.uppercaseLean3 false in
Then `‖f z‖` is bounded from above by the same constant on the closed second quadrant. -/
theorem quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
(hB : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → ‖f x‖ ≤ C) (him : ∀ x : ℝ, 0 ≤ x → ‖f (x * I)‖ ≤ C) (hz_re : z.re ≤ 0)
(hz_im : 0 ≤ z.im) : ‖f z‖ ≤ C := by
obtain ⟨z, rfl⟩ : ∃ z', z' * I = z; exact ⟨z / I, div_mul_cancel _ I_ne_zero⟩
@@ -495,7 +489,7 @@ set_option linter.uppercaseLean3 false in
Then `f` is equal to zero on the closed second quadrant. -/
theorem eq_zero_on_quadrant_II (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
(hB : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → f x = 0) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = 0) :
EqOn f 0 {z | z.re ≤ 0 ∧ 0 ≤ z.im} := fun _z hz =>
norm_le_zero_iff.1 <|
@@ -514,10 +508,10 @@ set_option linter.uppercaseLean3 false in
Then `f` is equal to `g` on the closed second quadrant. -/
theorem eqOn_quadrant_II (hdf : DiffContOnCl ℂ f (Iio 0 ×ℂ Ioi 0))
(hBf : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hdg : DiffContOnCl ℂ g (Iio 0 ×ℂ Ioi 0))
(hBg : ∃ c < (2 : ℝ), ∃ B,
- g =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
+ g =O[cobounded ℂ ⊓ 𝓟 (Iio 0 ×ℂ Ioi 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → f x = g x) (him : ∀ x : ℝ, 0 ≤ x → f (x * I) = g (x * I)) :
EqOn f g {z | z.re ≤ 0 ∧ 0 ≤ z.im} := fun _z hz =>
sub_eq_zero.1 <| eq_zero_on_quadrant_II (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
@@ -535,7 +529,7 @@ set_option linter.uppercaseLean3 false in
Then `‖f z‖` is bounded from above by the same constant on the closed third quadrant. -/
theorem quadrant_III (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
(hB : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → ‖f x‖ ≤ C) (him : ∀ x : ℝ, x ≤ 0 → ‖f (x * I)‖ ≤ C) (hz_re : z.re ≤ 0)
(hz_im : z.im ≤ 0) : ‖f z‖ ≤ C := by
obtain ⟨z, rfl⟩ : ∃ z', -z' = z; exact ⟨-z, neg_neg z⟩
@@ -568,7 +562,7 @@ set_option linter.uppercaseLean3 false in
Then `f` is equal to zero on the closed third quadrant. -/
theorem eq_zero_on_quadrant_III (hd : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
(hB : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → f x = 0) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = 0) :
EqOn f 0 {z | z.re ≤ 0 ∧ z.im ≤ 0} := fun _z hz =>
norm_le_zero_iff.1 <| quadrant_III hd hB (fun x hx => norm_le_zero_iff.2 <| hre x hx)
@@ -586,10 +580,10 @@ set_option linter.uppercaseLean3 false in
Then `f` is equal to `g` on the closed third quadrant. -/
theorem eqOn_quadrant_III (hdf : DiffContOnCl ℂ f (Iio 0 ×ℂ Iio 0))
(hBf : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hdg : DiffContOnCl ℂ g (Iio 0 ×ℂ Iio 0))
(hBg : ∃ c < (2 : ℝ), ∃ B,
- g =O[comap Complex.abs atTop ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
+ g =O[cobounded ℂ ⊓ 𝓟 (Iio 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, x ≤ 0 → f x = g x) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = g (x * I)) :
EqOn f g {z | z.re ≤ 0 ∧ z.im ≤ 0} := fun _z hz =>
sub_eq_zero.1 <| eq_zero_on_quadrant_III (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
@@ -607,7 +601,7 @@ set_option linter.uppercaseLean3 false in
Then `‖f z‖` is bounded from above by the same constant on the closed fourth quadrant. -/
theorem quadrant_IV (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
(hB : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → ‖f x‖ ≤ C) (him : ∀ x : ℝ, x ≤ 0 → ‖f (x * I)‖ ≤ C) (hz_re : 0 ≤ z.re)
(hz_im : z.im ≤ 0) : ‖f z‖ ≤ C := by
obtain ⟨z, rfl⟩ : ∃ z', -z' = z := ⟨-z, neg_neg z⟩
@@ -638,7 +632,7 @@ set_option linter.uppercaseLean3 false in
Then `f` is equal to zero on the closed fourth quadrant. -/
theorem eq_zero_on_quadrant_IV (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
(hB : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → f x = 0) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = 0) :
EqOn f 0 {z | 0 ≤ z.re ∧ z.im ≤ 0} := fun _z hz =>
norm_le_zero_iff.1 <|
@@ -657,10 +651,10 @@ set_option linter.uppercaseLean3 false in
Then `f` is equal to `g` on the closed fourth quadrant. -/
theorem eqOn_quadrant_IV (hdf : DiffContOnCl ℂ f (Ioi 0 ×ℂ Iio 0))
(hBf : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hdg : DiffContOnCl ℂ g (Ioi 0 ×ℂ Iio 0))
(hBg : ∃ c < (2 : ℝ), ∃ B,
- g =O[comap Complex.abs atTop ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
+ g =O[cobounded ℂ ⊓ 𝓟 (Ioi 0 ×ℂ Iio 0)] fun z => expR (B * abs z ^ c))
(hre : ∀ x : ℝ, 0 ≤ x → f x = g x) (him : ∀ x : ℝ, x ≤ 0 → f (x * I) = g (x * I)) :
EqOn f g {z | 0 ≤ z.re ∧ z.im ≤ 0} := fun _z hz =>
sub_eq_zero.1 <| eq_zero_on_quadrant_IV (hdf.sub hdg) (isBigO_sub_exp_rpow hBf hBg)
@@ -685,7 +679,7 @@ Then `‖f z‖` is bounded from above by the same constant on the closed right
See also `PhragmenLindelof.right_half_plane_of_bounded_on_real` for a stronger version. -/
theorem right_half_plane_of_tendsto_zero_on_real (hd : DiffContOnCl ℂ f {z | 0 < z.re})
(hexp : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
(hre : Tendsto (fun x : ℝ => f x) atTop (𝓝 0)) (him : ∀ x : ℝ, ‖f (x * I)‖ ≤ C)
(hz : 0 ≤ z.re) : ‖f z‖ ≤ C := by
/- We are going to apply the Phragmen-Lindelöf principle in the first and fourth quadrants.
@@ -758,7 +752,7 @@ Then `‖f z‖` is bounded from above by `C` on the closed right half-plane.
See also `PhragmenLindelof.right_half_plane_of_tendsto_zero_on_real` for a weaker version. -/
theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f {z | 0 < z.re})
(hexp : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
(hre : IsBoundedUnder (· ≤ ·) atTop fun x : ℝ => ‖f x‖) (him : ∀ x : ℝ, ‖f (x * I)‖ ≤ C)
(hz : 0 ≤ z.re) : ‖f z‖ ≤ C := by
-- For each `ε < 0`, the function `fun z ↦ exp (ε * z) • f z` satisfies assumptions of
@@ -802,7 +796,7 @@ theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f {z | 0 < z.
Then `f` is equal to zero on the closed right half-plane. -/
theorem eq_zero_on_right_half_plane_of_superexponential_decay (hd : DiffContOnCl ℂ f {z | 0 < z.re})
(hexp : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
(hre : SuperpolynomialDecay atTop expR fun x => ‖f x‖) (him : ∃ C, ∀ x : ℝ, ‖f (x * I)‖ ≤ C) :
EqOn f 0 {z : ℂ | 0 ≤ z.re} := by
rcases him with ⟨C, hC⟩
@@ -829,17 +823,14 @@ theorem eq_zero_on_right_half_plane_of_superexponential_decay (hd : DiffContOnCl
refine' ⟨max c 1, max_lt hc one_lt_two, n + max B 0, .of_norm_left _⟩
simp only [hg]
refine' ((isBigO_refl (fun z : ℂ => expR z.re ^ n) _).mul hO.norm_left).trans (.of_bound 1 _)
- simp only [← Real.exp_nat_mul, ← Real.exp_add, Real.norm_of_nonneg (Real.exp_pos _).le,
- Real.exp_le_exp, add_mul, eventually_inf_principal, eventually_comap, one_mul]
- -- porting note: todo: `0 < z.re` is not used; where do we use it?
- filter_upwards [eventually_ge_atTop (1 : ℝ)] with r hr z hzr _; subst r
- refine' add_le_add (mul_le_mul_of_nonneg_left _ n.cast_nonneg) _
+ filter_upwards [(eventually_cobounded_le_norm 1).filter_mono inf_le_left] with z hz
+ simp only [← Real.exp_nat_mul, ← Real.exp_add, Real.norm_eq_abs, Real.abs_exp, add_mul, one_mul]
+ gcongr
· calc
z.re ≤ abs z := re_le_abs _
_ = abs z ^ (1 : ℝ) := (Real.rpow_one _).symm
- _ ≤ abs z ^ max c 1 := Real.rpow_le_rpow_of_exponent_le hr (le_max_right _ _)
- · exact mul_le_mul (le_max_left _ _) (Real.rpow_le_rpow_of_exponent_le hr (le_max_left _ _))
- (Real.rpow_nonneg_of_nonneg (Complex.abs.nonneg _) _) (le_max_right _ _)
+ _ ≤ abs z ^ max c 1 := Real.rpow_le_rpow_of_exponent_le hz (le_max_right _ _)
+ exacts [le_max_left _ _, hz, le_max_left _ _]
· rw [tendsto_zero_iff_norm_tendsto_zero]; simp only [hg]
exact hre n
· rw [hg, ofReal_mul_re, I_re, mul_zero, Real.exp_zero, one_pow, one_mul]
@@ -860,27 +851,25 @@ Then `f` is equal to `g` on the closed right half-plane. -/
theorem eqOn_right_half_plane_of_superexponential_decay {g : ℂ → E}
(hfd : DiffContOnCl ℂ f {z | 0 < z.re}) (hgd : DiffContOnCl ℂ g {z | 0 < z.re})
(hfexp : ∃ c < (2 : ℝ), ∃ B,
- f =O[comap Complex.abs atTop ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
+ f =O[cobounded ℂ ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
(hgexp : ∃ c < (2 : ℝ), ∃ B,
- g =O[comap Complex.abs atTop ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
+ g =O[cobounded ℂ ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
(hre : SuperpolynomialDecay atTop expR fun x => ‖f x - g x‖)
(hfim : ∃ C, ∀ x : ℝ, ‖f (x * I)‖ ≤ C) (hgim : ∃ C, ∀ x : ℝ, ‖g (x * I)‖ ≤ C) :
EqOn f g {z : ℂ | 0 ≤ z.re} := by
suffices EqOn (f - g) 0 {z : ℂ | 0 ≤ z.re} by
simpa only [EqOn, Pi.sub_apply, Pi.zero_apply, sub_eq_zero] using this
refine' eq_zero_on_right_half_plane_of_superexponential_decay (hfd.sub hgd) _ hre _
- · set l : Filter ℂ := comap Complex.abs atTop ⊓ 𝓟 {z : ℂ | 0 < z.re}
+ · set l : Filter ℂ := cobounded ℂ ⊓ 𝓟 {z : ℂ | 0 < z.re}
suffices ∀ {c₁ c₂ B₁ B₂ : ℝ}, c₁ ≤ c₂ → B₁ ≤ B₂ → 0 ≤ B₂ →
(fun z => expR (B₁ * abs z ^ c₁)) =O[l] fun z => expR (B₂ * abs z ^ c₂) by
rcases hfexp with ⟨cf, hcf, Bf, hOf⟩; rcases hgexp with ⟨cg, hcg, Bg, hOg⟩
refine' ⟨max cf cg, max_lt hcf hcg, max 0 (max Bf Bg), _⟩
refine' .sub (hOf.trans <| this _ _ _) (hOg.trans <| this _ _ _) <;> simp
- intro c₁ c₂ B₁ B₂ hc hB hB₂
- have : ∀ᶠ z : ℂ in l, 1 ≤ abs z := ((eventually_ge_atTop 1).comap _).filter_mono inf_le_left
- refine' .of_bound 1 (this.mono fun z hz => _)
- simp only [Real.norm_of_nonneg (Real.exp_pos _).le, Real.exp_le_exp, one_mul]
- have := Real.rpow_le_rpow_of_exponent_le hz hc
- gcongr
+ refine fun hc hB hB₂ ↦ .of_bound 1 ?_
+ filter_upwards [(eventually_cobounded_le_norm 1).filter_mono inf_le_left] with z hz
+ simp only [Real.norm_eq_abs, Complex.norm_eq_abs, Real.abs_exp, one_mul] at hz ⊢
+ gcongr; assumption
· rcases hfim with ⟨Cf, hCf⟩; rcases hgim with ⟨Cg, hCg⟩
exact ⟨Cf + Cg, fun x => norm_sub_le_of_le (hCf x) (hCg x)⟩
#align phragmen_lindelof.eq_on_right_half_plane_of_superexponential_decay PhragmenLindelof.eqOn_right_half_plane_of_superexponential_decay
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -48,7 +48,6 @@ open Set Function Filter Asymptotics Metric Complex
open scoped Topology Filter Real
local notation "expR" => Real.exp
-local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue lean4#2220
namespace PhragmenLindelof
Metric.Bounded
(#7240)
Use Bornology.IsBounded
instead.
@@ -214,8 +214,8 @@ theorem horizontal_strip (hfd : DiffContOnCl ℂ f (im ⁻¹' Ioo a b))
((differentiable_id.sub_const _).const_mul _).neg.cexp).const_mul _).cexp
replace hd : DiffContOnCl ℂ (fun w => g ε w • f w) (Ioo (-R) R ×ℂ Ioo (a - b) (a + b))
exact (hgd.diffContOnCl.smul hfd).mono (inter_subset_right _ _)
- convert norm_le_of_forall_mem_frontier_norm_le ((bounded_Ioo _ _).reProdIm (bounded_Ioo _ _)) hd
- (fun w hw => _) _
+ convert norm_le_of_forall_mem_frontier_norm_le ((isBounded_Ioo _ _).reProdIm (isBounded_Ioo _ _))
+ hd (fun w hw => _) _
· rw [frontier_reProdIm, closure_Ioo (neg_lt_self hR₀).ne, frontier_Ioo hab, closure_Ioo hab.ne,
frontier_Ioo (neg_lt_self hR₀)] at hw
by_cases him : w.im = a - b ∨ w.im = a + b
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -57,7 +57,7 @@ namespace PhragmenLindelof
-/
-variable {E : Type _} [NormedAddCommGroup E]
+variable {E : Type*} [NormedAddCommGroup E]
/-- An auxiliary lemma that combines two double exponential estimates into a similar estimate
on the difference of the functions. -/
@@ -48,7 +48,7 @@ open Set Function Filter Asymptotics Metric Complex
open scoped Topology Filter Real
local notation "expR" => Real.exp
-local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See Lean 4 issue #2220
+local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue lean4#2220
namespace PhragmenLindelof
@@ -2,15 +2,12 @@
Copyright (c) 2022 Yury Kudryashov. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yury Kudryashov
-
-! This file was ported from Lean 3 source module analysis.complex.phragmen_lindelof
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.Complex.AbsMax
import Mathlib.Analysis.Asymptotics.SuperpolynomialDecay
+#align_import analysis.complex.phragmen_lindelof from "leanprover-community/mathlib"@"f2ce6086713c78a7f880485f7917ea547a215982"
+
/-!
# Phragmen-Lindelöf principle
@@ -890,4 +890,3 @@ theorem eqOn_right_half_plane_of_superexponential_decay {g : ℂ → E}
#align phragmen_lindelof.eq_on_right_half_plane_of_superexponential_decay PhragmenLindelof.eqOn_right_half_plane_of_superexponential_decay
end PhragmenLindelof
-
@@ -765,7 +765,7 @@ theorem right_half_plane_of_bounded_on_real (hd : DiffContOnCl ℂ f {z | 0 < z.
f =O[comap Complex.abs atTop ⊓ 𝓟 {z | 0 < z.re}] fun z => expR (B * abs z ^ c))
(hre : IsBoundedUnder (· ≤ ·) atTop fun x : ℝ => ‖f x‖) (him : ∀ x : ℝ, ‖f (x * I)‖ ≤ C)
(hz : 0 ≤ z.re) : ‖f z‖ ≤ C := by
- -- For each `ε < 0`, the function `λ z, exp (ε * z) • f z` satisfies assumptions of
+ -- For each `ε < 0`, the function `fun z ↦ exp (ε * z) • f z` satisfies assumptions of
-- `right_half_plane_of_tendsto_zero_on_real`, hence `‖exp (ε * z) • f z‖ ≤ C` for all `ε < 0`.
-- Taking the limit as `ε → 0`, we obtain the required inequality.
suffices ∀ᶠ ε : ℝ in 𝓝[<] 0, ‖exp (ε * z) • f z‖ ≤ C by
@@ -401,7 +401,7 @@ nonrec theorem quadrant_I (hd : DiffContOnCl ℂ f (Ioi 0 ×ℂ Ioi 0))
(isBigO_of_le _ fun w => _)
rw [norm_one, Real.norm_of_nonneg (Real.exp_pos _).le, Real.one_le_exp_iff]
exact mul_nonneg (le_max_right _ _) (Real.exp_pos _).le
- · -- For the estimate as `ζ.re → ∞`, we reuse the uppoer estimate on `f`
+ · -- For the estimate as `ζ.re → ∞`, we reuse the upper estimate on `f`
simp only [eventually_inf_principal, eventually_comap, comp_apply, one_mul,
Real.norm_of_nonneg (Real.exp_pos _).le, abs_exp, ← Real.exp_mul, Real.exp_le_exp]
refine' (eventually_ge_atTop 0).mono fun x hx z hz _ => _
The unported dependencies are
algebra.order.module
init.core
linear_algebra.free_module.finite.rank
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
linear_algebra.free_module.rank
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file