Theorem: PhragmenLindelof.isBigO_sub_exp_rpow
File: Mathlib/Analysis/Complex/PhragmenLindelof.lean

Proof steps:
state_before: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
hBf : ∃ c < a, ∃ B, f =O[cobounded ℂ ⊓ l] fun z => expR (B * Complex.abs z ^ c)
hBg : ∃ c < a, ∃ B, g =O[cobounded ℂ ⊓ l] fun z => expR (B * Complex.abs z ^ c)
⊢ ∃ c < a, ∃ B, (f - g) =O[cobounded ℂ ⊓ l] fun z => expR (B * Complex.abs z ^ c)
state_after: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
hBf : ∃ c < a, ∃ B, f =O[cobounded ℂ ⊓ l] fun z => expR (B * Complex.abs z ^ c)
hBg : ∃ c < a, ∃ B, g =O[cobounded ℂ ⊓ l] fun z => expR (B * Complex.abs z ^ c)
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
⊢ ∃ c < a, ∃ B, (f - g) =O[cobounded ℂ ⊓ l] fun z => expR (B * Complex.abs z ^ c)
tactic: have : ∀ {c₁ c₂ B₁ B₂ : ℝ}, c₁ ≤ c₂ → 0 ≤ B₂ → B₁ ≤ B₂ →
      (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
    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
state_before: E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
hBf : ∃ c < a, ∃ B, f =O[cobounded ℂ ⊓ l] fun z => expR (B * Complex.abs z ^ c)
hBg : ∃ c < a, ∃ B, g =O[cobounded ℂ ⊓ l] fun z => expR (B * Complex.abs z ^ c)
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
⊢ ∃ c < a, ∃ B, (f - g) =O[cobounded ℂ ⊓ l] fun z => expR (B * Complex.abs z ^ c)
state_after: case intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
hBg : ∃ c < a, ∃ B, g =O[cobounded ℂ ⊓ l] fun z => expR (B * Complex.abs z ^ c)
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
⊢ ∃ c < a, ∃ B, (f - g) =O[cobounded ℂ ⊓ l] fun z => expR (B * Complex.abs z ^ c)
tactic: rcases hBf with ⟨cf, hcf, Bf, hOf⟩
state_before: case intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
hBg : ∃ c < a, ∃ B, g =O[cobounded ℂ ⊓ l] fun z => expR (B * Complex.abs z ^ c)
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
⊢ ∃ c < a, ∃ B, (f - g) =O[cobounded ℂ ⊓ l] fun z => expR (B * Complex.abs z ^ c)
state_after: case intro.intro.intro.intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ ∃ c < a, ∃ B, (f - g) =O[cobounded ℂ ⊓ l] fun z => expR (B * Complex.abs z ^ c)
tactic: rcases hBg with ⟨cg, hcg, Bg, hOg⟩
state_before: case intro.intro.intro.intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ ∃ c < a, ∃ B, (f - g) =O[cobounded ℂ ⊓ l] fun z => expR (B * Complex.abs z ^ c)
state_after: case intro.intro.intro.intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ (f - g) =O[cobounded ℂ ⊓ l] fun z => expR (max 0 (max Bf Bg) * Complex.abs z ^ max cf cg)
tactic: refine ⟨max cf cg, max_lt hcf hcg, max 0 (max Bf Bg), ?_⟩
state_before: case intro.intro.intro.intro.intro.intro
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ (f - g) =O[cobounded ℂ ⊓ l] fun z => expR (max 0 (max Bf Bg) * Complex.abs z ^ max cf cg)
state_after: case intro.intro.intro.intro.intro.intro.refine_1
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ cf ≤ max cf cg

case intro.intro.intro.intro.intro.intro.refine_2
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ 0 ≤ max 0 (max Bf Bg)

case intro.intro.intro.intro.intro.intro.refine_3
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ Bf ≤ max 0 (max Bf Bg)

case intro.intro.intro.intro.intro.intro.refine_4
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ cg ≤ max cf cg

case intro.intro.intro.intro.intro.intro.refine_5
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ 0 ≤ max 0 (max Bf Bg)

case intro.intro.intro.intro.intro.intro.refine_6
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ Bg ≤ max 0 (max Bf Bg)
tactic: refine (hOf.trans <| this ?_ ?_ ?_).sub (hOg.trans <| this ?_ ?_ ?_)
state_before: case intro.intro.intro.intro.intro.intro.refine_1
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ cf ≤ max cf cg

case intro.intro.intro.intro.intro.intro.refine_2
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ 0 ≤ max 0 (max Bf Bg)

case intro.intro.intro.intro.intro.intro.refine_3
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ Bf ≤ max 0 (max Bf Bg)

case intro.intro.intro.intro.intro.intro.refine_4
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ cg ≤ max cf cg

case intro.intro.intro.intro.intro.intro.refine_5
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ 0 ≤ max 0 (max Bf Bg)

case intro.intro.intro.intro.intro.intro.refine_6
E : Type u_1
inst✝ : NormedAddCommGroup E
a : ℝ
f g : ℂ → E
l : Filter ℂ
this :
  ∀ {c₁ c₂ B₁ B₂ : ℝ},
    c₁ ≤ c₂ →
      0 ≤ B₂ →
        B₁ ≤ B₂ → (fun z => expR (B₁ * Complex.abs z ^ c₁)) =O[cobounded ℂ ⊓ l] fun z => expR (B₂ * Complex.abs z ^ c₂)
cf : ℝ
hcf : cf < a
Bf : ℝ
hOf : f =O[cobounded ℂ ⊓ l] fun z => expR (Bf * Complex.abs z ^ cf)
cg : ℝ
hcg : cg < a
Bg : ℝ
hOg : g =O[cobounded ℂ ⊓ l] fun z => expR (Bg * Complex.abs z ^ cg)
⊢ Bg ≤ max 0 (max Bf Bg)
state_after: no goals
tactic: 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 _ _)]