Theorem: Complex.IsExpCmpFilter.isLittleO_log_abs_re
File: Mathlib/Analysis/SpecialFunctions/CompareExp.lean

tactic: have h2 : 0 < √2 := by simp
state_before: l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
⊢ ‖Real.log (abs z)‖ ≤ 1 * ‖Real.log √2 + Real.log (max z.re |z.im|)‖
state_after: l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
⊢ ‖Real.log (abs z)‖ ≤ 1 * ‖Real.log √2 + Real.log (max z.re |z.im|)‖

tactic: have hz' : 1 ≤ abs z := hz.trans (re_le_abs z)
state_before: l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
⊢ ‖Real.log (abs z)‖ ≤ 1 * ‖Real.log √2 + Real.log (max z.re |z.im|)‖
state_after: l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
⊢ ‖Real.log (abs z)‖ ≤ 1 * ‖Real.log √2 + Real.log (max z.re |z.im|)‖

tactic: have hm₀ : 0 < max z.re |z.im| := lt_max_iff.2 (Or.inl <| one_pos.trans_le hz)
state_before: l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
⊢ ‖Real.log (abs z)‖ ≤ 1 * ‖Real.log √2 + Real.log (max z.re |z.im|)‖
state_after: l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ ‖Real.log (abs z)‖ ≤ 1 * ‖Real.log √2 + Real.log (max z.re |z.im|)‖

tactic: rw [one_mul, Real.norm_eq_abs, _root_.abs_of_nonneg (Real.log_nonneg hz')]
state_before: l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ ‖Real.log (abs z)‖ ≤ 1 * ‖Real.log √2 + Real.log (max z.re |z.im|)‖
state_after: l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ Real.log (abs z) ≤ ‖Real.log √2 + Real.log (max z.re |z.im|)‖

tactic: refine le_trans ?_ (le_abs_self _)
state_before: l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ Real.log (abs z) ≤ ‖Real.log √2 + Real.log (max z.re |z.im|)‖
state_after: l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ Real.log (abs z) ≤ Real.log √2 + Real.log (max z.re |z.im|)

tactic: rw [← Real.log_mul, Real.log_le_log_iff, ← _root_.abs_of_nonneg (le_trans zero_le_one hz)]
state_before: l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ Real.log (abs z) ≤ Real.log √2 + Real.log (max z.re |z.im|)
state_after: l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ abs z ≤ √2 * max |z.re| |z.im|

case h
l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ 0 < abs z

case h₁
l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ 0 < √2 * max z.re |z.im|

case hx
l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ √2 ≠ 0

case hy
l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ max z.re |z.im| ≠ 0

tactic: exacts [abs_le_sqrt_two_mul_max z, one_pos.trans_le hz', mul_pos h2 hm₀, h2.ne', hm₀.ne']
state_before: l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ abs z ≤ √2 * max |z.re| |z.im|

case h
l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ 0 < abs z

case h₁
l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ 0 < √2 * max z.re |z.im|

case hx
l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ √2 ≠ 0

case hy
l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
h2 : 0 < √2
hz' : 1 ≤ abs z
hm₀ : 0 < max z.re |z.im|
⊢ max z.re |z.im| ≠ 0
state_after: no goals

tactic: simp
state_before: l : Filter ℂ
hl : IsExpCmpFilter l
z : ℂ
hz : 1 ≤ z.re
⊢ 0 < √2
state_after: no goals

tactic: filter_upwards [isLittleO_iff_nat_mul_le'.1 hl.isLittleO_log_re_re n,
  hl.abs_im_pow_eventuallyLE_exp_re n,
  hl.tendsto_re.eventually_gt_atTop 1] with z hre him h₁
state_before: l : Filter ℂ
hl : IsExpCmpFilter l
n : ℕ
⊢ ∀ᶠ (x : ℂ) in l, ↑n * ‖Real.log (max x.re |x.im|)‖ ≤ ‖x.re‖
state_after: case h
l : Filter ℂ
hl : IsExpCmpFilter l
n : ℕ
z : ℂ
hre : ↑n * ‖Real.log z.re‖ ≤ ‖z.re‖
him : |z.im| ^ n ≤ Real.exp z.re
h₁ : 1 < z.re
⊢ ↑n * ‖Real.log (max z.re |z.im|)‖ ≤ ‖z.re‖

tactic: rcases le_total |z.im| z.re with hle | hle
state_before: case h
l : Filter ℂ
hl : IsExpCmpFilter l
n : ℕ
z : ℂ
hre : ↑n * ‖Real.log z.re‖ ≤ ‖z.re‖
him : |z.im| ^ n ≤ Real.exp z.re
h₁ : 1 < z.re
⊢ ↑n * ‖Real.log (max z.re |z.im|)‖ ≤ ‖z.re‖
state_after: case h.inl
l : Filter ℂ
hl : IsExpCmpFilter l
n : ℕ
z : ℂ
hre : ↑n * ‖Real.log z.re‖ ≤ ‖z.re‖
him : |z.im| ^ n ≤ Real.exp z.re
h₁ : 1 < z.re
hle : |z.im| ≤ z.re
⊢ ↑n * ‖Real.log (max z.re |z.im|)‖ ≤ ‖z.re‖

case h.inr
l : Filter ℂ
hl : IsExpCmpFilter l
n : ℕ
z : ℂ
hre : ↑n * ‖Real.log z.re‖ ≤ ‖z.re‖
him : |z.im| ^ n ≤ Real.exp z.re
h₁ : 1 < z.re
hle : z.re ≤ |z.im|
⊢ ↑n * ‖Real.log (max z.re |z.im|)‖ ≤ ‖z.re‖

tactic: rwa [max_eq_left hle]
state_before: case h.inl
l : Filter ℂ
hl : IsExpCmpFilter l
n : ℕ
z : ℂ
hre : ↑n * ‖Real.log z.re‖ ≤ ‖z.re‖
him : |z.im| ^ n ≤ Real.exp z.re
h₁ : 1 < z.re
hle : |z.im| ≤ z.re
⊢ ↑n * ‖Real.log (max z.re |z.im|)‖ ≤ ‖z.re‖
state_after: no goals

tactic: have H : 1 < |z.im| := h₁.trans_le hle
state_before: case h.inr
l : Filter ℂ
hl : IsExpCmpFilter l
n : ℕ
z : ℂ
hre : ↑n * ‖Real.log z.re‖ ≤ ‖z.re‖
him : |z.im| ^ n ≤ Real.exp z.re
h₁ : 1 < z.re
hle : z.re ≤ |z.im|
⊢ ↑n * ‖Real.log (max z.re |z.im|)‖ ≤ ‖z.re‖
state_after: case h.inr
l : Filter ℂ
hl : IsExpCmpFilter l
n : ℕ
z : ℂ
hre : ↑n * ‖Real.log z.re‖ ≤ ‖z.re‖
him : |z.im| ^ n ≤ Real.exp z.re
h₁ : 1 < z.re
hle : z.re ≤ |z.im|
H : 1 < |z.im|
⊢ ↑n * ‖Real.log (max z.re |z.im|)‖ ≤ ‖z.re‖

tactic: norm_cast at *
state_before: case h.inr
l : Filter ℂ
hl : IsExpCmpFilter l
n : ℕ
z : ℂ
hre : ↑n * ‖Real.log z.re‖ ≤ ‖z.re‖
him : |z.im| ^ n ≤ Real.exp z.re
h₁ : 1 < z.re
hle : z.re ≤ |z.im|
H : 1 < |z.im|
⊢ ↑n * ‖Real.log (max z.re |z.im|)‖ ≤ ‖z.re‖
state_after: case h.inr
l : Filter ℂ
hl : IsExpCmpFilter l
n : ℕ
z : ℂ
hre : ↑n * ‖Real.log z.re‖ ≤ ‖z.re‖
him : |z.im| ^ n ≤ Real.exp z.re
hle : z.re ≤ |z.im|
h₁ : 1 < z.re
H : 1 < |z.im|
⊢ ↑n * ‖Real.log (max z.re |z.im|)‖ ≤ ‖z.re‖

tactic: rwa [max_eq_right hle, Real.norm_eq_abs, Real.norm_eq_abs, abs_of_pos (Real.log_pos H),
  ← Real.log_pow, Real.log_le_iff_le_exp (pow_pos (one_pos.trans H) _),
  abs_of_pos (one_pos.trans h₁)]
state_before: case h.inr
l : Filter ℂ
hl : IsExpCmpFilter l
n : ℕ
z : ℂ
hre : ↑n * ‖Real.log z.re‖ ≤ ‖z.re‖
him : |z.im| ^ n ≤ Real.exp z.re
hle : z.re ≤ |z.im|
h₁ : 1 < z.re
H : 1 < |z.im|
⊢ ↑n * ‖Real.log (max z.re |z.im|)‖ ≤ ‖z.re‖
state_after: no goals