Theorem: Asymptotics.isBigO_const_iff
File: Mathlib/Analysis/Asymptotics/Asymptotics.lean

tactic: refine' ⟨fun h => ⟨fun hc => isBigO_zero_right_iff.1 (by rwa [← hc]), h.isBoundedUnder_le⟩, _⟩
state_before: α : Type u_1
β : Type ?u.310483
E : Type ?u.310486
F : Type ?u.310489
G : Type ?u.310492
E' : Type ?u.310495
F' : Type ?u.310498
G' : Type ?u.310501
E'' : Type u_2
F'' : Type u_3
G'' : Type ?u.310510
R : Type ?u.310513
R' : Type ?u.310516
𝕜 : Type ?u.310519
𝕜' : Type ?u.310522
inst✝¹² : Norm E
inst✝¹¹ : Norm F
inst✝¹⁰ : Norm G
inst✝⁹ : SeminormedAddCommGroup E'
inst✝⁸ : SeminormedAddCommGroup F'
inst✝⁷ : SeminormedAddCommGroup G'
inst✝⁶ : NormedAddCommGroup E''
inst✝⁵ : NormedAddCommGroup F''
inst✝⁴ : NormedAddCommGroup G''
inst✝³ : SeminormedRing R
inst✝² : SeminormedRing R'
inst✝¹ : NormedField 𝕜
inst✝ : NormedField 𝕜'
c✝ c' c₁ c₂ : ℝ
f : α → E
g : α → F
k : α → G
f' : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
k'' : α → G''
l l' : Filter α
c : F''
⊢ (f'' =O[l] fun _x => c) ↔ (c = 0 → f'' =ᶠ[l] 0) ∧ IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun x => ‖f'' x‖

tactic: rintro ⟨hcf, hf⟩
state_before: α : Type u_1
β : Type ?u.310483
E : Type ?u.310486
F : Type ?u.310489
G : Type ?u.310492
E' : Type ?u.310495
F' : Type ?u.310498
G' : Type ?u.310501
E'' : Type u_2
F'' : Type u_3
G'' : Type ?u.310510
R : Type ?u.310513
R' : Type ?u.310516
𝕜 : Type ?u.310519
𝕜' : Type ?u.310522
inst✝¹² : Norm E
inst✝¹¹ : Norm F
inst✝¹⁰ : Norm G
inst✝⁹ : SeminormedAddCommGroup E'
inst✝⁸ : SeminormedAddCommGroup F'
inst✝⁷ : SeminormedAddCommGroup G'
inst✝⁶ : NormedAddCommGroup E''
inst✝⁵ : NormedAddCommGroup F''
inst✝⁴ : NormedAddCommGroup G''
inst✝³ : SeminormedRing R
inst✝² : SeminormedRing R'
inst✝¹ : NormedField 𝕜
inst✝ : NormedField 𝕜'
c✝ c' c₁ c₂ : ℝ
f : α → E
g : α → F
k : α → G
f' : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
k'' : α → G''
l l' : Filter α
c : F''
⊢ ((c = 0 → f'' =ᶠ[l] 0) ∧ IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun x => ‖f'' x‖) → f'' =O[l] fun _x => c

tactic: rcases eq_or_ne c 0 with (hc | hc)
state_before: case intro
α : Type u_1
β : Type ?u.310483
E : Type ?u.310486
F : Type ?u.310489
G : Type ?u.310492
E' : Type ?u.310495
F' : Type ?u.310498
G' : Type ?u.310501
E'' : Type u_2
F'' : Type u_3
G'' : Type ?u.310510
R : Type ?u.310513
R' : Type ?u.310516
𝕜 : Type ?u.310519
𝕜' : Type ?u.310522
inst✝¹² : Norm E
inst✝¹¹ : Norm F
inst✝¹⁰ : Norm G
inst✝⁹ : SeminormedAddCommGroup E'
inst✝⁸ : SeminormedAddCommGroup F'
inst✝⁷ : SeminormedAddCommGroup G'
inst✝⁶ : NormedAddCommGroup E''
inst✝⁵ : NormedAddCommGroup F''
inst✝⁴ : NormedAddCommGroup G''
inst✝³ : SeminormedRing R
inst✝² : SeminormedRing R'
inst✝¹ : NormedField 𝕜
inst✝ : NormedField 𝕜'
c✝ c' c₁ c₂ : ℝ
f : α → E
g : α → F
k : α → G
f' : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
k'' : α → G''
l l' : Filter α
c : F''
hcf : c = 0 → f'' =ᶠ[l] 0
hf : IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun x => ‖f'' x‖
⊢ f'' =O[l] fun _x => c

tactic: exacts [(hcf hc).trans_isBigO (isBigO_zero _ _), hf.isBigO_const hc]
state_before: case intro.inl
α : Type u_1
β : Type ?u.310483
E : Type ?u.310486
F : Type ?u.310489
G : Type ?u.310492
E' : Type ?u.310495
F' : Type ?u.310498
G' : Type ?u.310501
E'' : Type u_2
F'' : Type u_3
G'' : Type ?u.310510
R : Type ?u.310513
R' : Type ?u.310516
𝕜 : Type ?u.310519
𝕜' : Type ?u.310522
inst✝¹² : Norm E
inst✝¹¹ : Norm F
inst✝¹⁰ : Norm G
inst✝⁹ : SeminormedAddCommGroup E'
inst✝⁸ : SeminormedAddCommGroup F'
inst✝⁷ : SeminormedAddCommGroup G'
inst✝⁶ : NormedAddCommGroup E''
inst✝⁵ : NormedAddCommGroup F''
inst✝⁴ : NormedAddCommGroup G''
inst✝³ : SeminormedRing R
inst✝² : SeminormedRing R'
inst✝¹ : NormedField 𝕜
inst✝ : NormedField 𝕜'
c✝ c' c₁ c₂ : ℝ
f : α → E
g : α → F
k : α → G
f' : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
k'' : α → G''
l l' : Filter α
c : F''
hcf : c = 0 → f'' =ᶠ[l] 0
hf : IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun x => ‖f'' x‖
hc : c = 0
⊢ f'' =O[l] fun _x => c

case intro.inr
α : Type u_1
β : Type ?u.310483
E : Type ?u.310486
F : Type ?u.310489
G : Type ?u.310492
E' : Type ?u.310495
F' : Type ?u.310498
G' : Type ?u.310501
E'' : Type u_2
F'' : Type u_3
G'' : Type ?u.310510
R : Type ?u.310513
R' : Type ?u.310516
𝕜 : Type ?u.310519
𝕜' : Type ?u.310522
inst✝¹² : Norm E
inst✝¹¹ : Norm F
inst✝¹⁰ : Norm G
inst✝⁹ : SeminormedAddCommGroup E'
inst✝⁸ : SeminormedAddCommGroup F'
inst✝⁷ : SeminormedAddCommGroup G'
inst✝⁶ : NormedAddCommGroup E''
inst✝⁵ : NormedAddCommGroup F''
inst✝⁴ : NormedAddCommGroup G''
inst✝³ : SeminormedRing R
inst✝² : SeminormedRing R'
inst✝¹ : NormedField 𝕜
inst✝ : NormedField 𝕜'
c✝ c' c₁ c₂ : ℝ
f : α → E
g : α → F
k : α → G
f' : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
k'' : α → G''
l l' : Filter α
c : F''
hcf : c = 0 → f'' =ᶠ[l] 0
hf : IsBoundedUnder (fun x x_1 => x ≤ x_1) l fun x => ‖f'' x‖
hc : c ≠ 0
⊢ f'' =O[l] fun _x => c

tactic: rwa [← hc]
state_before: α : Type u_1
β : Type ?u.310483
E : Type ?u.310486
F : Type ?u.310489
G : Type ?u.310492
E' : Type ?u.310495
F' : Type ?u.310498
G' : Type ?u.310501
E'' : Type u_2
F'' : Type u_3
G'' : Type ?u.310510
R : Type ?u.310513
R' : Type ?u.310516
𝕜 : Type ?u.310519
𝕜' : Type ?u.310522
inst✝¹² : Norm E
inst✝¹¹ : Norm F
inst✝¹⁰ : Norm G
inst✝⁹ : SeminormedAddCommGroup E'
inst✝⁸ : SeminormedAddCommGroup F'
inst✝⁷ : SeminormedAddCommGroup G'
inst✝⁶ : NormedAddCommGroup E''
inst✝⁵ : NormedAddCommGroup F''
inst✝⁴ : NormedAddCommGroup G''
inst✝³ : SeminormedRing R
inst✝² : SeminormedRing R'
inst✝¹ : NormedField 𝕜
inst✝ : NormedField 𝕜'
c✝ c' c₁ c₂ : ℝ
f : α → E
g : α → F
k : α → G
f' : α → E'
g' : α → F'
k' : α → G'
f'' : α → E''
g'' : α → F''
k'' : α → G''
l l' : Filter α
c : F''
h : f'' =O[l] fun _x => c
hc : c = 0
⊢ f'' =O[l] fun _x => 0