analysis.asymptotics.asymptotics
⟷
Mathlib.Analysis.Asymptotics.Asymptotics
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
@@ -182,10 +182,10 @@ alias ⟨is_o.bound, is_o.of_bound⟩ := is_o_iff
#align asymptotics.is_o.bound Asymptotics.IsLittleO.bound
#align asymptotics.is_o.of_bound Asymptotics.IsLittleO.of_bound
-#print Asymptotics.IsLittleO.definition /-
-theorem IsLittleO.definition (h : f =o[l] g) (hc : 0 < c) : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
+#print Asymptotics.IsLittleO.def /-
+theorem IsLittleO.def (h : f =o[l] g) (hc : 0 < c) : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
isLittleO_iff.1 h hc
-#align asymptotics.is_o.def Asymptotics.IsLittleO.definition
+#align asymptotics.is_o.def Asymptotics.IsLittleO.def
-/
#print Asymptotics.IsLittleO.def' /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -6,7 +6,7 @@ Authors: Jeremy Avigad, Yury Kudryashov
import Analysis.Normed.Group.InfiniteSum
import Analysis.NormedSpace.Basic
import Topology.Algebra.Order.LiminfLimsup
-import Topology.LocalHomeomorph
+import Topology.PartialHomeomorph
#align_import analysis.asymptotics.asymptotics from "leanprover-community/mathlib"@"9a48a083b390d9b84a71efbdc4e8dfa26a687104"
@@ -182,10 +182,10 @@ alias ⟨is_o.bound, is_o.of_bound⟩ := is_o_iff
#align asymptotics.is_o.bound Asymptotics.IsLittleO.bound
#align asymptotics.is_o.of_bound Asymptotics.IsLittleO.of_bound
-#print Asymptotics.IsLittleO.def /-
-theorem IsLittleO.def (h : f =o[l] g) (hc : 0 < c) : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
+#print Asymptotics.IsLittleO.definition /-
+theorem IsLittleO.definition (h : f =o[l] g) (hc : 0 < c) : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
isLittleO_iff.1 h hc
-#align asymptotics.is_o.def Asymptotics.IsLittleO.def
+#align asymptotics.is_o.def Asymptotics.IsLittleO.definition
-/
#print Asymptotics.IsLittleO.def' /-
@@ -584,7 +584,7 @@ theorem IsLittleO.trans_isBigOWith (hfg : f =o[l] g) (hgk : IsBigOWith c l g k)
unfold is_o at *
intro c' c'pos
have : 0 < c' / c := div_pos c'pos hc
- exact ((hfg this).trans hgk this.le).congr_const (div_mul_cancel _ hc.ne')
+ exact ((hfg this).trans hgk this.le).congr_const (div_mul_cancel₀ _ hc.ne')
#align asymptotics.is_o.trans_is_O_with Asymptotics.IsLittleO.trans_isBigOWith
-/
@@ -603,7 +603,7 @@ theorem IsBigOWith.trans_isLittleO (hfg : IsBigOWith c l f g) (hgk : g =o[l] k)
unfold is_o at *
intro c' c'pos
have : 0 < c' / c := div_pos c'pos hc
- exact (hfg.trans (hgk this) hc.le).congr_const (mul_div_cancel' _ hc.ne')
+ exact (hfg.trans (hgk this) hc.le).congr_const (mul_div_cancel₀ _ hc.ne')
#align asymptotics.is_O_with.trans_is_o Asymptotics.IsBigOWith.trans_isLittleO
-/
@@ -1354,7 +1354,7 @@ theorem IsLittleO.add_isBigO (h₁ : f₁ =o[l] g) (h₂ : f₂ =O[l] g) : (fun
#print Asymptotics.IsBigOWith.add_isLittleO /-
theorem IsBigOWith.add_isLittleO (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : f₂ =o[l] g) (hc : c₁ < c₂) :
IsBigOWith c₂ l (fun x => f₁ x + f₂ x) g :=
- (h₁.add (h₂.forall_isBigOWith (sub_pos.2 hc))).congr_const (add_sub_cancel'_right _ _)
+ (h₁.add (h₂.forall_isBigOWith (sub_pos.2 hc))).congr_const (add_sub_cancel _ _)
#align asymptotics.is_O_with.add_is_o Asymptotics.IsBigOWith.add_isLittleO
-/
@@ -1555,7 +1555,7 @@ theorem isBigOWith_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter
unfold is_O_with
apply univ_mem'
intro x
- rw [mem_set_of_eq, div_mul_cancel]
+ rw [mem_set_of_eq, div_mul_cancel₀]
rwa [Ne.def, norm_eq_zero]
#align asymptotics.is_O_with_const_const Asymptotics.isBigOWith_const_const
-/
@@ -2017,7 +2017,7 @@ theorem IsBigO.mul_isLittleO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h
unfold is_o at *
intro c cpos
rcases h₁.exists_pos with ⟨c', c'pos, hc'⟩
- exact (hc'.mul (h₂ (div_pos cpos c'pos))).congr_const (mul_div_cancel' _ (ne_of_gt c'pos))
+ exact (hc'.mul (h₂ (div_pos cpos c'pos))).congr_const (mul_div_cancel₀ _ (ne_of_gt c'pos))
#align asymptotics.is_O.mul_is_o Asymptotics.IsBigO.mul_isLittleO
-/
@@ -2028,7 +2028,7 @@ theorem IsLittleO.mul_isBigO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h
unfold is_o at *
intro c cpos
rcases h₂.exists_pos with ⟨c', c'pos, hc'⟩
- exact ((h₁ (div_pos cpos c'pos)).mul hc').congr_const (div_mul_cancel _ (ne_of_gt c'pos))
+ exact ((h₁ (div_pos cpos c'pos)).mul hc').congr_const (div_mul_cancel₀ _ (ne_of_gt c'pos))
#align asymptotics.is_o.mul_is_O Asymptotics.IsLittleO.mul_isBigO
-/
@@ -2046,7 +2046,7 @@ theorem IsBigOWith.pow' {f : α → R} {g : α → 𝕜} (h : IsBigOWith c l f g
g x ^ n
| 0 => by simpa using is_O_with_const_const (1 : R) (one_ne_zero' 𝕜) l
| 1 => by simpa
- | n + 2 => by simpa [pow_succ] using h.mul (is_O_with.pow' (n + 1))
+ | n + 2 => by simpa [pow_succ'] using h.mul (is_O_with.pow' (n + 1))
#align asymptotics.is_O_with.pow' Asymptotics.IsBigOWith.pow'
-/
@@ -2097,7 +2097,7 @@ theorem IsLittleO.pow {f : α → R} {g : α → 𝕜} (h : f =o[l] g) {n : ℕ}
by
cases n; exact hn.false.elim; clear hn
induction' n with n ihn; · simpa only [pow_one]
- convert h.mul ihn <;> simp [pow_succ]
+ convert h.mul ihn <;> simp [pow_succ']
#align asymptotics.is_o.pow Asymptotics.IsLittleO.pow
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -301,7 +301,7 @@ theorem isLittleO_iff_nat_mul_le_aux (h₀ : (∀ x, 0 ≤ ‖f x‖) ∨ ∀ x,
· refine' (H.def one_pos).mono fun x h₀' => _
rw [Nat.cast_zero, MulZeroClass.zero_mul]
refine' h₀.elim (fun hf => (hf x).trans _) fun hg => hg x
- rwa [one_mul] at h₀'
+ rwa [one_mul] at h₀'
· have : (0 : ℝ) < n.succ := Nat.cast_pos.2 n.succ_pos
exact (is_O_with_inv this).1 (H.def' <| inv_pos.2 this)
· refine' fun H => is_o_iff.2 fun ε ε0 => _
@@ -704,7 +704,7 @@ theorem isLittleO_irrefl' (h : ∃ᶠ x in l, ‖f' x‖ ≠ 0) : ¬f' =o[l] f'
by
intro ho
rcases((ho.bound one_half_pos).and_frequently h).exists with ⟨x, hle, hne⟩
- rw [one_div, ← div_eq_inv_mul] at hle
+ rw [one_div, ← div_eq_inv_mul] at hle
exact (half_lt_self (lt_of_le_of_ne (norm_nonneg _) hne.symm)).not_le hle
#align asymptotics.is_o_irrefl' Asymptotics.isLittleO_irrefl'
-/
@@ -2493,7 +2493,7 @@ theorem isLittleO_iff_exists_eq_mul :
constructor
· exact fun h => ⟨fun x => u x / v x, h.tendsto_div_nhds_zero, h.eventually_mul_div_cancel.symm⟩
· unfold is_o; rintro ⟨φ, hφ, huvφ⟩ c hpos
- rw [NormedAddCommGroup.tendsto_nhds_zero] at hφ
+ rw [NormedAddCommGroup.tendsto_nhds_zero] at hφ
exact is_O_with_of_eq_mul _ ((hφ c hpos).mono fun x => le_of_lt) huvφ
#align asymptotics.is_o_iff_exists_eq_mul Asymptotics.isLittleO_iff_exists_eq_mul
-/
@@ -2524,7 +2524,7 @@ theorem isBigO_iff_div_isBoundedUnder {α : Type _} {l : Filter α} {f g : α
by
refine' ⟨div_is_bounded_under_of_is_O, fun h => _⟩
obtain ⟨c, hc⟩ := h
- simp only [eventually_map, norm_div] at hc
+ simp only [eventually_map, norm_div] at hc
refine' is_O.of_bound c (hc.mp <| hgf.mono fun x hx₁ hx₂ => _)
by_cases hgx : g x = 0
· simp [hx₁ hgx, hgx]
@@ -2544,7 +2544,7 @@ theorem IsLittleO.tendsto_zero_of_tendsto {α E 𝕜 : Type _} [NormedAddCommGro
{u : α → E} {v : α → 𝕜} {l : Filter α} {y : 𝕜} (huv : u =o[l] v) (hv : Tendsto v l (𝓝 y)) :
Tendsto u l (𝓝 0) := by
suffices h : u =o[l] fun x => (1 : 𝕜)
- · rwa [is_o_one_iff] at h
+ · rwa [is_o_one_iff] at h
exact huv.trans_is_O (hv.is_O_one 𝕜)
#align asymptotics.is_o.tendsto_zero_of_tendsto Asymptotics.IsLittleO.tendsto_zero_of_tendsto
-/
@@ -2588,7 +2588,7 @@ theorem IsBigO.eq_zero_of_norm_pow_within {f : E'' → F''} {s : Set E''} {x₀
#print Asymptotics.IsBigO.eq_zero_of_norm_pow /-
theorem IsBigO.eq_zero_of_norm_pow {f : E'' → F''} {x₀ : E''} {n : ℕ}
(h : f =O[𝓝 x₀] fun x => ‖x - x₀‖ ^ n) (hn : 0 < n) : f x₀ = 0 := by
- rw [← nhdsWithin_univ] at h ; exact h.eq_zero_of_norm_pow_within (mem_univ _) hn
+ rw [← nhdsWithin_univ] at h; exact h.eq_zero_of_norm_pow_within (mem_univ _) hn
#align asymptotics.is_O.eq_zero_of_norm_pow Asymptotics.IsBigO.eq_zero_of_norm_pow
-/
@@ -2653,7 +2653,7 @@ theorem bound_of_isBigO_cofinite (h : f =O[cofinite] g'') :
∃ C > 0, ∀ ⦃x⦄, g'' x ≠ 0 → ‖f x‖ ≤ C * ‖g'' x‖ :=
by
rcases h.exists_pos with ⟨C, C₀, hC⟩
- rw [is_O_with, eventually_cofinite] at hC
+ rw [is_O_with, eventually_cofinite] at hC
rcases(hC.to_finset.image fun x => ‖f x‖ / ‖g'' x‖).exists_le with ⟨C', hC'⟩
have : ∀ x, C * ‖g'' x‖ < ‖f x‖ → ‖f x‖ / ‖g'' x‖ ≤ C' := by simpa using hC'
refine' ⟨max C C', lt_max_iff.2 (Or.inl C₀), fun x h₀ => _⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -2611,8 +2611,8 @@ theorem isLittleO_pow_sub_sub (x₀ : E') {m : ℕ} (h : 1 < m) :
#align asymptotics.is_o_pow_sub_sub Asymptotics.isLittleO_pow_sub_sub
-/
-#print Asymptotics.IsBigOWith.right_le_sub_of_lt_1 /-
-theorem IsBigOWith.right_le_sub_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith c l f₁ f₂) (hc : c < 1) :
+#print Asymptotics.IsBigOWith.right_le_sub_of_lt_one /-
+theorem IsBigOWith.right_le_sub_of_lt_one {f₁ f₂ : α → E'} (h : IsBigOWith c l f₁ f₂) (hc : c < 1) :
IsBigOWith (1 / (1 - c)) l f₂ fun x => f₂ x - f₁ x :=
IsBigOWith.of_bound <|
mem_of_superset h.bound fun x hx =>
@@ -2621,28 +2621,28 @@ theorem IsBigOWith.right_le_sub_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith
rw [mul_comm, one_div, ← div_eq_mul_inv, le_div_iff, mul_sub, mul_one, mul_comm]
· exact le_trans (sub_le_sub_left hx _) (norm_sub_norm_le _ _)
· exact sub_pos.2 hc
-#align asymptotics.is_O_with.right_le_sub_of_lt_1 Asymptotics.IsBigOWith.right_le_sub_of_lt_1
+#align asymptotics.is_O_with.right_le_sub_of_lt_1 Asymptotics.IsBigOWith.right_le_sub_of_lt_one
-/
-#print Asymptotics.IsBigOWith.right_le_add_of_lt_1 /-
-theorem IsBigOWith.right_le_add_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith c l f₁ f₂) (hc : c < 1) :
+#print Asymptotics.IsBigOWith.right_le_add_of_lt_one /-
+theorem IsBigOWith.right_le_add_of_lt_one {f₁ f₂ : α → E'} (h : IsBigOWith c l f₁ f₂) (hc : c < 1) :
IsBigOWith (1 / (1 - c)) l f₂ fun x => f₁ x + f₂ x :=
- (h.neg_right.right_le_sub_of_lt_1 hc).neg_right.of_neg_left.congr rfl (fun x => rfl) fun x => by
+ (h.neg_right.right_le_sub_of_lt_one hc).neg_right.of_neg_left.congr rfl (fun x => rfl) fun x => by
rw [neg_sub, sub_neg_eq_add]
-#align asymptotics.is_O_with.right_le_add_of_lt_1 Asymptotics.IsBigOWith.right_le_add_of_lt_1
+#align asymptotics.is_O_with.right_le_add_of_lt_1 Asymptotics.IsBigOWith.right_le_add_of_lt_one
-/
#print Asymptotics.IsLittleO.right_isBigO_sub /-
theorem IsLittleO.right_isBigO_sub {f₁ f₂ : α → E'} (h : f₁ =o[l] f₂) :
f₂ =O[l] fun x => f₂ x - f₁ x :=
- ((h.def' one_half_pos).right_le_sub_of_lt_1 one_half_lt_one).IsBigO
+ ((h.def' one_half_pos).right_le_sub_of_lt_one one_half_lt_one).IsBigO
#align asymptotics.is_o.right_is_O_sub Asymptotics.IsLittleO.right_isBigO_sub
-/
#print Asymptotics.IsLittleO.right_isBigO_add /-
theorem IsLittleO.right_isBigO_add {f₁ f₂ : α → E'} (h : f₁ =o[l] f₂) :
f₂ =O[l] fun x => f₁ x + f₂ x :=
- ((h.def' one_half_pos).right_le_add_of_lt_1 one_half_lt_one).IsBigO
+ ((h.def' one_half_pos).right_le_add_of_lt_one one_half_lt_one).IsBigO
#align asymptotics.is_o.right_is_O_add Asymptotics.IsLittleO.right_isBigO_add
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -2063,7 +2063,7 @@ theorem IsBigOWith.of_pow {n : ℕ} {f : α → 𝕜} {g : α → R} (h : IsBigO
(hn : n ≠ 0) (hc : c ≤ c' ^ n) (hc' : 0 ≤ c') : IsBigOWith c' l f g :=
IsBigOWith.of_bound <|
(h.weaken hc).bound.mono fun x hx =>
- le_of_pow_le_pow n (mul_nonneg hc' <| norm_nonneg _) hn.bot_lt <|
+ le_of_pow_le_pow_left n (mul_nonneg hc' <| norm_nonneg _) hn.bot_lt <|
calc
‖f x‖ ^ n = ‖f x ^ n‖ := (norm_pow _ _).symm
_ ≤ c' ^ n * ‖g x ^ n‖ := hx
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -2743,15 +2743,15 @@ theorem summable_of_isBigO_nat {E} [NormedAddCommGroup E] [CompleteSpace E] {f :
#align summable_of_is_O_nat summable_of_isBigO_nat
-/
-namespace LocalHomeomorph
+namespace PartialHomeomorph
variable {α : Type _} {β : Type _} [TopologicalSpace α] [TopologicalSpace β]
variable {E : Type _} [Norm E] {F : Type _} [Norm F]
-#print LocalHomeomorph.isBigOWith_congr /-
+#print PartialHomeomorph.isBigOWith_congr /-
/-- Transfer `is_O_with` over a `local_homeomorph`. -/
-theorem isBigOWith_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
+theorem isBigOWith_congr (e : PartialHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
{g : β → F} {C : ℝ} : IsBigOWith C (𝓝 b) f g ↔ IsBigOWith C (𝓝 (e.symm b)) (f ∘ e) (g ∘ e) :=
⟨fun h =>
h.comp_tendsto <| by convert e.continuous_at (e.map_target hb); exact (e.right_inv hb).symm,
@@ -2759,26 +2759,26 @@ theorem isBigOWith_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.targ
(h.comp_tendsto (e.continuousAt_symm hb)).congr' rfl
((e.eventually_right_inverse hb).mono fun x hx => congr_arg f hx)
((e.eventually_right_inverse hb).mono fun x hx => congr_arg g hx)⟩
-#align local_homeomorph.is_O_with_congr LocalHomeomorph.isBigOWith_congr
+#align local_homeomorph.is_O_with_congr PartialHomeomorph.isBigOWith_congr
-/
-#print LocalHomeomorph.isBigO_congr /-
+#print PartialHomeomorph.isBigO_congr /-
/-- Transfer `is_O` over a `local_homeomorph`. -/
-theorem isBigO_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E} {g : β → F} :
- f =O[𝓝 b] g ↔ (f ∘ e) =O[𝓝 (e.symm b)] (g ∘ e) := by unfold is_O;
+theorem isBigO_congr (e : PartialHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
+ {g : β → F} : f =O[𝓝 b] g ↔ (f ∘ e) =O[𝓝 (e.symm b)] (g ∘ e) := by unfold is_O;
exact exists_congr fun C => e.is_O_with_congr hb
-#align local_homeomorph.is_O_congr LocalHomeomorph.isBigO_congr
+#align local_homeomorph.is_O_congr PartialHomeomorph.isBigO_congr
-/
-#print LocalHomeomorph.isLittleO_congr /-
+#print PartialHomeomorph.isLittleO_congr /-
/-- Transfer `is_o` over a `local_homeomorph`. -/
-theorem isLittleO_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
+theorem isLittleO_congr (e : PartialHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
{g : β → F} : f =o[𝓝 b] g ↔ (f ∘ e) =o[𝓝 (e.symm b)] (g ∘ e) := by unfold is_o;
exact forall₂_congr fun c hc => e.is_O_with_congr hb
-#align local_homeomorph.is_o_congr LocalHomeomorph.isLittleO_congr
+#align local_homeomorph.is_o_congr PartialHomeomorph.isLittleO_congr
-/
-end LocalHomeomorph
+end PartialHomeomorph
namespace Homeomorph
@@ -2792,7 +2792,7 @@ open Asymptotics
/-- Transfer `is_O_with` over a `homeomorph`. -/
theorem isBigOWith_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} {C : ℝ} :
IsBigOWith C (𝓝 b) f g ↔ IsBigOWith C (𝓝 (e.symm b)) (f ∘ e) (g ∘ e) :=
- e.toLocalHomeomorph.isBigOWith_congr trivial
+ e.toPartialHomeomorph.isBigOWith_congr trivial
#align homeomorph.is_O_with_congr Homeomorph.isBigOWith_congr
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -2375,11 +2375,10 @@ theorem isLittleO_pure {x} : f'' =o[pure x] g'' ↔ f'' x = 0 :=
#align asymptotics.is_o_pure Asymptotics.isLittleO_pure
-/
-#print Asymptotics.isLittleO_const_id_comap_norm_atTop /-
-theorem isLittleO_const_id_comap_norm_atTop (c : F'') :
- (fun x : E'' => c) =o[comap norm atTop] id :=
+#print Asymptotics.isLittleO_const_id_cobounded /-
+theorem isLittleO_const_id_cobounded (c : F'') : (fun x : E'' => c) =o[comap norm atTop] id :=
isLittleO_const_left.2 <| Or.inr tendsto_comap
-#align asymptotics.is_o_const_id_comap_norm_at_top Asymptotics.isLittleO_const_id_comap_norm_atTop
+#align asymptotics.is_o_const_id_comap_norm_at_top Asymptotics.isLittleO_const_id_cobounded
-/
#print Asymptotics.isLittleO_const_id_atTop /-
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -2733,7 +2733,7 @@ open Asymptotics
theorem summable_of_isBigO {ι E} [NormedAddCommGroup E] [CompleteSpace E] {f : ι → E} {g : ι → ℝ}
(hg : Summable g) (h : f =O[cofinite] g) : Summable f :=
let ⟨C, hC⟩ := h.IsBigOWith
- summable_of_norm_bounded_eventually (fun x => C * ‖g x‖) (hg.abs.hMul_left _) hC.bound
+ Summable.of_norm_bounded_eventually (fun x => C * ‖g x‖) (hg.abs.hMul_left _) hC.bound
#align summable_of_is_O summable_of_isBigO
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -2658,7 +2658,7 @@ theorem bound_of_isBigO_cofinite (h : f =O[cofinite] g'') :
rcases(hC.to_finset.image fun x => ‖f x‖ / ‖g'' x‖).exists_le with ⟨C', hC'⟩
have : ∀ x, C * ‖g'' x‖ < ‖f x‖ → ‖f x‖ / ‖g'' x‖ ≤ C' := by simpa using hC'
refine' ⟨max C C', lt_max_iff.2 (Or.inl C₀), fun x h₀ => _⟩
- rw [max_mul_of_nonneg _ _ (norm_nonneg _), le_max_iff, or_iff_not_imp_left, not_le]
+ rw [max_mul_of_nonneg _ _ (norm_nonneg _), le_max_iff, Classical.or_iff_not_imp_left, not_le]
exact fun hx => (div_le_iff (norm_pos_iff.2 h₀)).1 (this _ hx)
#align asymptotics.bound_of_is_O_cofinite Asymptotics.bound_of_isBigO_cofinite
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,10 +3,10 @@ Copyright (c) 2019 Jeremy Avigad. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jeremy Avigad, Yury Kudryashov
-/
-import Mathbin.Analysis.Normed.Group.InfiniteSum
-import Mathbin.Analysis.NormedSpace.Basic
-import Mathbin.Topology.Algebra.Order.LiminfLimsup
-import Mathbin.Topology.LocalHomeomorph
+import Analysis.Normed.Group.InfiniteSum
+import Analysis.NormedSpace.Basic
+import Topology.Algebra.Order.LiminfLimsup
+import Topology.LocalHomeomorph
#align_import analysis.asymptotics.asymptotics from "leanprover-community/mathlib"@"9a48a083b390d9b84a71efbdc4e8dfa26a687104"
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -97,7 +97,7 @@ theorem isBigOWith_iff : IsBigOWith c l f g ↔ ∀ᶠ x in l, ‖f x‖ ≤ c *
#align asymptotics.is_O_with_iff Asymptotics.isBigOWith_iff
-/
-alias is_O_with_iff ↔ is_O_with.bound is_O_with.of_bound
+alias ⟨is_O_with.bound, is_O_with.of_bound⟩ := is_O_with_iff
#align asymptotics.is_O_with.bound Asymptotics.IsBigOWith.bound
#align asymptotics.is_O_with.of_bound Asymptotics.IsBigOWith.of_bound
@@ -166,7 +166,7 @@ theorem isLittleO_iff_forall_isBigOWith : f =o[l] g ↔ ∀ ⦃c : ℝ⦄, 0 < c
#align asymptotics.is_o_iff_forall_is_O_with Asymptotics.isLittleO_iff_forall_isBigOWith
-/
-alias is_o_iff_forall_is_O_with ↔ is_o.forall_is_O_with is_o.of_is_O_with
+alias ⟨is_o.forall_is_O_with, is_o.of_is_O_with⟩ := is_o_iff_forall_is_O_with
#align asymptotics.is_o.forall_is_O_with Asymptotics.IsLittleO.forall_isBigOWith
#align asymptotics.is_o.of_is_O_with Asymptotics.IsLittleO.of_isBigOWith
@@ -178,7 +178,7 @@ theorem isLittleO_iff : f =o[l] g ↔ ∀ ⦃c : ℝ⦄, 0 < c → ∀ᶠ x in l
#align asymptotics.is_o_iff Asymptotics.isLittleO_iff
-/
-alias is_o_iff ↔ is_o.bound is_o.of_bound
+alias ⟨is_o.bound, is_o.of_bound⟩ := is_o_iff
#align asymptotics.is_o.bound Asymptotics.IsLittleO.bound
#align asymptotics.is_o.of_bound Asymptotics.IsLittleO.of_bound
@@ -859,11 +859,11 @@ theorem isBigOWith_abs_right : (IsBigOWith c l f fun x => |u x|) ↔ IsBigOWith
#align asymptotics.is_O_with_abs_right Asymptotics.isBigOWith_abs_right
-/
-alias is_O_with_norm_right ↔ is_O_with.of_norm_right is_O_with.norm_right
+alias ⟨is_O_with.of_norm_right, is_O_with.norm_right⟩ := is_O_with_norm_right
#align asymptotics.is_O_with.of_norm_right Asymptotics.IsBigOWith.of_norm_right
#align asymptotics.is_O_with.norm_right Asymptotics.IsBigOWith.norm_right
-alias is_O_with_abs_right ↔ is_O_with.of_abs_right is_O_with.abs_right
+alias ⟨is_O_with.of_abs_right, is_O_with.abs_right⟩ := is_O_with_abs_right
#align asymptotics.is_O_with.of_abs_right Asymptotics.IsBigOWith.of_abs_right
#align asymptotics.is_O_with.abs_right Asymptotics.IsBigOWith.abs_right
@@ -881,11 +881,11 @@ theorem isBigO_abs_right : (f =O[l] fun x => |u x|) ↔ f =O[l] u :=
#align asymptotics.is_O_abs_right Asymptotics.isBigO_abs_right
-/
-alias is_O_norm_right ↔ is_O.of_norm_right is_O.norm_right
+alias ⟨is_O.of_norm_right, is_O.norm_right⟩ := is_O_norm_right
#align asymptotics.is_O.of_norm_right Asymptotics.IsBigO.of_norm_right
#align asymptotics.is_O.norm_right Asymptotics.IsBigO.norm_right
-alias is_O_abs_right ↔ is_O.of_abs_right is_O.abs_right
+alias ⟨is_O.of_abs_right, is_O.abs_right⟩ := is_O_abs_right
#align asymptotics.is_O.of_abs_right Asymptotics.IsBigO.of_abs_right
#align asymptotics.is_O.abs_right Asymptotics.IsBigO.abs_right
@@ -903,11 +903,11 @@ theorem isLittleO_abs_right : (f =o[l] fun x => |u x|) ↔ f =o[l] u :=
#align asymptotics.is_o_abs_right Asymptotics.isLittleO_abs_right
-/
-alias is_o_norm_right ↔ is_o.of_norm_right is_o.norm_right
+alias ⟨is_o.of_norm_right, is_o.norm_right⟩ := is_o_norm_right
#align asymptotics.is_o.of_norm_right Asymptotics.IsLittleO.of_norm_right
#align asymptotics.is_o.norm_right Asymptotics.IsLittleO.norm_right
-alias is_o_abs_right ↔ is_o.of_abs_right is_o.abs_right
+alias ⟨is_o.of_abs_right, is_o.abs_right⟩ := is_o_abs_right
#align asymptotics.is_o.of_abs_right Asymptotics.IsLittleO.of_abs_right
#align asymptotics.is_o.abs_right Asymptotics.IsLittleO.abs_right
@@ -925,11 +925,11 @@ theorem isBigOWith_abs_left : IsBigOWith c l (fun x => |u x|) g ↔ IsBigOWith c
#align asymptotics.is_O_with_abs_left Asymptotics.isBigOWith_abs_left
-/
-alias is_O_with_norm_left ↔ is_O_with.of_norm_left is_O_with.norm_left
+alias ⟨is_O_with.of_norm_left, is_O_with.norm_left⟩ := is_O_with_norm_left
#align asymptotics.is_O_with.of_norm_left Asymptotics.IsBigOWith.of_norm_left
#align asymptotics.is_O_with.norm_left Asymptotics.IsBigOWith.norm_left
-alias is_O_with_abs_left ↔ is_O_with.of_abs_left is_O_with.abs_left
+alias ⟨is_O_with.of_abs_left, is_O_with.abs_left⟩ := is_O_with_abs_left
#align asymptotics.is_O_with.of_abs_left Asymptotics.IsBigOWith.of_abs_left
#align asymptotics.is_O_with.abs_left Asymptotics.IsBigOWith.abs_left
@@ -947,11 +947,11 @@ theorem isBigO_abs_left : (fun x => |u x|) =O[l] g ↔ u =O[l] g :=
#align asymptotics.is_O_abs_left Asymptotics.isBigO_abs_left
-/
-alias is_O_norm_left ↔ is_O.of_norm_left is_O.norm_left
+alias ⟨is_O.of_norm_left, is_O.norm_left⟩ := is_O_norm_left
#align asymptotics.is_O.of_norm_left Asymptotics.IsBigO.of_norm_left
#align asymptotics.is_O.norm_left Asymptotics.IsBigO.norm_left
-alias is_O_abs_left ↔ is_O.of_abs_left is_O.abs_left
+alias ⟨is_O.of_abs_left, is_O.abs_left⟩ := is_O_abs_left
#align asymptotics.is_O.of_abs_left Asymptotics.IsBigO.of_abs_left
#align asymptotics.is_O.abs_left Asymptotics.IsBigO.abs_left
@@ -969,11 +969,11 @@ theorem isLittleO_abs_left : (fun x => |u x|) =o[l] g ↔ u =o[l] g :=
#align asymptotics.is_o_abs_left Asymptotics.isLittleO_abs_left
-/
-alias is_o_norm_left ↔ is_o.of_norm_left is_o.norm_left
+alias ⟨is_o.of_norm_left, is_o.norm_left⟩ := is_o_norm_left
#align asymptotics.is_o.of_norm_left Asymptotics.IsLittleO.of_norm_left
#align asymptotics.is_o.norm_left Asymptotics.IsLittleO.norm_left
-alias is_o_abs_left ↔ is_o.of_abs_left is_o.abs_left
+alias ⟨is_o.of_abs_left, is_o.abs_left⟩ := is_o_abs_left
#align asymptotics.is_o.of_abs_left Asymptotics.IsLittleO.of_abs_left
#align asymptotics.is_o.abs_left Asymptotics.IsLittleO.abs_left
@@ -991,11 +991,11 @@ theorem isBigOWith_abs_abs :
#align asymptotics.is_O_with_abs_abs Asymptotics.isBigOWith_abs_abs
-/
-alias is_O_with_norm_norm ↔ is_O_with.of_norm_norm is_O_with.norm_norm
+alias ⟨is_O_with.of_norm_norm, is_O_with.norm_norm⟩ := is_O_with_norm_norm
#align asymptotics.is_O_with.of_norm_norm Asymptotics.IsBigOWith.of_norm_norm
#align asymptotics.is_O_with.norm_norm Asymptotics.IsBigOWith.norm_norm
-alias is_O_with_abs_abs ↔ is_O_with.of_abs_abs is_O_with.abs_abs
+alias ⟨is_O_with.of_abs_abs, is_O_with.abs_abs⟩ := is_O_with_abs_abs
#align asymptotics.is_O_with.of_abs_abs Asymptotics.IsBigOWith.of_abs_abs
#align asymptotics.is_O_with.abs_abs Asymptotics.IsBigOWith.abs_abs
@@ -1011,11 +1011,11 @@ theorem isBigO_abs_abs : ((fun x => |u x|) =O[l] fun x => |v x|) ↔ u =O[l] v :
#align asymptotics.is_O_abs_abs Asymptotics.isBigO_abs_abs
-/
-alias is_O_norm_norm ↔ is_O.of_norm_norm is_O.norm_norm
+alias ⟨is_O.of_norm_norm, is_O.norm_norm⟩ := is_O_norm_norm
#align asymptotics.is_O.of_norm_norm Asymptotics.IsBigO.of_norm_norm
#align asymptotics.is_O.norm_norm Asymptotics.IsBigO.norm_norm
-alias is_O_abs_abs ↔ is_O.of_abs_abs is_O.abs_abs
+alias ⟨is_O.of_abs_abs, is_O.abs_abs⟩ := is_O_abs_abs
#align asymptotics.is_O.of_abs_abs Asymptotics.IsBigO.of_abs_abs
#align asymptotics.is_O.abs_abs Asymptotics.IsBigO.abs_abs
@@ -1031,11 +1031,11 @@ theorem isLittleO_abs_abs : ((fun x => |u x|) =o[l] fun x => |v x|) ↔ u =o[l]
#align asymptotics.is_o_abs_abs Asymptotics.isLittleO_abs_abs
-/
-alias is_o_norm_norm ↔ is_o.of_norm_norm is_o.norm_norm
+alias ⟨is_o.of_norm_norm, is_o.norm_norm⟩ := is_o_norm_norm
#align asymptotics.is_o.of_norm_norm Asymptotics.IsLittleO.of_norm_norm
#align asymptotics.is_o.norm_norm Asymptotics.IsLittleO.norm_norm
-alias is_o_abs_abs ↔ is_o.of_abs_abs is_o.abs_abs
+alias ⟨is_o.of_abs_abs, is_o.abs_abs⟩ := is_o_abs_abs
#align asymptotics.is_o.of_abs_abs Asymptotics.IsLittleO.of_abs_abs
#align asymptotics.is_o.abs_abs Asymptotics.IsLittleO.abs_abs
@@ -1051,7 +1051,7 @@ theorem isBigOWith_neg_right : (IsBigOWith c l f fun x => -g' x) ↔ IsBigOWith
#align asymptotics.is_O_with_neg_right Asymptotics.isBigOWith_neg_right
-/
-alias is_O_with_neg_right ↔ is_O_with.of_neg_right is_O_with.neg_right
+alias ⟨is_O_with.of_neg_right, is_O_with.neg_right⟩ := is_O_with_neg_right
#align asymptotics.is_O_with.of_neg_right Asymptotics.IsBigOWith.of_neg_right
#align asymptotics.is_O_with.neg_right Asymptotics.IsBigOWith.neg_right
@@ -1062,7 +1062,7 @@ theorem isBigO_neg_right : (f =O[l] fun x => -g' x) ↔ f =O[l] g' := by unfold
#align asymptotics.is_O_neg_right Asymptotics.isBigO_neg_right
-/
-alias is_O_neg_right ↔ is_O.of_neg_right is_O.neg_right
+alias ⟨is_O.of_neg_right, is_O.neg_right⟩ := is_O_neg_right
#align asymptotics.is_O.of_neg_right Asymptotics.IsBigO.of_neg_right
#align asymptotics.is_O.neg_right Asymptotics.IsBigO.neg_right
@@ -1073,7 +1073,7 @@ theorem isLittleO_neg_right : (f =o[l] fun x => -g' x) ↔ f =o[l] g' := by unfo
#align asymptotics.is_o_neg_right Asymptotics.isLittleO_neg_right
-/
-alias is_o_neg_right ↔ is_o.of_neg_right is_o.neg_right
+alias ⟨is_o.of_neg_right, is_o.neg_right⟩ := is_o_neg_right
#align asymptotics.is_o.of_neg_right Asymptotics.IsLittleO.of_neg_right
#align asymptotics.is_o.neg_right Asymptotics.IsLittleO.neg_right
@@ -1084,7 +1084,7 @@ theorem isBigOWith_neg_left : IsBigOWith c l (fun x => -f' x) g ↔ IsBigOWith c
#align asymptotics.is_O_with_neg_left Asymptotics.isBigOWith_neg_left
-/
-alias is_O_with_neg_left ↔ is_O_with.of_neg_left is_O_with.neg_left
+alias ⟨is_O_with.of_neg_left, is_O_with.neg_left⟩ := is_O_with_neg_left
#align asymptotics.is_O_with.of_neg_left Asymptotics.IsBigOWith.of_neg_left
#align asymptotics.is_O_with.neg_left Asymptotics.IsBigOWith.neg_left
@@ -1095,7 +1095,7 @@ theorem isBigO_neg_left : (fun x => -f' x) =O[l] g ↔ f' =O[l] g := by unfold i
#align asymptotics.is_O_neg_left Asymptotics.isBigO_neg_left
-/
-alias is_O_neg_left ↔ is_O.of_neg_left is_O.neg_left
+alias ⟨is_O.of_neg_left, is_O.neg_left⟩ := is_O_neg_left
#align asymptotics.is_O.of_neg_left Asymptotics.IsBigO.of_neg_left
#align asymptotics.is_O.neg_left Asymptotics.IsBigO.neg_left
@@ -1106,7 +1106,7 @@ theorem isLittleO_neg_left : (fun x => -f' x) =o[l] g ↔ f' =o[l] g := by unfol
#align asymptotics.is_o_neg_left Asymptotics.isLittleO_neg_left
-/
-alias is_o_neg_left ↔ is_o.of_neg_right is_o.neg_left
+alias ⟨is_o.of_neg_right, is_o.neg_left⟩ := is_o_neg_left
#align asymptotics.is_o.of_neg_right Asymptotics.IsLittleO.of_neg_right
#align asymptotics.is_o.neg_left Asymptotics.IsLittleO.neg_left
@@ -1669,7 +1669,7 @@ theorem isBigO_one_iff : f =O[l] (fun x => 1 : α → F) ↔ IsBoundedUnder (·
#align asymptotics.is_O_one_iff Asymptotics.isBigO_one_iff
-/
-alias is_O_one_iff ↔ _ _root_.filter.is_bounded_under.is_O_one
+alias ⟨_, _root_.filter.is_bounded_under.is_O_one⟩ := is_O_one_iff
#align filter.is_bounded_under.is_O_one Filter.IsBoundedUnder.isBigO_one
#print Asymptotics.isLittleO_one_left_iff /-
@@ -2329,10 +2329,10 @@ theorem isLittleO_iff_tendsto {f g : α → 𝕜} (hgf : ∀ x, g x = 0 → f x
#align asymptotics.is_o_iff_tendsto Asymptotics.isLittleO_iff_tendsto
-/
-alias is_o_iff_tendsto' ↔ _ is_o_of_tendsto'
+alias ⟨_, is_o_of_tendsto'⟩ := is_o_iff_tendsto'
#align asymptotics.is_o_of_tendsto' Asymptotics.isLittleO_of_tendsto'
-alias is_o_iff_tendsto ↔ _ is_o_of_tendsto
+alias ⟨_, is_o_of_tendsto⟩ := is_o_iff_tendsto
#align asymptotics.is_o_of_tendsto Asymptotics.isLittleO_of_tendsto
#print Asymptotics.isLittleO_const_left_of_ne /-
@@ -2484,7 +2484,7 @@ theorem isBigO_iff_exists_eq_mul :
#align asymptotics.is_O_iff_exists_eq_mul Asymptotics.isBigO_iff_exists_eq_mul
-/
-alias is_O_iff_exists_eq_mul ↔ is_O.exists_eq_mul _
+alias ⟨is_O.exists_eq_mul, _⟩ := is_O_iff_exists_eq_mul
#align asymptotics.is_O.exists_eq_mul Asymptotics.IsBigO.exists_eq_mul
#print Asymptotics.isLittleO_iff_exists_eq_mul /-
@@ -2499,7 +2499,7 @@ theorem isLittleO_iff_exists_eq_mul :
#align asymptotics.is_o_iff_exists_eq_mul Asymptotics.isLittleO_iff_exists_eq_mul
-/
-alias is_o_iff_exists_eq_mul ↔ is_o.exists_eq_mul _
+alias ⟨is_o.exists_eq_mul, _⟩ := is_o_iff_exists_eq_mul
#align asymptotics.is_o.exists_eq_mul Asymptotics.IsLittleO.exists_eq_mul
end ExistsMulEq
mathlib commit https://github.com/leanprover-community/mathlib/commit/32a7e535287f9c73f2e4d2aef306a39190f0b504
@@ -2733,7 +2733,7 @@ open Asymptotics
theorem summable_of_isBigO {ι E} [NormedAddCommGroup E] [CompleteSpace E] {f : ι → E} {g : ι → ℝ}
(hg : Summable g) (h : f =O[cofinite] g) : Summable f :=
let ⟨C, hC⟩ := h.IsBigOWith
- summable_of_norm_bounded_eventually (fun x => C * ‖g x‖) (hg.abs.mul_left _) hC.bound
+ summable_of_norm_bounded_eventually (fun x => C * ‖g x‖) (hg.abs.hMul_left _) hC.bound
#align summable_of_is_O summable_of_isBigO
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,17 +2,14 @@
Copyright (c) 2019 Jeremy Avigad. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jeremy Avigad, Yury Kudryashov
-
-! This file was ported from Lean 3 source module analysis.asymptotics.asymptotics
-! leanprover-community/mathlib commit 9a48a083b390d9b84a71efbdc4e8dfa26a687104
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.Normed.Group.InfiniteSum
import Mathbin.Analysis.NormedSpace.Basic
import Mathbin.Topology.Algebra.Order.LiminfLimsup
import Mathbin.Topology.LocalHomeomorph
+#align_import analysis.asymptotics.asymptotics from "leanprover-community/mathlib"@"9a48a083b390d9b84a71efbdc4e8dfa26a687104"
+
/-!
# Asymptotics
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -94,9 +94,11 @@ irreducible_def IsBigOWith (c : ℝ) (l : Filter α) (f : α → E) (g : α →
#align asymptotics.is_O_with Asymptotics.IsBigOWith
-/
+#print Asymptotics.isBigOWith_iff /-
/-- Definition of `is_O_with`. We record it in a lemma as `is_O_with` is irreducible. -/
theorem isBigOWith_iff : IsBigOWith c l f g ↔ ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ := by rw [is_O_with]
#align asymptotics.is_O_with_iff Asymptotics.isBigOWith_iff
+-/
alias is_O_with_iff ↔ is_O_with.bound is_O_with.of_bound
#align asymptotics.is_O_with.bound Asymptotics.IsBigOWith.bound
@@ -112,31 +114,40 @@ irreducible_def IsBigO (l : Filter α) (f : α → E) (g : α → F) : Prop :=
#align asymptotics.is_O Asymptotics.IsBigO
-/
--- mathport name: «expr =O[ ] »
notation:100 f " =O[" l "] " g:100 => IsBigO l f g
+#print Asymptotics.isBigO_iff_isBigOWith /-
/-- Definition of `is_O` in terms of `is_O_with`. We record it in a lemma as `is_O` is
irreducible. -/
theorem isBigO_iff_isBigOWith : f =O[l] g ↔ ∃ c : ℝ, IsBigOWith c l f g := by rw [is_O]
#align asymptotics.is_O_iff_is_O_with Asymptotics.isBigO_iff_isBigOWith
+-/
+#print Asymptotics.isBigO_iff /-
/-- Definition of `is_O` in terms of filters. We record it in a lemma as we will set
`is_O` to be irreducible at the end of this file. -/
theorem isBigO_iff : f =O[l] g ↔ ∃ c : ℝ, ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ := by
simp only [is_O, is_O_with]
#align asymptotics.is_O_iff Asymptotics.isBigO_iff
+-/
+#print Asymptotics.IsBigO.of_bound /-
theorem IsBigO.of_bound (c : ℝ) (h : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖) : f =O[l] g :=
isBigO_iff.2 ⟨c, h⟩
#align asymptotics.is_O.of_bound Asymptotics.IsBigO.of_bound
+-/
+#print Asymptotics.IsBigO.of_bound' /-
theorem IsBigO.of_bound' (h : ∀ᶠ x in l, ‖f x‖ ≤ ‖g x‖) : f =O[l] g :=
IsBigO.of_bound 1 <| by simp_rw [one_mul]; exact h
#align asymptotics.is_O.of_bound' Asymptotics.IsBigO.of_bound'
+-/
+#print Asymptotics.IsBigO.bound /-
theorem IsBigO.bound : f =O[l] g → ∃ c : ℝ, ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
isBigO_iff.1
#align asymptotics.is_O.bound Asymptotics.IsBigO.bound
+-/
#print Asymptotics.IsLittleO /-
/-- The Landau notation `f =o[l] g` where `f` and `g` are two functions on a type `α` and `l` is
@@ -148,57 +159,73 @@ irreducible_def IsLittleO (l : Filter α) (f : α → E) (g : α → F) : Prop :
#align asymptotics.is_o Asymptotics.IsLittleO
-/
--- mathport name: «expr =o[ ] »
notation:100 f " =o[" l "] " g:100 => IsLittleO l f g
+#print Asymptotics.isLittleO_iff_forall_isBigOWith /-
/-- Definition of `is_o` in terms of `is_O_with`. We record it in a lemma as we will set
`is_o` to be irreducible at the end of this file. -/
theorem isLittleO_iff_forall_isBigOWith : f =o[l] g ↔ ∀ ⦃c : ℝ⦄, 0 < c → IsBigOWith c l f g := by
rw [is_o]
#align asymptotics.is_o_iff_forall_is_O_with Asymptotics.isLittleO_iff_forall_isBigOWith
+-/
alias is_o_iff_forall_is_O_with ↔ is_o.forall_is_O_with is_o.of_is_O_with
#align asymptotics.is_o.forall_is_O_with Asymptotics.IsLittleO.forall_isBigOWith
#align asymptotics.is_o.of_is_O_with Asymptotics.IsLittleO.of_isBigOWith
+#print Asymptotics.isLittleO_iff /-
/-- Definition of `is_o` in terms of filters. We record it in a lemma as we will set
`is_o` to be irreducible at the end of this file. -/
theorem isLittleO_iff : f =o[l] g ↔ ∀ ⦃c : ℝ⦄, 0 < c → ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ := by
simp only [is_o, is_O_with]
#align asymptotics.is_o_iff Asymptotics.isLittleO_iff
+-/
alias is_o_iff ↔ is_o.bound is_o.of_bound
#align asymptotics.is_o.bound Asymptotics.IsLittleO.bound
#align asymptotics.is_o.of_bound Asymptotics.IsLittleO.of_bound
+#print Asymptotics.IsLittleO.def /-
theorem IsLittleO.def (h : f =o[l] g) (hc : 0 < c) : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
isLittleO_iff.1 h hc
#align asymptotics.is_o.def Asymptotics.IsLittleO.def
+-/
+#print Asymptotics.IsLittleO.def' /-
theorem IsLittleO.def' (h : f =o[l] g) (hc : 0 < c) : IsBigOWith c l f g :=
isBigOWith_iff.2 <| isLittleO_iff.1 h hc
#align asymptotics.is_o.def' Asymptotics.IsLittleO.def'
+-/
end Defs
/-! ### Conversions -/
+#print Asymptotics.IsBigOWith.isBigO /-
theorem IsBigOWith.isBigO (h : IsBigOWith c l f g) : f =O[l] g := by rw [is_O] <;> exact ⟨c, h⟩
#align asymptotics.is_O_with.is_O Asymptotics.IsBigOWith.isBigO
+-/
+#print Asymptotics.IsLittleO.isBigOWith /-
theorem IsLittleO.isBigOWith (hgf : f =o[l] g) : IsBigOWith 1 l f g :=
hgf.def' zero_lt_one
#align asymptotics.is_o.is_O_with Asymptotics.IsLittleO.isBigOWith
+-/
+#print Asymptotics.IsLittleO.isBigO /-
theorem IsLittleO.isBigO (hgf : f =o[l] g) : f =O[l] g :=
hgf.IsBigOWith.IsBigO
#align asymptotics.is_o.is_O Asymptotics.IsLittleO.isBigO
+-/
+#print Asymptotics.IsBigO.isBigOWith /-
theorem IsBigO.isBigOWith : f =O[l] g → ∃ c : ℝ, IsBigOWith c l f g :=
isBigO_iff_isBigOWith.1
#align asymptotics.is_O.is_O_with Asymptotics.IsBigO.isBigOWith
+-/
+#print Asymptotics.IsBigOWith.weaken /-
theorem IsBigOWith.weaken (h : IsBigOWith c l f g') (hc : c ≤ c') : IsBigOWith c' l f g' :=
IsBigOWith.of_bound <|
mem_of_superset h.bound fun x hx =>
@@ -206,50 +233,68 @@ theorem IsBigOWith.weaken (h : IsBigOWith c l f g') (hc : c ≤ c') : IsBigOWith
‖f x‖ ≤ c * ‖g' x‖ := hx
_ ≤ _ := mul_le_mul_of_nonneg_right hc (norm_nonneg _)
#align asymptotics.is_O_with.weaken Asymptotics.IsBigOWith.weaken
+-/
+#print Asymptotics.IsBigOWith.exists_pos /-
theorem IsBigOWith.exists_pos (h : IsBigOWith c l f g') :
∃ (c' : _) (H : 0 < c'), IsBigOWith c' l f g' :=
⟨max c 1, lt_of_lt_of_le zero_lt_one (le_max_right c 1), h.weaken <| le_max_left c 1⟩
#align asymptotics.is_O_with.exists_pos Asymptotics.IsBigOWith.exists_pos
+-/
+#print Asymptotics.IsBigO.exists_pos /-
theorem IsBigO.exists_pos (h : f =O[l] g') : ∃ (c : _) (H : 0 < c), IsBigOWith c l f g' :=
let ⟨c, hc⟩ := h.IsBigOWith
hc.exists_pos
#align asymptotics.is_O.exists_pos Asymptotics.IsBigO.exists_pos
+-/
+#print Asymptotics.IsBigOWith.exists_nonneg /-
theorem IsBigOWith.exists_nonneg (h : IsBigOWith c l f g') :
∃ (c' : _) (H : 0 ≤ c'), IsBigOWith c' l f g' :=
let ⟨c, cpos, hc⟩ := h.exists_pos
⟨c, le_of_lt cpos, hc⟩
#align asymptotics.is_O_with.exists_nonneg Asymptotics.IsBigOWith.exists_nonneg
+-/
+#print Asymptotics.IsBigO.exists_nonneg /-
theorem IsBigO.exists_nonneg (h : f =O[l] g') : ∃ (c : _) (H : 0 ≤ c), IsBigOWith c l f g' :=
let ⟨c, hc⟩ := h.IsBigOWith
hc.exists_nonneg
#align asymptotics.is_O.exists_nonneg Asymptotics.IsBigO.exists_nonneg
+-/
+#print Asymptotics.isBigO_iff_eventually_isBigOWith /-
/-- `f = O(g)` if and only if `is_O_with c f g` for all sufficiently large `c`. -/
theorem isBigO_iff_eventually_isBigOWith : f =O[l] g' ↔ ∀ᶠ c in atTop, IsBigOWith c l f g' :=
isBigO_iff_isBigOWith.trans
⟨fun ⟨c, hc⟩ => mem_atTop_sets.2 ⟨c, fun c' hc' => hc.weaken hc'⟩, fun h => h.exists⟩
#align asymptotics.is_O_iff_eventually_is_O_with Asymptotics.isBigO_iff_eventually_isBigOWith
+-/
+#print Asymptotics.isBigO_iff_eventually /-
/-- `f = O(g)` if and only if `∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖` for all sufficiently large `c`. -/
theorem isBigO_iff_eventually : f =O[l] g' ↔ ∀ᶠ c in atTop, ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g' x‖ :=
isBigO_iff_eventually_isBigOWith.trans <| by simp only [is_O_with]
#align asymptotics.is_O_iff_eventually Asymptotics.isBigO_iff_eventually
+-/
+#print Asymptotics.IsBigO.exists_mem_basis /-
theorem IsBigO.exists_mem_basis {ι} {p : ι → Prop} {s : ι → Set α} (h : f =O[l] g')
(hb : l.HasBasis p s) :
∃ (c : ℝ) (hc : 0 < c) (i : ι) (hi : p i), ∀ x ∈ s i, ‖f x‖ ≤ c * ‖g' x‖ :=
flip Exists₂.imp h.exists_pos fun c hc h => by
simpa only [is_O_with_iff, hb.eventually_iff, exists_prop] using h
#align asymptotics.is_O.exists_mem_basis Asymptotics.IsBigO.exists_mem_basis
+-/
+#print Asymptotics.isBigOWith_inv /-
theorem isBigOWith_inv (hc : 0 < c) : IsBigOWith c⁻¹ l f g ↔ ∀ᶠ x in l, c * ‖f x‖ ≤ ‖g x‖ := by
simp only [is_O_with, ← div_eq_inv_mul, le_div_iff' hc]
#align asymptotics.is_O_with_inv Asymptotics.isBigOWith_inv
+-/
+#print Asymptotics.isLittleO_iff_nat_mul_le_aux /-
-- We prove this lemma with strange assumptions to get two lemmas below automatically
theorem isLittleO_iff_nat_mul_le_aux (h₀ : (∀ x, 0 ≤ ‖f x‖) ∨ ∀ x, 0 ≤ ‖g x‖) :
f =o[l] g ↔ ∀ n : ℕ, ∀ᶠ x in l, ↑n * ‖f x‖ ≤ ‖g x‖ :=
@@ -270,27 +315,36 @@ theorem isLittleO_iff_nat_mul_le_aux (h₀ : (∀ x, 0 ≤ ‖f x‖) ∨ ∀ x,
refine' h₀.elim (fun hf => nonneg_of_mul_nonneg_right ((hf x).trans hfg) _) fun h => h x
exact inv_pos.2 hn₀
#align asymptotics.is_o_iff_nat_mul_le_aux Asymptotics.isLittleO_iff_nat_mul_le_aux
+-/
+#print Asymptotics.isLittleO_iff_nat_mul_le /-
theorem isLittleO_iff_nat_mul_le : f =o[l] g' ↔ ∀ n : ℕ, ∀ᶠ x in l, ↑n * ‖f x‖ ≤ ‖g' x‖ :=
isLittleO_iff_nat_mul_le_aux (Or.inr fun x => norm_nonneg _)
#align asymptotics.is_o_iff_nat_mul_le Asymptotics.isLittleO_iff_nat_mul_le
+-/
+#print Asymptotics.isLittleO_iff_nat_mul_le' /-
theorem isLittleO_iff_nat_mul_le' : f' =o[l] g ↔ ∀ n : ℕ, ∀ᶠ x in l, ↑n * ‖f' x‖ ≤ ‖g x‖ :=
isLittleO_iff_nat_mul_le_aux (Or.inl fun x => norm_nonneg _)
#align asymptotics.is_o_iff_nat_mul_le' Asymptotics.isLittleO_iff_nat_mul_le'
+-/
/-! ### Subsingleton -/
+#print Asymptotics.isLittleO_of_subsingleton /-
@[nontriviality]
theorem isLittleO_of_subsingleton [Subsingleton E'] : f' =o[l] g' :=
IsLittleO.of_bound fun c hc => by simp [Subsingleton.elim (f' _) 0, mul_nonneg hc.le]
#align asymptotics.is_o_of_subsingleton Asymptotics.isLittleO_of_subsingleton
+-/
+#print Asymptotics.isBigO_of_subsingleton /-
@[nontriviality]
theorem isBigO_of_subsingleton [Subsingleton E'] : f' =O[l] g' :=
isLittleO_of_subsingleton.IsBigO
#align asymptotics.is_O_of_subsingleton Asymptotics.isBigO_of_subsingleton
+-/
section congr
@@ -299,6 +353,7 @@ variable {f₁ f₂ : α → E} {g₁ g₂ : α → F}
/-! ### Congruence -/
+#print Asymptotics.isBigOWith_congr /-
theorem isBigOWith_congr (hc : c₁ = c₂) (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) :
IsBigOWith c₁ l f₁ g₁ ↔ IsBigOWith c₂ l f₂ g₂ :=
by
@@ -308,145 +363,203 @@ theorem isBigOWith_congr (hc : c₁ = c₂) (hf : f₁ =ᶠ[l] f₂) (hg : g₁
filter_upwards [hf, hg] with _ e₁ e₂
rw [e₁, e₂]
#align asymptotics.is_O_with_congr Asymptotics.isBigOWith_congr
+-/
+#print Asymptotics.IsBigOWith.congr' /-
theorem IsBigOWith.congr' (h : IsBigOWith c₁ l f₁ g₁) (hc : c₁ = c₂) (hf : f₁ =ᶠ[l] f₂)
(hg : g₁ =ᶠ[l] g₂) : IsBigOWith c₂ l f₂ g₂ :=
(isBigOWith_congr hc hf hg).mp h
#align asymptotics.is_O_with.congr' Asymptotics.IsBigOWith.congr'
+-/
+#print Asymptotics.IsBigOWith.congr /-
theorem IsBigOWith.congr (h : IsBigOWith c₁ l f₁ g₁) (hc : c₁ = c₂) (hf : ∀ x, f₁ x = f₂ x)
(hg : ∀ x, g₁ x = g₂ x) : IsBigOWith c₂ l f₂ g₂ :=
h.congr' hc (univ_mem' hf) (univ_mem' hg)
#align asymptotics.is_O_with.congr Asymptotics.IsBigOWith.congr
+-/
+#print Asymptotics.IsBigOWith.congr_left /-
theorem IsBigOWith.congr_left (h : IsBigOWith c l f₁ g) (hf : ∀ x, f₁ x = f₂ x) :
IsBigOWith c l f₂ g :=
h.congr rfl hf fun _ => rfl
#align asymptotics.is_O_with.congr_left Asymptotics.IsBigOWith.congr_left
+-/
+#print Asymptotics.IsBigOWith.congr_right /-
theorem IsBigOWith.congr_right (h : IsBigOWith c l f g₁) (hg : ∀ x, g₁ x = g₂ x) :
IsBigOWith c l f g₂ :=
h.congr rfl (fun _ => rfl) hg
#align asymptotics.is_O_with.congr_right Asymptotics.IsBigOWith.congr_right
+-/
+#print Asymptotics.IsBigOWith.congr_const /-
theorem IsBigOWith.congr_const (h : IsBigOWith c₁ l f g) (hc : c₁ = c₂) : IsBigOWith c₂ l f g :=
h.congr hc (fun _ => rfl) fun _ => rfl
#align asymptotics.is_O_with.congr_const Asymptotics.IsBigOWith.congr_const
+-/
+#print Asymptotics.isBigO_congr /-
theorem isBigO_congr (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₁ =O[l] g₁ ↔ f₂ =O[l] g₂ := by
unfold is_O; exact exists_congr fun c => is_O_with_congr rfl hf hg
#align asymptotics.is_O_congr Asymptotics.isBigO_congr
+-/
+#print Asymptotics.IsBigO.congr' /-
theorem IsBigO.congr' (h : f₁ =O[l] g₁) (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₂ =O[l] g₂ :=
(isBigO_congr hf hg).mp h
#align asymptotics.is_O.congr' Asymptotics.IsBigO.congr'
+-/
+#print Asymptotics.IsBigO.congr /-
theorem IsBigO.congr (h : f₁ =O[l] g₁) (hf : ∀ x, f₁ x = f₂ x) (hg : ∀ x, g₁ x = g₂ x) :
f₂ =O[l] g₂ :=
h.congr' (univ_mem' hf) (univ_mem' hg)
#align asymptotics.is_O.congr Asymptotics.IsBigO.congr
+-/
+#print Asymptotics.IsBigO.congr_left /-
theorem IsBigO.congr_left (h : f₁ =O[l] g) (hf : ∀ x, f₁ x = f₂ x) : f₂ =O[l] g :=
h.congr hf fun _ => rfl
#align asymptotics.is_O.congr_left Asymptotics.IsBigO.congr_left
+-/
+#print Asymptotics.IsBigO.congr_right /-
theorem IsBigO.congr_right (h : f =O[l] g₁) (hg : ∀ x, g₁ x = g₂ x) : f =O[l] g₂ :=
h.congr (fun _ => rfl) hg
#align asymptotics.is_O.congr_right Asymptotics.IsBigO.congr_right
+-/
+#print Asymptotics.isLittleO_congr /-
theorem isLittleO_congr (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₁ =o[l] g₁ ↔ f₂ =o[l] g₂ := by
unfold is_o; exact forall₂_congr fun c hc => is_O_with_congr (Eq.refl c) hf hg
#align asymptotics.is_o_congr Asymptotics.isLittleO_congr
+-/
+#print Asymptotics.IsLittleO.congr' /-
theorem IsLittleO.congr' (h : f₁ =o[l] g₁) (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₂ =o[l] g₂ :=
(isLittleO_congr hf hg).mp h
#align asymptotics.is_o.congr' Asymptotics.IsLittleO.congr'
+-/
+#print Asymptotics.IsLittleO.congr /-
theorem IsLittleO.congr (h : f₁ =o[l] g₁) (hf : ∀ x, f₁ x = f₂ x) (hg : ∀ x, g₁ x = g₂ x) :
f₂ =o[l] g₂ :=
h.congr' (univ_mem' hf) (univ_mem' hg)
#align asymptotics.is_o.congr Asymptotics.IsLittleO.congr
+-/
+#print Asymptotics.IsLittleO.congr_left /-
theorem IsLittleO.congr_left (h : f₁ =o[l] g) (hf : ∀ x, f₁ x = f₂ x) : f₂ =o[l] g :=
h.congr hf fun _ => rfl
#align asymptotics.is_o.congr_left Asymptotics.IsLittleO.congr_left
+-/
+#print Asymptotics.IsLittleO.congr_right /-
theorem IsLittleO.congr_right (h : f =o[l] g₁) (hg : ∀ x, g₁ x = g₂ x) : f =o[l] g₂ :=
h.congr (fun _ => rfl) hg
#align asymptotics.is_o.congr_right Asymptotics.IsLittleO.congr_right
+-/
+#print Filter.EventuallyEq.trans_isBigO /-
@[trans]
theorem Filter.EventuallyEq.trans_isBigO {f₁ f₂ : α → E} {g : α → F} (hf : f₁ =ᶠ[l] f₂)
(h : f₂ =O[l] g) : f₁ =O[l] g :=
h.congr' hf.symm EventuallyEq.rfl
#align filter.eventually_eq.trans_is_O Filter.EventuallyEq.trans_isBigO
+-/
+#print Filter.EventuallyEq.trans_isLittleO /-
@[trans]
theorem Filter.EventuallyEq.trans_isLittleO {f₁ f₂ : α → E} {g : α → F} (hf : f₁ =ᶠ[l] f₂)
(h : f₂ =o[l] g) : f₁ =o[l] g :=
h.congr' hf.symm EventuallyEq.rfl
#align filter.eventually_eq.trans_is_o Filter.EventuallyEq.trans_isLittleO
+-/
+#print Asymptotics.IsBigO.trans_eventuallyEq /-
@[trans]
theorem IsBigO.trans_eventuallyEq {f : α → E} {g₁ g₂ : α → F} (h : f =O[l] g₁) (hg : g₁ =ᶠ[l] g₂) :
f =O[l] g₂ :=
h.congr' EventuallyEq.rfl hg
#align asymptotics.is_O.trans_eventually_eq Asymptotics.IsBigO.trans_eventuallyEq
+-/
+#print Asymptotics.IsLittleO.trans_eventuallyEq /-
@[trans]
theorem IsLittleO.trans_eventuallyEq {f : α → E} {g₁ g₂ : α → F} (h : f =o[l] g₁)
(hg : g₁ =ᶠ[l] g₂) : f =o[l] g₂ :=
h.congr' EventuallyEq.rfl hg
#align asymptotics.is_o.trans_eventually_eq Asymptotics.IsLittleO.trans_eventuallyEq
+-/
end congr
/-! ### Filter operations and transitivity -/
+#print Asymptotics.IsBigOWith.comp_tendsto /-
theorem IsBigOWith.comp_tendsto (hcfg : IsBigOWith c l f g) {k : β → α} {l' : Filter β}
(hk : Tendsto k l' l) : IsBigOWith c l' (f ∘ k) (g ∘ k) :=
IsBigOWith.of_bound <| hk hcfg.bound
#align asymptotics.is_O_with.comp_tendsto Asymptotics.IsBigOWith.comp_tendsto
+-/
+#print Asymptotics.IsBigO.comp_tendsto /-
theorem IsBigO.comp_tendsto (hfg : f =O[l] g) {k : β → α} {l' : Filter β} (hk : Tendsto k l' l) :
(f ∘ k) =O[l'] (g ∘ k) :=
isBigO_iff_isBigOWith.2 <| hfg.IsBigOWith.imp fun c h => h.comp_tendsto hk
#align asymptotics.is_O.comp_tendsto Asymptotics.IsBigO.comp_tendsto
+-/
+#print Asymptotics.IsLittleO.comp_tendsto /-
theorem IsLittleO.comp_tendsto (hfg : f =o[l] g) {k : β → α} {l' : Filter β} (hk : Tendsto k l' l) :
(f ∘ k) =o[l'] (g ∘ k) :=
IsLittleO.of_isBigOWith fun c cpos => (hfg.forall_isBigOWith cpos).comp_tendsto hk
#align asymptotics.is_o.comp_tendsto Asymptotics.IsLittleO.comp_tendsto
+-/
+#print Asymptotics.isBigOWith_map /-
@[simp]
theorem isBigOWith_map {k : β → α} {l : Filter β} :
IsBigOWith c (map k l) f g ↔ IsBigOWith c l (f ∘ k) (g ∘ k) := by unfold is_O_with;
exact eventually_map
#align asymptotics.is_O_with_map Asymptotics.isBigOWith_map
+-/
+#print Asymptotics.isBigO_map /-
@[simp]
theorem isBigO_map {k : β → α} {l : Filter β} : f =O[map k l] g ↔ (f ∘ k) =O[l] (g ∘ k) := by
simp only [is_O, is_O_with_map]
#align asymptotics.is_O_map Asymptotics.isBigO_map
+-/
+#print Asymptotics.isLittleO_map /-
@[simp]
theorem isLittleO_map {k : β → α} {l : Filter β} : f =o[map k l] g ↔ (f ∘ k) =o[l] (g ∘ k) := by
simp only [is_o, is_O_with_map]
#align asymptotics.is_o_map Asymptotics.isLittleO_map
+-/
+#print Asymptotics.IsBigOWith.mono /-
theorem IsBigOWith.mono (h : IsBigOWith c l' f g) (hl : l ≤ l') : IsBigOWith c l f g :=
IsBigOWith.of_bound <| hl h.bound
#align asymptotics.is_O_with.mono Asymptotics.IsBigOWith.mono
+-/
+#print Asymptotics.IsBigO.mono /-
theorem IsBigO.mono (h : f =O[l'] g) (hl : l ≤ l') : f =O[l] g :=
isBigO_iff_isBigOWith.2 <| h.IsBigOWith.imp fun c h => h.mono hl
#align asymptotics.is_O.mono Asymptotics.IsBigO.mono
+-/
+#print Asymptotics.IsLittleO.mono /-
theorem IsLittleO.mono (h : f =o[l'] g) (hl : l ≤ l') : f =o[l] g :=
IsLittleO.of_isBigOWith fun c cpos => (h.forall_isBigOWith cpos).mono hl
#align asymptotics.is_o.mono Asymptotics.IsLittleO.mono
+-/
+#print Asymptotics.IsBigOWith.trans /-
theorem IsBigOWith.trans (hfg : IsBigOWith c l f g) (hgk : IsBigOWith c' l g k) (hc : 0 ≤ c) :
IsBigOWith (c * c') l f k := by
unfold is_O_with at *
@@ -456,7 +569,9 @@ theorem IsBigOWith.trans (hfg : IsBigOWith c l f g) (hgk : IsBigOWith c' l g k)
_ ≤ c * (c' * ‖k x‖) := (mul_le_mul_of_nonneg_left hx' hc)
_ = c * c' * ‖k x‖ := (mul_assoc _ _ _).symm
#align asymptotics.is_O_with.trans Asymptotics.IsBigOWith.trans
+-/
+#print Asymptotics.IsBigO.trans /-
@[trans]
theorem IsBigO.trans {f : α → E} {g : α → F'} {k : α → G} (hfg : f =O[l] g) (hgk : g =O[l] k) :
f =O[l] k :=
@@ -464,7 +579,9 @@ theorem IsBigO.trans {f : α → E} {g : α → F'} {k : α → G} (hfg : f =O[l
let ⟨c', hc'⟩ := hgk.IsBigOWith
(hc.trans hc' cnonneg).IsBigO
#align asymptotics.is_O.trans Asymptotics.IsBigO.trans
+-/
+#print Asymptotics.IsLittleO.trans_isBigOWith /-
theorem IsLittleO.trans_isBigOWith (hfg : f =o[l] g) (hgk : IsBigOWith c l g k) (hc : 0 < c) :
f =o[l] k := by
unfold is_o at *
@@ -472,14 +589,18 @@ theorem IsLittleO.trans_isBigOWith (hfg : f =o[l] g) (hgk : IsBigOWith c l g k)
have : 0 < c' / c := div_pos c'pos hc
exact ((hfg this).trans hgk this.le).congr_const (div_mul_cancel _ hc.ne')
#align asymptotics.is_o.trans_is_O_with Asymptotics.IsLittleO.trans_isBigOWith
+-/
+#print Asymptotics.IsLittleO.trans_isBigO /-
@[trans]
theorem IsLittleO.trans_isBigO {f : α → E} {g : α → F} {k : α → G'} (hfg : f =o[l] g)
(hgk : g =O[l] k) : f =o[l] k :=
let ⟨c, cpos, hc⟩ := hgk.exists_pos
hfg.trans_isBigOWith hc cpos
#align asymptotics.is_o.trans_is_O Asymptotics.IsLittleO.trans_isBigO
+-/
+#print Asymptotics.IsBigOWith.trans_isLittleO /-
theorem IsBigOWith.trans_isLittleO (hfg : IsBigOWith c l f g) (hgk : g =o[l] k) (hc : 0 < c) :
f =o[l] k := by
unfold is_o at *
@@ -487,73 +608,101 @@ theorem IsBigOWith.trans_isLittleO (hfg : IsBigOWith c l f g) (hgk : g =o[l] k)
have : 0 < c' / c := div_pos c'pos hc
exact (hfg.trans (hgk this) hc.le).congr_const (mul_div_cancel' _ hc.ne')
#align asymptotics.is_O_with.trans_is_o Asymptotics.IsBigOWith.trans_isLittleO
+-/
+#print Asymptotics.IsBigO.trans_isLittleO /-
@[trans]
theorem IsBigO.trans_isLittleO {f : α → E} {g : α → F'} {k : α → G} (hfg : f =O[l] g)
(hgk : g =o[l] k) : f =o[l] k :=
let ⟨c, cpos, hc⟩ := hfg.exists_pos
hc.trans_isLittleO hgk cpos
#align asymptotics.is_O.trans_is_o Asymptotics.IsBigO.trans_isLittleO
+-/
+#print Asymptotics.IsLittleO.trans /-
@[trans]
theorem IsLittleO.trans {f : α → E} {g : α → F} {k : α → G} (hfg : f =o[l] g) (hgk : g =o[l] k) :
f =o[l] k :=
hfg.trans_isBigOWith hgk.IsBigOWith one_pos
#align asymptotics.is_o.trans Asymptotics.IsLittleO.trans
+-/
+#print Filter.Eventually.trans_isBigO /-
theorem Filter.Eventually.trans_isBigO {f : α → E} {g : α → F'} {k : α → G}
(hfg : ∀ᶠ x in l, ‖f x‖ ≤ ‖g x‖) (hgk : g =O[l] k) : f =O[l] k :=
(IsBigO.of_bound' hfg).trans hgk
#align filter.eventually.trans_is_O Filter.Eventually.trans_isBigO
+-/
+#print Filter.Eventually.isBigO /-
theorem Filter.Eventually.isBigO {f : α → E} {g : α → ℝ} {l : Filter α}
(hfg : ∀ᶠ x in l, ‖f x‖ ≤ g x) : f =O[l] g :=
IsBigO.of_bound' <| hfg.mono fun x hx => hx.trans <| Real.le_norm_self _
#align filter.eventually.is_O Filter.Eventually.isBigO
+-/
section
variable (l)
+#print Asymptotics.isBigOWith_of_le' /-
theorem isBigOWith_of_le' (hfg : ∀ x, ‖f x‖ ≤ c * ‖g x‖) : IsBigOWith c l f g :=
IsBigOWith.of_bound <| univ_mem' hfg
#align asymptotics.is_O_with_of_le' Asymptotics.isBigOWith_of_le'
+-/
+#print Asymptotics.isBigOWith_of_le /-
theorem isBigOWith_of_le (hfg : ∀ x, ‖f x‖ ≤ ‖g x‖) : IsBigOWith 1 l f g :=
isBigOWith_of_le' l fun x => by rw [one_mul]; exact hfg x
#align asymptotics.is_O_with_of_le Asymptotics.isBigOWith_of_le
+-/
+#print Asymptotics.isBigO_of_le' /-
theorem isBigO_of_le' (hfg : ∀ x, ‖f x‖ ≤ c * ‖g x‖) : f =O[l] g :=
(isBigOWith_of_le' l hfg).IsBigO
#align asymptotics.is_O_of_le' Asymptotics.isBigO_of_le'
+-/
+#print Asymptotics.isBigO_of_le /-
theorem isBigO_of_le (hfg : ∀ x, ‖f x‖ ≤ ‖g x‖) : f =O[l] g :=
(isBigOWith_of_le l hfg).IsBigO
#align asymptotics.is_O_of_le Asymptotics.isBigO_of_le
+-/
end
+#print Asymptotics.isBigOWith_refl /-
theorem isBigOWith_refl (f : α → E) (l : Filter α) : IsBigOWith 1 l f f :=
isBigOWith_of_le l fun _ => le_rfl
#align asymptotics.is_O_with_refl Asymptotics.isBigOWith_refl
+-/
+#print Asymptotics.isBigO_refl /-
theorem isBigO_refl (f : α → E) (l : Filter α) : f =O[l] f :=
(isBigOWith_refl f l).IsBigO
#align asymptotics.is_O_refl Asymptotics.isBigO_refl
+-/
+#print Asymptotics.IsBigOWith.trans_le /-
theorem IsBigOWith.trans_le (hfg : IsBigOWith c l f g) (hgk : ∀ x, ‖g x‖ ≤ ‖k x‖) (hc : 0 ≤ c) :
IsBigOWith c l f k :=
(hfg.trans (isBigOWith_of_le l hgk) hc).congr_const <| mul_one c
#align asymptotics.is_O_with.trans_le Asymptotics.IsBigOWith.trans_le
+-/
+#print Asymptotics.IsBigO.trans_le /-
theorem IsBigO.trans_le (hfg : f =O[l] g') (hgk : ∀ x, ‖g' x‖ ≤ ‖k x‖) : f =O[l] k :=
hfg.trans (isBigO_of_le l hgk)
#align asymptotics.is_O.trans_le Asymptotics.IsBigO.trans_le
+-/
+#print Asymptotics.IsLittleO.trans_le /-
theorem IsLittleO.trans_le (hfg : f =o[l] g) (hgk : ∀ x, ‖g x‖ ≤ ‖k x‖) : f =o[l] k :=
hfg.trans_isBigOWith (isBigOWith_of_le _ hgk) zero_lt_one
#align asymptotics.is_o.trans_le Asymptotics.IsLittleO.trans_le
+-/
+#print Asymptotics.isLittleO_irrefl' /-
theorem isLittleO_irrefl' (h : ∃ᶠ x in l, ‖f' x‖ ≠ 0) : ¬f' =o[l] f' :=
by
intro ho
@@ -561,87 +710,119 @@ theorem isLittleO_irrefl' (h : ∃ᶠ x in l, ‖f' x‖ ≠ 0) : ¬f' =o[l] f'
rw [one_div, ← div_eq_inv_mul] at hle
exact (half_lt_self (lt_of_le_of_ne (norm_nonneg _) hne.symm)).not_le hle
#align asymptotics.is_o_irrefl' Asymptotics.isLittleO_irrefl'
+-/
+#print Asymptotics.isLittleO_irrefl /-
theorem isLittleO_irrefl (h : ∃ᶠ x in l, f'' x ≠ 0) : ¬f'' =o[l] f'' :=
isLittleO_irrefl' <| h.mono fun x => norm_ne_zero_iff.mpr
#align asymptotics.is_o_irrefl Asymptotics.isLittleO_irrefl
+-/
+#print Asymptotics.IsBigO.not_isLittleO /-
theorem IsBigO.not_isLittleO (h : f'' =O[l] g') (hf : ∃ᶠ x in l, f'' x ≠ 0) : ¬g' =o[l] f'' :=
fun h' => isLittleO_irrefl hf (h.trans_isLittleO h')
#align asymptotics.is_O.not_is_o Asymptotics.IsBigO.not_isLittleO
+-/
+#print Asymptotics.IsLittleO.not_isBigO /-
theorem IsLittleO.not_isBigO (h : f'' =o[l] g') (hf : ∃ᶠ x in l, f'' x ≠ 0) : ¬g' =O[l] f'' :=
fun h' => isLittleO_irrefl hf (h.trans_isBigO h')
#align asymptotics.is_o.not_is_O Asymptotics.IsLittleO.not_isBigO
+-/
section Bot
variable (c f g)
+#print Asymptotics.isBigOWith_bot /-
@[simp]
theorem isBigOWith_bot : IsBigOWith c ⊥ f g :=
IsBigOWith.of_bound <| trivial
#align asymptotics.is_O_with_bot Asymptotics.isBigOWith_bot
+-/
+#print Asymptotics.isBigO_bot /-
@[simp]
theorem isBigO_bot : f =O[⊥] g :=
(isBigOWith_bot 1 f g).IsBigO
#align asymptotics.is_O_bot Asymptotics.isBigO_bot
+-/
+#print Asymptotics.isLittleO_bot /-
@[simp]
theorem isLittleO_bot : f =o[⊥] g :=
IsLittleO.of_isBigOWith fun c _ => isBigOWith_bot c f g
#align asymptotics.is_o_bot Asymptotics.isLittleO_bot
+-/
end Bot
+#print Asymptotics.isBigOWith_pure /-
@[simp]
theorem isBigOWith_pure {x} : IsBigOWith c (pure x) f g ↔ ‖f x‖ ≤ c * ‖g x‖ :=
isBigOWith_iff
#align asymptotics.is_O_with_pure Asymptotics.isBigOWith_pure
+-/
+#print Asymptotics.IsBigOWith.sup /-
theorem IsBigOWith.sup (h : IsBigOWith c l f g) (h' : IsBigOWith c l' f g) :
IsBigOWith c (l ⊔ l') f g :=
IsBigOWith.of_bound <| mem_sup.2 ⟨h.bound, h'.bound⟩
#align asymptotics.is_O_with.sup Asymptotics.IsBigOWith.sup
+-/
+#print Asymptotics.IsBigOWith.sup' /-
theorem IsBigOWith.sup' (h : IsBigOWith c l f g') (h' : IsBigOWith c' l' f g') :
IsBigOWith (max c c') (l ⊔ l') f g' :=
IsBigOWith.of_bound <|
mem_sup.2 ⟨(h.weaken <| le_max_left c c').bound, (h'.weaken <| le_max_right c c').bound⟩
#align asymptotics.is_O_with.sup' Asymptotics.IsBigOWith.sup'
+-/
+#print Asymptotics.IsBigO.sup /-
theorem IsBigO.sup (h : f =O[l] g') (h' : f =O[l'] g') : f =O[l ⊔ l'] g' :=
let ⟨c, hc⟩ := h.IsBigOWith
let ⟨c', hc'⟩ := h'.IsBigOWith
(hc.sup' hc').IsBigO
#align asymptotics.is_O.sup Asymptotics.IsBigO.sup
+-/
+#print Asymptotics.IsLittleO.sup /-
theorem IsLittleO.sup (h : f =o[l] g) (h' : f =o[l'] g) : f =o[l ⊔ l'] g :=
IsLittleO.of_isBigOWith fun c cpos => (h.forall_isBigOWith cpos).sup (h'.forall_isBigOWith cpos)
#align asymptotics.is_o.sup Asymptotics.IsLittleO.sup
+-/
+#print Asymptotics.isBigO_sup /-
@[simp]
theorem isBigO_sup : f =O[l ⊔ l'] g' ↔ f =O[l] g' ∧ f =O[l'] g' :=
⟨fun h => ⟨h.mono le_sup_left, h.mono le_sup_right⟩, fun h => h.1.sup h.2⟩
#align asymptotics.is_O_sup Asymptotics.isBigO_sup
+-/
+#print Asymptotics.isLittleO_sup /-
@[simp]
theorem isLittleO_sup : f =o[l ⊔ l'] g ↔ f =o[l] g ∧ f =o[l'] g :=
⟨fun h => ⟨h.mono le_sup_left, h.mono le_sup_right⟩, fun h => h.1.sup h.2⟩
#align asymptotics.is_o_sup Asymptotics.isLittleO_sup
+-/
+#print Asymptotics.isBigOWith_insert /-
theorem isBigOWith_insert [TopologicalSpace α] {x : α} {s : Set α} {C : ℝ} {g : α → E} {g' : α → F}
(h : ‖g x‖ ≤ C * ‖g' x‖) : IsBigOWith C (𝓝[insert x s] x) g g' ↔ IsBigOWith C (𝓝[s] x) g g' :=
by simp_rw [is_O_with, nhdsWithin_insert, eventually_sup, eventually_pure, h, true_and_iff]
#align asymptotics.is_O_with_insert Asymptotics.isBigOWith_insert
+-/
+#print Asymptotics.IsBigOWith.insert /-
theorem IsBigOWith.insert [TopologicalSpace α] {x : α} {s : Set α} {C : ℝ} {g : α → E} {g' : α → F}
(h1 : IsBigOWith C (𝓝[s] x) g g') (h2 : ‖g x‖ ≤ C * ‖g' x‖) :
IsBigOWith C (𝓝[insert x s] x) g g' :=
(isBigOWith_insert h2).mpr h1
#align asymptotics.is_O_with.insert Asymptotics.IsBigOWith.insert
+-/
+#print Asymptotics.isLittleO_insert /-
theorem isLittleO_insert [TopologicalSpace α] {x : α} {s : Set α} {g : α → E'} {g' : α → F'}
(h : g x = 0) : g =o[𝓝[insert x s] x] g' ↔ g =o[𝓝[s] x] g' :=
by
@@ -651,11 +832,14 @@ theorem isLittleO_insert [TopologicalSpace α] {x : α} {s : Set α} {g : α →
rw [h, norm_zero]
exact mul_nonneg hc.le (norm_nonneg _)
#align asymptotics.is_o_insert Asymptotics.isLittleO_insert
+-/
+#print Asymptotics.IsLittleO.insert /-
theorem IsLittleO.insert [TopologicalSpace α] {x : α} {s : Set α} {g : α → E'} {g' : α → F'}
(h1 : g =o[𝓝[s] x] g') (h2 : g x = 0) : g =o[𝓝[insert x s] x] g' :=
(isLittleO_insert h2).mpr h1
#align asymptotics.is_o.insert Asymptotics.IsLittleO.insert
+-/
/-! ### Simplification : norm, abs -/
@@ -664,15 +848,19 @@ section NormAbs
variable {u v : α → ℝ}
+#print Asymptotics.isBigOWith_norm_right /-
@[simp]
theorem isBigOWith_norm_right : (IsBigOWith c l f fun x => ‖g' x‖) ↔ IsBigOWith c l f g' := by
simp only [is_O_with, norm_norm]
#align asymptotics.is_O_with_norm_right Asymptotics.isBigOWith_norm_right
+-/
+#print Asymptotics.isBigOWith_abs_right /-
@[simp]
theorem isBigOWith_abs_right : (IsBigOWith c l f fun x => |u x|) ↔ IsBigOWith c l f u :=
@isBigOWith_norm_right _ _ _ _ _ _ f u l
#align asymptotics.is_O_with_abs_right Asymptotics.isBigOWith_abs_right
+-/
alias is_O_with_norm_right ↔ is_O_with.of_norm_right is_O_with.norm_right
#align asymptotics.is_O_with.of_norm_right Asymptotics.IsBigOWith.of_norm_right
@@ -682,15 +870,19 @@ alias is_O_with_abs_right ↔ is_O_with.of_abs_right is_O_with.abs_right
#align asymptotics.is_O_with.of_abs_right Asymptotics.IsBigOWith.of_abs_right
#align asymptotics.is_O_with.abs_right Asymptotics.IsBigOWith.abs_right
+#print Asymptotics.isBigO_norm_right /-
@[simp]
theorem isBigO_norm_right : (f =O[l] fun x => ‖g' x‖) ↔ f =O[l] g' := by unfold is_O;
exact exists_congr fun _ => is_O_with_norm_right
#align asymptotics.is_O_norm_right Asymptotics.isBigO_norm_right
+-/
+#print Asymptotics.isBigO_abs_right /-
@[simp]
theorem isBigO_abs_right : (f =O[l] fun x => |u x|) ↔ f =O[l] u :=
@isBigO_norm_right _ _ ℝ _ _ _ _ _
#align asymptotics.is_O_abs_right Asymptotics.isBigO_abs_right
+-/
alias is_O_norm_right ↔ is_O.of_norm_right is_O.norm_right
#align asymptotics.is_O.of_norm_right Asymptotics.IsBigO.of_norm_right
@@ -700,15 +892,19 @@ alias is_O_abs_right ↔ is_O.of_abs_right is_O.abs_right
#align asymptotics.is_O.of_abs_right Asymptotics.IsBigO.of_abs_right
#align asymptotics.is_O.abs_right Asymptotics.IsBigO.abs_right
+#print Asymptotics.isLittleO_norm_right /-
@[simp]
theorem isLittleO_norm_right : (f =o[l] fun x => ‖g' x‖) ↔ f =o[l] g' := by unfold is_o;
exact forall₂_congr fun _ _ => is_O_with_norm_right
#align asymptotics.is_o_norm_right Asymptotics.isLittleO_norm_right
+-/
+#print Asymptotics.isLittleO_abs_right /-
@[simp]
theorem isLittleO_abs_right : (f =o[l] fun x => |u x|) ↔ f =o[l] u :=
@isLittleO_norm_right _ _ ℝ _ _ _ _ _
#align asymptotics.is_o_abs_right Asymptotics.isLittleO_abs_right
+-/
alias is_o_norm_right ↔ is_o.of_norm_right is_o.norm_right
#align asymptotics.is_o.of_norm_right Asymptotics.IsLittleO.of_norm_right
@@ -718,15 +914,19 @@ alias is_o_abs_right ↔ is_o.of_abs_right is_o.abs_right
#align asymptotics.is_o.of_abs_right Asymptotics.IsLittleO.of_abs_right
#align asymptotics.is_o.abs_right Asymptotics.IsLittleO.abs_right
+#print Asymptotics.isBigOWith_norm_left /-
@[simp]
theorem isBigOWith_norm_left : IsBigOWith c l (fun x => ‖f' x‖) g ↔ IsBigOWith c l f' g := by
simp only [is_O_with, norm_norm]
#align asymptotics.is_O_with_norm_left Asymptotics.isBigOWith_norm_left
+-/
+#print Asymptotics.isBigOWith_abs_left /-
@[simp]
theorem isBigOWith_abs_left : IsBigOWith c l (fun x => |u x|) g ↔ IsBigOWith c l u g :=
@isBigOWith_norm_left _ _ _ _ _ _ g u l
#align asymptotics.is_O_with_abs_left Asymptotics.isBigOWith_abs_left
+-/
alias is_O_with_norm_left ↔ is_O_with.of_norm_left is_O_with.norm_left
#align asymptotics.is_O_with.of_norm_left Asymptotics.IsBigOWith.of_norm_left
@@ -736,15 +936,19 @@ alias is_O_with_abs_left ↔ is_O_with.of_abs_left is_O_with.abs_left
#align asymptotics.is_O_with.of_abs_left Asymptotics.IsBigOWith.of_abs_left
#align asymptotics.is_O_with.abs_left Asymptotics.IsBigOWith.abs_left
+#print Asymptotics.isBigO_norm_left /-
@[simp]
theorem isBigO_norm_left : (fun x => ‖f' x‖) =O[l] g ↔ f' =O[l] g := by unfold is_O;
exact exists_congr fun _ => is_O_with_norm_left
#align asymptotics.is_O_norm_left Asymptotics.isBigO_norm_left
+-/
+#print Asymptotics.isBigO_abs_left /-
@[simp]
theorem isBigO_abs_left : (fun x => |u x|) =O[l] g ↔ u =O[l] g :=
@isBigO_norm_left _ _ _ _ _ g u l
#align asymptotics.is_O_abs_left Asymptotics.isBigO_abs_left
+-/
alias is_O_norm_left ↔ is_O.of_norm_left is_O.norm_left
#align asymptotics.is_O.of_norm_left Asymptotics.IsBigO.of_norm_left
@@ -754,15 +958,19 @@ alias is_O_abs_left ↔ is_O.of_abs_left is_O.abs_left
#align asymptotics.is_O.of_abs_left Asymptotics.IsBigO.of_abs_left
#align asymptotics.is_O.abs_left Asymptotics.IsBigO.abs_left
+#print Asymptotics.isLittleO_norm_left /-
@[simp]
theorem isLittleO_norm_left : (fun x => ‖f' x‖) =o[l] g ↔ f' =o[l] g := by unfold is_o;
exact forall₂_congr fun _ _ => is_O_with_norm_left
#align asymptotics.is_o_norm_left Asymptotics.isLittleO_norm_left
+-/
+#print Asymptotics.isLittleO_abs_left /-
@[simp]
theorem isLittleO_abs_left : (fun x => |u x|) =o[l] g ↔ u =o[l] g :=
@isLittleO_norm_left _ _ _ _ _ g u l
#align asymptotics.is_o_abs_left Asymptotics.isLittleO_abs_left
+-/
alias is_o_norm_left ↔ is_o.of_norm_left is_o.norm_left
#align asymptotics.is_o.of_norm_left Asymptotics.IsLittleO.of_norm_left
@@ -772,15 +980,19 @@ alias is_o_abs_left ↔ is_o.of_abs_left is_o.abs_left
#align asymptotics.is_o.of_abs_left Asymptotics.IsLittleO.of_abs_left
#align asymptotics.is_o.abs_left Asymptotics.IsLittleO.abs_left
+#print Asymptotics.isBigOWith_norm_norm /-
theorem isBigOWith_norm_norm :
(IsBigOWith c l (fun x => ‖f' x‖) fun x => ‖g' x‖) ↔ IsBigOWith c l f' g' :=
isBigOWith_norm_left.trans isBigOWith_norm_right
#align asymptotics.is_O_with_norm_norm Asymptotics.isBigOWith_norm_norm
+-/
+#print Asymptotics.isBigOWith_abs_abs /-
theorem isBigOWith_abs_abs :
(IsBigOWith c l (fun x => |u x|) fun x => |v x|) ↔ IsBigOWith c l u v :=
isBigOWith_abs_left.trans isBigOWith_abs_right
#align asymptotics.is_O_with_abs_abs Asymptotics.isBigOWith_abs_abs
+-/
alias is_O_with_norm_norm ↔ is_O_with.of_norm_norm is_O_with.norm_norm
#align asymptotics.is_O_with.of_norm_norm Asymptotics.IsBigOWith.of_norm_norm
@@ -790,13 +1002,17 @@ alias is_O_with_abs_abs ↔ is_O_with.of_abs_abs is_O_with.abs_abs
#align asymptotics.is_O_with.of_abs_abs Asymptotics.IsBigOWith.of_abs_abs
#align asymptotics.is_O_with.abs_abs Asymptotics.IsBigOWith.abs_abs
+#print Asymptotics.isBigO_norm_norm /-
theorem isBigO_norm_norm : ((fun x => ‖f' x‖) =O[l] fun x => ‖g' x‖) ↔ f' =O[l] g' :=
isBigO_norm_left.trans isBigO_norm_right
#align asymptotics.is_O_norm_norm Asymptotics.isBigO_norm_norm
+-/
+#print Asymptotics.isBigO_abs_abs /-
theorem isBigO_abs_abs : ((fun x => |u x|) =O[l] fun x => |v x|) ↔ u =O[l] v :=
isBigO_abs_left.trans isBigO_abs_right
#align asymptotics.is_O_abs_abs Asymptotics.isBigO_abs_abs
+-/
alias is_O_norm_norm ↔ is_O.of_norm_norm is_O.norm_norm
#align asymptotics.is_O.of_norm_norm Asymptotics.IsBigO.of_norm_norm
@@ -806,13 +1022,17 @@ alias is_O_abs_abs ↔ is_O.of_abs_abs is_O.abs_abs
#align asymptotics.is_O.of_abs_abs Asymptotics.IsBigO.of_abs_abs
#align asymptotics.is_O.abs_abs Asymptotics.IsBigO.abs_abs
+#print Asymptotics.isLittleO_norm_norm /-
theorem isLittleO_norm_norm : ((fun x => ‖f' x‖) =o[l] fun x => ‖g' x‖) ↔ f' =o[l] g' :=
isLittleO_norm_left.trans isLittleO_norm_right
#align asymptotics.is_o_norm_norm Asymptotics.isLittleO_norm_norm
+-/
+#print Asymptotics.isLittleO_abs_abs /-
theorem isLittleO_abs_abs : ((fun x => |u x|) =o[l] fun x => |v x|) ↔ u =o[l] v :=
isLittleO_abs_left.trans isLittleO_abs_right
#align asymptotics.is_o_abs_abs Asymptotics.isLittleO_abs_abs
+-/
alias is_o_norm_norm ↔ is_o.of_norm_norm is_o.norm_norm
#align asymptotics.is_o.of_norm_norm Asymptotics.IsLittleO.of_norm_norm
@@ -827,55 +1047,67 @@ end NormAbs
/-! ### Simplification: negate -/
+#print Asymptotics.isBigOWith_neg_right /-
@[simp]
theorem isBigOWith_neg_right : (IsBigOWith c l f fun x => -g' x) ↔ IsBigOWith c l f g' := by
simp only [is_O_with, norm_neg]
#align asymptotics.is_O_with_neg_right Asymptotics.isBigOWith_neg_right
+-/
alias is_O_with_neg_right ↔ is_O_with.of_neg_right is_O_with.neg_right
#align asymptotics.is_O_with.of_neg_right Asymptotics.IsBigOWith.of_neg_right
#align asymptotics.is_O_with.neg_right Asymptotics.IsBigOWith.neg_right
+#print Asymptotics.isBigO_neg_right /-
@[simp]
theorem isBigO_neg_right : (f =O[l] fun x => -g' x) ↔ f =O[l] g' := by unfold is_O;
exact exists_congr fun _ => is_O_with_neg_right
#align asymptotics.is_O_neg_right Asymptotics.isBigO_neg_right
+-/
alias is_O_neg_right ↔ is_O.of_neg_right is_O.neg_right
#align asymptotics.is_O.of_neg_right Asymptotics.IsBigO.of_neg_right
#align asymptotics.is_O.neg_right Asymptotics.IsBigO.neg_right
+#print Asymptotics.isLittleO_neg_right /-
@[simp]
theorem isLittleO_neg_right : (f =o[l] fun x => -g' x) ↔ f =o[l] g' := by unfold is_o;
exact forall₂_congr fun _ _ => is_O_with_neg_right
#align asymptotics.is_o_neg_right Asymptotics.isLittleO_neg_right
+-/
alias is_o_neg_right ↔ is_o.of_neg_right is_o.neg_right
#align asymptotics.is_o.of_neg_right Asymptotics.IsLittleO.of_neg_right
#align asymptotics.is_o.neg_right Asymptotics.IsLittleO.neg_right
+#print Asymptotics.isBigOWith_neg_left /-
@[simp]
theorem isBigOWith_neg_left : IsBigOWith c l (fun x => -f' x) g ↔ IsBigOWith c l f' g := by
simp only [is_O_with, norm_neg]
#align asymptotics.is_O_with_neg_left Asymptotics.isBigOWith_neg_left
+-/
alias is_O_with_neg_left ↔ is_O_with.of_neg_left is_O_with.neg_left
#align asymptotics.is_O_with.of_neg_left Asymptotics.IsBigOWith.of_neg_left
#align asymptotics.is_O_with.neg_left Asymptotics.IsBigOWith.neg_left
+#print Asymptotics.isBigO_neg_left /-
@[simp]
theorem isBigO_neg_left : (fun x => -f' x) =O[l] g ↔ f' =O[l] g := by unfold is_O;
exact exists_congr fun _ => is_O_with_neg_left
#align asymptotics.is_O_neg_left Asymptotics.isBigO_neg_left
+-/
alias is_O_neg_left ↔ is_O.of_neg_left is_O.neg_left
#align asymptotics.is_O.of_neg_left Asymptotics.IsBigO.of_neg_left
#align asymptotics.is_O.neg_left Asymptotics.IsBigO.neg_left
+#print Asymptotics.isLittleO_neg_left /-
@[simp]
theorem isLittleO_neg_left : (fun x => -f' x) =o[l] g ↔ f' =o[l] g := by unfold is_o;
exact forall₂_congr fun _ _ => is_O_with_neg_left
#align asymptotics.is_o_neg_left Asymptotics.isLittleO_neg_left
+-/
alias is_o_neg_left ↔ is_o.of_neg_right is_o.neg_left
#align asymptotics.is_o.of_neg_right Asymptotics.IsLittleO.of_neg_right
@@ -884,135 +1116,189 @@ alias is_o_neg_left ↔ is_o.of_neg_right is_o.neg_left
/-! ### Product of functions (right) -/
+#print Asymptotics.isBigOWith_fst_prod /-
theorem isBigOWith_fst_prod : IsBigOWith 1 l f' fun x => (f' x, g' x) :=
isBigOWith_of_le l fun x => le_max_left _ _
#align asymptotics.is_O_with_fst_prod Asymptotics.isBigOWith_fst_prod
+-/
+#print Asymptotics.isBigOWith_snd_prod /-
theorem isBigOWith_snd_prod : IsBigOWith 1 l g' fun x => (f' x, g' x) :=
isBigOWith_of_le l fun x => le_max_right _ _
#align asymptotics.is_O_with_snd_prod Asymptotics.isBigOWith_snd_prod
+-/
+#print Asymptotics.isBigO_fst_prod /-
theorem isBigO_fst_prod : f' =O[l] fun x => (f' x, g' x) :=
isBigOWith_fst_prod.IsBigO
#align asymptotics.is_O_fst_prod Asymptotics.isBigO_fst_prod
+-/
+#print Asymptotics.isBigO_snd_prod /-
theorem isBigO_snd_prod : g' =O[l] fun x => (f' x, g' x) :=
isBigOWith_snd_prod.IsBigO
#align asymptotics.is_O_snd_prod Asymptotics.isBigO_snd_prod
+-/
+#print Asymptotics.isBigO_fst_prod' /-
theorem isBigO_fst_prod' {f' : α → E' × F'} : (fun x => (f' x).1) =O[l] f' := by
simpa [is_O, is_O_with] using is_O_fst_prod
#align asymptotics.is_O_fst_prod' Asymptotics.isBigO_fst_prod'
+-/
+#print Asymptotics.isBigO_snd_prod' /-
theorem isBigO_snd_prod' {f' : α → E' × F'} : (fun x => (f' x).2) =O[l] f' := by
simpa [is_O, is_O_with] using is_O_snd_prod
#align asymptotics.is_O_snd_prod' Asymptotics.isBigO_snd_prod'
+-/
section
variable (f' k')
+#print Asymptotics.IsBigOWith.prod_rightl /-
theorem IsBigOWith.prod_rightl (h : IsBigOWith c l f g') (hc : 0 ≤ c) :
IsBigOWith c l f fun x => (g' x, k' x) :=
(h.trans isBigOWith_fst_prod hc).congr_const (mul_one c)
#align asymptotics.is_O_with.prod_rightl Asymptotics.IsBigOWith.prod_rightl
+-/
+#print Asymptotics.IsBigO.prod_rightl /-
theorem IsBigO.prod_rightl (h : f =O[l] g') : f =O[l] fun x => (g' x, k' x) :=
let ⟨c, cnonneg, hc⟩ := h.exists_nonneg
(hc.prod_rightl k' cnonneg).IsBigO
#align asymptotics.is_O.prod_rightl Asymptotics.IsBigO.prod_rightl
+-/
+#print Asymptotics.IsLittleO.prod_rightl /-
theorem IsLittleO.prod_rightl (h : f =o[l] g') : f =o[l] fun x => (g' x, k' x) :=
IsLittleO.of_isBigOWith fun c cpos => (h.forall_isBigOWith cpos).prod_rightl k' cpos.le
#align asymptotics.is_o.prod_rightl Asymptotics.IsLittleO.prod_rightl
+-/
+#print Asymptotics.IsBigOWith.prod_rightr /-
theorem IsBigOWith.prod_rightr (h : IsBigOWith c l f g') (hc : 0 ≤ c) :
IsBigOWith c l f fun x => (f' x, g' x) :=
(h.trans isBigOWith_snd_prod hc).congr_const (mul_one c)
#align asymptotics.is_O_with.prod_rightr Asymptotics.IsBigOWith.prod_rightr
+-/
+#print Asymptotics.IsBigO.prod_rightr /-
theorem IsBigO.prod_rightr (h : f =O[l] g') : f =O[l] fun x => (f' x, g' x) :=
let ⟨c, cnonneg, hc⟩ := h.exists_nonneg
(hc.prod_rightr f' cnonneg).IsBigO
#align asymptotics.is_O.prod_rightr Asymptotics.IsBigO.prod_rightr
+-/
+#print Asymptotics.IsLittleO.prod_rightr /-
theorem IsLittleO.prod_rightr (h : f =o[l] g') : f =o[l] fun x => (f' x, g' x) :=
IsLittleO.of_isBigOWith fun c cpos => (h.forall_isBigOWith cpos).prod_rightr f' cpos.le
#align asymptotics.is_o.prod_rightr Asymptotics.IsLittleO.prod_rightr
+-/
end
+#print Asymptotics.IsBigOWith.prod_left_same /-
theorem IsBigOWith.prod_left_same (hf : IsBigOWith c l f' k') (hg : IsBigOWith c l g' k') :
IsBigOWith c l (fun x => (f' x, g' x)) k' := by
rw [is_O_with_iff] at * <;> filter_upwards [hf, hg] with x using max_le
#align asymptotics.is_O_with.prod_left_same Asymptotics.IsBigOWith.prod_left_same
+-/
+#print Asymptotics.IsBigOWith.prod_left /-
theorem IsBigOWith.prod_left (hf : IsBigOWith c l f' k') (hg : IsBigOWith c' l g' k') :
IsBigOWith (max c c') l (fun x => (f' x, g' x)) k' :=
(hf.weaken <| le_max_left c c').prod_left_same (hg.weaken <| le_max_right c c')
#align asymptotics.is_O_with.prod_left Asymptotics.IsBigOWith.prod_left
+-/
+#print Asymptotics.IsBigOWith.prod_left_fst /-
theorem IsBigOWith.prod_left_fst (h : IsBigOWith c l (fun x => (f' x, g' x)) k') :
IsBigOWith c l f' k' :=
(isBigOWith_fst_prod.trans h zero_le_one).congr_const <| one_mul c
#align asymptotics.is_O_with.prod_left_fst Asymptotics.IsBigOWith.prod_left_fst
+-/
+#print Asymptotics.IsBigOWith.prod_left_snd /-
theorem IsBigOWith.prod_left_snd (h : IsBigOWith c l (fun x => (f' x, g' x)) k') :
IsBigOWith c l g' k' :=
(isBigOWith_snd_prod.trans h zero_le_one).congr_const <| one_mul c
#align asymptotics.is_O_with.prod_left_snd Asymptotics.IsBigOWith.prod_left_snd
+-/
+#print Asymptotics.isBigOWith_prod_left /-
theorem isBigOWith_prod_left :
IsBigOWith c l (fun x => (f' x, g' x)) k' ↔ IsBigOWith c l f' k' ∧ IsBigOWith c l g' k' :=
⟨fun h => ⟨h.prod_left_fst, h.prod_left_snd⟩, fun h => h.1.prod_left_same h.2⟩
#align asymptotics.is_O_with_prod_left Asymptotics.isBigOWith_prod_left
+-/
+#print Asymptotics.IsBigO.prod_left /-
theorem IsBigO.prod_left (hf : f' =O[l] k') (hg : g' =O[l] k') : (fun x => (f' x, g' x)) =O[l] k' :=
let ⟨c, hf⟩ := hf.IsBigOWith
let ⟨c', hg⟩ := hg.IsBigOWith
(hf.prodLeft hg).IsBigO
#align asymptotics.is_O.prod_left Asymptotics.IsBigO.prod_left
+-/
+#print Asymptotics.IsBigO.prod_left_fst /-
theorem IsBigO.prod_left_fst : (fun x => (f' x, g' x)) =O[l] k' → f' =O[l] k' :=
IsBigO.trans isBigO_fst_prod
#align asymptotics.is_O.prod_left_fst Asymptotics.IsBigO.prod_left_fst
+-/
+#print Asymptotics.IsBigO.prod_left_snd /-
theorem IsBigO.prod_left_snd : (fun x => (f' x, g' x)) =O[l] k' → g' =O[l] k' :=
IsBigO.trans isBigO_snd_prod
#align asymptotics.is_O.prod_left_snd Asymptotics.IsBigO.prod_left_snd
+-/
+#print Asymptotics.isBigO_prod_left /-
@[simp]
theorem isBigO_prod_left : (fun x => (f' x, g' x)) =O[l] k' ↔ f' =O[l] k' ∧ g' =O[l] k' :=
⟨fun h => ⟨h.prod_left_fst, h.prod_left_snd⟩, fun h => h.1.prodLeft h.2⟩
#align asymptotics.is_O_prod_left Asymptotics.isBigO_prod_left
+-/
+#print Asymptotics.IsLittleO.prod_left /-
theorem IsLittleO.prod_left (hf : f' =o[l] k') (hg : g' =o[l] k') :
(fun x => (f' x, g' x)) =o[l] k' :=
IsLittleO.of_isBigOWith fun c hc =>
(hf.forall_isBigOWith hc).prod_left_same (hg.forall_isBigOWith hc)
#align asymptotics.is_o.prod_left Asymptotics.IsLittleO.prod_left
+-/
+#print Asymptotics.IsLittleO.prod_left_fst /-
theorem IsLittleO.prod_left_fst : (fun x => (f' x, g' x)) =o[l] k' → f' =o[l] k' :=
IsBigO.trans_isLittleO isBigO_fst_prod
#align asymptotics.is_o.prod_left_fst Asymptotics.IsLittleO.prod_left_fst
+-/
+#print Asymptotics.IsLittleO.prod_left_snd /-
theorem IsLittleO.prod_left_snd : (fun x => (f' x, g' x)) =o[l] k' → g' =o[l] k' :=
IsBigO.trans_isLittleO isBigO_snd_prod
#align asymptotics.is_o.prod_left_snd Asymptotics.IsLittleO.prod_left_snd
+-/
+#print Asymptotics.isLittleO_prod_left /-
@[simp]
theorem isLittleO_prod_left : (fun x => (f' x, g' x)) =o[l] k' ↔ f' =o[l] k' ∧ g' =o[l] k' :=
⟨fun h => ⟨h.prod_left_fst, h.prod_left_snd⟩, fun h => h.1.prodLeft h.2⟩
#align asymptotics.is_o_prod_left Asymptotics.isLittleO_prod_left
+-/
+#print Asymptotics.IsBigOWith.eq_zero_imp /-
theorem IsBigOWith.eq_zero_imp (h : IsBigOWith c l f'' g'') : ∀ᶠ x in l, g'' x = 0 → f'' x = 0 :=
Eventually.mono h.bound fun x hx hg => norm_le_zero_iff.1 <| by simpa [hg] using hx
#align asymptotics.is_O_with.eq_zero_imp Asymptotics.IsBigOWith.eq_zero_imp
+-/
+#print Asymptotics.IsBigO.eq_zero_imp /-
theorem IsBigO.eq_zero_imp (h : f'' =O[l] g'') : ∀ᶠ x in l, g'' x = 0 → f'' x = 0 :=
let ⟨C, hC⟩ := h.IsBigOWith
hC.eq_zero_imp
#align asymptotics.is_O.eq_zero_imp Asymptotics.IsBigO.eq_zero_imp
+-/
/-! ### Addition and subtraction -/
@@ -1021,6 +1307,7 @@ section add_sub
variable {f₁ f₂ : α → E'} {g₁ g₂ : α → F'}
+#print Asymptotics.IsBigOWith.add /-
theorem IsBigOWith.add (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : IsBigOWith c₂ l f₂ g) :
IsBigOWith (c₁ + c₂) l (fun x => f₁ x + f₂ x) g := by
rw [is_O_with] at * <;>
@@ -1029,60 +1316,83 @@ theorem IsBigOWith.add (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : IsBigOWith c₂
‖f₁ x + f₂ x‖ ≤ c₁ * ‖g x‖ + c₂ * ‖g x‖ := norm_add_le_of_le hx₁ hx₂
_ = (c₁ + c₂) * ‖g x‖ := (add_mul _ _ _).symm
#align asymptotics.is_O_with.add Asymptotics.IsBigOWith.add
+-/
+#print Asymptotics.IsBigO.add /-
theorem IsBigO.add (h₁ : f₁ =O[l] g) (h₂ : f₂ =O[l] g) : (fun x => f₁ x + f₂ x) =O[l] g :=
let ⟨c₁, hc₁⟩ := h₁.IsBigOWith
let ⟨c₂, hc₂⟩ := h₂.IsBigOWith
(hc₁.add hc₂).IsBigO
#align asymptotics.is_O.add Asymptotics.IsBigO.add
+-/
+#print Asymptotics.IsLittleO.add /-
theorem IsLittleO.add (h₁ : f₁ =o[l] g) (h₂ : f₂ =o[l] g) : (fun x => f₁ x + f₂ x) =o[l] g :=
IsLittleO.of_isBigOWith fun c cpos =>
((h₁.forall_isBigOWith <| half_pos cpos).add
(h₂.forall_isBigOWith <| half_pos cpos)).congr_const
(add_halves c)
#align asymptotics.is_o.add Asymptotics.IsLittleO.add
+-/
+#print Asymptotics.IsLittleO.add_add /-
theorem IsLittleO.add_add (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =o[l] g₂) :
(fun x => f₁ x + f₂ x) =o[l] fun x => ‖g₁ x‖ + ‖g₂ x‖ := by
refine' (h₁.trans_le fun x => _).add (h₂.trans_le _) <;> simp [abs_of_nonneg, add_nonneg]
#align asymptotics.is_o.add_add Asymptotics.IsLittleO.add_add
+-/
+#print Asymptotics.IsBigO.add_isLittleO /-
theorem IsBigO.add_isLittleO (h₁ : f₁ =O[l] g) (h₂ : f₂ =o[l] g) : (fun x => f₁ x + f₂ x) =O[l] g :=
h₁.add h₂.IsBigO
#align asymptotics.is_O.add_is_o Asymptotics.IsBigO.add_isLittleO
+-/
+#print Asymptotics.IsLittleO.add_isBigO /-
theorem IsLittleO.add_isBigO (h₁ : f₁ =o[l] g) (h₂ : f₂ =O[l] g) : (fun x => f₁ x + f₂ x) =O[l] g :=
h₁.IsBigO.add h₂
#align asymptotics.is_o.add_is_O Asymptotics.IsLittleO.add_isBigO
+-/
+#print Asymptotics.IsBigOWith.add_isLittleO /-
theorem IsBigOWith.add_isLittleO (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : f₂ =o[l] g) (hc : c₁ < c₂) :
IsBigOWith c₂ l (fun x => f₁ x + f₂ x) g :=
(h₁.add (h₂.forall_isBigOWith (sub_pos.2 hc))).congr_const (add_sub_cancel'_right _ _)
#align asymptotics.is_O_with.add_is_o Asymptotics.IsBigOWith.add_isLittleO
+-/
+#print Asymptotics.IsLittleO.add_isBigOWith /-
theorem IsLittleO.add_isBigOWith (h₁ : f₁ =o[l] g) (h₂ : IsBigOWith c₁ l f₂ g) (hc : c₁ < c₂) :
IsBigOWith c₂ l (fun x => f₁ x + f₂ x) g :=
(h₂.add_isLittleO h₁ hc).congr_left fun _ => add_comm _ _
#align asymptotics.is_o.add_is_O_with Asymptotics.IsLittleO.add_isBigOWith
+-/
+#print Asymptotics.IsBigOWith.sub /-
theorem IsBigOWith.sub (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : IsBigOWith c₂ l f₂ g) :
IsBigOWith (c₁ + c₂) l (fun x => f₁ x - f₂ x) g := by
simpa only [sub_eq_add_neg] using h₁.add h₂.neg_left
#align asymptotics.is_O_with.sub Asymptotics.IsBigOWith.sub
+-/
+#print Asymptotics.IsBigOWith.sub_isLittleO /-
theorem IsBigOWith.sub_isLittleO (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : f₂ =o[l] g) (hc : c₁ < c₂) :
IsBigOWith c₂ l (fun x => f₁ x - f₂ x) g := by
simpa only [sub_eq_add_neg] using h₁.add_is_o h₂.neg_left hc
#align asymptotics.is_O_with.sub_is_o Asymptotics.IsBigOWith.sub_isLittleO
+-/
+#print Asymptotics.IsBigO.sub /-
theorem IsBigO.sub (h₁ : f₁ =O[l] g) (h₂ : f₂ =O[l] g) : (fun x => f₁ x - f₂ x) =O[l] g := by
simpa only [sub_eq_add_neg] using h₁.add h₂.neg_left
#align asymptotics.is_O.sub Asymptotics.IsBigO.sub
+-/
+#print Asymptotics.IsLittleO.sub /-
theorem IsLittleO.sub (h₁ : f₁ =o[l] g) (h₂ : f₂ =o[l] g) : (fun x => f₁ x - f₂ x) =o[l] g := by
simpa only [sub_eq_add_neg] using h₁.add h₂.neg_left
#align asymptotics.is_o.sub Asymptotics.IsLittleO.sub
+-/
end add_sub
@@ -1093,57 +1403,79 @@ section IsOOAsRel
variable {f₁ f₂ f₃ : α → E'}
+#print Asymptotics.IsBigOWith.symm /-
theorem IsBigOWith.symm (h : IsBigOWith c l (fun x => f₁ x - f₂ x) g) :
IsBigOWith c l (fun x => f₂ x - f₁ x) g :=
h.neg_left.congr_left fun x => neg_sub _ _
#align asymptotics.is_O_with.symm Asymptotics.IsBigOWith.symm
+-/
+#print Asymptotics.isBigOWith_comm /-
theorem isBigOWith_comm :
IsBigOWith c l (fun x => f₁ x - f₂ x) g ↔ IsBigOWith c l (fun x => f₂ x - f₁ x) g :=
⟨IsBigOWith.symm, IsBigOWith.symm⟩
#align asymptotics.is_O_with_comm Asymptotics.isBigOWith_comm
+-/
+#print Asymptotics.IsBigO.symm /-
theorem IsBigO.symm (h : (fun x => f₁ x - f₂ x) =O[l] g) : (fun x => f₂ x - f₁ x) =O[l] g :=
h.neg_left.congr_left fun x => neg_sub _ _
#align asymptotics.is_O.symm Asymptotics.IsBigO.symm
+-/
+#print Asymptotics.isBigO_comm /-
theorem isBigO_comm : (fun x => f₁ x - f₂ x) =O[l] g ↔ (fun x => f₂ x - f₁ x) =O[l] g :=
⟨IsBigO.symm, IsBigO.symm⟩
#align asymptotics.is_O_comm Asymptotics.isBigO_comm
+-/
+#print Asymptotics.IsLittleO.symm /-
theorem IsLittleO.symm (h : (fun x => f₁ x - f₂ x) =o[l] g) : (fun x => f₂ x - f₁ x) =o[l] g := by
simpa only [neg_sub] using h.neg_left
#align asymptotics.is_o.symm Asymptotics.IsLittleO.symm
+-/
+#print Asymptotics.isLittleO_comm /-
theorem isLittleO_comm : (fun x => f₁ x - f₂ x) =o[l] g ↔ (fun x => f₂ x - f₁ x) =o[l] g :=
⟨IsLittleO.symm, IsLittleO.symm⟩
#align asymptotics.is_o_comm Asymptotics.isLittleO_comm
+-/
+#print Asymptotics.IsBigOWith.triangle /-
theorem IsBigOWith.triangle (h₁ : IsBigOWith c l (fun x => f₁ x - f₂ x) g)
(h₂ : IsBigOWith c' l (fun x => f₂ x - f₃ x) g) :
IsBigOWith (c + c') l (fun x => f₁ x - f₃ x) g :=
(h₁.add h₂).congr_left fun x => sub_add_sub_cancel _ _ _
#align asymptotics.is_O_with.triangle Asymptotics.IsBigOWith.triangle
+-/
+#print Asymptotics.IsBigO.triangle /-
theorem IsBigO.triangle (h₁ : (fun x => f₁ x - f₂ x) =O[l] g)
(h₂ : (fun x => f₂ x - f₃ x) =O[l] g) : (fun x => f₁ x - f₃ x) =O[l] g :=
(h₁.add h₂).congr_left fun x => sub_add_sub_cancel _ _ _
#align asymptotics.is_O.triangle Asymptotics.IsBigO.triangle
+-/
+#print Asymptotics.IsLittleO.triangle /-
theorem IsLittleO.triangle (h₁ : (fun x => f₁ x - f₂ x) =o[l] g)
(h₂ : (fun x => f₂ x - f₃ x) =o[l] g) : (fun x => f₁ x - f₃ x) =o[l] g :=
(h₁.add h₂).congr_left fun x => sub_add_sub_cancel _ _ _
#align asymptotics.is_o.triangle Asymptotics.IsLittleO.triangle
+-/
+#print Asymptotics.IsBigO.congr_of_sub /-
theorem IsBigO.congr_of_sub (h : (fun x => f₁ x - f₂ x) =O[l] g) : f₁ =O[l] g ↔ f₂ =O[l] g :=
⟨fun h' => (h'.sub h).congr_left fun x => sub_sub_cancel _ _, fun h' =>
(h.add h').congr_left fun x => sub_add_cancel _ _⟩
#align asymptotics.is_O.congr_of_sub Asymptotics.IsBigO.congr_of_sub
+-/
+#print Asymptotics.IsLittleO.congr_of_sub /-
theorem IsLittleO.congr_of_sub (h : (fun x => f₁ x - f₂ x) =o[l] g) : f₁ =o[l] g ↔ f₂ =o[l] g :=
⟨fun h' => (h'.sub h).congr_left fun x => sub_sub_cancel _ _, fun h' =>
(h.add h').congr_left fun x => sub_add_cancel _ _⟩
#align asymptotics.is_o.congr_of_sub Asymptotics.IsLittleO.congr_of_sub
+-/
end IsOOAsRel
@@ -1154,39 +1486,54 @@ section ZeroConst
variable (g g' l)
+#print Asymptotics.isLittleO_zero /-
theorem isLittleO_zero : (fun x => (0 : E')) =o[l] g' :=
IsLittleO.of_bound fun c hc =>
univ_mem' fun x => by simpa using mul_nonneg hc.le (norm_nonneg <| g' x)
#align asymptotics.is_o_zero Asymptotics.isLittleO_zero
+-/
+#print Asymptotics.isBigOWith_zero /-
theorem isBigOWith_zero (hc : 0 ≤ c) : IsBigOWith c l (fun x => (0 : E')) g' :=
IsBigOWith.of_bound <| univ_mem' fun x => by simpa using mul_nonneg hc (norm_nonneg <| g' x)
#align asymptotics.is_O_with_zero Asymptotics.isBigOWith_zero
+-/
+#print Asymptotics.isBigOWith_zero' /-
theorem isBigOWith_zero' : IsBigOWith 0 l (fun x => (0 : E')) g :=
IsBigOWith.of_bound <| univ_mem' fun x => by simp
#align asymptotics.is_O_with_zero' Asymptotics.isBigOWith_zero'
+-/
+#print Asymptotics.isBigO_zero /-
theorem isBigO_zero : (fun x => (0 : E')) =O[l] g :=
isBigO_iff_isBigOWith.2 ⟨0, isBigOWith_zero' _ _⟩
#align asymptotics.is_O_zero Asymptotics.isBigO_zero
+-/
+#print Asymptotics.isBigO_refl_left /-
theorem isBigO_refl_left : (fun x => f' x - f' x) =O[l] g' :=
(isBigO_zero g' l).congr_left fun x => (sub_self _).symm
#align asymptotics.is_O_refl_left Asymptotics.isBigO_refl_left
+-/
+#print Asymptotics.isLittleO_refl_left /-
theorem isLittleO_refl_left : (fun x => f' x - f' x) =o[l] g' :=
(isLittleO_zero g' l).congr_left fun x => (sub_self _).symm
#align asymptotics.is_o_refl_left Asymptotics.isLittleO_refl_left
+-/
variable {g g' l}
+#print Asymptotics.isBigOWith_zero_right_iff /-
@[simp]
theorem isBigOWith_zero_right_iff : (IsBigOWith c l f'' fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 := by
simp only [is_O_with, exists_prop, true_and_iff, norm_zero, MulZeroClass.mul_zero,
norm_le_zero_iff, eventually_eq, Pi.zero_apply]
#align asymptotics.is_O_with_zero_right_iff Asymptotics.isBigOWith_zero_right_iff
+-/
+#print Asymptotics.isBigO_zero_right_iff /-
@[simp]
theorem isBigO_zero_right_iff : (f'' =O[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 :=
⟨fun h =>
@@ -1194,13 +1541,17 @@ theorem isBigO_zero_right_iff : (f'' =O[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0
isBigOWith_zero_right_iff.1 hc,
fun h => (isBigOWith_zero_right_iff.2 h : IsBigOWith 1 _ _ _).IsBigO⟩
#align asymptotics.is_O_zero_right_iff Asymptotics.isBigO_zero_right_iff
+-/
+#print Asymptotics.isLittleO_zero_right_iff /-
@[simp]
theorem isLittleO_zero_right_iff : (f'' =o[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 :=
⟨fun h => isBigO_zero_right_iff.1 h.IsBigO, fun h =>
IsLittleO.of_isBigOWith fun c hc => isBigOWith_zero_right_iff.2 h⟩
#align asymptotics.is_o_zero_right_iff Asymptotics.isLittleO_zero_right_iff
+-/
+#print Asymptotics.isBigOWith_const_const /-
theorem isBigOWith_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter α) :
IsBigOWith (‖c‖ / ‖c'‖) l (fun x : α => c) fun x => c' :=
by
@@ -1210,12 +1561,16 @@ theorem isBigOWith_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter
rw [mem_set_of_eq, div_mul_cancel]
rwa [Ne.def, norm_eq_zero]
#align asymptotics.is_O_with_const_const Asymptotics.isBigOWith_const_const
+-/
+#print Asymptotics.isBigO_const_const /-
theorem isBigO_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter α) :
(fun x : α => c) =O[l] fun x => c' :=
(isBigOWith_const_const c hc' l).IsBigO
#align asymptotics.is_O_const_const Asymptotics.isBigO_const_const
+-/
+#print Asymptotics.isBigO_const_const_iff /-
@[simp]
theorem isBigO_const_const_iff {c : E''} {c' : F''} (l : Filter α) [l.ne_bot] :
((fun x : α => c) =O[l] fun x => c') ↔ c' = 0 → c = 0 :=
@@ -1224,24 +1579,32 @@ theorem isBigO_const_const_iff {c : E''} {c' : F''} (l : Filter α) [l.ne_bot] :
· simp [eventually_eq]
· simp [hc', is_O_const_const _ hc']
#align asymptotics.is_O_const_const_iff Asymptotics.isBigO_const_const_iff
+-/
+#print Asymptotics.isBigO_pure /-
@[simp]
theorem isBigO_pure {x} : f'' =O[pure x] g'' ↔ g'' x = 0 → f'' x = 0 :=
calc
f'' =O[pure x] g'' ↔ (fun y : α => f'' x) =O[pure x] fun _ => g'' x := isBigO_congr rfl rfl
_ ↔ g'' x = 0 → f'' x = 0 := isBigO_const_const_iff _
#align asymptotics.is_O_pure Asymptotics.isBigO_pure
+-/
end ZeroConst
+#print Asymptotics.isBigOWith_top /-
@[simp]
theorem isBigOWith_top : IsBigOWith c ⊤ f g ↔ ∀ x, ‖f x‖ ≤ c * ‖g x‖ := by rw [is_O_with] <;> rfl
#align asymptotics.is_O_with_top Asymptotics.isBigOWith_top
+-/
+#print Asymptotics.isBigO_top /-
@[simp]
theorem isBigO_top : f =O[⊤] g ↔ ∃ C, ∀ x, ‖f x‖ ≤ C * ‖g x‖ := by rw [is_O_iff] <;> rfl
#align asymptotics.is_O_top Asymptotics.isBigO_top
+-/
+#print Asymptotics.isLittleO_top /-
@[simp]
theorem isLittleO_top : f'' =o[⊤] g'' ↔ ∀ x, f'' x = 0 :=
by
@@ -1255,48 +1618,64 @@ theorem isLittleO_top : f'' =o[⊤] g'' ↔ ∀ x, f'' x = 0 :=
le_of_tendsto_of_tendsto tendsto_const_nhds this
(eventually_nhdsWithin_iff.2 <| eventually_of_forall fun c hc => h hc x)
#align asymptotics.is_o_top Asymptotics.isLittleO_top
+-/
+#print Asymptotics.isBigOWith_principal /-
@[simp]
theorem isBigOWith_principal {s : Set α} : IsBigOWith c (𝓟 s) f g ↔ ∀ x ∈ s, ‖f x‖ ≤ c * ‖g x‖ := by
rw [is_O_with] <;> rfl
#align asymptotics.is_O_with_principal Asymptotics.isBigOWith_principal
+-/
+#print Asymptotics.isBigO_principal /-
theorem isBigO_principal {s : Set α} : f =O[𝓟 s] g ↔ ∃ c, ∀ x ∈ s, ‖f x‖ ≤ c * ‖g x‖ := by
rw [is_O_iff] <;> rfl
#align asymptotics.is_O_principal Asymptotics.isBigO_principal
+-/
section
variable (F) [One F] [NormOneClass F]
+#print Asymptotics.isBigOWith_const_one /-
theorem isBigOWith_const_one (c : E) (l : Filter α) :
IsBigOWith ‖c‖ l (fun x : α => c) fun x => (1 : F) := by simp [is_O_with_iff]
#align asymptotics.is_O_with_const_one Asymptotics.isBigOWith_const_one
+-/
+#print Asymptotics.isBigO_const_one /-
theorem isBigO_const_one (c : E) (l : Filter α) : (fun x : α => c) =O[l] fun x => (1 : F) :=
(isBigOWith_const_one F c l).IsBigO
#align asymptotics.is_O_const_one Asymptotics.isBigO_const_one
+-/
+#print Asymptotics.isLittleO_const_iff_isLittleO_one /-
theorem isLittleO_const_iff_isLittleO_one {c : F''} (hc : c ≠ 0) :
(f =o[l] fun x => c) ↔ f =o[l] fun x => (1 : F) :=
⟨fun h => h.trans_isBigOWith (isBigOWith_const_one _ _ _) (norm_pos_iff.2 hc), fun h =>
h.trans_isBigO <| isBigO_const_const _ hc _⟩
#align asymptotics.is_o_const_iff_is_o_one Asymptotics.isLittleO_const_iff_isLittleO_one
+-/
+#print Asymptotics.isLittleO_one_iff /-
@[simp]
theorem isLittleO_one_iff : f' =o[l] (fun x => 1 : α → F) ↔ Tendsto f' l (𝓝 0) := by
simp only [is_o_iff, norm_one, mul_one, metric.nhds_basis_closed_ball.tendsto_right_iff,
Metric.mem_closedBall, dist_zero_right]
#align asymptotics.is_o_one_iff Asymptotics.isLittleO_one_iff
+-/
+#print Asymptotics.isBigO_one_iff /-
@[simp]
theorem isBigO_one_iff : f =O[l] (fun x => 1 : α → F) ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x‖ :=
by simp only [is_O_iff, norm_one, mul_one]; rfl
#align asymptotics.is_O_one_iff Asymptotics.isBigO_one_iff
+-/
alias is_O_one_iff ↔ _ _root_.filter.is_bounded_under.is_O_one
#align filter.is_bounded_under.is_O_one Filter.IsBoundedUnder.isBigO_one
+#print Asymptotics.isLittleO_one_left_iff /-
@[simp]
theorem isLittleO_one_left_iff : (fun x => 1 : α → F) =o[l] f ↔ Tendsto (fun x => ‖f x‖) l atTop :=
calc
@@ -1307,48 +1686,66 @@ theorem isLittleO_one_left_iff : (fun x => 1 : α → F) =o[l] f ↔ Tendsto (fu
_ ↔ Tendsto (fun x => ‖f x‖) l atTop :=
atTop_hasCountableBasis_of_archimedean.1.tendsto_right_iff.symm
#align asymptotics.is_o_one_left_iff Asymptotics.isLittleO_one_left_iff
+-/
+#print Filter.Tendsto.isBigO_one /-
theorem Filter.Tendsto.isBigO_one {c : E'} (h : Tendsto f' l (𝓝 c)) :
f' =O[l] (fun x => 1 : α → F) :=
h.norm.isBoundedUnder_le.isBigO_one F
#align filter.tendsto.is_O_one Filter.Tendsto.isBigO_one
+-/
+#print Asymptotics.IsBigO.trans_tendsto_nhds /-
theorem IsBigO.trans_tendsto_nhds (hfg : f =O[l] g') {y : F'} (hg : Tendsto g' l (𝓝 y)) :
f =O[l] (fun x => 1 : α → F) :=
hfg.trans <| hg.isBigO_one F
#align asymptotics.is_O.trans_tendsto_nhds Asymptotics.IsBigO.trans_tendsto_nhds
+-/
end
+#print Asymptotics.isLittleO_const_iff /-
theorem isLittleO_const_iff {c : F''} (hc : c ≠ 0) : (f'' =o[l] fun x => c) ↔ Tendsto f'' l (𝓝 0) :=
(isLittleO_const_iff_isLittleO_one ℝ hc).trans (isLittleO_one_iff _)
#align asymptotics.is_o_const_iff Asymptotics.isLittleO_const_iff
+-/
+#print Asymptotics.isLittleO_id_const /-
theorem isLittleO_id_const {c : F''} (hc : c ≠ 0) : (fun x : E'' => x) =o[𝓝 0] fun x => c :=
(isLittleO_const_iff hc).mpr (continuous_id.Tendsto 0)
#align asymptotics.is_o_id_const Asymptotics.isLittleO_id_const
+-/
+#print Filter.IsBoundedUnder.isBigO_const /-
theorem Filter.IsBoundedUnder.isBigO_const (h : IsBoundedUnder (· ≤ ·) l (norm ∘ f)) {c : F''}
(hc : c ≠ 0) : f =O[l] fun x => c :=
(h.isBigO_one ℝ).trans (isBigO_const_const _ hc _)
#align filter.is_bounded_under.is_O_const Filter.IsBoundedUnder.isBigO_const
+-/
+#print Asymptotics.isBigO_const_of_tendsto /-
theorem isBigO_const_of_tendsto {y : E''} (h : Tendsto f'' l (𝓝 y)) {c : F''} (hc : c ≠ 0) :
f'' =O[l] fun x => c :=
h.norm.isBoundedUnder_le.isBigO_const hc
#align asymptotics.is_O_const_of_tendsto Asymptotics.isBigO_const_of_tendsto
+-/
+#print Asymptotics.IsBigO.isBoundedUnder_le /-
theorem IsBigO.isBoundedUnder_le {c : F} (h : f =O[l] fun x => c) :
IsBoundedUnder (· ≤ ·) l (norm ∘ f) :=
let ⟨c', hc'⟩ := h.bound
⟨c' * ‖c‖, eventually_map.2 hc'⟩
#align asymptotics.is_O.is_bounded_under_le Asymptotics.IsBigO.isBoundedUnder_le
+-/
+#print Asymptotics.isBigO_const_of_ne /-
theorem isBigO_const_of_ne {c : F''} (hc : c ≠ 0) :
(f =O[l] fun x => c) ↔ IsBoundedUnder (· ≤ ·) l (norm ∘ f) :=
⟨fun h => h.isBoundedUnder_le, fun h => h.isBigO_const hc⟩
#align asymptotics.is_O_const_of_ne Asymptotics.isBigO_const_of_ne
+-/
+#print Asymptotics.isBigO_const_iff /-
theorem isBigO_const_iff {c : F''} :
(f'' =O[l] fun x => c) ↔ (c = 0 → f'' =ᶠ[l] 0) ∧ IsBoundedUnder (· ≤ ·) l fun x => ‖f'' x‖ :=
by
@@ -1357,7 +1754,9 @@ theorem isBigO_const_iff {c : F''} :
rcases eq_or_ne c 0 with (hc | hc)
exacts [(hcf hc).trans_isBigO (is_O_zero _ _), hf.is_O_const hc]
#align asymptotics.is_O_const_iff Asymptotics.isBigO_const_iff
+-/
+#print Asymptotics.isBigO_iff_isBoundedUnder_le_div /-
theorem isBigO_iff_isBoundedUnder_le_div (h : ∀ᶠ x in l, g'' x ≠ 0) :
f =O[l] g'' ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x‖ / ‖g'' x‖ :=
by
@@ -1366,7 +1765,9 @@ theorem isBigO_iff_isBoundedUnder_le_div (h : ∀ᶠ x in l, g'' x ≠ 0) :
exists_congr fun c =>
eventually_congr <| h.mono fun x hx => (div_le_iff <| norm_pos_iff.2 hx).symm
#align asymptotics.is_O_iff_is_bounded_under_le_div Asymptotics.isBigO_iff_isBoundedUnder_le_div
+-/
+#print Asymptotics.isBigO_const_left_iff_pos_le_norm /-
/-- `(λ x, c) =O[l] f` if and only if `f` is bounded away from zero. -/
theorem isBigO_const_left_iff_pos_le_norm {c : E''} (hc : c ≠ 0) :
(fun x => c) =O[l] f' ↔ ∃ b, 0 < b ∧ ∀ᶠ x in l, b ≤ ‖f' x‖ :=
@@ -1381,6 +1782,7 @@ theorem isBigO_const_left_iff_pos_le_norm {c : E''} (hc : c ≠ 0) :
rw [div_mul_eq_mul_div, mul_div_assoc]
exact le_mul_of_one_le_right (norm_nonneg _) ((one_le_div hb₀).2 hx)
#align asymptotics.is_O_const_left_iff_pos_le_norm Asymptotics.isBigO_const_left_iff_pos_le_norm
+-/
section
@@ -1388,151 +1790,208 @@ variable (𝕜)
end
+#print Asymptotics.IsBigO.trans_tendsto /-
theorem IsBigO.trans_tendsto (hfg : f'' =O[l] g'') (hg : Tendsto g'' l (𝓝 0)) :
Tendsto f'' l (𝓝 0) :=
(isLittleO_one_iff ℝ).1 <| hfg.trans_isLittleO <| (isLittleO_one_iff ℝ).2 hg
#align asymptotics.is_O.trans_tendsto Asymptotics.IsBigO.trans_tendsto
+-/
+#print Asymptotics.IsLittleO.trans_tendsto /-
theorem IsLittleO.trans_tendsto (hfg : f'' =o[l] g'') (hg : Tendsto g'' l (𝓝 0)) :
Tendsto f'' l (𝓝 0) :=
hfg.IsBigO.trans_tendsto hg
#align asymptotics.is_o.trans_tendsto Asymptotics.IsLittleO.trans_tendsto
+-/
/-! ### Multiplication by a constant -/
+#print Asymptotics.isBigOWith_const_mul_self /-
theorem isBigOWith_const_mul_self (c : R) (f : α → R) (l : Filter α) :
IsBigOWith ‖c‖ l (fun x => c * f x) f :=
isBigOWith_of_le' _ fun x => norm_mul_le _ _
#align asymptotics.is_O_with_const_mul_self Asymptotics.isBigOWith_const_mul_self
+-/
+#print Asymptotics.isBigO_const_mul_self /-
theorem isBigO_const_mul_self (c : R) (f : α → R) (l : Filter α) : (fun x => c * f x) =O[l] f :=
(isBigOWith_const_mul_self c f l).IsBigO
#align asymptotics.is_O_const_mul_self Asymptotics.isBigO_const_mul_self
+-/
+#print Asymptotics.IsBigOWith.const_mul_left /-
theorem IsBigOWith.const_mul_left {f : α → R} (h : IsBigOWith c l f g) (c' : R) :
IsBigOWith (‖c'‖ * c) l (fun x => c' * f x) g :=
(isBigOWith_const_mul_self c' f l).trans h (norm_nonneg c')
#align asymptotics.is_O_with.const_mul_left Asymptotics.IsBigOWith.const_mul_left
+-/
+#print Asymptotics.IsBigO.const_mul_left /-
theorem IsBigO.const_mul_left {f : α → R} (h : f =O[l] g) (c' : R) : (fun x => c' * f x) =O[l] g :=
let ⟨c, hc⟩ := h.IsBigOWith
(hc.const_mul_left c').IsBigO
#align asymptotics.is_O.const_mul_left Asymptotics.IsBigO.const_mul_left
+-/
+#print Asymptotics.isBigOWith_self_const_mul' /-
theorem isBigOWith_self_const_mul' (u : Rˣ) (f : α → R) (l : Filter α) :
IsBigOWith ‖(↑u⁻¹ : R)‖ l f fun x => ↑u * f x :=
(isBigOWith_const_mul_self ↑u⁻¹ _ l).congr_left fun x => u.inv_mul_cancel_left (f x)
#align asymptotics.is_O_with_self_const_mul' Asymptotics.isBigOWith_self_const_mul'
+-/
+#print Asymptotics.isBigOWith_self_const_mul /-
theorem isBigOWith_self_const_mul (c : 𝕜) (hc : c ≠ 0) (f : α → 𝕜) (l : Filter α) :
IsBigOWith ‖c‖⁻¹ l f fun x => c * f x :=
(isBigOWith_self_const_mul' (Units.mk0 c hc) f l).congr_const <| norm_inv c
#align asymptotics.is_O_with_self_const_mul Asymptotics.isBigOWith_self_const_mul
+-/
+#print Asymptotics.isBigO_self_const_mul' /-
theorem isBigO_self_const_mul' {c : R} (hc : IsUnit c) (f : α → R) (l : Filter α) :
f =O[l] fun x => c * f x :=
let ⟨u, hu⟩ := hc
hu ▸ (isBigOWith_self_const_mul' u f l).IsBigO
#align asymptotics.is_O_self_const_mul' Asymptotics.isBigO_self_const_mul'
+-/
+#print Asymptotics.isBigO_self_const_mul /-
theorem isBigO_self_const_mul (c : 𝕜) (hc : c ≠ 0) (f : α → 𝕜) (l : Filter α) :
f =O[l] fun x => c * f x :=
isBigO_self_const_mul' (IsUnit.mk0 c hc) f l
#align asymptotics.is_O_self_const_mul Asymptotics.isBigO_self_const_mul
+-/
+#print Asymptotics.isBigO_const_mul_left_iff' /-
theorem isBigO_const_mul_left_iff' {f : α → R} {c : R} (hc : IsUnit c) :
(fun x => c * f x) =O[l] g ↔ f =O[l] g :=
⟨(isBigO_self_const_mul' hc f l).trans, fun h => h.const_mul_left c⟩
#align asymptotics.is_O_const_mul_left_iff' Asymptotics.isBigO_const_mul_left_iff'
+-/
+#print Asymptotics.isBigO_const_mul_left_iff /-
theorem isBigO_const_mul_left_iff {f : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
(fun x => c * f x) =O[l] g ↔ f =O[l] g :=
isBigO_const_mul_left_iff' <| IsUnit.mk0 c hc
#align asymptotics.is_O_const_mul_left_iff Asymptotics.isBigO_const_mul_left_iff
+-/
+#print Asymptotics.IsLittleO.const_mul_left /-
theorem IsLittleO.const_mul_left {f : α → R} (h : f =o[l] g) (c : R) : (fun x => c * f x) =o[l] g :=
(isBigO_const_mul_self c f l).trans_isLittleO h
#align asymptotics.is_o.const_mul_left Asymptotics.IsLittleO.const_mul_left
+-/
+#print Asymptotics.isLittleO_const_mul_left_iff' /-
theorem isLittleO_const_mul_left_iff' {f : α → R} {c : R} (hc : IsUnit c) :
(fun x => c * f x) =o[l] g ↔ f =o[l] g :=
⟨(isBigO_self_const_mul' hc f l).trans_isLittleO, fun h => h.const_mul_left c⟩
#align asymptotics.is_o_const_mul_left_iff' Asymptotics.isLittleO_const_mul_left_iff'
+-/
+#print Asymptotics.isLittleO_const_mul_left_iff /-
theorem isLittleO_const_mul_left_iff {f : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
(fun x => c * f x) =o[l] g ↔ f =o[l] g :=
isLittleO_const_mul_left_iff' <| IsUnit.mk0 c hc
#align asymptotics.is_o_const_mul_left_iff Asymptotics.isLittleO_const_mul_left_iff
+-/
+#print Asymptotics.IsBigOWith.of_const_mul_right /-
theorem IsBigOWith.of_const_mul_right {g : α → R} {c : R} (hc' : 0 ≤ c')
(h : IsBigOWith c' l f fun x => c * g x) : IsBigOWith (c' * ‖c‖) l f g :=
h.trans (isBigOWith_const_mul_self c g l) hc'
#align asymptotics.is_O_with.of_const_mul_right Asymptotics.IsBigOWith.of_const_mul_right
+-/
+#print Asymptotics.IsBigO.of_const_mul_right /-
theorem IsBigO.of_const_mul_right {g : α → R} {c : R} (h : f =O[l] fun x => c * g x) : f =O[l] g :=
let ⟨c, cnonneg, hc⟩ := h.exists_nonneg
(hc.of_const_mul_right cnonneg).IsBigO
#align asymptotics.is_O.of_const_mul_right Asymptotics.IsBigO.of_const_mul_right
+-/
+#print Asymptotics.IsBigOWith.const_mul_right' /-
theorem IsBigOWith.const_mul_right' {g : α → R} {u : Rˣ} {c' : ℝ} (hc' : 0 ≤ c')
(h : IsBigOWith c' l f g) : IsBigOWith (c' * ‖(↑u⁻¹ : R)‖) l f fun x => ↑u * g x :=
h.trans (isBigOWith_self_const_mul' _ _ _) hc'
#align asymptotics.is_O_with.const_mul_right' Asymptotics.IsBigOWith.const_mul_right'
+-/
+#print Asymptotics.IsBigOWith.const_mul_right /-
theorem IsBigOWith.const_mul_right {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) {c' : ℝ} (hc' : 0 ≤ c')
(h : IsBigOWith c' l f g) : IsBigOWith (c' * ‖c‖⁻¹) l f fun x => c * g x :=
h.trans (isBigOWith_self_const_mul c hc g l) hc'
#align asymptotics.is_O_with.const_mul_right Asymptotics.IsBigOWith.const_mul_right
+-/
+#print Asymptotics.IsBigO.const_mul_right' /-
theorem IsBigO.const_mul_right' {g : α → R} {c : R} (hc : IsUnit c) (h : f =O[l] g) :
f =O[l] fun x => c * g x :=
h.trans (isBigO_self_const_mul' hc g l)
#align asymptotics.is_O.const_mul_right' Asymptotics.IsBigO.const_mul_right'
+-/
+#print Asymptotics.IsBigO.const_mul_right /-
theorem IsBigO.const_mul_right {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) (h : f =O[l] g) :
f =O[l] fun x => c * g x :=
h.const_mul_right' <| IsUnit.mk0 c hc
#align asymptotics.is_O.const_mul_right Asymptotics.IsBigO.const_mul_right
+-/
+#print Asymptotics.isBigO_const_mul_right_iff' /-
theorem isBigO_const_mul_right_iff' {g : α → R} {c : R} (hc : IsUnit c) :
(f =O[l] fun x => c * g x) ↔ f =O[l] g :=
⟨fun h => h.of_const_mul_right, fun h => h.const_mul_right' hc⟩
#align asymptotics.is_O_const_mul_right_iff' Asymptotics.isBigO_const_mul_right_iff'
+-/
+#print Asymptotics.isBigO_const_mul_right_iff /-
theorem isBigO_const_mul_right_iff {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
(f =O[l] fun x => c * g x) ↔ f =O[l] g :=
isBigO_const_mul_right_iff' <| IsUnit.mk0 c hc
#align asymptotics.is_O_const_mul_right_iff Asymptotics.isBigO_const_mul_right_iff
+-/
+#print Asymptotics.IsLittleO.of_const_mul_right /-
theorem IsLittleO.of_const_mul_right {g : α → R} {c : R} (h : f =o[l] fun x => c * g x) :
f =o[l] g :=
h.trans_isBigO (isBigO_const_mul_self c g l)
#align asymptotics.is_o.of_const_mul_right Asymptotics.IsLittleO.of_const_mul_right
+-/
+#print Asymptotics.IsLittleO.const_mul_right' /-
theorem IsLittleO.const_mul_right' {g : α → R} {c : R} (hc : IsUnit c) (h : f =o[l] g) :
f =o[l] fun x => c * g x :=
h.trans_isBigO (isBigO_self_const_mul' hc g l)
#align asymptotics.is_o.const_mul_right' Asymptotics.IsLittleO.const_mul_right'
+-/
+#print Asymptotics.IsLittleO.const_mul_right /-
theorem IsLittleO.const_mul_right {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) (h : f =o[l] g) :
f =o[l] fun x => c * g x :=
h.const_mul_right' <| IsUnit.mk0 c hc
#align asymptotics.is_o.const_mul_right Asymptotics.IsLittleO.const_mul_right
+-/
+#print Asymptotics.isLittleO_const_mul_right_iff' /-
theorem isLittleO_const_mul_right_iff' {g : α → R} {c : R} (hc : IsUnit c) :
(f =o[l] fun x => c * g x) ↔ f =o[l] g :=
⟨fun h => h.of_const_mul_right, fun h => h.const_mul_right' hc⟩
#align asymptotics.is_o_const_mul_right_iff' Asymptotics.isLittleO_const_mul_right_iff'
+-/
+#print Asymptotics.isLittleO_const_mul_right_iff /-
theorem isLittleO_const_mul_right_iff {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
(f =o[l] fun x => c * g x) ↔ f =o[l] g :=
isLittleO_const_mul_right_iff' <| IsUnit.mk0 c hc
#align asymptotics.is_o_const_mul_right_iff Asymptotics.isLittleO_const_mul_right_iff
+-/
/-! ### Multiplication -/
+#print Asymptotics.IsBigOWith.mul /-
theorem IsBigOWith.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} {c₁ c₂ : ℝ} (h₁ : IsBigOWith c₁ l f₁ g₁)
(h₂ : IsBigOWith c₂ l f₂ g₂) :
IsBigOWith (c₁ * c₂) l (fun x => f₁ x * f₂ x) fun x => g₁ x * g₂ x :=
@@ -1543,14 +2002,18 @@ theorem IsBigOWith.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} {c₁ c
convert mul_le_mul hx₁ hx₂ (norm_nonneg _) (le_trans (norm_nonneg _) hx₁) using 1
rw [norm_mul, mul_mul_mul_comm]
#align asymptotics.is_O_with.mul Asymptotics.IsBigOWith.mul
+-/
+#print Asymptotics.IsBigO.mul /-
theorem IsBigO.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =O[l] g₁) (h₂ : f₂ =O[l] g₂) :
(fun x => f₁ x * f₂ x) =O[l] fun x => g₁ x * g₂ x :=
let ⟨c, hc⟩ := h₁.IsBigOWith
let ⟨c', hc'⟩ := h₂.IsBigOWith
(hc.mul hc').IsBigO
#align asymptotics.is_O.mul Asymptotics.IsBigO.mul
+-/
+#print Asymptotics.IsBigO.mul_isLittleO /-
theorem IsBigO.mul_isLittleO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =O[l] g₁) (h₂ : f₂ =o[l] g₂) :
(fun x => f₁ x * f₂ x) =o[l] fun x => g₁ x * g₂ x :=
by
@@ -1559,7 +2022,9 @@ theorem IsBigO.mul_isLittleO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h
rcases h₁.exists_pos with ⟨c', c'pos, hc'⟩
exact (hc'.mul (h₂ (div_pos cpos c'pos))).congr_const (mul_div_cancel' _ (ne_of_gt c'pos))
#align asymptotics.is_O.mul_is_o Asymptotics.IsBigO.mul_isLittleO
+-/
+#print Asymptotics.IsLittleO.mul_isBigO /-
theorem IsLittleO.mul_isBigO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =O[l] g₂) :
(fun x => f₁ x * f₂ x) =o[l] fun x => g₁ x * g₂ x :=
by
@@ -1568,12 +2033,16 @@ theorem IsLittleO.mul_isBigO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h
rcases h₂.exists_pos with ⟨c', c'pos, hc'⟩
exact ((h₁ (div_pos cpos c'pos)).mul hc').congr_const (div_mul_cancel _ (ne_of_gt c'pos))
#align asymptotics.is_o.mul_is_O Asymptotics.IsLittleO.mul_isBigO
+-/
+#print Asymptotics.IsLittleO.mul /-
theorem IsLittleO.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =o[l] g₂) :
(fun x => f₁ x * f₂ x) =o[l] fun x => g₁ x * g₂ x :=
h₁.mul_isBigO h₂.IsBigO
#align asymptotics.is_o.mul Asymptotics.IsLittleO.mul
+-/
+#print Asymptotics.IsBigOWith.pow' /-
theorem IsBigOWith.pow' {f : α → R} {g : α → 𝕜} (h : IsBigOWith c l f g) :
∀ n : ℕ,
IsBigOWith (Nat.casesOn n ‖(1 : R)‖ fun n => c ^ (n + 1)) l (fun x => f x ^ n) fun x =>
@@ -1582,13 +2051,17 @@ theorem IsBigOWith.pow' {f : α → R} {g : α → 𝕜} (h : IsBigOWith c l f g
| 1 => by simpa
| n + 2 => by simpa [pow_succ] using h.mul (is_O_with.pow' (n + 1))
#align asymptotics.is_O_with.pow' Asymptotics.IsBigOWith.pow'
+-/
+#print Asymptotics.IsBigOWith.pow /-
theorem IsBigOWith.pow [NormOneClass R] {f : α → R} {g : α → 𝕜} (h : IsBigOWith c l f g) :
∀ n : ℕ, IsBigOWith (c ^ n) l (fun x => f x ^ n) fun x => g x ^ n
| 0 => by simpa using h.pow' 0
| n + 1 => h.pow' (n + 1)
#align asymptotics.is_O_with.pow Asymptotics.IsBigOWith.pow
+-/
+#print Asymptotics.IsBigOWith.of_pow /-
theorem IsBigOWith.of_pow {n : ℕ} {f : α → 𝕜} {g : α → R} (h : IsBigOWith c l (f ^ n) (g ^ n))
(hn : n ≠ 0) (hc : c ≤ c' ^ n) (hc' : 0 ≤ c') : IsBigOWith c' l f g :=
IsBigOWith.of_bound <|
@@ -1601,13 +2074,17 @@ theorem IsBigOWith.of_pow {n : ℕ} {f : α → 𝕜} {g : α → R} (h : IsBigO
(mul_le_mul_of_nonneg_left (norm_pow_le' _ hn.bot_lt) (pow_nonneg hc' _))
_ = (c' * ‖g x‖) ^ n := (mul_pow _ _ _).symm
#align asymptotics.is_O_with.of_pow Asymptotics.IsBigOWith.of_pow
+-/
+#print Asymptotics.IsBigO.pow /-
theorem IsBigO.pow {f : α → R} {g : α → 𝕜} (h : f =O[l] g) (n : ℕ) :
(fun x => f x ^ n) =O[l] fun x => g x ^ n :=
let ⟨C, hC⟩ := h.IsBigOWith
isBigO_iff_isBigOWith.2 ⟨_, hC.pow' n⟩
#align asymptotics.is_O.pow Asymptotics.IsBigO.pow
+-/
+#print Asymptotics.IsBigO.of_pow /-
theorem IsBigO.of_pow {f : α → 𝕜} {g : α → R} {n : ℕ} (hn : n ≠ 0) (h : (f ^ n) =O[l] (g ^ n)) :
f =O[l] g := by
rcases h.exists_pos with ⟨C, hC₀, hC⟩
@@ -1615,7 +2092,9 @@ theorem IsBigO.of_pow {f : α → 𝕜} {g : α → R} {n : ℕ} (hn : n ≠ 0)
exact ((eventually_ge_at_top _).And <| (tendsto_pow_at_top hn).eventually_ge_atTop C).exists
exact (hC.of_pow hn hc hc₀).IsBigO
#align asymptotics.is_O.of_pow Asymptotics.IsBigO.of_pow
+-/
+#print Asymptotics.IsLittleO.pow /-
theorem IsLittleO.pow {f : α → R} {g : α → 𝕜} (h : f =o[l] g) {n : ℕ} (hn : 0 < n) :
(fun x => f x ^ n) =o[l] fun x => g x ^ n :=
by
@@ -1623,15 +2102,19 @@ theorem IsLittleO.pow {f : α → R} {g : α → 𝕜} (h : f =o[l] g) {n : ℕ}
induction' n with n ihn; · simpa only [pow_one]
convert h.mul ihn <;> simp [pow_succ]
#align asymptotics.is_o.pow Asymptotics.IsLittleO.pow
+-/
+#print Asymptotics.IsLittleO.of_pow /-
theorem IsLittleO.of_pow {f : α → 𝕜} {g : α → R} {n : ℕ} (h : (f ^ n) =o[l] (g ^ n)) (hn : n ≠ 0) :
f =o[l] g :=
IsLittleO.of_isBigOWith fun c hc => (h.def' <| pow_pos hc _).ofPow hn le_rfl hc.le
#align asymptotics.is_o.of_pow Asymptotics.IsLittleO.of_pow
+-/
/-! ### Inverse -/
+#print Asymptotics.IsBigOWith.inv_rev /-
theorem IsBigOWith.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : IsBigOWith c l f g)
(h₀ : ∀ᶠ x in l, f x = 0 → g x = 0) : IsBigOWith c l (fun x => (g x)⁻¹) fun x => (f x)⁻¹ :=
by
@@ -1642,17 +2125,22 @@ theorem IsBigOWith.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : IsBigOWith
replace hle := inv_le_inv_of_le (norm_pos_iff.2 hx) hle
simpa only [norm_inv, mul_inv, ← div_eq_inv_mul, div_le_iff hc] using hle
#align asymptotics.is_O_with.inv_rev Asymptotics.IsBigOWith.inv_rev
+-/
+#print Asymptotics.IsBigO.inv_rev /-
theorem IsBigO.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : f =O[l] g)
(h₀ : ∀ᶠ x in l, f x = 0 → g x = 0) : (fun x => (g x)⁻¹) =O[l] fun x => (f x)⁻¹ :=
let ⟨c, hc⟩ := h.IsBigOWith
(hc.inv_rev h₀).IsBigO
#align asymptotics.is_O.inv_rev Asymptotics.IsBigO.inv_rev
+-/
+#print Asymptotics.IsLittleO.inv_rev /-
theorem IsLittleO.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : f =o[l] g)
(h₀ : ∀ᶠ x in l, f x = 0 → g x = 0) : (fun x => (g x)⁻¹) =o[l] fun x => (f x)⁻¹ :=
IsLittleO.of_isBigOWith fun c hc => (h.def' hc).inv_rev h₀
#align asymptotics.is_o.inv_rev Asymptotics.IsLittleO.inv_rev
+-/
/-! ### Scalar multiplication -/
@@ -1661,42 +2149,55 @@ section SmulConst
variable [NormedSpace 𝕜 E']
+#print Asymptotics.IsBigOWith.const_smul_left /-
theorem IsBigOWith.const_smul_left (h : IsBigOWith c l f' g) (c' : 𝕜) :
IsBigOWith (‖c'‖ * c) l (fun x => c' • f' x) g :=
IsBigOWith.of_norm_left <| by
simpa only [← norm_smul, norm_norm] using h.norm_left.const_mul_left ‖c'‖
#align asymptotics.is_O_with.const_smul_left Asymptotics.IsBigOWith.const_smul_left
+-/
+#print Asymptotics.IsBigO.const_smul_left /-
theorem IsBigO.const_smul_left (h : f' =O[l] g) (c : 𝕜) : (c • f') =O[l] g :=
let ⟨b, hb⟩ := h.IsBigOWith
(hb.const_smul_left _).IsBigO
#align asymptotics.is_O.const_smul_left Asymptotics.IsBigO.const_smul_left
+-/
+#print Asymptotics.IsLittleO.const_smul_left /-
theorem IsLittleO.const_smul_left (h : f' =o[l] g) (c : 𝕜) : (c • f') =o[l] g :=
IsLittleO.of_norm_left <| by simpa only [← norm_smul] using h.norm_left.const_mul_left ‖c‖
#align asymptotics.is_o.const_smul_left Asymptotics.IsLittleO.const_smul_left
+-/
+#print Asymptotics.isBigO_const_smul_left /-
theorem isBigO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x) =O[l] g ↔ f' =O[l] g :=
by
have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
rw [← is_O_norm_left]; simp only [norm_smul]
rw [is_O_const_mul_left_iff cne0, is_O_norm_left]
#align asymptotics.is_O_const_smul_left Asymptotics.isBigO_const_smul_left
+-/
+#print Asymptotics.isLittleO_const_smul_left /-
theorem isLittleO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x) =o[l] g ↔ f' =o[l] g :=
by
have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
rw [← is_o_norm_left]; simp only [norm_smul]
rw [is_o_const_mul_left_iff cne0, is_o_norm_left]
#align asymptotics.is_o_const_smul_left Asymptotics.isLittleO_const_smul_left
+-/
+#print Asymptotics.isBigO_const_smul_right /-
theorem isBigO_const_smul_right {c : 𝕜} (hc : c ≠ 0) : (f =O[l] fun x => c • f' x) ↔ f =O[l] f' :=
by
have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
rw [← is_O_norm_right]; simp only [norm_smul]
rw [is_O_const_mul_right_iff cne0, is_O_norm_right]
#align asymptotics.is_O_const_smul_right Asymptotics.isBigO_const_smul_right
+-/
+#print Asymptotics.isLittleO_const_smul_right /-
theorem isLittleO_const_smul_right {c : 𝕜} (hc : c ≠ 0) :
(f =o[l] fun x => c • f' x) ↔ f =o[l] f' :=
by
@@ -1704,6 +2205,7 @@ theorem isLittleO_const_smul_right {c : 𝕜} (hc : c ≠ 0) :
rw [← is_o_norm_right]; simp only [norm_smul]
rw [is_o_const_mul_right_iff cne0, is_o_norm_right]
#align asymptotics.is_o_const_smul_right Asymptotics.isLittleO_const_smul_right
+-/
end SmulConst
@@ -1711,35 +2213,45 @@ section Smul
variable [NormedSpace 𝕜 E'] [NormedSpace 𝕜' F'] {k₁ : α → 𝕜} {k₂ : α → 𝕜'}
+#print Asymptotics.IsBigOWith.smul /-
theorem IsBigOWith.smul (h₁ : IsBigOWith c l k₁ k₂) (h₂ : IsBigOWith c' l f' g') :
IsBigOWith (c * c') l (fun x => k₁ x • f' x) fun x => k₂ x • g' x := by
refine' ((h₁.norm_norm.mul h₂.norm_norm).congr rfl _ _).of_norm_norm <;>
· intros <;> simp only [norm_smul]
#align asymptotics.is_O_with.smul Asymptotics.IsBigOWith.smul
+-/
+#print Asymptotics.IsBigO.smul /-
theorem IsBigO.smul (h₁ : k₁ =O[l] k₂) (h₂ : f' =O[l] g') :
(fun x => k₁ x • f' x) =O[l] fun x => k₂ x • g' x := by
refine' ((h₁.norm_norm.mul h₂.norm_norm).congr _ _).of_norm_norm <;>
· intros <;> simp only [norm_smul]
#align asymptotics.is_O.smul Asymptotics.IsBigO.smul
+-/
+#print Asymptotics.IsBigO.smul_isLittleO /-
theorem IsBigO.smul_isLittleO (h₁ : k₁ =O[l] k₂) (h₂ : f' =o[l] g') :
(fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x := by
refine' ((h₁.norm_norm.mul_is_o h₂.norm_norm).congr _ _).of_norm_norm <;>
· intros <;> simp only [norm_smul]
#align asymptotics.is_O.smul_is_o Asymptotics.IsBigO.smul_isLittleO
+-/
+#print Asymptotics.IsLittleO.smul_isBigO /-
theorem IsLittleO.smul_isBigO (h₁ : k₁ =o[l] k₂) (h₂ : f' =O[l] g') :
(fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x := by
refine' ((h₁.norm_norm.mul_is_O h₂.norm_norm).congr _ _).of_norm_norm <;>
· intros <;> simp only [norm_smul]
#align asymptotics.is_o.smul_is_O Asymptotics.IsLittleO.smul_isBigO
+-/
+#print Asymptotics.IsLittleO.smul /-
theorem IsLittleO.smul (h₁ : k₁ =o[l] k₂) (h₂ : f' =o[l] g') :
(fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x := by
refine' ((h₁.norm_norm.mul h₂.norm_norm).congr _ _).of_norm_norm <;>
· intros <;> simp only [norm_smul]
#align asymptotics.is_o.smul Asymptotics.IsLittleO.smul
+-/
end Smul
@@ -1750,6 +2262,7 @@ section Sum
variable {ι : Type _} {A : ι → α → E'} {C : ι → ℝ} {s : Finset ι}
+#print Asymptotics.IsBigOWith.sum /-
theorem IsBigOWith.sum (h : ∀ i ∈ s, IsBigOWith (C i) l (A i) g) :
IsBigOWith (∑ i in s, C i) l (fun x => ∑ i in s, A i x) g :=
by
@@ -1758,14 +2271,18 @@ theorem IsBigOWith.sum (h : ∀ i ∈ s, IsBigOWith (C i) l (A i) g) :
· simp only [is, Finset.sum_insert, not_false_iff]
exact (h _ (Finset.mem_insert_self i s)).add (IH fun j hj => h _ (Finset.mem_insert_of_mem hj))
#align asymptotics.is_O_with.sum Asymptotics.IsBigOWith.sum
+-/
+#print Asymptotics.IsBigO.sum /-
theorem IsBigO.sum (h : ∀ i ∈ s, A i =O[l] g) : (fun x => ∑ i in s, A i x) =O[l] g :=
by
unfold is_O at *
choose! C hC using h
exact ⟨_, is_O_with.sum hC⟩
#align asymptotics.is_O.sum Asymptotics.IsBigO.sum
+-/
+#print Asymptotics.IsLittleO.sum /-
theorem IsLittleO.sum (h : ∀ i ∈ s, A i =o[l] g') : (fun x => ∑ i in s, A i x) =o[l] g' :=
by
induction' s using Finset.induction_on with i s is IH
@@ -1773,12 +2290,14 @@ theorem IsLittleO.sum (h : ∀ i ∈ s, A i =o[l] g') : (fun x => ∑ i in s, A
· simp only [is, Finset.sum_insert, not_false_iff]
exact (h _ (Finset.mem_insert_self i s)).add (IH fun j hj => h _ (Finset.mem_insert_of_mem hj))
#align asymptotics.is_o.sum Asymptotics.IsLittleO.sum
+-/
end Sum
/-! ### Relation between `f = o(g)` and `f / g → 0` -/
+#print Asymptotics.IsLittleO.tendsto_div_nhds_zero /-
theorem IsLittleO.tendsto_div_nhds_zero {f g : α → 𝕜} (h : f =o[l] g) :
Tendsto (fun x => f x / g x) l (𝓝 0) :=
(isLittleO_one_iff 𝕜).mp <|
@@ -1787,24 +2306,31 @@ theorem IsLittleO.tendsto_div_nhds_zero {f g : α → 𝕜} (h : f =o[l] g) :
simpa only [div_eq_mul_inv] using h.mul_is_O (is_O_refl _ _)
_ =O[l] fun x => (1 : 𝕜) := isBigO_of_le _ fun x => by simp [div_self_le_one]
#align asymptotics.is_o.tendsto_div_nhds_zero Asymptotics.IsLittleO.tendsto_div_nhds_zero
+-/
+#print Asymptotics.IsLittleO.tendsto_inv_smul_nhds_zero /-
theorem IsLittleO.tendsto_inv_smul_nhds_zero [NormedSpace 𝕜 E'] {f : α → E'} {g : α → 𝕜}
{l : Filter α} (h : f =o[l] g) : Tendsto (fun x => (g x)⁻¹ • f x) l (𝓝 0) := by
simpa only [div_eq_inv_mul, ← norm_inv, ← norm_smul, ← tendsto_zero_iff_norm_tendsto_zero] using
h.norm_norm.tendsto_div_nhds_zero
#align asymptotics.is_o.tendsto_inv_smul_nhds_zero Asymptotics.IsLittleO.tendsto_inv_smul_nhds_zero
+-/
+#print Asymptotics.isLittleO_iff_tendsto' /-
theorem isLittleO_iff_tendsto' {f g : α → 𝕜} (hgf : ∀ᶠ x in l, g x = 0 → f x = 0) :
f =o[l] g ↔ Tendsto (fun x => f x / g x) l (𝓝 0) :=
⟨IsLittleO.tendsto_div_nhds_zero, fun h =>
(((isLittleO_one_iff _).mpr h).mul_isBigO (isBigO_refl g l)).congr'
(hgf.mono fun x => div_mul_cancel_of_imp) (eventually_of_forall fun x => one_mul _)⟩
#align asymptotics.is_o_iff_tendsto' Asymptotics.isLittleO_iff_tendsto'
+-/
+#print Asymptotics.isLittleO_iff_tendsto /-
theorem isLittleO_iff_tendsto {f g : α → 𝕜} (hgf : ∀ x, g x = 0 → f x = 0) :
f =o[l] g ↔ Tendsto (fun x => f x / g x) l (𝓝 0) :=
isLittleO_iff_tendsto' (eventually_of_forall hgf)
#align asymptotics.is_o_iff_tendsto Asymptotics.isLittleO_iff_tendsto
+-/
alias is_o_iff_tendsto' ↔ _ is_o_of_tendsto'
#align asymptotics.is_o_of_tendsto' Asymptotics.isLittleO_of_tendsto'
@@ -1812,13 +2338,16 @@ alias is_o_iff_tendsto' ↔ _ is_o_of_tendsto'
alias is_o_iff_tendsto ↔ _ is_o_of_tendsto
#align asymptotics.is_o_of_tendsto Asymptotics.isLittleO_of_tendsto
+#print Asymptotics.isLittleO_const_left_of_ne /-
theorem isLittleO_const_left_of_ne {c : E''} (hc : c ≠ 0) :
(fun x => c) =o[l] g ↔ Tendsto (fun x => ‖g x‖) l atTop :=
by
simp only [← is_o_one_left_iff ℝ]
exact ⟨(is_O_const_const (1 : ℝ) hc l).trans_isLittleO, (is_O_const_one ℝ c l).trans_isLittleO⟩
#align asymptotics.is_o_const_left_of_ne Asymptotics.isLittleO_const_left_of_ne
+-/
+#print Asymptotics.isLittleO_const_left /-
@[simp]
theorem isLittleO_const_left {c : E''} :
(fun x => c) =o[l] g'' ↔ c = 0 ∨ Tendsto (norm ∘ g'') l atTop :=
@@ -1827,7 +2356,9 @@ theorem isLittleO_const_left {c : E''} :
· simp only [is_o_zero, eq_self_iff_true, true_or_iff]
· simp only [hc, false_or_iff, is_o_const_left_of_ne hc]
#align asymptotics.is_o_const_left Asymptotics.isLittleO_const_left
+-/
+#print Asymptotics.isLittleO_const_const_iff /-
@[simp]
theorem isLittleO_const_const_iff [NeBot l] {d : E''} {c : F''} :
((fun x => d) =o[l] fun x => c) ↔ d = 0 :=
@@ -1836,26 +2367,35 @@ theorem isLittleO_const_const_iff [NeBot l] {d : E''} {c : F''} :
not_tendsto_atTop_of_tendsto_nhds tendsto_const_nhds
simp [Function.const, this]
#align asymptotics.is_o_const_const_iff Asymptotics.isLittleO_const_const_iff
+-/
+#print Asymptotics.isLittleO_pure /-
@[simp]
theorem isLittleO_pure {x} : f'' =o[pure x] g'' ↔ f'' x = 0 :=
calc
f'' =o[pure x] g'' ↔ (fun y : α => f'' x) =o[pure x] fun _ => g'' x := isLittleO_congr rfl rfl
_ ↔ f'' x = 0 := isLittleO_const_const_iff
#align asymptotics.is_o_pure Asymptotics.isLittleO_pure
+-/
+#print Asymptotics.isLittleO_const_id_comap_norm_atTop /-
theorem isLittleO_const_id_comap_norm_atTop (c : F'') :
(fun x : E'' => c) =o[comap norm atTop] id :=
isLittleO_const_left.2 <| Or.inr tendsto_comap
#align asymptotics.is_o_const_id_comap_norm_at_top Asymptotics.isLittleO_const_id_comap_norm_atTop
+-/
+#print Asymptotics.isLittleO_const_id_atTop /-
theorem isLittleO_const_id_atTop (c : E'') : (fun x : ℝ => c) =o[atTop] id :=
isLittleO_const_left.2 <| Or.inr tendsto_abs_atTop_atTop
#align asymptotics.is_o_const_id_at_top Asymptotics.isLittleO_const_id_atTop
+-/
+#print Asymptotics.isLittleO_const_id_atBot /-
theorem isLittleO_const_id_atBot (c : E'') : (fun x : ℝ => c) =o[atBot] id :=
isLittleO_const_left.2 <| Or.inr tendsto_abs_atBot_atTop
#align asymptotics.is_o_const_id_at_bot Asymptotics.isLittleO_const_id_atBot
+-/
/-!
### Eventually (u / v) * v = u
@@ -1869,20 +2409,26 @@ section EventuallyMulDivCancel
variable {u v : α → 𝕜}
+#print Asymptotics.IsBigOWith.eventually_mul_div_cancel /-
theorem IsBigOWith.eventually_mul_div_cancel (h : IsBigOWith c l u v) : u / v * v =ᶠ[l] u :=
Eventually.mono h.bound fun y hy => div_mul_cancel_of_imp fun hv => by simpa [hv] using hy
#align asymptotics.is_O_with.eventually_mul_div_cancel Asymptotics.IsBigOWith.eventually_mul_div_cancel
+-/
+#print Asymptotics.IsBigO.eventually_mul_div_cancel /-
/-- If `u = O(v)` along `l`, then `(u / v) * v = u` eventually at `l`. -/
theorem IsBigO.eventually_mul_div_cancel (h : u =O[l] v) : u / v * v =ᶠ[l] u :=
let ⟨c, hc⟩ := h.IsBigOWith
hc.eventually_mul_div_cancel
#align asymptotics.is_O.eventually_mul_div_cancel Asymptotics.IsBigO.eventually_mul_div_cancel
+-/
+#print Asymptotics.IsLittleO.eventually_mul_div_cancel /-
/-- If `u = o(v)` along `l`, then `(u / v) * v = u` eventually at `l`. -/
theorem IsLittleO.eventually_mul_div_cancel (h : u =o[l] v) : u / v * v =ᶠ[l] u :=
(h.forall_isBigOWith zero_lt_one).eventually_mul_div_cancel
#align asymptotics.is_o.eventually_mul_div_cancel Asymptotics.IsLittleO.eventually_mul_div_cancel
+-/
end EventuallyMulDivCancel
@@ -1893,6 +2439,7 @@ section ExistsMulEq
variable {u v : α → 𝕜}
+#print Asymptotics.isBigOWith_of_eq_mul /-
/-- If `‖φ‖` is eventually bounded by `c`, and `u =ᶠ[l] φ * v`, then we have `is_O_with c u v l`.
This does not require any assumptions on `c`, which is why we keep this version along with
`is_O_with_iff_exists_eq_mul`. -/
@@ -1903,7 +2450,9 @@ theorem isBigOWith_of_eq_mul (φ : α → 𝕜) (hφ : ∀ᶠ x in l, ‖φ x‖
simp only [norm_mul, Pi.mul_apply]
exact mul_le_mul_of_nonneg_right hx (norm_nonneg _)
#align asymptotics.is_O_with_of_eq_mul Asymptotics.isBigOWith_of_eq_mul
+-/
+#print Asymptotics.isBigOWith_iff_exists_eq_mul /-
theorem isBigOWith_iff_exists_eq_mul (hc : 0 ≤ c) :
IsBigOWith c l u v ↔ ∃ (φ : α → 𝕜) (hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v :=
by
@@ -1915,12 +2464,16 @@ theorem isBigOWith_iff_exists_eq_mul (hc : 0 ≤ c) :
· rintro ⟨φ, hφ, h⟩
exact is_O_with_of_eq_mul φ hφ h
#align asymptotics.is_O_with_iff_exists_eq_mul Asymptotics.isBigOWith_iff_exists_eq_mul
+-/
+#print Asymptotics.IsBigOWith.exists_eq_mul /-
theorem IsBigOWith.exists_eq_mul (h : IsBigOWith c l u v) (hc : 0 ≤ c) :
∃ (φ : α → 𝕜) (hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v :=
(isBigOWith_iff_exists_eq_mul hc).mp h
#align asymptotics.is_O_with.exists_eq_mul Asymptotics.IsBigOWith.exists_eq_mul
+-/
+#print Asymptotics.isBigO_iff_exists_eq_mul /-
theorem isBigO_iff_exists_eq_mul :
u =O[l] v ↔ ∃ (φ : α → 𝕜) (hφ : l.IsBoundedUnder (· ≤ ·) (norm ∘ φ)), u =ᶠ[l] φ * v :=
by
@@ -1932,10 +2485,12 @@ theorem isBigO_iff_exists_eq_mul :
· rintro ⟨φ, ⟨c, hφ⟩, huvφ⟩
exact is_O_iff_is_O_with.2 ⟨c, is_O_with_of_eq_mul φ hφ huvφ⟩
#align asymptotics.is_O_iff_exists_eq_mul Asymptotics.isBigO_iff_exists_eq_mul
+-/
alias is_O_iff_exists_eq_mul ↔ is_O.exists_eq_mul _
#align asymptotics.is_O.exists_eq_mul Asymptotics.IsBigO.exists_eq_mul
+#print Asymptotics.isLittleO_iff_exists_eq_mul /-
theorem isLittleO_iff_exists_eq_mul :
u =o[l] v ↔ ∃ (φ : α → 𝕜) (hφ : Tendsto φ l (𝓝 0)), u =ᶠ[l] φ * v :=
by
@@ -1945,6 +2500,7 @@ theorem isLittleO_iff_exists_eq_mul :
rw [NormedAddCommGroup.tendsto_nhds_zero] at hφ
exact is_O_with_of_eq_mul _ ((hφ c hpos).mono fun x => le_of_lt) huvφ
#align asymptotics.is_o_iff_exists_eq_mul Asymptotics.isLittleO_iff_exists_eq_mul
+-/
alias is_o_iff_exists_eq_mul ↔ is_o.exists_eq_mul _
#align asymptotics.is_o.exists_eq_mul Asymptotics.IsLittleO.exists_eq_mul
@@ -1954,6 +2510,7 @@ end ExistsMulEq
/-! ### Miscellanous lemmas -/
+#print Asymptotics.div_isBoundedUnder_of_isBigO /-
theorem div_isBoundedUnder_of_isBigO {α : Type _} {l : Filter α} {f g : α → 𝕜} (h : f =O[l] g) :
IsBoundedUnder (· ≤ ·) l fun x => ‖f x / g x‖ :=
by
@@ -1962,7 +2519,9 @@ theorem div_isBoundedUnder_of_isBigO {α : Type _} {l : Filter α} {f g : α →
rw [norm_div]
exact div_le_of_nonneg_of_le_mul (norm_nonneg _) h₀ hx
#align asymptotics.div_is_bounded_under_of_is_O Asymptotics.div_isBoundedUnder_of_isBigO
+-/
+#print Asymptotics.isBigO_iff_div_isBoundedUnder /-
theorem isBigO_iff_div_isBoundedUnder {α : Type _} {l : Filter α} {f g : α → 𝕜}
(hgf : ∀ᶠ x in l, g x = 0 → f x = 0) :
f =O[l] g ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x / g x‖ :=
@@ -1975,12 +2534,16 @@ theorem isBigO_iff_div_isBoundedUnder {α : Type _} {l : Filter α} {f g : α
· simp [hx₁ hgx, hgx]
· exact (div_le_iff (norm_pos_iff.2 hgx)).mp hx₂
#align asymptotics.is_O_iff_div_is_bounded_under Asymptotics.isBigO_iff_div_isBoundedUnder
+-/
+#print Asymptotics.isBigO_of_div_tendsto_nhds /-
theorem isBigO_of_div_tendsto_nhds {α : Type _} {l : Filter α} {f g : α → 𝕜}
(hgf : ∀ᶠ x in l, g x = 0 → f x = 0) (c : 𝕜) (H : Filter.Tendsto (f / g) l (𝓝 c)) : f =O[l] g :=
(isBigO_iff_div_isBoundedUnder hgf).2 <| H.norm.isBoundedUnder_le
#align asymptotics.is_O_of_div_tendsto_nhds Asymptotics.isBigO_of_div_tendsto_nhds
+-/
+#print Asymptotics.IsLittleO.tendsto_zero_of_tendsto /-
theorem IsLittleO.tendsto_zero_of_tendsto {α E 𝕜 : Type _} [NormedAddCommGroup E] [NormedField 𝕜]
{u : α → E} {v : α → 𝕜} {l : Filter α} {y : 𝕜} (huv : u =o[l] v) (hv : Tendsto v l (𝓝 y)) :
Tendsto u l (𝓝 0) := by
@@ -1988,7 +2551,9 @@ theorem IsLittleO.tendsto_zero_of_tendsto {α E 𝕜 : Type _} [NormedAddCommGro
· rwa [is_o_one_iff] at h
exact huv.trans_is_O (hv.is_O_one 𝕜)
#align asymptotics.is_o.tendsto_zero_of_tendsto Asymptotics.IsLittleO.tendsto_zero_of_tendsto
+-/
+#print Asymptotics.isLittleO_pow_pow /-
theorem isLittleO_pow_pow {m n : ℕ} (h : m < n) : (fun x : 𝕜 => x ^ n) =o[𝓝 0] fun x => x ^ m :=
by
rcases lt_iff_exists_add.1 h with ⟨p, hp0 : 0 < p, rfl⟩
@@ -1996,30 +2561,42 @@ theorem isLittleO_pow_pow {m n : ℕ} (h : m < n) : (fun x : 𝕜 => x ^ n) =o[
simpa only [pow_add, one_pow, mul_one]
exact is_O.mul_is_o (is_O_refl _ _) (is_o.pow ((is_o_one_iff _).2 tendsto_id) hp0)
#align asymptotics.is_o_pow_pow Asymptotics.isLittleO_pow_pow
+-/
+#print Asymptotics.isLittleO_norm_pow_norm_pow /-
theorem isLittleO_norm_pow_norm_pow {m n : ℕ} (h : m < n) :
(fun x : E' => ‖x‖ ^ n) =o[𝓝 0] fun x => ‖x‖ ^ m :=
(isLittleO_pow_pow h).comp_tendsto tendsto_norm_zero
#align asymptotics.is_o_norm_pow_norm_pow Asymptotics.isLittleO_norm_pow_norm_pow
+-/
+#print Asymptotics.isLittleO_pow_id /-
theorem isLittleO_pow_id {n : ℕ} (h : 1 < n) : (fun x : 𝕜 => x ^ n) =o[𝓝 0] fun x => x := by
convert is_o_pow_pow h; simp only [pow_one]
#align asymptotics.is_o_pow_id Asymptotics.isLittleO_pow_id
+-/
+#print Asymptotics.isLittleO_norm_pow_id /-
theorem isLittleO_norm_pow_id {n : ℕ} (h : 1 < n) : (fun x : E' => ‖x‖ ^ n) =o[𝓝 0] fun x => x := by
simpa only [pow_one, is_o_norm_right] using @is_o_norm_pow_norm_pow E' _ _ _ h
#align asymptotics.is_o_norm_pow_id Asymptotics.isLittleO_norm_pow_id
+-/
+#print Asymptotics.IsBigO.eq_zero_of_norm_pow_within /-
theorem IsBigO.eq_zero_of_norm_pow_within {f : E'' → F''} {s : Set E''} {x₀ : E''} {n : ℕ}
(h : f =O[𝓝[s] x₀] fun x => ‖x - x₀‖ ^ n) (hx₀ : x₀ ∈ s) (hn : 0 < n) : f x₀ = 0 :=
mem_of_mem_nhdsWithin hx₀ h.eq_zero_imp <| by simp_rw [sub_self, norm_zero, zero_pow hn]
#align asymptotics.is_O.eq_zero_of_norm_pow_within Asymptotics.IsBigO.eq_zero_of_norm_pow_within
+-/
+#print Asymptotics.IsBigO.eq_zero_of_norm_pow /-
theorem IsBigO.eq_zero_of_norm_pow {f : E'' → F''} {x₀ : E''} {n : ℕ}
(h : f =O[𝓝 x₀] fun x => ‖x - x₀‖ ^ n) (hn : 0 < n) : f x₀ = 0 := by
rw [← nhdsWithin_univ] at h ; exact h.eq_zero_of_norm_pow_within (mem_univ _) hn
#align asymptotics.is_O.eq_zero_of_norm_pow Asymptotics.IsBigO.eq_zero_of_norm_pow
+-/
+#print Asymptotics.isLittleO_pow_sub_pow_sub /-
theorem isLittleO_pow_sub_pow_sub (x₀ : E') {n m : ℕ} (h : n < m) :
(fun x => ‖x - x₀‖ ^ m) =o[𝓝 x₀] fun x => ‖x - x₀‖ ^ n :=
haveI : tendsto (fun x => ‖x - x₀‖) (𝓝 x₀) (𝓝 0) :=
@@ -2029,12 +2606,16 @@ theorem isLittleO_pow_sub_pow_sub (x₀ : E') {n m : ℕ} (h : n < m) :
exact tendsto_id.sub tendsto_const_nhds
(is_o_pow_pow h).comp_tendsto this
#align asymptotics.is_o_pow_sub_pow_sub Asymptotics.isLittleO_pow_sub_pow_sub
+-/
+#print Asymptotics.isLittleO_pow_sub_sub /-
theorem isLittleO_pow_sub_sub (x₀ : E') {m : ℕ} (h : 1 < m) :
(fun x => ‖x - x₀‖ ^ m) =o[𝓝 x₀] fun x => x - x₀ := by
simpa only [is_o_norm_right, pow_one] using is_o_pow_sub_pow_sub x₀ h
#align asymptotics.is_o_pow_sub_sub Asymptotics.isLittleO_pow_sub_sub
+-/
+#print Asymptotics.IsBigOWith.right_le_sub_of_lt_1 /-
theorem IsBigOWith.right_le_sub_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith c l f₁ f₂) (hc : c < 1) :
IsBigOWith (1 / (1 - c)) l f₂ fun x => f₂ x - f₁ x :=
IsBigOWith.of_bound <|
@@ -2045,23 +2626,31 @@ theorem IsBigOWith.right_le_sub_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith
· exact le_trans (sub_le_sub_left hx _) (norm_sub_norm_le _ _)
· exact sub_pos.2 hc
#align asymptotics.is_O_with.right_le_sub_of_lt_1 Asymptotics.IsBigOWith.right_le_sub_of_lt_1
+-/
+#print Asymptotics.IsBigOWith.right_le_add_of_lt_1 /-
theorem IsBigOWith.right_le_add_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith c l f₁ f₂) (hc : c < 1) :
IsBigOWith (1 / (1 - c)) l f₂ fun x => f₁ x + f₂ x :=
(h.neg_right.right_le_sub_of_lt_1 hc).neg_right.of_neg_left.congr rfl (fun x => rfl) fun x => by
rw [neg_sub, sub_neg_eq_add]
#align asymptotics.is_O_with.right_le_add_of_lt_1 Asymptotics.IsBigOWith.right_le_add_of_lt_1
+-/
+#print Asymptotics.IsLittleO.right_isBigO_sub /-
theorem IsLittleO.right_isBigO_sub {f₁ f₂ : α → E'} (h : f₁ =o[l] f₂) :
f₂ =O[l] fun x => f₂ x - f₁ x :=
((h.def' one_half_pos).right_le_sub_of_lt_1 one_half_lt_one).IsBigO
#align asymptotics.is_o.right_is_O_sub Asymptotics.IsLittleO.right_isBigO_sub
+-/
+#print Asymptotics.IsLittleO.right_isBigO_add /-
theorem IsLittleO.right_isBigO_add {f₁ f₂ : α → E'} (h : f₁ =o[l] f₂) :
f₂ =O[l] fun x => f₁ x + f₂ x :=
((h.def' one_half_pos).right_le_add_of_lt_1 one_half_lt_one).IsBigO
#align asymptotics.is_o.right_is_O_add Asymptotics.IsLittleO.right_isBigO_add
+-/
+#print Asymptotics.bound_of_isBigO_cofinite /-
/-- If `f x = O(g x)` along `cofinite`, then there exists a positive constant `C` such that
`‖f x‖ ≤ C * ‖g x‖` whenever `g x ≠ 0`. -/
theorem bound_of_isBigO_cofinite (h : f =O[cofinite] g'') :
@@ -2075,7 +2664,9 @@ theorem bound_of_isBigO_cofinite (h : f =O[cofinite] g'') :
rw [max_mul_of_nonneg _ _ (norm_nonneg _), le_max_iff, or_iff_not_imp_left, not_le]
exact fun hx => (div_le_iff (norm_pos_iff.2 h₀)).1 (this _ hx)
#align asymptotics.bound_of_is_O_cofinite Asymptotics.bound_of_isBigO_cofinite
+-/
+#print Asymptotics.isBigO_cofinite_iff /-
theorem isBigO_cofinite_iff (h : ∀ x, g'' x = 0 → f'' x = 0) :
f'' =O[cofinite] g'' ↔ ∃ C, ∀ x, ‖f'' x‖ ≤ C * ‖g'' x‖ :=
⟨fun h' =>
@@ -2083,23 +2674,31 @@ theorem isBigO_cofinite_iff (h : ∀ x, g'' x = 0 → f'' x = 0) :
⟨C, fun x => if hx : g'' x = 0 then by simp [h _ hx, hx] else hC hx⟩,
fun h => (isBigO_top.2 h).mono le_top⟩
#align asymptotics.is_O_cofinite_iff Asymptotics.isBigO_cofinite_iff
+-/
+#print Asymptotics.bound_of_isBigO_nat_atTop /-
theorem bound_of_isBigO_nat_atTop {f : ℕ → E} {g'' : ℕ → E''} (h : f =O[atTop] g'') :
∃ C > 0, ∀ ⦃x⦄, g'' x ≠ 0 → ‖f x‖ ≤ C * ‖g'' x‖ :=
bound_of_isBigO_cofinite <| by rwa [Nat.cofinite_eq_atTop]
#align asymptotics.bound_of_is_O_nat_at_top Asymptotics.bound_of_isBigO_nat_atTop
+-/
+#print Asymptotics.isBigO_nat_atTop_iff /-
theorem isBigO_nat_atTop_iff {f : ℕ → E''} {g : ℕ → F''} (h : ∀ x, g x = 0 → f x = 0) :
f =O[atTop] g ↔ ∃ C, ∀ x, ‖f x‖ ≤ C * ‖g x‖ := by
rw [← Nat.cofinite_eq_atTop, is_O_cofinite_iff h]
#align asymptotics.is_O_nat_at_top_iff Asymptotics.isBigO_nat_atTop_iff
+-/
+#print Asymptotics.isBigO_one_nat_atTop_iff /-
theorem isBigO_one_nat_atTop_iff {f : ℕ → E''} :
f =O[atTop] (fun n => 1 : ℕ → ℝ) ↔ ∃ C, ∀ n, ‖f n‖ ≤ C :=
Iff.trans (isBigO_nat_atTop_iff fun n h => (one_ne_zero h).elim) <| by
simp only [norm_one, mul_one]
#align asymptotics.is_O_one_nat_at_top_iff Asymptotics.isBigO_one_nat_atTop_iff
+-/
+#print Asymptotics.isBigOWith_pi /-
theorem isBigOWith_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, NormedAddCommGroup (E' i)]
{f : α → ∀ i, E' i} {C : ℝ} (hC : 0 ≤ C) :
IsBigOWith C l f g' ↔ ∀ i, IsBigOWith C l (fun x => f x i) g' :=
@@ -2107,7 +2706,9 @@ theorem isBigOWith_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, No
have : ∀ x, 0 ≤ C * ‖g' x‖ := fun x => mul_nonneg hC (norm_nonneg _)
simp only [is_O_with_iff, pi_norm_le_iff_of_nonneg (this _), eventually_all]
#align asymptotics.is_O_with_pi Asymptotics.isBigOWith_pi
+-/
+#print Asymptotics.isBigO_pi /-
@[simp]
theorem isBigO_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, NormedAddCommGroup (E' i)]
{f : α → ∀ i, E' i} : f =O[l] g' ↔ ∀ i, (fun x => f x i) =O[l] g' :=
@@ -2115,7 +2716,9 @@ theorem isBigO_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, Normed
simp only [is_O_iff_eventually_is_O_with, ← eventually_all]
exact eventually_congr (eventually_at_top.2 ⟨0, fun c => is_O_with_pi⟩)
#align asymptotics.is_O_pi Asymptotics.isBigO_pi
+-/
+#print Asymptotics.isLittleO_pi /-
@[simp]
theorem isLittleO_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, NormedAddCommGroup (E' i)]
{f : α → ∀ i, E' i} : f =o[l] g' ↔ ∀ i, (fun x => f x i) =o[l] g' :=
@@ -2123,21 +2726,26 @@ theorem isLittleO_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, Nor
simp (config := { contextual := true }) only [is_o, is_O_with_pi, le_of_lt]
exact ⟨fun h i c hc => h hc i, fun h c hc i => h i hc⟩
#align asymptotics.is_o_pi Asymptotics.isLittleO_pi
+-/
end Asymptotics
open Asymptotics
+#print summable_of_isBigO /-
theorem summable_of_isBigO {ι E} [NormedAddCommGroup E] [CompleteSpace E] {f : ι → E} {g : ι → ℝ}
(hg : Summable g) (h : f =O[cofinite] g) : Summable f :=
let ⟨C, hC⟩ := h.IsBigOWith
summable_of_norm_bounded_eventually (fun x => C * ‖g x‖) (hg.abs.mul_left _) hC.bound
#align summable_of_is_O summable_of_isBigO
+-/
+#print summable_of_isBigO_nat /-
theorem summable_of_isBigO_nat {E} [NormedAddCommGroup E] [CompleteSpace E] {f : ℕ → E} {g : ℕ → ℝ}
(hg : Summable g) (h : f =O[atTop] g) : Summable f :=
summable_of_isBigO hg <| Nat.cofinite_eq_atTop.symm ▸ h
#align summable_of_is_O_nat summable_of_isBigO_nat
+-/
namespace LocalHomeomorph
@@ -2145,6 +2753,7 @@ variable {α : Type _} {β : Type _} [TopologicalSpace α] [TopologicalSpace β]
variable {E : Type _} [Norm E] {F : Type _} [Norm F]
+#print LocalHomeomorph.isBigOWith_congr /-
/-- Transfer `is_O_with` over a `local_homeomorph`. -/
theorem isBigOWith_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
{g : β → F} {C : ℝ} : IsBigOWith C (𝓝 b) f g ↔ IsBigOWith C (𝓝 (e.symm b)) (f ∘ e) (g ∘ e) :=
@@ -2155,18 +2764,23 @@ theorem isBigOWith_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.targ
((e.eventually_right_inverse hb).mono fun x hx => congr_arg f hx)
((e.eventually_right_inverse hb).mono fun x hx => congr_arg g hx)⟩
#align local_homeomorph.is_O_with_congr LocalHomeomorph.isBigOWith_congr
+-/
+#print LocalHomeomorph.isBigO_congr /-
/-- Transfer `is_O` over a `local_homeomorph`. -/
theorem isBigO_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E} {g : β → F} :
f =O[𝓝 b] g ↔ (f ∘ e) =O[𝓝 (e.symm b)] (g ∘ e) := by unfold is_O;
exact exists_congr fun C => e.is_O_with_congr hb
#align local_homeomorph.is_O_congr LocalHomeomorph.isBigO_congr
+-/
+#print LocalHomeomorph.isLittleO_congr /-
/-- Transfer `is_o` over a `local_homeomorph`. -/
theorem isLittleO_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
{g : β → F} : f =o[𝓝 b] g ↔ (f ∘ e) =o[𝓝 (e.symm b)] (g ∘ e) := by unfold is_o;
exact forall₂_congr fun c hc => e.is_O_with_congr hb
#align local_homeomorph.is_o_congr LocalHomeomorph.isLittleO_congr
+-/
end LocalHomeomorph
@@ -2178,23 +2792,29 @@ variable {E : Type _} [Norm E] {F : Type _} [Norm F]
open Asymptotics
+#print Homeomorph.isBigOWith_congr /-
/-- Transfer `is_O_with` over a `homeomorph`. -/
theorem isBigOWith_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} {C : ℝ} :
IsBigOWith C (𝓝 b) f g ↔ IsBigOWith C (𝓝 (e.symm b)) (f ∘ e) (g ∘ e) :=
e.toLocalHomeomorph.isBigOWith_congr trivial
#align homeomorph.is_O_with_congr Homeomorph.isBigOWith_congr
+-/
+#print Homeomorph.isBigO_congr /-
/-- Transfer `is_O` over a `homeomorph`. -/
theorem isBigO_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} :
f =O[𝓝 b] g ↔ (f ∘ e) =O[𝓝 (e.symm b)] (g ∘ e) := by unfold is_O;
exact exists_congr fun C => e.is_O_with_congr
#align homeomorph.is_O_congr Homeomorph.isBigO_congr
+-/
+#print Homeomorph.isLittleO_congr /-
/-- Transfer `is_o` over a `homeomorph`. -/
theorem isLittleO_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} :
f =o[𝓝 b] g ↔ (f ∘ e) =o[𝓝 (e.symm b)] (g ∘ e) := by unfold is_o;
exact forall₂_congr fun c hc => e.is_O_with_congr
#align homeomorph.is_o_congr Homeomorph.isLittleO_congr
+-/
end Homeomorph
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -205,7 +205,6 @@ theorem IsBigOWith.weaken (h : IsBigOWith c l f g') (hc : c ≤ c') : IsBigOWith
calc
‖f x‖ ≤ c * ‖g' x‖ := hx
_ ≤ _ := mul_le_mul_of_nonneg_right hc (norm_nonneg _)
-
#align asymptotics.is_O_with.weaken Asymptotics.IsBigOWith.weaken
theorem IsBigOWith.exists_pos (h : IsBigOWith c l f g') :
@@ -456,7 +455,6 @@ theorem IsBigOWith.trans (hfg : IsBigOWith c l f g) (hgk : IsBigOWith c' l g k)
‖f x‖ ≤ c * ‖g x‖ := hx
_ ≤ c * (c' * ‖k x‖) := (mul_le_mul_of_nonneg_left hx' hc)
_ = c * c' * ‖k x‖ := (mul_assoc _ _ _).symm
-
#align asymptotics.is_O_with.trans Asymptotics.IsBigOWith.trans
@[trans]
@@ -1030,7 +1028,6 @@ theorem IsBigOWith.add (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : IsBigOWith c₂
calc
‖f₁ x + f₂ x‖ ≤ c₁ * ‖g x‖ + c₂ * ‖g x‖ := norm_add_le_of_le hx₁ hx₂
_ = (c₁ + c₂) * ‖g x‖ := (add_mul _ _ _).symm
-
#align asymptotics.is_O_with.add Asymptotics.IsBigOWith.add
theorem IsBigO.add (h₁ : f₁ =O[l] g) (h₂ : f₂ =O[l] g) : (fun x => f₁ x + f₂ x) =O[l] g :=
@@ -1233,7 +1230,6 @@ theorem isBigO_pure {x} : f'' =O[pure x] g'' ↔ g'' x = 0 → f'' x = 0 :=
calc
f'' =O[pure x] g'' ↔ (fun y : α => f'' x) =O[pure x] fun _ => g'' x := isBigO_congr rfl rfl
_ ↔ g'' x = 0 → f'' x = 0 := isBigO_const_const_iff _
-
#align asymptotics.is_O_pure Asymptotics.isBigO_pure
end ZeroConst
@@ -1310,7 +1306,6 @@ theorem isLittleO_one_left_iff : (fun x => 1 : α → F) =o[l] f ↔ Tendsto (fu
simp only [norm_one, mul_one, true_imp_iff, mem_Ici]
_ ↔ Tendsto (fun x => ‖f x‖) l atTop :=
atTop_hasCountableBasis_of_archimedean.1.tendsto_right_iff.symm
-
#align asymptotics.is_o_one_left_iff Asymptotics.isLittleO_one_left_iff
theorem Filter.Tendsto.isBigO_one {c : E'} (h : Tendsto f' l (𝓝 c)) :
@@ -1605,7 +1600,6 @@ theorem IsBigOWith.of_pow {n : ℕ} {f : α → 𝕜} {g : α → R} (h : IsBigO
_ ≤ c' ^ n * ‖g x‖ ^ n :=
(mul_le_mul_of_nonneg_left (norm_pow_le' _ hn.bot_lt) (pow_nonneg hc' _))
_ = (c' * ‖g x‖) ^ n := (mul_pow _ _ _).symm
-
#align asymptotics.is_O_with.of_pow Asymptotics.IsBigOWith.of_pow
theorem IsBigO.pow {f : α → R} {g : α → 𝕜} (h : f =O[l] g) (n : ℕ) :
@@ -1792,7 +1786,6 @@ theorem IsLittleO.tendsto_div_nhds_zero {f g : α → 𝕜} (h : f =o[l] g) :
(fun x => f x / g x) =o[l] fun x => g x / g x := by
simpa only [div_eq_mul_inv] using h.mul_is_O (is_O_refl _ _)
_ =O[l] fun x => (1 : 𝕜) := isBigO_of_le _ fun x => by simp [div_self_le_one]
-
#align asymptotics.is_o.tendsto_div_nhds_zero Asymptotics.IsLittleO.tendsto_div_nhds_zero
theorem IsLittleO.tendsto_inv_smul_nhds_zero [NormedSpace 𝕜 E'] {f : α → E'} {g : α → 𝕜}
@@ -1849,7 +1842,6 @@ theorem isLittleO_pure {x} : f'' =o[pure x] g'' ↔ f'' x = 0 :=
calc
f'' =o[pure x] g'' ↔ (fun y : α => f'' x) =o[pure x] fun _ => g'' x := isLittleO_congr rfl rfl
_ ↔ f'' x = 0 := isLittleO_const_const_iff
-
#align asymptotics.is_o_pure Asymptotics.isLittleO_pure
theorem isLittleO_const_id_comap_norm_atTop (c : F'') :
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -306,7 +306,7 @@ theorem isBigOWith_congr (hc : c₁ = c₂) (hf : f₁ =ᶠ[l] f₂) (hg : g₁
unfold is_O_with
subst c₂
apply Filter.eventually_congr
- filter_upwards [hf, hg]with _ e₁ e₂
+ filter_upwards [hf, hg] with _ e₁ e₂
rw [e₁, e₂]
#align asymptotics.is_O_with_congr Asymptotics.isBigOWith_congr
@@ -451,7 +451,7 @@ theorem IsLittleO.mono (h : f =o[l'] g) (hl : l ≤ l') : f =o[l] g :=
theorem IsBigOWith.trans (hfg : IsBigOWith c l f g) (hgk : IsBigOWith c' l g k) (hc : 0 ≤ c) :
IsBigOWith (c * c') l f k := by
unfold is_O_with at *
- filter_upwards [hfg, hgk]with x hx hx'
+ filter_upwards [hfg, hgk] with x hx hx'
calc
‖f x‖ ≤ c * ‖g x‖ := hx
_ ≤ c * (c' * ‖k x‖) := (mul_le_mul_of_nonneg_left hx' hc)
@@ -946,7 +946,7 @@ end
theorem IsBigOWith.prod_left_same (hf : IsBigOWith c l f' k') (hg : IsBigOWith c l g' k') :
IsBigOWith c l (fun x => (f' x, g' x)) k' := by
- rw [is_O_with_iff] at * <;> filter_upwards [hf, hg]with x using max_le
+ rw [is_O_with_iff] at * <;> filter_upwards [hf, hg] with x using max_le
#align asymptotics.is_O_with.prod_left_same Asymptotics.IsBigOWith.prod_left_same
theorem IsBigOWith.prod_left (hf : IsBigOWith c l f' k') (hg : IsBigOWith c' l g' k') :
@@ -1026,8 +1026,8 @@ variable {f₁ f₂ : α → E'} {g₁ g₂ : α → F'}
theorem IsBigOWith.add (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : IsBigOWith c₂ l f₂ g) :
IsBigOWith (c₁ + c₂) l (fun x => f₁ x + f₂ x) g := by
rw [is_O_with] at * <;>
- filter_upwards [h₁,
- h₂]with x hx₁ hx₂ using calc
+ filter_upwards [h₁, h₂] with x hx₁ hx₂ using
+ calc
‖f₁ x + f₂ x‖ ≤ c₁ * ‖g x‖ + c₂ * ‖g x‖ := norm_add_le_of_le hx₁ hx₂
_ = (c₁ + c₂) * ‖g x‖ := (add_mul _ _ _).symm
@@ -1543,7 +1543,7 @@ theorem IsBigOWith.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} {c₁ c
IsBigOWith (c₁ * c₂) l (fun x => f₁ x * f₂ x) fun x => g₁ x * g₂ x :=
by
unfold is_O_with at *
- filter_upwards [h₁, h₂]with _ hx₁ hx₂
+ filter_upwards [h₁, h₂] with _ hx₁ hx₂
apply le_trans (norm_mul_le _ _)
convert mul_le_mul hx₁ hx₂ (norm_nonneg _) (le_trans (norm_nonneg _) hx₁) using 1
rw [norm_mul, mul_mul_mul_comm]
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -209,22 +209,22 @@ theorem IsBigOWith.weaken (h : IsBigOWith c l f g') (hc : c ≤ c') : IsBigOWith
#align asymptotics.is_O_with.weaken Asymptotics.IsBigOWith.weaken
theorem IsBigOWith.exists_pos (h : IsBigOWith c l f g') :
- ∃ (c' : _)(H : 0 < c'), IsBigOWith c' l f g' :=
+ ∃ (c' : _) (H : 0 < c'), IsBigOWith c' l f g' :=
⟨max c 1, lt_of_lt_of_le zero_lt_one (le_max_right c 1), h.weaken <| le_max_left c 1⟩
#align asymptotics.is_O_with.exists_pos Asymptotics.IsBigOWith.exists_pos
-theorem IsBigO.exists_pos (h : f =O[l] g') : ∃ (c : _)(H : 0 < c), IsBigOWith c l f g' :=
+theorem IsBigO.exists_pos (h : f =O[l] g') : ∃ (c : _) (H : 0 < c), IsBigOWith c l f g' :=
let ⟨c, hc⟩ := h.IsBigOWith
hc.exists_pos
#align asymptotics.is_O.exists_pos Asymptotics.IsBigO.exists_pos
theorem IsBigOWith.exists_nonneg (h : IsBigOWith c l f g') :
- ∃ (c' : _)(H : 0 ≤ c'), IsBigOWith c' l f g' :=
+ ∃ (c' : _) (H : 0 ≤ c'), IsBigOWith c' l f g' :=
let ⟨c, cpos, hc⟩ := h.exists_pos
⟨c, le_of_lt cpos, hc⟩
#align asymptotics.is_O_with.exists_nonneg Asymptotics.IsBigOWith.exists_nonneg
-theorem IsBigO.exists_nonneg (h : f =O[l] g') : ∃ (c : _)(H : 0 ≤ c), IsBigOWith c l f g' :=
+theorem IsBigO.exists_nonneg (h : f =O[l] g') : ∃ (c : _) (H : 0 ≤ c), IsBigOWith c l f g' :=
let ⟨c, hc⟩ := h.IsBigOWith
hc.exists_nonneg
#align asymptotics.is_O.exists_nonneg Asymptotics.IsBigO.exists_nonneg
@@ -241,7 +241,8 @@ theorem isBigO_iff_eventually : f =O[l] g' ↔ ∀ᶠ c in atTop, ∀ᶠ x in l,
#align asymptotics.is_O_iff_eventually Asymptotics.isBigO_iff_eventually
theorem IsBigO.exists_mem_basis {ι} {p : ι → Prop} {s : ι → Set α} (h : f =O[l] g')
- (hb : l.HasBasis p s) : ∃ (c : ℝ)(hc : 0 < c)(i : ι)(hi : p i), ∀ x ∈ s i, ‖f x‖ ≤ c * ‖g' x‖ :=
+ (hb : l.HasBasis p s) :
+ ∃ (c : ℝ) (hc : 0 < c) (i : ι) (hi : p i), ∀ x ∈ s i, ‖f x‖ ≤ c * ‖g' x‖ :=
flip Exists₂.imp h.exists_pos fun c hc h => by
simpa only [is_O_with_iff, hb.eventually_iff, exists_prop] using h
#align asymptotics.is_O.exists_mem_basis Asymptotics.IsBigO.exists_mem_basis
@@ -259,7 +260,7 @@ theorem isLittleO_iff_nat_mul_le_aux (h₀ : (∀ x, 0 ≤ ‖f x‖) ∨ ∀ x,
· refine' (H.def one_pos).mono fun x h₀' => _
rw [Nat.cast_zero, MulZeroClass.zero_mul]
refine' h₀.elim (fun hf => (hf x).trans _) fun hg => hg x
- rwa [one_mul] at h₀'
+ rwa [one_mul] at h₀'
· have : (0 : ℝ) < n.succ := Nat.cast_pos.2 n.succ_pos
exact (is_O_with_inv this).1 (H.def' <| inv_pos.2 this)
· refine' fun H => is_o_iff.2 fun ε ε0 => _
@@ -559,7 +560,7 @@ theorem isLittleO_irrefl' (h : ∃ᶠ x in l, ‖f' x‖ ≠ 0) : ¬f' =o[l] f'
by
intro ho
rcases((ho.bound one_half_pos).and_frequently h).exists with ⟨x, hle, hne⟩
- rw [one_div, ← div_eq_inv_mul] at hle
+ rw [one_div, ← div_eq_inv_mul] at hle
exact (half_lt_self (lt_of_le_of_ne (norm_nonneg _) hne.symm)).not_le hle
#align asymptotics.is_o_irrefl' Asymptotics.isLittleO_irrefl'
@@ -1359,7 +1360,7 @@ theorem isBigO_const_iff {c : F''} :
refine' ⟨fun h => ⟨fun hc => is_O_zero_right_iff.1 (by rwa [← hc]), h.isBoundedUnder_le⟩, _⟩
rintro ⟨hcf, hf⟩
rcases eq_or_ne c 0 with (hc | hc)
- exacts[(hcf hc).trans_isBigO (is_O_zero _ _), hf.is_O_const hc]
+ exacts [(hcf hc).trans_isBigO (is_O_zero _ _), hf.is_O_const hc]
#align asymptotics.is_O_const_iff Asymptotics.isBigO_const_iff
theorem isBigO_iff_isBoundedUnder_le_div (h : ∀ᶠ x in l, g'' x ≠ 0) :
@@ -1912,7 +1913,7 @@ theorem isBigOWith_of_eq_mul (φ : α → 𝕜) (hφ : ∀ᶠ x in l, ‖φ x‖
#align asymptotics.is_O_with_of_eq_mul Asymptotics.isBigOWith_of_eq_mul
theorem isBigOWith_iff_exists_eq_mul (hc : 0 ≤ c) :
- IsBigOWith c l u v ↔ ∃ (φ : α → 𝕜)(hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v :=
+ IsBigOWith c l u v ↔ ∃ (φ : α → 𝕜) (hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v :=
by
constructor
· intro h
@@ -1924,12 +1925,12 @@ theorem isBigOWith_iff_exists_eq_mul (hc : 0 ≤ c) :
#align asymptotics.is_O_with_iff_exists_eq_mul Asymptotics.isBigOWith_iff_exists_eq_mul
theorem IsBigOWith.exists_eq_mul (h : IsBigOWith c l u v) (hc : 0 ≤ c) :
- ∃ (φ : α → 𝕜)(hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v :=
+ ∃ (φ : α → 𝕜) (hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v :=
(isBigOWith_iff_exists_eq_mul hc).mp h
#align asymptotics.is_O_with.exists_eq_mul Asymptotics.IsBigOWith.exists_eq_mul
theorem isBigO_iff_exists_eq_mul :
- u =O[l] v ↔ ∃ (φ : α → 𝕜)(hφ : l.IsBoundedUnder (· ≤ ·) (norm ∘ φ)), u =ᶠ[l] φ * v :=
+ u =O[l] v ↔ ∃ (φ : α → 𝕜) (hφ : l.IsBoundedUnder (· ≤ ·) (norm ∘ φ)), u =ᶠ[l] φ * v :=
by
constructor
· rintro h
@@ -1944,12 +1945,12 @@ alias is_O_iff_exists_eq_mul ↔ is_O.exists_eq_mul _
#align asymptotics.is_O.exists_eq_mul Asymptotics.IsBigO.exists_eq_mul
theorem isLittleO_iff_exists_eq_mul :
- u =o[l] v ↔ ∃ (φ : α → 𝕜)(hφ : Tendsto φ l (𝓝 0)), u =ᶠ[l] φ * v :=
+ u =o[l] v ↔ ∃ (φ : α → 𝕜) (hφ : Tendsto φ l (𝓝 0)), u =ᶠ[l] φ * v :=
by
constructor
· exact fun h => ⟨fun x => u x / v x, h.tendsto_div_nhds_zero, h.eventually_mul_div_cancel.symm⟩
· unfold is_o; rintro ⟨φ, hφ, huvφ⟩ c hpos
- rw [NormedAddCommGroup.tendsto_nhds_zero] at hφ
+ rw [NormedAddCommGroup.tendsto_nhds_zero] at hφ
exact is_O_with_of_eq_mul _ ((hφ c hpos).mono fun x => le_of_lt) huvφ
#align asymptotics.is_o_iff_exists_eq_mul Asymptotics.isLittleO_iff_exists_eq_mul
@@ -1976,7 +1977,7 @@ theorem isBigO_iff_div_isBoundedUnder {α : Type _} {l : Filter α} {f g : α
by
refine' ⟨div_is_bounded_under_of_is_O, fun h => _⟩
obtain ⟨c, hc⟩ := h
- simp only [eventually_map, norm_div] at hc
+ simp only [eventually_map, norm_div] at hc
refine' is_O.of_bound c (hc.mp <| hgf.mono fun x hx₁ hx₂ => _)
by_cases hgx : g x = 0
· simp [hx₁ hgx, hgx]
@@ -1992,7 +1993,7 @@ theorem IsLittleO.tendsto_zero_of_tendsto {α E 𝕜 : Type _} [NormedAddCommGro
{u : α → E} {v : α → 𝕜} {l : Filter α} {y : 𝕜} (huv : u =o[l] v) (hv : Tendsto v l (𝓝 y)) :
Tendsto u l (𝓝 0) := by
suffices h : u =o[l] fun x => (1 : 𝕜)
- · rwa [is_o_one_iff] at h
+ · rwa [is_o_one_iff] at h
exact huv.trans_is_O (hv.is_O_one 𝕜)
#align asymptotics.is_o.tendsto_zero_of_tendsto Asymptotics.IsLittleO.tendsto_zero_of_tendsto
@@ -2024,7 +2025,7 @@ theorem IsBigO.eq_zero_of_norm_pow_within {f : E'' → F''} {s : Set E''} {x₀
theorem IsBigO.eq_zero_of_norm_pow {f : E'' → F''} {x₀ : E''} {n : ℕ}
(h : f =O[𝓝 x₀] fun x => ‖x - x₀‖ ^ n) (hn : 0 < n) : f x₀ = 0 := by
- rw [← nhdsWithin_univ] at h; exact h.eq_zero_of_norm_pow_within (mem_univ _) hn
+ rw [← nhdsWithin_univ] at h ; exact h.eq_zero_of_norm_pow_within (mem_univ _) hn
#align asymptotics.is_O.eq_zero_of_norm_pow Asymptotics.IsBigO.eq_zero_of_norm_pow
theorem isLittleO_pow_sub_pow_sub (x₀ : E') {n m : ℕ} (h : n < m) :
@@ -2047,7 +2048,7 @@ theorem IsBigOWith.right_le_sub_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith
IsBigOWith.of_bound <|
mem_of_superset h.bound fun x hx =>
by
- simp only [mem_set_of_eq] at hx⊢
+ simp only [mem_set_of_eq] at hx ⊢
rw [mul_comm, one_div, ← div_eq_mul_inv, le_div_iff, mul_sub, mul_one, mul_comm]
· exact le_trans (sub_le_sub_left hx _) (norm_sub_norm_le _ _)
· exact sub_pos.2 hc
@@ -2075,7 +2076,7 @@ theorem bound_of_isBigO_cofinite (h : f =O[cofinite] g'') :
∃ C > 0, ∀ ⦃x⦄, g'' x ≠ 0 → ‖f x‖ ≤ C * ‖g'' x‖ :=
by
rcases h.exists_pos with ⟨C, C₀, hC⟩
- rw [is_O_with, eventually_cofinite] at hC
+ rw [is_O_with, eventually_cofinite] at hC
rcases(hC.to_finset.image fun x => ‖f x‖ / ‖g'' x‖).exists_le with ⟨C', hC'⟩
have : ∀ x, C * ‖g'' x‖ < ‖f x‖ → ‖f x‖ / ‖g'' x‖ ≤ C' := by simpa using hC'
refine' ⟨max C C', lt_max_iff.2 (Or.inl C₀), fun x h₀ => _⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -55,7 +55,7 @@ the Fréchet derivative.)
open Filter Set
-open Topology BigOperators Classical Filter NNReal
+open scoped Topology BigOperators Classical Filter NNReal
namespace Asymptotics
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -94,28 +94,10 @@ irreducible_def IsBigOWith (c : ℝ) (l : Filter α) (f : α → E) (g : α →
#align asymptotics.is_O_with Asymptotics.IsBigOWith
-/
-/- warning: asymptotics.is_O_with_iff -> Asymptotics.isBigOWith_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g) (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g) (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_iff Asymptotics.isBigOWith_iffₓ'. -/
/-- Definition of `is_O_with`. We record it in a lemma as `is_O_with` is irreducible. -/
theorem isBigOWith_iff : IsBigOWith c l f g ↔ ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ := by rw [is_O_with]
#align asymptotics.is_O_with_iff Asymptotics.isBigOWith_iff
-/- warning: asymptotics.is_O_with.bound -> Asymptotics.IsBigOWith.bound is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g) -> (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g) -> (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.bound Asymptotics.IsBigOWith.boundₓ'. -/
-/- warning: asymptotics.is_O_with.of_bound -> Asymptotics.IsBigOWith.of_bound is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_bound Asymptotics.IsBigOWith.of_boundₓ'. -/
alias is_O_with_iff ↔ is_O_with.bound is_O_with.of_bound
#align asymptotics.is_O_with.bound Asymptotics.IsBigOWith.bound
#align asymptotics.is_O_with.of_bound Asymptotics.IsBigOWith.of_bound
@@ -133,55 +115,25 @@ irreducible_def IsBigO (l : Filter α) (f : α → E) (g : α → F) : Prop :=
-- mathport name: «expr =O[ ] »
notation:100 f " =O[" l "] " g:100 => IsBigO l f g
-/- warning: asymptotics.is_O_iff_is_O_with -> Asymptotics.isBigO_iff_isBigOWith is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) (Exists.{1} Real (fun (c : Real) => Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) (Exists.{1} Real (fun (c : Real) => Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_is_O_with Asymptotics.isBigO_iff_isBigOWithₓ'. -/
/-- Definition of `is_O` in terms of `is_O_with`. We record it in a lemma as `is_O` is
irreducible. -/
theorem isBigO_iff_isBigOWith : f =O[l] g ↔ ∃ c : ℝ, IsBigOWith c l f g := by rw [is_O]
#align asymptotics.is_O_iff_is_O_with Asymptotics.isBigO_iff_isBigOWith
-/- warning: asymptotics.is_O_iff -> Asymptotics.isBigO_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) (Exists.{1} Real (fun (c : Real) => Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) (Exists.{1} Real (fun (c : Real) => Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff Asymptotics.isBigO_iffₓ'. -/
/-- Definition of `is_O` in terms of filters. We record it in a lemma as we will set
`is_O` to be irreducible at the end of this file. -/
theorem isBigO_iff : f =O[l] g ↔ ∃ c : ℝ, ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ := by
simp only [is_O, is_O_with]
#align asymptotics.is_O_iff Asymptotics.isBigO_iff
-/- warning: asymptotics.is_O.of_bound -> Asymptotics.IsBigO.of_bound is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α} (c : Real), (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α} (c : Real), (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_bound Asymptotics.IsBigO.of_boundₓ'. -/
theorem IsBigO.of_bound (c : ℝ) (h : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖) : f =O[l] g :=
isBigO_iff.2 ⟨c, h⟩
#align asymptotics.is_O.of_bound Asymptotics.IsBigO.of_bound
-/- warning: asymptotics.is_O.of_bound' -> Asymptotics.IsBigO.of_bound' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (Norm.norm.{u3} F _inst_2 (g x))) l) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (Norm.norm.{u1} F _inst_2 (g x))) l) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_bound' Asymptotics.IsBigO.of_bound'ₓ'. -/
theorem IsBigO.of_bound' (h : ∀ᶠ x in l, ‖f x‖ ≤ ‖g x‖) : f =O[l] g :=
IsBigO.of_bound 1 <| by simp_rw [one_mul]; exact h
#align asymptotics.is_O.of_bound' Asymptotics.IsBigO.of_bound'
-/- warning: asymptotics.is_O.bound -> Asymptotics.IsBigO.bound is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Exists.{1} Real (fun (c : Real) => Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (Exists.{1} Real (fun (c : Real) => Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.bound Asymptotics.IsBigO.boundₓ'. -/
theorem IsBigO.bound : f =O[l] g → ∃ c : ℝ, ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
isBigO_iff.1
#align asymptotics.is_O.bound Asymptotics.IsBigO.bound
@@ -199,78 +151,30 @@ irreducible_def IsLittleO (l : Filter α) (f : α → E) (g : α → F) : Prop :
-- mathport name: «expr =o[ ] »
notation:100 f " =o[" l "] " g:100 => IsLittleO l f g
-/- warning: asymptotics.is_o_iff_forall_is_O_with -> Asymptotics.isLittleO_iff_forall_isBigOWith is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) (forall {{c : Real}}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) (forall {{c : Real}}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff_forall_is_O_with Asymptotics.isLittleO_iff_forall_isBigOWithₓ'. -/
/-- Definition of `is_o` in terms of `is_O_with`. We record it in a lemma as we will set
`is_o` to be irreducible at the end of this file. -/
theorem isLittleO_iff_forall_isBigOWith : f =o[l] g ↔ ∀ ⦃c : ℝ⦄, 0 < c → IsBigOWith c l f g := by
rw [is_o]
#align asymptotics.is_o_iff_forall_is_O_with Asymptotics.isLittleO_iff_forall_isBigOWith
-/- warning: asymptotics.is_o.forall_is_O_with -> Asymptotics.IsLittleO.forall_isBigOWith is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (forall {{c : Real}}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (forall {{c : Real}}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.forall_is_O_with Asymptotics.IsLittleO.forall_isBigOWithₓ'. -/
-/- warning: asymptotics.is_o.of_is_O_with -> Asymptotics.IsLittleO.of_isBigOWith is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (forall {{c : Real}}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g)) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (forall {{c : Real}}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g)) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_is_O_with Asymptotics.IsLittleO.of_isBigOWithₓ'. -/
alias is_o_iff_forall_is_O_with ↔ is_o.forall_is_O_with is_o.of_is_O_with
#align asymptotics.is_o.forall_is_O_with Asymptotics.IsLittleO.forall_isBigOWith
#align asymptotics.is_o.of_is_O_with Asymptotics.IsLittleO.of_isBigOWith
-/- warning: asymptotics.is_o_iff -> Asymptotics.isLittleO_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) (forall {{c : Real}}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) (forall {{c : Real}}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff Asymptotics.isLittleO_iffₓ'. -/
/-- Definition of `is_o` in terms of filters. We record it in a lemma as we will set
`is_o` to be irreducible at the end of this file. -/
theorem isLittleO_iff : f =o[l] g ↔ ∀ ⦃c : ℝ⦄, 0 < c → ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ := by
simp only [is_o, is_O_with]
#align asymptotics.is_o_iff Asymptotics.isLittleO_iff
-/- warning: asymptotics.is_o.bound -> Asymptotics.IsLittleO.bound is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (forall {{c : Real}}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (forall {{c : Real}}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.bound Asymptotics.IsLittleO.boundₓ'. -/
-/- warning: asymptotics.is_o.of_bound -> Asymptotics.IsLittleO.of_bound is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (forall {{c : Real}}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l)) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (forall {{c : Real}}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l)) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_bound Asymptotics.IsLittleO.of_boundₓ'. -/
alias is_o_iff ↔ is_o.bound is_o.of_bound
#align asymptotics.is_o.bound Asymptotics.IsLittleO.bound
#align asymptotics.is_o.of_bound Asymptotics.IsLittleO.of_bound
-/- warning: asymptotics.is_o.def -> Asymptotics.IsLittleO.def is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.def Asymptotics.IsLittleO.defₓ'. -/
theorem IsLittleO.def (h : f =o[l] g) (hc : 0 < c) : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
isLittleO_iff.1 h hc
#align asymptotics.is_o.def Asymptotics.IsLittleO.def
-/- warning: asymptotics.is_o.def' -> Asymptotics.IsLittleO.def' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.def' Asymptotics.IsLittleO.def'ₓ'. -/
theorem IsLittleO.def' (h : f =o[l] g) (hc : 0 < c) : IsBigOWith c l f g :=
isBigOWith_iff.2 <| isLittleO_iff.1 h hc
#align asymptotics.is_o.def' Asymptotics.IsLittleO.def'
@@ -280,51 +184,21 @@ end Defs
/-! ### Conversions -/
-/- warning: asymptotics.is_O_with.is_O -> Asymptotics.IsBigOWith.isBigO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.is_O Asymptotics.IsBigOWith.isBigOₓ'. -/
theorem IsBigOWith.isBigO (h : IsBigOWith c l f g) : f =O[l] g := by rw [is_O] <;> exact ⟨c, h⟩
#align asymptotics.is_O_with.is_O Asymptotics.IsBigOWith.isBigO
-/- warning: asymptotics.is_o.is_O_with -> Asymptotics.IsLittleO.isBigOWith is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.is_O_with Asymptotics.IsLittleO.isBigOWithₓ'. -/
theorem IsLittleO.isBigOWith (hgf : f =o[l] g) : IsBigOWith 1 l f g :=
hgf.def' zero_lt_one
#align asymptotics.is_o.is_O_with Asymptotics.IsLittleO.isBigOWith
-/- warning: asymptotics.is_o.is_O -> Asymptotics.IsLittleO.isBigO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.is_O Asymptotics.IsLittleO.isBigOₓ'. -/
theorem IsLittleO.isBigO (hgf : f =o[l] g) : f =O[l] g :=
hgf.IsBigOWith.IsBigO
#align asymptotics.is_o.is_O Asymptotics.IsLittleO.isBigO
-/- warning: asymptotics.is_O.is_O_with -> Asymptotics.IsBigO.isBigOWith is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Exists.{1} Real (fun (c : Real) => Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (Exists.{1} Real (fun (c : Real) => Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.is_O_with Asymptotics.IsBigO.isBigOWithₓ'. -/
theorem IsBigO.isBigOWith : f =O[l] g → ∃ c : ℝ, IsBigOWith c l f g :=
isBigO_iff_isBigOWith.1
#align asymptotics.is_O.is_O_with Asymptotics.IsBigO.isBigOWith
-/- warning: asymptotics.is_O_with.weaken -> Asymptotics.IsBigOWith.weaken is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {c' : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') -> (LE.le.{0} Real Real.hasLe c c') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c' l f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {c' : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g') -> (LE.le.{0} Real Real.instLEReal c c') -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c' l f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.weaken Asymptotics.IsBigOWith.weakenₓ'. -/
theorem IsBigOWith.weaken (h : IsBigOWith c l f g') (hc : c ≤ c') : IsBigOWith c' l f g' :=
IsBigOWith.of_bound <|
mem_of_superset h.bound fun x hx =>
@@ -334,102 +208,48 @@ theorem IsBigOWith.weaken (h : IsBigOWith c l f g') (hc : c ≤ c') : IsBigOWith
#align asymptotics.is_O_with.weaken Asymptotics.IsBigOWith.weaken
-/- warning: asymptotics.is_O_with.exists_pos -> Asymptotics.IsBigOWith.exists_pos is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') -> (Exists.{1} Real (fun (c' : Real) => Exists.{0} (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') (fun (H : LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') => Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c' l f g')))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g') -> (Exists.{1} Real (fun (c' : Real) => Exists.{0} (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') (fun (H : LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') => Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c' l f g')))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.exists_pos Asymptotics.IsBigOWith.exists_posₓ'. -/
theorem IsBigOWith.exists_pos (h : IsBigOWith c l f g') :
∃ (c' : _)(H : 0 < c'), IsBigOWith c' l f g' :=
⟨max c 1, lt_of_lt_of_le zero_lt_one (le_max_right c 1), h.weaken <| le_max_left c 1⟩
#align asymptotics.is_O_with.exists_pos Asymptotics.IsBigOWith.exists_pos
-/- warning: asymptotics.is_O.exists_pos -> Asymptotics.IsBigO.exists_pos is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Exists.{1} Real (fun (c : Real) => Exists.{0} (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) (fun (H : LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) => Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g')))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Exists.{1} Real (fun (c : Real) => Exists.{0} (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) (fun (H : LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) => Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g')))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.exists_pos Asymptotics.IsBigO.exists_posₓ'. -/
theorem IsBigO.exists_pos (h : f =O[l] g') : ∃ (c : _)(H : 0 < c), IsBigOWith c l f g' :=
let ⟨c, hc⟩ := h.IsBigOWith
hc.exists_pos
#align asymptotics.is_O.exists_pos Asymptotics.IsBigO.exists_pos
-/- warning: asymptotics.is_O_with.exists_nonneg -> Asymptotics.IsBigOWith.exists_nonneg is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') -> (Exists.{1} Real (fun (c' : Real) => Exists.{0} (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') (fun (H : LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') => Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c' l f g')))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g') -> (Exists.{1} Real (fun (c' : Real) => Exists.{0} (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') (fun (H : LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') => Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c' l f g')))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.exists_nonneg Asymptotics.IsBigOWith.exists_nonnegₓ'. -/
theorem IsBigOWith.exists_nonneg (h : IsBigOWith c l f g') :
∃ (c' : _)(H : 0 ≤ c'), IsBigOWith c' l f g' :=
let ⟨c, cpos, hc⟩ := h.exists_pos
⟨c, le_of_lt cpos, hc⟩
#align asymptotics.is_O_with.exists_nonneg Asymptotics.IsBigOWith.exists_nonneg
-/- warning: asymptotics.is_O.exists_nonneg -> Asymptotics.IsBigO.exists_nonneg is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Exists.{1} Real (fun (c : Real) => Exists.{0} (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) (fun (H : LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) => Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g')))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Exists.{1} Real (fun (c : Real) => Exists.{0} (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) (fun (H : LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) => Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g')))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.exists_nonneg Asymptotics.IsBigO.exists_nonnegₓ'. -/
theorem IsBigO.exists_nonneg (h : f =O[l] g') : ∃ (c : _)(H : 0 ≤ c), IsBigOWith c l f g' :=
let ⟨c, hc⟩ := h.IsBigOWith
hc.exists_nonneg
#align asymptotics.is_O.exists_nonneg Asymptotics.IsBigO.exists_nonneg
-/- warning: asymptotics.is_O_iff_eventually_is_O_with -> Asymptotics.isBigO_iff_eventually_isBigOWith is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') (Filter.Eventually.{0} Real (fun (c : Real) => Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') (Filter.atTop.{0} Real Real.preorder))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') (Filter.Eventually.{0} Real (fun (c : Real) => Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g') (Filter.atTop.{0} Real Real.instPreorderReal))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_eventually_is_O_with Asymptotics.isBigO_iff_eventually_isBigOWithₓ'. -/
/-- `f = O(g)` if and only if `is_O_with c f g` for all sufficiently large `c`. -/
theorem isBigO_iff_eventually_isBigOWith : f =O[l] g' ↔ ∀ᶠ c in atTop, IsBigOWith c l f g' :=
isBigO_iff_isBigOWith.trans
⟨fun ⟨c, hc⟩ => mem_atTop_sets.2 ⟨c, fun c' hc' => hc.weaken hc'⟩, fun h => h.exists⟩
#align asymptotics.is_O_iff_eventually_is_O_with Asymptotics.isBigO_iff_eventually_isBigOWith
-/- warning: asymptotics.is_O_iff_eventually -> Asymptotics.isBigO_iff_eventually is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') (Filter.Eventually.{0} Real (fun (c : Real) => Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))) l) (Filter.atTop.{0} Real Real.preorder))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') (Filter.Eventually.{0} Real (fun (c : Real) => Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))) l) (Filter.atTop.{0} Real Real.instPreorderReal))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_eventually Asymptotics.isBigO_iff_eventuallyₓ'. -/
/-- `f = O(g)` if and only if `∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖` for all sufficiently large `c`. -/
theorem isBigO_iff_eventually : f =O[l] g' ↔ ∀ᶠ c in atTop, ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g' x‖ :=
isBigO_iff_eventually_isBigOWith.trans <| by simp only [is_O_with]
#align asymptotics.is_O_iff_eventually Asymptotics.isBigO_iff_eventually
-/- warning: asymptotics.is_O.exists_mem_basis -> Asymptotics.IsBigO.exists_mem_basis is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α} {ι : Sort.{u4}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Filter.HasBasis.{u1, u4} α ι l p s) -> (Exists.{1} Real (fun (c : Real) => Exists.{0} (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) (fun (hc : LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) => Exists.{u4} ι (fun (i : ι) => Exists.{0} (p i) (fun (hi : p i) => forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (s i)) -> (LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))))))))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α} {ι : Sort.{u4}} {p : ι -> Prop} {s : ι -> (Set.{u3} α)}, (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Filter.HasBasis.{u3, u4} α ι l p s) -> (Exists.{1} Real (fun (c : Real) => Exists.{0} (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) (fun (hc : LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) => Exists.{u4} ι (fun (i : ι) => Exists.{0} (p i) (fun (hi : p i) => forall (x : α), (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x (s i)) -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.exists_mem_basis Asymptotics.IsBigO.exists_mem_basisₓ'. -/
theorem IsBigO.exists_mem_basis {ι} {p : ι → Prop} {s : ι → Set α} (h : f =O[l] g')
(hb : l.HasBasis p s) : ∃ (c : ℝ)(hc : 0 < c)(i : ι)(hi : p i), ∀ x ∈ s i, ‖f x‖ ≤ c * ‖g' x‖ :=
flip Exists₂.imp h.exists_pos fun c hc h => by
simpa only [is_O_with_iff, hb.eventually_iff, exists_prop] using h
#align asymptotics.is_O.exists_mem_basis Asymptotics.IsBigO.exists_mem_basis
-/- warning: asymptotics.is_O_with_inv -> Asymptotics.isBigOWith_inv is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 (Inv.inv.{0} Real Real.hasInv c) l f g) (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u2} E _inst_1 (f x))) (Norm.norm.{u3} F _inst_2 (g x))) l))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 (Inv.inv.{0} Real Real.instInvReal c) l f g) (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u2} E _inst_1 (f x))) (Norm.norm.{u1} F _inst_2 (g x))) l))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_inv Asymptotics.isBigOWith_invₓ'. -/
theorem isBigOWith_inv (hc : 0 < c) : IsBigOWith c⁻¹ l f g ↔ ∀ᶠ x in l, c * ‖f x‖ ≤ ‖g x‖ := by
simp only [is_O_with, ← div_eq_inv_mul, le_div_iff' hc]
#align asymptotics.is_O_with_inv Asymptotics.isBigOWith_inv
-/- warning: asymptotics.is_o_iff_nat_mul_le_aux -> Asymptotics.isLittleO_iff_nat_mul_le_aux is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Or (forall (x : α), LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Norm.norm.{u2} E _inst_1 (f x))) (forall (x : α), LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Norm.norm.{u3} F _inst_2 (g x)))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) (forall (n : Nat), Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) n) (Norm.norm.{u2} E _inst_1 (f x))) (Norm.norm.{u3} F _inst_2 (g x))) l))
-but is expected to have type
- forall {α : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Or (forall (x : α), LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Norm.norm.{u3} E _inst_1 (f x))) (forall (x : α), LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Norm.norm.{u2} F _inst_2 (g x)))) -> (Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E F _inst_1 _inst_2 l f g) (forall (n : Nat), Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (Nat.cast.{0} Real Real.natCast n) (Norm.norm.{u3} E _inst_1 (f x))) (Norm.norm.{u2} F _inst_2 (g x))) l))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff_nat_mul_le_aux Asymptotics.isLittleO_iff_nat_mul_le_auxₓ'. -/
-- We prove this lemma with strange assumptions to get two lemmas below automatically
theorem isLittleO_iff_nat_mul_le_aux (h₀ : (∀ x, 0 ≤ ‖f x‖) ∨ ∀ x, 0 ≤ ‖g x‖) :
f =o[l] g ↔ ∀ n : ℕ, ∀ᶠ x in l, ↑n * ‖f x‖ ≤ ‖g x‖ :=
@@ -451,22 +271,10 @@ theorem isLittleO_iff_nat_mul_le_aux (h₀ : (∀ x, 0 ≤ ‖f x‖) ∨ ∀ x,
exact inv_pos.2 hn₀
#align asymptotics.is_o_iff_nat_mul_le_aux Asymptotics.isLittleO_iff_nat_mul_le_aux
-/- warning: asymptotics.is_o_iff_nat_mul_le -> Asymptotics.isLittleO_iff_nat_mul_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') (forall (n : Nat), Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) n) (Norm.norm.{u2} E _inst_1 (f x))) (Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) l)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') (forall (n : Nat), Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (Nat.cast.{0} Real Real.natCast n) (Norm.norm.{u2} E _inst_1 (f x))) (Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) l)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff_nat_mul_le Asymptotics.isLittleO_iff_nat_mul_leₓ'. -/
theorem isLittleO_iff_nat_mul_le : f =o[l] g' ↔ ∀ n : ℕ, ∀ᶠ x in l, ↑n * ‖f x‖ ≤ ‖g' x‖ :=
isLittleO_iff_nat_mul_le_aux (Or.inr fun x => norm_nonneg _)
#align asymptotics.is_o_iff_nat_mul_le Asymptotics.isLittleO_iff_nat_mul_le
-/- warning: asymptotics.is_o_iff_nat_mul_le' -> Asymptotics.isLittleO_iff_nat_mul_le' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) (forall (n : Nat), Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) n) (Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x))) (Norm.norm.{u2} F _inst_2 (g x))) l)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g) (forall (n : Nat), Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (Nat.cast.{0} Real Real.natCast n) (Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x))) (Norm.norm.{u1} F _inst_2 (g x))) l)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff_nat_mul_le' Asymptotics.isLittleO_iff_nat_mul_le'ₓ'. -/
theorem isLittleO_iff_nat_mul_le' : f' =o[l] g ↔ ∀ n : ℕ, ∀ᶠ x in l, ↑n * ‖f' x‖ ≤ ‖g x‖ :=
isLittleO_iff_nat_mul_le_aux (Or.inl fun x => norm_nonneg _)
#align asymptotics.is_o_iff_nat_mul_le' Asymptotics.isLittleO_iff_nat_mul_le'
@@ -474,23 +282,11 @@ theorem isLittleO_iff_nat_mul_le' : f' =o[l] g ↔ ∀ n : ℕ, ∀ᶠ x in l,
/-! ### Subsingleton -/
-/- warning: asymptotics.is_o_of_subsingleton -> Asymptotics.isLittleO_of_subsingleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : Subsingleton.{succ u2} E'], Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g'
-but is expected to have type
- forall {α : Type.{u2}} {E' : Type.{u3}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u2} α} [_inst_14 : Subsingleton.{succ u3} E'], Asymptotics.IsLittleO.{u2, u3, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g'
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_of_subsingleton Asymptotics.isLittleO_of_subsingletonₓ'. -/
@[nontriviality]
theorem isLittleO_of_subsingleton [Subsingleton E'] : f' =o[l] g' :=
IsLittleO.of_bound fun c hc => by simp [Subsingleton.elim (f' _) 0, mul_nonneg hc.le]
#align asymptotics.is_o_of_subsingleton Asymptotics.isLittleO_of_subsingleton
-/- warning: asymptotics.is_O_of_subsingleton -> Asymptotics.isBigO_of_subsingleton is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : Subsingleton.{succ u2} E'], Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g'
-but is expected to have type
- forall {α : Type.{u2}} {E' : Type.{u3}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u2} α} [_inst_14 : Subsingleton.{succ u3} E'], Asymptotics.IsBigO.{u2, u3, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g'
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_of_subsingleton Asymptotics.isBigO_of_subsingletonₓ'. -/
@[nontriviality]
theorem isBigO_of_subsingleton [Subsingleton E'] : f' =O[l] g' :=
isLittleO_of_subsingleton.IsBigO
@@ -503,12 +299,6 @@ variable {f₁ f₂ : α → E} {g₁ g₂ : α → F}
/-! ### Congruence -/
-/- warning: asymptotics.is_O_with_congr -> Asymptotics.isBigOWith_congr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c₁ : Real} {c₂ : Real} {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Eq.{1} Real c₁ c₂) -> (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₁ l f₁ g₁) (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₂ l f₂ g₂))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c₁ : Real} {c₂ : Real} {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Eq.{1} Real c₁ c₂) -> (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₁ l f₁ g₁) (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₂ l f₂ g₂))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_congr Asymptotics.isBigOWith_congrₓ'. -/
theorem isBigOWith_congr (hc : c₁ = c₂) (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) :
IsBigOWith c₁ l f₁ g₁ ↔ IsBigOWith c₂ l f₂ g₂ :=
by
@@ -519,204 +309,90 @@ theorem isBigOWith_congr (hc : c₁ = c₂) (hf : f₁ =ᶠ[l] f₂) (hg : g₁
rw [e₁, e₂]
#align asymptotics.is_O_with_congr Asymptotics.isBigOWith_congr
-/- warning: asymptotics.is_O_with.congr' -> Asymptotics.IsBigOWith.congr' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c₁ : Real} {c₂ : Real} {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₁ l f₁ g₁) -> (Eq.{1} Real c₁ c₂) -> (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₂ l f₂ g₂)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c₁ : Real} {c₂ : Real} {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₁ l f₁ g₁) -> (Eq.{1} Real c₁ c₂) -> (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₂ l f₂ g₂)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.congr' Asymptotics.IsBigOWith.congr'ₓ'. -/
theorem IsBigOWith.congr' (h : IsBigOWith c₁ l f₁ g₁) (hc : c₁ = c₂) (hf : f₁ =ᶠ[l] f₂)
(hg : g₁ =ᶠ[l] g₂) : IsBigOWith c₂ l f₂ g₂ :=
(isBigOWith_congr hc hf hg).mp h
#align asymptotics.is_O_with.congr' Asymptotics.IsBigOWith.congr'
-/- warning: asymptotics.is_O_with.congr -> Asymptotics.IsBigOWith.congr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c₁ : Real} {c₂ : Real} {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₁ l f₁ g₁) -> (Eq.{1} Real c₁ c₂) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (forall (x : α), Eq.{succ u3} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₂ l f₂ g₂)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c₁ : Real} {c₂ : Real} {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₁ l f₁ g₁) -> (Eq.{1} Real c₁ c₂) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (forall (x : α), Eq.{succ u1} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₂ l f₂ g₂)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.congr Asymptotics.IsBigOWith.congrₓ'. -/
theorem IsBigOWith.congr (h : IsBigOWith c₁ l f₁ g₁) (hc : c₁ = c₂) (hf : ∀ x, f₁ x = f₂ x)
(hg : ∀ x, g₁ x = g₂ x) : IsBigOWith c₂ l f₂ g₂ :=
h.congr' hc (univ_mem' hf) (univ_mem' hg)
#align asymptotics.is_O_with.congr Asymptotics.IsBigOWith.congr
-/- warning: asymptotics.is_O_with.congr_left -> Asymptotics.IsBigOWith.congr_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f₁ g) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f₂ g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f₁ g) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f₂ g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.congr_left Asymptotics.IsBigOWith.congr_leftₓ'. -/
theorem IsBigOWith.congr_left (h : IsBigOWith c l f₁ g) (hf : ∀ x, f₁ x = f₂ x) :
IsBigOWith c l f₂ g :=
h.congr rfl hf fun _ => rfl
#align asymptotics.is_O_with.congr_left Asymptotics.IsBigOWith.congr_left
-/- warning: asymptotics.is_O_with.congr_right -> Asymptotics.IsBigOWith.congr_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {l : Filter.{u1} α} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g₁) -> (forall (x : α), Eq.{succ u3} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g₂)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {l : Filter.{u3} α} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g₁) -> (forall (x : α), Eq.{succ u1} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g₂)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.congr_right Asymptotics.IsBigOWith.congr_rightₓ'. -/
theorem IsBigOWith.congr_right (h : IsBigOWith c l f g₁) (hg : ∀ x, g₁ x = g₂ x) :
IsBigOWith c l f g₂ :=
h.congr rfl (fun _ => rfl) hg
#align asymptotics.is_O_with.congr_right Asymptotics.IsBigOWith.congr_right
-/- warning: asymptotics.is_O_with.congr_const -> Asymptotics.IsBigOWith.congr_const is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c₁ : Real} {c₂ : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₁ l f g) -> (Eq.{1} Real c₁ c₂) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₂ l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c₁ : Real} {c₂ : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₁ l f g) -> (Eq.{1} Real c₁ c₂) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₂ l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.congr_const Asymptotics.IsBigOWith.congr_constₓ'. -/
theorem IsBigOWith.congr_const (h : IsBigOWith c₁ l f g) (hc : c₁ = c₂) : IsBigOWith c₂ l f g :=
h.congr hc (fun _ => rfl) fun _ => rfl
#align asymptotics.is_O_with.congr_const Asymptotics.IsBigOWith.congr_const
-/- warning: asymptotics.is_O_congr -> Asymptotics.isBigO_congr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g₁) (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g₂))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g₁) (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g₂))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_congr Asymptotics.isBigO_congrₓ'. -/
theorem isBigO_congr (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₁ =O[l] g₁ ↔ f₂ =O[l] g₂ := by
unfold is_O; exact exists_congr fun c => is_O_with_congr rfl hf hg
#align asymptotics.is_O_congr Asymptotics.isBigO_congr
-/- warning: asymptotics.is_O.congr' -> Asymptotics.IsBigO.congr' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g₁) -> (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g₂)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g₁) -> (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g₂)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.congr' Asymptotics.IsBigO.congr'ₓ'. -/
theorem IsBigO.congr' (h : f₁ =O[l] g₁) (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₂ =O[l] g₂ :=
(isBigO_congr hf hg).mp h
#align asymptotics.is_O.congr' Asymptotics.IsBigO.congr'
-/- warning: asymptotics.is_O.congr -> Asymptotics.IsBigO.congr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g₁) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (forall (x : α), Eq.{succ u3} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g₂)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g₁) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (forall (x : α), Eq.{succ u1} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g₂)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.congr Asymptotics.IsBigO.congrₓ'. -/
theorem IsBigO.congr (h : f₁ =O[l] g₁) (hf : ∀ x, f₁ x = f₂ x) (hg : ∀ x, g₁ x = g₂ x) :
f₂ =O[l] g₂ :=
h.congr' (univ_mem' hf) (univ_mem' hg)
#align asymptotics.is_O.congr Asymptotics.IsBigO.congr
-/- warning: asymptotics.is_O.congr_left -> Asymptotics.IsBigO.congr_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.congr_left Asymptotics.IsBigO.congr_leftₓ'. -/
theorem IsBigO.congr_left (h : f₁ =O[l] g) (hf : ∀ x, f₁ x = f₂ x) : f₂ =O[l] g :=
h.congr hf fun _ => rfl
#align asymptotics.is_O.congr_left Asymptotics.IsBigO.congr_left
-/- warning: asymptotics.is_O.congr_right -> Asymptotics.IsBigO.congr_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₁) -> (forall (x : α), Eq.{succ u3} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₂)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₁) -> (forall (x : α), Eq.{succ u1} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₂)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.congr_right Asymptotics.IsBigO.congr_rightₓ'. -/
theorem IsBigO.congr_right (h : f =O[l] g₁) (hg : ∀ x, g₁ x = g₂ x) : f =O[l] g₂ :=
h.congr (fun _ => rfl) hg
#align asymptotics.is_O.congr_right Asymptotics.IsBigO.congr_right
-/- warning: asymptotics.is_o_congr -> Asymptotics.isLittleO_congr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g₁) (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g₂))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g₁) (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g₂))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_congr Asymptotics.isLittleO_congrₓ'. -/
theorem isLittleO_congr (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₁ =o[l] g₁ ↔ f₂ =o[l] g₂ := by
unfold is_o; exact forall₂_congr fun c hc => is_O_with_congr (Eq.refl c) hf hg
#align asymptotics.is_o_congr Asymptotics.isLittleO_congr
-/- warning: asymptotics.is_o.congr' -> Asymptotics.IsLittleO.congr' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g₁) -> (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g₂)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g₁) -> (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g₂)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.congr' Asymptotics.IsLittleO.congr'ₓ'. -/
theorem IsLittleO.congr' (h : f₁ =o[l] g₁) (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₂ =o[l] g₂ :=
(isLittleO_congr hf hg).mp h
#align asymptotics.is_o.congr' Asymptotics.IsLittleO.congr'
-/- warning: asymptotics.is_o.congr -> Asymptotics.IsLittleO.congr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g₁) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (forall (x : α), Eq.{succ u3} F (g₁ x) (g₂ x)) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g₂)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g₁) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (forall (x : α), Eq.{succ u1} F (g₁ x) (g₂ x)) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g₂)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.congr Asymptotics.IsLittleO.congrₓ'. -/
theorem IsLittleO.congr (h : f₁ =o[l] g₁) (hf : ∀ x, f₁ x = f₂ x) (hg : ∀ x, g₁ x = g₂ x) :
f₂ =o[l] g₂ :=
h.congr' (univ_mem' hf) (univ_mem' hg)
#align asymptotics.is_o.congr Asymptotics.IsLittleO.congr
-/- warning: asymptotics.is_o.congr_left -> Asymptotics.IsLittleO.congr_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.congr_left Asymptotics.IsLittleO.congr_leftₓ'. -/
theorem IsLittleO.congr_left (h : f₁ =o[l] g) (hf : ∀ x, f₁ x = f₂ x) : f₂ =o[l] g :=
h.congr hf fun _ => rfl
#align asymptotics.is_o.congr_left Asymptotics.IsLittleO.congr_left
-/- warning: asymptotics.is_o.congr_right -> Asymptotics.IsLittleO.congr_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₁) -> (forall (x : α), Eq.{succ u3} F (g₁ x) (g₂ x)) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₂)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₁) -> (forall (x : α), Eq.{succ u1} F (g₁ x) (g₂ x)) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₂)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.congr_right Asymptotics.IsLittleO.congr_rightₓ'. -/
theorem IsLittleO.congr_right (h : f =o[l] g₁) (hg : ∀ x, g₁ x = g₂ x) : f =o[l] g₂ :=
h.congr (fun _ => rfl) hg
#align asymptotics.is_o.congr_right Asymptotics.IsLittleO.congr_right
-/- warning: filter.eventually_eq.trans_is_O -> Filter.EventuallyEq.trans_isBigO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g : α -> F}, (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g : α -> F}, (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g)
-Case conversion may be inaccurate. Consider using '#align filter.eventually_eq.trans_is_O Filter.EventuallyEq.trans_isBigOₓ'. -/
@[trans]
theorem Filter.EventuallyEq.trans_isBigO {f₁ f₂ : α → E} {g : α → F} (hf : f₁ =ᶠ[l] f₂)
(h : f₂ =O[l] g) : f₁ =O[l] g :=
h.congr' hf.symm EventuallyEq.rfl
#align filter.eventually_eq.trans_is_O Filter.EventuallyEq.trans_isBigO
-/- warning: filter.eventually_eq.trans_is_o -> Filter.EventuallyEq.trans_isLittleO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g : α -> F}, (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g : α -> F}, (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g)
-Case conversion may be inaccurate. Consider using '#align filter.eventually_eq.trans_is_o Filter.EventuallyEq.trans_isLittleOₓ'. -/
@[trans]
theorem Filter.EventuallyEq.trans_isLittleO {f₁ f₂ : α → E} {g : α → F} (hf : f₁ =ᶠ[l] f₂)
(h : f₂ =o[l] g) : f₁ =o[l] g :=
h.congr' hf.symm EventuallyEq.rfl
#align filter.eventually_eq.trans_is_o Filter.EventuallyEq.trans_isLittleO
-/- warning: asymptotics.is_O.trans_eventually_eq -> Asymptotics.IsBigO.trans_eventuallyEq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₁) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₂)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₁) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₂)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.trans_eventually_eq Asymptotics.IsBigO.trans_eventuallyEqₓ'. -/
@[trans]
theorem IsBigO.trans_eventuallyEq {f : α → E} {g₁ g₂ : α → F} (h : f =O[l] g₁) (hg : g₁ =ᶠ[l] g₂) :
f =O[l] g₂ :=
h.congr' EventuallyEq.rfl hg
#align asymptotics.is_O.trans_eventually_eq Asymptotics.IsBigO.trans_eventuallyEq
-/- warning: asymptotics.is_o.trans_eventually_eq -> Asymptotics.IsLittleO.trans_eventuallyEq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₁) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₂)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₁) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₂)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.trans_eventually_eq Asymptotics.IsLittleO.trans_eventuallyEqₓ'. -/
@[trans]
theorem IsLittleO.trans_eventuallyEq {f : α → E} {g₁ g₂ : α → F} (h : f =o[l] g₁)
(hg : g₁ =ᶠ[l] g₂) : f =o[l] g₂ :=
@@ -728,109 +404,49 @@ end congr
/-! ### Filter operations and transitivity -/
-/- warning: asymptotics.is_O_with.comp_tendsto -> Asymptotics.IsBigOWith.comp_tendsto is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {E : Type.{u3}} {F : Type.{u4}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u4} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u3, u4} α E F _inst_1 _inst_2 c l f g) -> (forall {k : β -> α} {l' : Filter.{u2} β}, (Filter.Tendsto.{u2, u1} β α k l' l) -> (Asymptotics.IsBigOWith.{u2, u3, u4} β E F _inst_1 _inst_2 c l' (Function.comp.{succ u2, succ u1, succ u3} β α E f k) (Function.comp.{succ u2, succ u1, succ u4} β α F g k)))
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E F _inst_1 _inst_2 c l f g) -> (forall {k : β -> α} {l' : Filter.{u1} β}, (Filter.Tendsto.{u1, u4} β α k l' l) -> (Asymptotics.IsBigOWith.{u1, u3, u2} β E F _inst_1 _inst_2 c l' (Function.comp.{succ u1, succ u4, succ u3} β α E f k) (Function.comp.{succ u1, succ u4, succ u2} β α F g k)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.comp_tendsto Asymptotics.IsBigOWith.comp_tendstoₓ'. -/
theorem IsBigOWith.comp_tendsto (hcfg : IsBigOWith c l f g) {k : β → α} {l' : Filter β}
(hk : Tendsto k l' l) : IsBigOWith c l' (f ∘ k) (g ∘ k) :=
IsBigOWith.of_bound <| hk hcfg.bound
#align asymptotics.is_O_with.comp_tendsto Asymptotics.IsBigOWith.comp_tendsto
-/- warning: asymptotics.is_O.comp_tendsto -> Asymptotics.IsBigO.comp_tendsto is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {E : Type.{u3}} {F : Type.{u4}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u4} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u3, u4} α E F _inst_1 _inst_2 l f g) -> (forall {k : β -> α} {l' : Filter.{u2} β}, (Filter.Tendsto.{u2, u1} β α k l' l) -> (Asymptotics.IsBigO.{u2, u3, u4} β E F _inst_1 _inst_2 l' (Function.comp.{succ u2, succ u1, succ u3} β α E f k) (Function.comp.{succ u2, succ u1, succ u4} β α F g k)))
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {f : α -> E} {g : α -> F} {l : Filter.{u4} α}, (Asymptotics.IsBigO.{u4, u3, u2} α E F _inst_1 _inst_2 l f g) -> (forall {k : β -> α} {l' : Filter.{u1} β}, (Filter.Tendsto.{u1, u4} β α k l' l) -> (Asymptotics.IsBigO.{u1, u3, u2} β E F _inst_1 _inst_2 l' (Function.comp.{succ u1, succ u4, succ u3} β α E f k) (Function.comp.{succ u1, succ u4, succ u2} β α F g k)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.comp_tendsto Asymptotics.IsBigO.comp_tendstoₓ'. -/
theorem IsBigO.comp_tendsto (hfg : f =O[l] g) {k : β → α} {l' : Filter β} (hk : Tendsto k l' l) :
(f ∘ k) =O[l'] (g ∘ k) :=
isBigO_iff_isBigOWith.2 <| hfg.IsBigOWith.imp fun c h => h.comp_tendsto hk
#align asymptotics.is_O.comp_tendsto Asymptotics.IsBigO.comp_tendsto
-/- warning: asymptotics.is_o.comp_tendsto -> Asymptotics.IsLittleO.comp_tendsto is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {E : Type.{u3}} {F : Type.{u4}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u4} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u3, u4} α E F _inst_1 _inst_2 l f g) -> (forall {k : β -> α} {l' : Filter.{u2} β}, (Filter.Tendsto.{u2, u1} β α k l' l) -> (Asymptotics.IsLittleO.{u2, u3, u4} β E F _inst_1 _inst_2 l' (Function.comp.{succ u2, succ u1, succ u3} β α E f k) (Function.comp.{succ u2, succ u1, succ u4} β α F g k)))
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {f : α -> E} {g : α -> F} {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, u3, u2} α E F _inst_1 _inst_2 l f g) -> (forall {k : β -> α} {l' : Filter.{u1} β}, (Filter.Tendsto.{u1, u4} β α k l' l) -> (Asymptotics.IsLittleO.{u1, u3, u2} β E F _inst_1 _inst_2 l' (Function.comp.{succ u1, succ u4, succ u3} β α E f k) (Function.comp.{succ u1, succ u4, succ u2} β α F g k)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.comp_tendsto Asymptotics.IsLittleO.comp_tendstoₓ'. -/
theorem IsLittleO.comp_tendsto (hfg : f =o[l] g) {k : β → α} {l' : Filter β} (hk : Tendsto k l' l) :
(f ∘ k) =o[l'] (g ∘ k) :=
IsLittleO.of_isBigOWith fun c cpos => (hfg.forall_isBigOWith cpos).comp_tendsto hk
#align asymptotics.is_o.comp_tendsto Asymptotics.IsLittleO.comp_tendsto
-/- warning: asymptotics.is_O_with_map -> Asymptotics.isBigOWith_map is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {E : Type.{u3}} {F : Type.{u4}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u4} F] {c : Real} {f : α -> E} {g : α -> F} {k : β -> α} {l : Filter.{u2} β}, Iff (Asymptotics.IsBigOWith.{u1, u3, u4} α E F _inst_1 _inst_2 c (Filter.map.{u2, u1} β α k l) f g) (Asymptotics.IsBigOWith.{u2, u3, u4} β E F _inst_1 _inst_2 c l (Function.comp.{succ u2, succ u1, succ u3} β α E f k) (Function.comp.{succ u2, succ u1, succ u4} β α F g k))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u4}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {k : β -> α} {l : Filter.{u4} β}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c (Filter.map.{u4, u3} β α k l) f g) (Asymptotics.IsBigOWith.{u4, u2, u1} β E F _inst_1 _inst_2 c l (Function.comp.{succ u4, succ u3, succ u2} β α E f k) (Function.comp.{succ u4, succ u3, succ u1} β α F g k))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_map Asymptotics.isBigOWith_mapₓ'. -/
@[simp]
theorem isBigOWith_map {k : β → α} {l : Filter β} :
IsBigOWith c (map k l) f g ↔ IsBigOWith c l (f ∘ k) (g ∘ k) := by unfold is_O_with;
exact eventually_map
#align asymptotics.is_O_with_map Asymptotics.isBigOWith_map
-/- warning: asymptotics.is_O_map -> Asymptotics.isBigO_map is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {E : Type.{u3}} {F : Type.{u4}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u4} F] {f : α -> E} {g : α -> F} {k : β -> α} {l : Filter.{u2} β}, Iff (Asymptotics.IsBigO.{u1, u3, u4} α E F _inst_1 _inst_2 (Filter.map.{u2, u1} β α k l) f g) (Asymptotics.IsBigO.{u2, u3, u4} β E F _inst_1 _inst_2 l (Function.comp.{succ u2, succ u1, succ u3} β α E f k) (Function.comp.{succ u2, succ u1, succ u4} β α F g k))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u4}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {k : β -> α} {l : Filter.{u4} β}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 (Filter.map.{u4, u3} β α k l) f g) (Asymptotics.IsBigO.{u4, u2, u1} β E F _inst_1 _inst_2 l (Function.comp.{succ u4, succ u3, succ u2} β α E f k) (Function.comp.{succ u4, succ u3, succ u1} β α F g k))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_map Asymptotics.isBigO_mapₓ'. -/
@[simp]
theorem isBigO_map {k : β → α} {l : Filter β} : f =O[map k l] g ↔ (f ∘ k) =O[l] (g ∘ k) := by
simp only [is_O, is_O_with_map]
#align asymptotics.is_O_map Asymptotics.isBigO_map
-/- warning: asymptotics.is_o_map -> Asymptotics.isLittleO_map is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {E : Type.{u3}} {F : Type.{u4}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u4} F] {f : α -> E} {g : α -> F} {k : β -> α} {l : Filter.{u2} β}, Iff (Asymptotics.IsLittleO.{u1, u3, u4} α E F _inst_1 _inst_2 (Filter.map.{u2, u1} β α k l) f g) (Asymptotics.IsLittleO.{u2, u3, u4} β E F _inst_1 _inst_2 l (Function.comp.{succ u2, succ u1, succ u3} β α E f k) (Function.comp.{succ u2, succ u1, succ u4} β α F g k))
-but is expected to have type
- forall {α : Type.{u3}} {β : Type.{u4}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {k : β -> α} {l : Filter.{u4} β}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 (Filter.map.{u4, u3} β α k l) f g) (Asymptotics.IsLittleO.{u4, u2, u1} β E F _inst_1 _inst_2 l (Function.comp.{succ u4, succ u3, succ u2} β α E f k) (Function.comp.{succ u4, succ u3, succ u1} β α F g k))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_map Asymptotics.isLittleO_mapₓ'. -/
@[simp]
theorem isLittleO_map {k : β → α} {l : Filter β} : f =o[map k l] g ↔ (f ∘ k) =o[l] (g ∘ k) := by
simp only [is_o, is_O_with_map]
#align asymptotics.is_o_map Asymptotics.isLittleO_map
-/- warning: asymptotics.is_O_with.mono -> Asymptotics.IsBigOWith.mono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l' f g) -> (LE.le.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) l l') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l' f g) -> (LE.le.{u3} (Filter.{u3} α) (Preorder.toLE.{u3} (Filter.{u3} α) (PartialOrder.toPreorder.{u3} (Filter.{u3} α) (Filter.instPartialOrderFilter.{u3} α))) l l') -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.mono Asymptotics.IsBigOWith.monoₓ'. -/
theorem IsBigOWith.mono (h : IsBigOWith c l' f g) (hl : l ≤ l') : IsBigOWith c l f g :=
IsBigOWith.of_bound <| hl h.bound
#align asymptotics.is_O_with.mono Asymptotics.IsBigOWith.mono
-/- warning: asymptotics.is_O.mono -> Asymptotics.IsBigO.mono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l' f g) -> (LE.le.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) l l') -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l' f g) -> (LE.le.{u3} (Filter.{u3} α) (Preorder.toLE.{u3} (Filter.{u3} α) (PartialOrder.toPreorder.{u3} (Filter.{u3} α) (Filter.instPartialOrderFilter.{u3} α))) l l') -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.mono Asymptotics.IsBigO.monoₓ'. -/
theorem IsBigO.mono (h : f =O[l'] g) (hl : l ≤ l') : f =O[l] g :=
isBigO_iff_isBigOWith.2 <| h.IsBigOWith.imp fun c h => h.mono hl
#align asymptotics.is_O.mono Asymptotics.IsBigO.mono
-/- warning: asymptotics.is_o.mono -> Asymptotics.IsLittleO.mono is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l' f g) -> (LE.le.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) l l') -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l' f g) -> (LE.le.{u3} (Filter.{u3} α) (Preorder.toLE.{u3} (Filter.{u3} α) (PartialOrder.toPreorder.{u3} (Filter.{u3} α) (Filter.instPartialOrderFilter.{u3} α))) l l') -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.mono Asymptotics.IsLittleO.monoₓ'. -/
theorem IsLittleO.mono (h : f =o[l'] g) (hl : l ≤ l') : f =o[l] g :=
IsLittleO.of_isBigOWith fun c cpos => (h.forall_isBigOWith cpos).mono hl
#align asymptotics.is_o.mono Asymptotics.IsLittleO.mono
-/- warning: asymptotics.is_O_with.trans -> Asymptotics.IsBigOWith.trans is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} {G : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_3 : Norm.{u4} G] {c : Real} {c' : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsBigOWith.{u1, u3, u4} α F G _inst_2 _inst_3 c' l g k) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, u4} α E G _inst_1 _inst_3 (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c c') l f k)
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {F : Type.{u2}} {G : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] [_inst_3 : Norm.{u1} G] {c : Real} {c' : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsBigOWith.{u4, u2, u1} α F G _inst_2 _inst_3 c' l g k) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u4, u3, u1} α E G _inst_1 _inst_3 (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c c') l f k)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.trans Asymptotics.IsBigOWith.transₓ'. -/
theorem IsBigOWith.trans (hfg : IsBigOWith c l f g) (hgk : IsBigOWith c' l g k) (hc : 0 ≤ c) :
IsBigOWith (c * c') l f k := by
unfold is_O_with at *
@@ -842,12 +458,6 @@ theorem IsBigOWith.trans (hfg : IsBigOWith c l f g) (hgk : IsBigOWith c' l g k)
#align asymptotics.is_O_with.trans Asymptotics.IsBigOWith.trans
-/- warning: asymptotics.is_O.trans -> Asymptotics.IsBigO.trans is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {G : Type.{u3}} {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_3 : Norm.{u3} G] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {l : Filter.{u1} α} {f : α -> E} {g : α -> F'} {k : α -> G}, (Asymptotics.IsBigO.{u1, u2, u4} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) l f g) -> (Asymptotics.IsBigO.{u1, u4, u3} α F' G (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) _inst_3 l g k) -> (Asymptotics.IsBigO.{u1, u2, u3} α E G _inst_1 _inst_3 l f k)
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {G : Type.{u1}} {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_3 : Norm.{u1} G] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {l : Filter.{u4} α} {f : α -> E} {g : α -> F'} {k : α -> G}, (Asymptotics.IsBigO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g) -> (Asymptotics.IsBigO.{u4, u2, u1} α F' G (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) _inst_3 l g k) -> (Asymptotics.IsBigO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.trans Asymptotics.IsBigO.transₓ'. -/
@[trans]
theorem IsBigO.trans {f : α → E} {g : α → F'} {k : α → G} (hfg : f =O[l] g) (hgk : g =O[l] k) :
f =O[l] k :=
@@ -856,12 +466,6 @@ theorem IsBigO.trans {f : α → E} {g : α → F'} {k : α → G} (hfg : f =O[l
(hc.trans hc' cnonneg).IsBigO
#align asymptotics.is_O.trans Asymptotics.IsBigO.trans
-/- warning: asymptotics.is_o.trans_is_O_with -> Asymptotics.IsLittleO.trans_isBigOWith is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} {G : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_3 : Norm.{u4} G] {c : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigOWith.{u1, u3, u4} α F G _inst_2 _inst_3 c l g k) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsLittleO.{u1, u2, u4} α E G _inst_1 _inst_3 l f k)
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {F : Type.{u2}} {G : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] [_inst_3 : Norm.{u1} G] {c : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, u3, u2} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigOWith.{u4, u2, u1} α F G _inst_2 _inst_3 c l g k) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsLittleO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.trans_is_O_with Asymptotics.IsLittleO.trans_isBigOWithₓ'. -/
theorem IsLittleO.trans_isBigOWith (hfg : f =o[l] g) (hgk : IsBigOWith c l g k) (hc : 0 < c) :
f =o[l] k := by
unfold is_o at *
@@ -870,12 +474,6 @@ theorem IsLittleO.trans_isBigOWith (hfg : f =o[l] g) (hgk : IsBigOWith c l g k)
exact ((hfg this).trans hgk this.le).congr_const (div_mul_cancel _ hc.ne')
#align asymptotics.is_o.trans_is_O_with Asymptotics.IsLittleO.trans_isBigOWith
-/- warning: asymptotics.is_o.trans_is_O -> Asymptotics.IsLittleO.trans_isBigO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} {G' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {l : Filter.{u1} α} {f : α -> E} {g : α -> F} {k : α -> G'}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigO.{u1, u3, u4} α F G' _inst_2 (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l g k) -> (Asymptotics.IsLittleO.{u1, u2, u4} α E G' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l f k)
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {F : Type.{u2}} {G' : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {l : Filter.{u4} α} {f : α -> E} {g : α -> F} {k : α -> G'}, (Asymptotics.IsLittleO.{u4, u3, u2} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigO.{u4, u2, u1} α F G' _inst_2 (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l g k) -> (Asymptotics.IsLittleO.{u4, u3, u1} α E G' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l f k)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.trans_is_O Asymptotics.IsLittleO.trans_isBigOₓ'. -/
@[trans]
theorem IsLittleO.trans_isBigO {f : α → E} {g : α → F} {k : α → G'} (hfg : f =o[l] g)
(hgk : g =O[l] k) : f =o[l] k :=
@@ -883,12 +481,6 @@ theorem IsLittleO.trans_isBigO {f : α → E} {g : α → F} {k : α → G'} (hf
hfg.trans_isBigOWith hc cpos
#align asymptotics.is_o.trans_is_O Asymptotics.IsLittleO.trans_isBigO
-/- warning: asymptotics.is_O_with.trans_is_o -> Asymptotics.IsBigOWith.trans_isLittleO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} {G : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_3 : Norm.{u4} G] {c : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsLittleO.{u1, u3, u4} α F G _inst_2 _inst_3 l g k) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsLittleO.{u1, u2, u4} α E G _inst_1 _inst_3 l f k)
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {F : Type.{u2}} {G : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] [_inst_3 : Norm.{u1} G] {c : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsLittleO.{u4, u2, u1} α F G _inst_2 _inst_3 l g k) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsLittleO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.trans_is_o Asymptotics.IsBigOWith.trans_isLittleOₓ'. -/
theorem IsBigOWith.trans_isLittleO (hfg : IsBigOWith c l f g) (hgk : g =o[l] k) (hc : 0 < c) :
f =o[l] k := by
unfold is_o at *
@@ -897,12 +489,6 @@ theorem IsBigOWith.trans_isLittleO (hfg : IsBigOWith c l f g) (hgk : g =o[l] k)
exact (hfg.trans (hgk this) hc.le).congr_const (mul_div_cancel' _ hc.ne')
#align asymptotics.is_O_with.trans_is_o Asymptotics.IsBigOWith.trans_isLittleO
-/- warning: asymptotics.is_O.trans_is_o -> Asymptotics.IsBigO.trans_isLittleO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {G : Type.{u3}} {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_3 : Norm.{u3} G] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {l : Filter.{u1} α} {f : α -> E} {g : α -> F'} {k : α -> G}, (Asymptotics.IsBigO.{u1, u2, u4} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) l f g) -> (Asymptotics.IsLittleO.{u1, u4, u3} α F' G (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) _inst_3 l g k) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E G _inst_1 _inst_3 l f k)
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {G : Type.{u1}} {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_3 : Norm.{u1} G] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {l : Filter.{u4} α} {f : α -> E} {g : α -> F'} {k : α -> G}, (Asymptotics.IsBigO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g) -> (Asymptotics.IsLittleO.{u4, u2, u1} α F' G (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) _inst_3 l g k) -> (Asymptotics.IsLittleO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.trans_is_o Asymptotics.IsBigO.trans_isLittleOₓ'. -/
@[trans]
theorem IsBigO.trans_isLittleO {f : α → E} {g : α → F'} {k : α → G} (hfg : f =O[l] g)
(hgk : g =o[l] k) : f =o[l] k :=
@@ -910,35 +496,17 @@ theorem IsBigO.trans_isLittleO {f : α → E} {g : α → F'} {k : α → G} (hf
hc.trans_isLittleO hgk cpos
#align asymptotics.is_O.trans_is_o Asymptotics.IsBigO.trans_isLittleO
-/- warning: asymptotics.is_o.trans -> Asymptotics.IsLittleO.trans is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} {G : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_3 : Norm.{u4} G] {l : Filter.{u1} α} {f : α -> E} {g : α -> F} {k : α -> G}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsLittleO.{u1, u3, u4} α F G _inst_2 _inst_3 l g k) -> (Asymptotics.IsLittleO.{u1, u2, u4} α E G _inst_1 _inst_3 l f k)
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {F : Type.{u2}} {G : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] [_inst_3 : Norm.{u1} G] {l : Filter.{u4} α} {f : α -> E} {g : α -> F} {k : α -> G}, (Asymptotics.IsLittleO.{u4, u3, u2} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsLittleO.{u4, u2, u1} α F G _inst_2 _inst_3 l g k) -> (Asymptotics.IsLittleO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.trans Asymptotics.IsLittleO.transₓ'. -/
@[trans]
theorem IsLittleO.trans {f : α → E} {g : α → F} {k : α → G} (hfg : f =o[l] g) (hgk : g =o[l] k) :
f =o[l] k :=
hfg.trans_isBigOWith hgk.IsBigOWith one_pos
#align asymptotics.is_o.trans Asymptotics.IsLittleO.trans
-/- warning: filter.eventually.trans_is_O -> Filter.Eventually.trans_isBigO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {G : Type.{u3}} {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_3 : Norm.{u3} G] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {l : Filter.{u1} α} {f : α -> E} {g : α -> F'} {k : α -> G}, (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (Norm.norm.{u4} F' (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) (g x))) l) -> (Asymptotics.IsBigO.{u1, u4, u3} α F' G (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) _inst_3 l g k) -> (Asymptotics.IsBigO.{u1, u2, u3} α E G _inst_1 _inst_3 l f k)
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {G : Type.{u1}} {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_3 : Norm.{u1} G] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {l : Filter.{u4} α} {f : α -> E} {g : α -> F'} {k : α -> G}, (Filter.Eventually.{u4} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u3} E _inst_1 (f x)) (Norm.norm.{u2} F' (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (g x))) l) -> (Asymptotics.IsBigO.{u4, u2, u1} α F' G (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) _inst_3 l g k) -> (Asymptotics.IsBigO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
-Case conversion may be inaccurate. Consider using '#align filter.eventually.trans_is_O Filter.Eventually.trans_isBigOₓ'. -/
theorem Filter.Eventually.trans_isBigO {f : α → E} {g : α → F'} {k : α → G}
(hfg : ∀ᶠ x in l, ‖f x‖ ≤ ‖g x‖) (hgk : g =O[l] k) : f =O[l] k :=
(IsBigO.of_bound' hfg).trans hgk
#align filter.eventually.trans_is_O Filter.Eventually.trans_isBigO
-/- warning: filter.eventually.is_O -> Filter.Eventually.isBigO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {f : α -> E} {g : α -> Real} {l : Filter.{u1} α}, (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (g x)) l) -> (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f g)
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {f : α -> E} {g : α -> Real} {l : Filter.{u2} α}, (Filter.Eventually.{u2} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} E _inst_1 (f x)) (g x)) l) -> (Asymptotics.IsBigO.{u2, u1, 0} α E Real _inst_1 Real.norm l f g)
-Case conversion may be inaccurate. Consider using '#align filter.eventually.is_O Filter.Eventually.isBigOₓ'. -/
theorem Filter.Eventually.isBigO {f : α → E} {g : α → ℝ} {l : Filter α}
(hfg : ∀ᶠ x in l, ‖f x‖ ≤ g x) : f =O[l] g :=
IsBigO.of_bound' <| hfg.mono fun x hx => hx.trans <| Real.le_norm_self _
@@ -948,105 +516,45 @@ section
variable (l)
-/- warning: asymptotics.is_O_with_of_le' -> Asymptotics.isBigOWith_of_le' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g)
-but is expected to have type
- forall {α : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {c : Real} {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u3} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u2} F _inst_2 (g x)))) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E F _inst_1 _inst_2 c l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_of_le' Asymptotics.isBigOWith_of_le'ₓ'. -/
theorem isBigOWith_of_le' (hfg : ∀ x, ‖f x‖ ≤ c * ‖g x‖) : IsBigOWith c l f g :=
IsBigOWith.of_bound <| univ_mem' hfg
#align asymptotics.is_O_with_of_le' Asymptotics.isBigOWith_of_le'
-/- warning: asymptotics.is_O_with_of_le -> Asymptotics.isBigOWith_of_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (Norm.norm.{u3} F _inst_2 (g x))) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) l f g)
-but is expected to have type
- forall {α : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u3} E _inst_1 (f x)) (Norm.norm.{u2} F _inst_2 (g x))) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E F _inst_1 _inst_2 (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_of_le Asymptotics.isBigOWith_of_leₓ'. -/
theorem isBigOWith_of_le (hfg : ∀ x, ‖f x‖ ≤ ‖g x‖) : IsBigOWith 1 l f g :=
isBigOWith_of_le' l fun x => by rw [one_mul]; exact hfg x
#align asymptotics.is_O_with_of_le Asymptotics.isBigOWith_of_le
-/- warning: asymptotics.is_O_of_le' -> Asymptotics.isBigO_of_le' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
-but is expected to have type
- forall {α : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {c : Real} {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u3} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u2} F _inst_2 (g x)))) -> (Asymptotics.IsBigO.{u1, u3, u2} α E F _inst_1 _inst_2 l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_of_le' Asymptotics.isBigO_of_le'ₓ'. -/
theorem isBigO_of_le' (hfg : ∀ x, ‖f x‖ ≤ c * ‖g x‖) : f =O[l] g :=
(isBigOWith_of_le' l hfg).IsBigO
#align asymptotics.is_O_of_le' Asymptotics.isBigO_of_le'
-/- warning: asymptotics.is_O_of_le -> Asymptotics.isBigO_of_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (Norm.norm.{u3} F _inst_2 (g x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
-but is expected to have type
- forall {α : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u3} E _inst_1 (f x)) (Norm.norm.{u2} F _inst_2 (g x))) -> (Asymptotics.IsBigO.{u1, u3, u2} α E F _inst_1 _inst_2 l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_of_le Asymptotics.isBigO_of_leₓ'. -/
theorem isBigO_of_le (hfg : ∀ x, ‖f x‖ ≤ ‖g x‖) : f =O[l] g :=
(isBigOWith_of_le l hfg).IsBigO
#align asymptotics.is_O_of_le Asymptotics.isBigO_of_le
end
-/- warning: asymptotics.is_O_with_refl -> Asymptotics.isBigOWith_refl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] (f : α -> E) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u2} α E E _inst_1 _inst_1 (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) l f f
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] (f : α -> E) (l : Filter.{u2} α), Asymptotics.IsBigOWith.{u2, u1, u1} α E E _inst_1 _inst_1 (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) l f f
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_refl Asymptotics.isBigOWith_reflₓ'. -/
theorem isBigOWith_refl (f : α → E) (l : Filter α) : IsBigOWith 1 l f f :=
isBigOWith_of_le l fun _ => le_rfl
#align asymptotics.is_O_with_refl Asymptotics.isBigOWith_refl
-/- warning: asymptotics.is_O_refl -> Asymptotics.isBigO_refl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] (f : α -> E) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u2} α E E _inst_1 _inst_1 l f f
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] (f : α -> E) (l : Filter.{u2} α), Asymptotics.IsBigO.{u2, u1, u1} α E E _inst_1 _inst_1 l f f
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_refl Asymptotics.isBigO_reflₓ'. -/
theorem isBigO_refl (f : α → E) (l : Filter α) : f =O[l] f :=
(isBigOWith_refl f l).IsBigO
#align asymptotics.is_O_refl Asymptotics.isBigO_refl
-/- warning: asymptotics.is_O_with.trans_le -> Asymptotics.IsBigOWith.trans_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} {G : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_3 : Norm.{u4} G] {c : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g) -> (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u3} F _inst_2 (g x)) (Norm.norm.{u4} G _inst_3 (k x))) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, u4} α E G _inst_1 _inst_3 c l f k)
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {F : Type.{u2}} {G : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] [_inst_3 : Norm.{u1} G] {c : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E F _inst_1 _inst_2 c l f g) -> (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} F _inst_2 (g x)) (Norm.norm.{u1} G _inst_3 (k x))) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u4, u3, u1} α E G _inst_1 _inst_3 c l f k)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.trans_le Asymptotics.IsBigOWith.trans_leₓ'. -/
theorem IsBigOWith.trans_le (hfg : IsBigOWith c l f g) (hgk : ∀ x, ‖g x‖ ≤ ‖k x‖) (hc : 0 ≤ c) :
IsBigOWith c l f k :=
(hfg.trans (isBigOWith_of_le l hgk) hc).congr_const <| mul_one c
#align asymptotics.is_O_with.trans_le Asymptotics.IsBigOWith.trans_le
-/- warning: asymptotics.is_O.trans_le -> Asymptotics.IsBigO.trans_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {G : Type.{u3}} {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_3 : Norm.{u3} G] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {f : α -> E} {k : α -> G} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u4} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) l f g') -> (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u4} F' (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) (g' x)) (Norm.norm.{u3} G _inst_3 (k x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E G _inst_1 _inst_3 l f k)
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {G : Type.{u1}} {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_3 : Norm.{u1} G] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {f : α -> E} {k : α -> G} {g' : α -> F'} {l : Filter.{u4} α}, (Asymptotics.IsBigO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g') -> (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} F' (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (g' x)) (Norm.norm.{u1} G _inst_3 (k x))) -> (Asymptotics.IsBigO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.trans_le Asymptotics.IsBigO.trans_leₓ'. -/
theorem IsBigO.trans_le (hfg : f =O[l] g') (hgk : ∀ x, ‖g' x‖ ≤ ‖k x‖) : f =O[l] k :=
hfg.trans (isBigO_of_le l hgk)
#align asymptotics.is_O.trans_le Asymptotics.IsBigO.trans_le
-/- warning: asymptotics.is_o.trans_le -> Asymptotics.IsLittleO.trans_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} {G : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_3 : Norm.{u4} G] {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u3} F _inst_2 (g x)) (Norm.norm.{u4} G _inst_3 (k x))) -> (Asymptotics.IsLittleO.{u1, u2, u4} α E G _inst_1 _inst_3 l f k)
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {F : Type.{u2}} {G : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] [_inst_3 : Norm.{u1} G] {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, u3, u2} α E F _inst_1 _inst_2 l f g) -> (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} F _inst_2 (g x)) (Norm.norm.{u1} G _inst_3 (k x))) -> (Asymptotics.IsLittleO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.trans_le Asymptotics.IsLittleO.trans_leₓ'. -/
theorem IsLittleO.trans_le (hfg : f =o[l] g) (hgk : ∀ x, ‖g x‖ ≤ ‖k x‖) : f =o[l] k :=
hfg.trans_isBigOWith (isBigOWith_of_le _ hgk) zero_lt_one
#align asymptotics.is_o.trans_le Asymptotics.IsLittleO.trans_le
-/- warning: asymptotics.is_o_irrefl' -> Asymptotics.isLittleO_irrefl' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] {f' : α -> E'} {l : Filter.{u1} α}, (Filter.Frequently.{u1} α (fun (x : α) => Ne.{1} Real (Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) l) -> (Not (Asymptotics.IsLittleO.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) l f' f'))
-but is expected to have type
- forall {α : Type.{u2}} {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {f' : α -> E'} {l : Filter.{u2} α}, (Filter.Frequently.{u2} α (fun (x : α) => Ne.{1} Real (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) l) -> (Not (Asymptotics.IsLittleO.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f' f'))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_irrefl' Asymptotics.isLittleO_irrefl'ₓ'. -/
theorem isLittleO_irrefl' (h : ∃ᶠ x in l, ‖f' x‖ ≠ 0) : ¬f' =o[l] f' :=
by
intro ho
@@ -1055,32 +563,14 @@ theorem isLittleO_irrefl' (h : ∃ᶠ x in l, ‖f' x‖ ≠ 0) : ¬f' =o[l] f'
exact (half_lt_self (lt_of_le_of_ne (norm_nonneg _) hne.symm)).not_le hle
#align asymptotics.is_o_irrefl' Asymptotics.isLittleO_irrefl'
-/- warning: asymptotics.is_o_irrefl -> Asymptotics.isLittleO_irrefl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u2} E''] {f'' : α -> E''} {l : Filter.{u1} α}, (Filter.Frequently.{u1} α (fun (x : α) => Ne.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))) l) -> (Not (Asymptotics.IsLittleO.{u1, u2, u2} α E'' E'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) l f'' f''))
-but is expected to have type
- forall {α : Type.{u2}} {E'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u1} E''] {f'' : α -> E''} {l : Filter.{u2} α}, (Filter.Frequently.{u2} α (fun (x : α) => Ne.{succ u1} E'' (f'' x) (OfNat.ofNat.{u1} E'' 0 (Zero.toOfNat0.{u1} E'' (NegZeroClass.toZero.{u1} E'' (SubNegZeroMonoid.toNegZeroClass.{u1} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E'' (AddCommGroup.toDivisionAddCommMonoid.{u1} E'' (NormedAddCommGroup.toAddCommGroup.{u1} E'' _inst_7))))))))) l) -> (Not (Asymptotics.IsLittleO.{u2, u1, u1} α E'' E'' (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) l f'' f''))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_irrefl Asymptotics.isLittleO_irreflₓ'. -/
theorem isLittleO_irrefl (h : ∃ᶠ x in l, f'' x ≠ 0) : ¬f'' =o[l] f'' :=
isLittleO_irrefl' <| h.mono fun x => norm_ne_zero_iff.mpr
#align asymptotics.is_o_irrefl Asymptotics.isLittleO_irrefl
-/- warning: asymptotics.is_O.not_is_o -> Asymptotics.IsBigO.not_isLittleO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {g' : α -> F'} {f'' : α -> E''} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f'' g') -> (Filter.Frequently.{u1} α (fun (x : α) => Ne.{succ u3} E'' (f'' x) (OfNat.ofNat.{u3} E'' 0 (OfNat.mk.{u3} E'' 0 (Zero.zero.{u3} E'' (AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))) l) -> (Not (Asymptotics.IsLittleO.{u1, u2, u3} α F' E'' (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) l g' f''))
-but is expected to have type
- forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {g' : α -> F'} {f'' : α -> E''} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' g') -> (Filter.Frequently.{u3} α (fun (x : α) => Ne.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))) l) -> (Not (Asymptotics.IsLittleO.{u3, u1, u2} α F' E'' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) l g' f''))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.not_is_o Asymptotics.IsBigO.not_isLittleOₓ'. -/
theorem IsBigO.not_isLittleO (h : f'' =O[l] g') (hf : ∃ᶠ x in l, f'' x ≠ 0) : ¬g' =o[l] f'' :=
fun h' => isLittleO_irrefl hf (h.trans_isLittleO h')
#align asymptotics.is_O.not_is_o Asymptotics.IsBigO.not_isLittleO
-/- warning: asymptotics.is_o.not_is_O -> Asymptotics.IsLittleO.not_isBigO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {g' : α -> F'} {f'' : α -> E''} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f'' g') -> (Filter.Frequently.{u1} α (fun (x : α) => Ne.{succ u3} E'' (f'' x) (OfNat.ofNat.{u3} E'' 0 (OfNat.mk.{u3} E'' 0 (Zero.zero.{u3} E'' (AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))) l) -> (Not (Asymptotics.IsBigO.{u1, u2, u3} α F' E'' (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) l g' f''))
-but is expected to have type
- forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {g' : α -> F'} {f'' : α -> E''} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' g') -> (Filter.Frequently.{u3} α (fun (x : α) => Ne.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))) l) -> (Not (Asymptotics.IsBigO.{u3, u1, u2} α F' E'' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) l g' f''))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.not_is_O Asymptotics.IsLittleO.not_isBigOₓ'. -/
theorem IsLittleO.not_isBigO (h : f'' =o[l] g') (hf : ∃ᶠ x in l, f'' x ≠ 0) : ¬g' =O[l] f'' :=
fun h' => isLittleO_irrefl hf (h.trans_isBigO h')
#align asymptotics.is_o.not_is_O Asymptotics.IsLittleO.not_isBigO
@@ -1089,34 +579,16 @@ section Bot
variable (c f g)
-/- warning: asymptotics.is_O_with_bot -> Asymptotics.isBigOWith_bot is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] (c : Real) (f : α -> E) (g : α -> F), Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) f g
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] (c : Real) (f : α -> E) (g : α -> F), Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c (Bot.bot.{u3} (Filter.{u3} α) (CompleteLattice.toBot.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))) f g
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_bot Asymptotics.isBigOWith_botₓ'. -/
@[simp]
theorem isBigOWith_bot : IsBigOWith c ⊥ f g :=
IsBigOWith.of_bound <| trivial
#align asymptotics.is_O_with_bot Asymptotics.isBigOWith_bot
-/- warning: asymptotics.is_O_bot -> Asymptotics.isBigO_bot is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] (f : α -> E) (g : α -> F), Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) f g
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] (f : α -> E) (g : α -> F), Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 (Bot.bot.{u3} (Filter.{u3} α) (CompleteLattice.toBot.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))) f g
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_bot Asymptotics.isBigO_botₓ'. -/
@[simp]
theorem isBigO_bot : f =O[⊥] g :=
(isBigOWith_bot 1 f g).IsBigO
#align asymptotics.is_O_bot Asymptotics.isBigO_bot
-/- warning: asymptotics.is_o_bot -> Asymptotics.isLittleO_bot is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] (f : α -> E) (g : α -> F), Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) f g
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] (f : α -> E) (g : α -> F), Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 (Bot.bot.{u3} (Filter.{u3} α) (CompleteLattice.toBot.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))) f g
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_bot Asymptotics.isLittleO_botₓ'. -/
@[simp]
theorem isLittleO_bot : f =o[⊥] g :=
IsLittleO.of_isBigOWith fun c _ => isBigOWith_bot c f g
@@ -1124,113 +596,53 @@ theorem isLittleO_bot : f =o[⊥] g :=
end Bot
-/- warning: asymptotics.is_O_with_pure -> Asymptotics.isBigOWith_pure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {x : α}, Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} α x) f g) (LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x))))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {x : α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c (Pure.pure.{u3, u3} Filter.{u3} Filter.instPureFilter.{u3} α x) f g) (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_pure Asymptotics.isBigOWith_pureₓ'. -/
@[simp]
theorem isBigOWith_pure {x} : IsBigOWith c (pure x) f g ↔ ‖f x‖ ≤ c * ‖g x‖ :=
isBigOWith_iff
#align asymptotics.is_O_with_pure Asymptotics.isBigOWith_pure
-/- warning: asymptotics.is_O_with.sup -> Asymptotics.IsBigOWith.sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l' f g) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l' f g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c (Sup.sup.{u3} (Filter.{u3} α) (SemilatticeSup.toSup.{u3} (Filter.{u3} α) (Lattice.toSemilatticeSup.{u3} (Filter.{u3} α) (ConditionallyCompleteLattice.toLattice.{u3} (Filter.{u3} α) (CompleteLattice.toConditionallyCompleteLattice.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))))) l l') f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.sup Asymptotics.IsBigOWith.supₓ'. -/
theorem IsBigOWith.sup (h : IsBigOWith c l f g) (h' : IsBigOWith c l' f g) :
IsBigOWith c (l ⊔ l') f g :=
IsBigOWith.of_bound <| mem_sup.2 ⟨h.bound, h'.bound⟩
#align asymptotics.is_O_with.sup Asymptotics.IsBigOWith.sup
-/- warning: asymptotics.is_O_with.sup' -> Asymptotics.IsBigOWith.sup' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {c' : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c' l' f g') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (LinearOrder.max.{0} Real Real.linearOrder c c') (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {c' : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g') -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c' l' f g') -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) c c') (Sup.sup.{u3} (Filter.{u3} α) (SemilatticeSup.toSup.{u3} (Filter.{u3} α) (Lattice.toSemilatticeSup.{u3} (Filter.{u3} α) (ConditionallyCompleteLattice.toLattice.{u3} (Filter.{u3} α) (CompleteLattice.toConditionallyCompleteLattice.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))))) l l') f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.sup' Asymptotics.IsBigOWith.sup'ₓ'. -/
theorem IsBigOWith.sup' (h : IsBigOWith c l f g') (h' : IsBigOWith c' l' f g') :
IsBigOWith (max c c') (l ⊔ l') f g' :=
IsBigOWith.of_bound <|
mem_sup.2 ⟨(h.weaken <| le_max_left c c').bound, (h'.weaken <| le_max_right c c').bound⟩
#align asymptotics.is_O_with.sup' Asymptotics.IsBigOWith.sup'
-/- warning: asymptotics.is_O.sup -> Asymptotics.IsBigO.sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l' f g') -> (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l' f g') -> (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (Sup.sup.{u3} (Filter.{u3} α) (SemilatticeSup.toSup.{u3} (Filter.{u3} α) (Lattice.toSemilatticeSup.{u3} (Filter.{u3} α) (ConditionallyCompleteLattice.toLattice.{u3} (Filter.{u3} α) (CompleteLattice.toConditionallyCompleteLattice.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))))) l l') f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.sup Asymptotics.IsBigO.supₓ'. -/
theorem IsBigO.sup (h : f =O[l] g') (h' : f =O[l'] g') : f =O[l ⊔ l'] g' :=
let ⟨c, hc⟩ := h.IsBigOWith
let ⟨c', hc'⟩ := h'.IsBigOWith
(hc.sup' hc').IsBigO
#align asymptotics.is_O.sup Asymptotics.IsBigO.sup
-/- warning: asymptotics.is_o.sup -> Asymptotics.IsLittleO.sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l' f g) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l' f g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 (Sup.sup.{u3} (Filter.{u3} α) (SemilatticeSup.toSup.{u3} (Filter.{u3} α) (Lattice.toSemilatticeSup.{u3} (Filter.{u3} α) (ConditionallyCompleteLattice.toLattice.{u3} (Filter.{u3} α) (CompleteLattice.toConditionallyCompleteLattice.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))))) l l') f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.sup Asymptotics.IsLittleO.supₓ'. -/
theorem IsLittleO.sup (h : f =o[l] g) (h' : f =o[l'] g) : f =o[l ⊔ l'] g :=
IsLittleO.of_isBigOWith fun c cpos => (h.forall_isBigOWith cpos).sup (h'.forall_isBigOWith cpos)
#align asymptotics.is_o.sup Asymptotics.IsLittleO.sup
-/- warning: asymptotics.is_O_sup -> Asymptotics.isBigO_sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α} {l' : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') f g') (And (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l' f g'))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α} {l' : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (Sup.sup.{u3} (Filter.{u3} α) (SemilatticeSup.toSup.{u3} (Filter.{u3} α) (Lattice.toSemilatticeSup.{u3} (Filter.{u3} α) (ConditionallyCompleteLattice.toLattice.{u3} (Filter.{u3} α) (CompleteLattice.toConditionallyCompleteLattice.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))))) l l') f g') (And (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l' f g'))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_sup Asymptotics.isBigO_supₓ'. -/
@[simp]
theorem isBigO_sup : f =O[l ⊔ l'] g' ↔ f =O[l] g' ∧ f =O[l'] g' :=
⟨fun h => ⟨h.mono le_sup_left, h.mono le_sup_right⟩, fun h => h.1.sup h.2⟩
#align asymptotics.is_O_sup Asymptotics.isBigO_sup
-/- warning: asymptotics.is_o_sup -> Asymptotics.isLittleO_sup is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') f g) (And (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l' f g))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α} {l' : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 (Sup.sup.{u3} (Filter.{u3} α) (SemilatticeSup.toSup.{u3} (Filter.{u3} α) (Lattice.toSemilatticeSup.{u3} (Filter.{u3} α) (ConditionallyCompleteLattice.toLattice.{u3} (Filter.{u3} α) (CompleteLattice.toConditionallyCompleteLattice.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))))) l l') f g) (And (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l' f g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_sup Asymptotics.isLittleO_supₓ'. -/
@[simp]
theorem isLittleO_sup : f =o[l ⊔ l'] g ↔ f =o[l] g ∧ f =o[l'] g :=
⟨fun h => ⟨h.mono le_sup_left, h.mono le_sup_right⟩, fun h => h.1.sup h.2⟩
#align asymptotics.is_o_sup Asymptotics.isLittleO_sup
-/- warning: asymptotics.is_O_with_insert -> Asymptotics.isBigOWith_insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_14 : TopologicalSpace.{u1} α] {x : α} {s : Set.{u1} α} {C : Real} {g : α -> E} {g' : α -> F}, (LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (g x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u3} F _inst_2 (g' x)))) -> (Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 C (nhdsWithin.{u1} α _inst_14 x (Insert.insert.{u1, u1} α (Set.{u1} α) (Set.hasInsert.{u1} α) x s)) g g') (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 C (nhdsWithin.{u1} α _inst_14 x s) g g'))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] [_inst_14 : TopologicalSpace.{u3} α] {x : α} {s : Set.{u3} α} {C : Real} {g : α -> E} {g' : α -> F}, (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (g x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u1} F _inst_2 (g' x)))) -> (Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 C (nhdsWithin.{u3} α _inst_14 x (Insert.insert.{u3, u3} α (Set.{u3} α) (Set.instInsertSet.{u3} α) x s)) g g') (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 C (nhdsWithin.{u3} α _inst_14 x s) g g'))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_insert Asymptotics.isBigOWith_insertₓ'. -/
theorem isBigOWith_insert [TopologicalSpace α] {x : α} {s : Set α} {C : ℝ} {g : α → E} {g' : α → F}
(h : ‖g x‖ ≤ C * ‖g' x‖) : IsBigOWith C (𝓝[insert x s] x) g g' ↔ IsBigOWith C (𝓝[s] x) g g' :=
by simp_rw [is_O_with, nhdsWithin_insert, eventually_sup, eventually_pure, h, true_and_iff]
#align asymptotics.is_O_with_insert Asymptotics.isBigOWith_insert
-/- warning: asymptotics.is_O_with.insert -> Asymptotics.IsBigOWith.insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_14 : TopologicalSpace.{u1} α] {x : α} {s : Set.{u1} α} {C : Real} {g : α -> E} {g' : α -> F}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 C (nhdsWithin.{u1} α _inst_14 x s) g g') -> (LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (g x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u3} F _inst_2 (g' x)))) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 C (nhdsWithin.{u1} α _inst_14 x (Insert.insert.{u1, u1} α (Set.{u1} α) (Set.hasInsert.{u1} α) x s)) g g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] [_inst_14 : TopologicalSpace.{u3} α] {x : α} {s : Set.{u3} α} {C : Real} {g : α -> E} {g' : α -> F}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 C (nhdsWithin.{u3} α _inst_14 x s) g g') -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (g x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u1} F _inst_2 (g' x)))) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 C (nhdsWithin.{u3} α _inst_14 x (Insert.insert.{u3, u3} α (Set.{u3} α) (Set.instInsertSet.{u3} α) x s)) g g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.insert Asymptotics.IsBigOWith.insertₓ'. -/
theorem IsBigOWith.insert [TopologicalSpace α] {x : α} {s : Set α} {C : ℝ} {g : α → E} {g' : α → F}
(h1 : IsBigOWith C (𝓝[s] x) g g') (h2 : ‖g x‖ ≤ C * ‖g' x‖) :
IsBigOWith C (𝓝[insert x s] x) g g' :=
(isBigOWith_insert h2).mpr h1
#align asymptotics.is_O_with.insert Asymptotics.IsBigOWith.insert
-/- warning: asymptotics.is_o_insert -> Asymptotics.isLittleO_insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_14 : TopologicalSpace.{u1} α] {x : α} {s : Set.{u1} α} {g : α -> E'} {g' : α -> F'}, (Eq.{succ u2} E' (g x) (OfNat.ofNat.{u2} E' 0 (OfNat.mk.{u2} E' 0 (Zero.zero.{u2} E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4)))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (nhdsWithin.{u1} α _inst_14 x (Insert.insert.{u1, u1} α (Set.{u1} α) (Set.hasInsert.{u1} α) x s)) g g') (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (nhdsWithin.{u1} α _inst_14 x s) g g'))
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_14 : TopologicalSpace.{u3} α] {x : α} {s : Set.{u3} α} {g : α -> E'} {g' : α -> F'}, (Eq.{succ u2} E' (g x) (OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))))))) -> (Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (nhdsWithin.{u3} α _inst_14 x (Insert.insert.{u3, u3} α (Set.{u3} α) (Set.instInsertSet.{u3} α) x s)) g g') (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (nhdsWithin.{u3} α _inst_14 x s) g g'))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_insert Asymptotics.isLittleO_insertₓ'. -/
theorem isLittleO_insert [TopologicalSpace α] {x : α} {s : Set α} {g : α → E'} {g' : α → F'}
(h : g x = 0) : g =o[𝓝[insert x s] x] g' ↔ g =o[𝓝[s] x] g' :=
by
@@ -1241,12 +653,6 @@ theorem isLittleO_insert [TopologicalSpace α] {x : α} {s : Set α} {g : α →
exact mul_nonneg hc.le (norm_nonneg _)
#align asymptotics.is_o_insert Asymptotics.isLittleO_insert
-/- warning: asymptotics.is_o.insert -> Asymptotics.IsLittleO.insert is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_14 : TopologicalSpace.{u1} α] {x : α} {s : Set.{u1} α} {g : α -> E'} {g' : α -> F'}, (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (nhdsWithin.{u1} α _inst_14 x s) g g') -> (Eq.{succ u2} E' (g x) (OfNat.ofNat.{u2} E' 0 (OfNat.mk.{u2} E' 0 (Zero.zero.{u2} E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4)))))))))) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (nhdsWithin.{u1} α _inst_14 x (Insert.insert.{u1, u1} α (Set.{u1} α) (Set.hasInsert.{u1} α) x s)) g g')
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_14 : TopologicalSpace.{u3} α] {x : α} {s : Set.{u3} α} {g : α -> E'} {g' : α -> F'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (nhdsWithin.{u3} α _inst_14 x s) g g') -> (Eq.{succ u2} E' (g x) (OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))))))) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (nhdsWithin.{u3} α _inst_14 x (Insert.insert.{u3, u3} α (Set.{u3} α) (Set.instInsertSet.{u3} α) x s)) g g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.insert Asymptotics.IsLittleO.insertₓ'. -/
theorem IsLittleO.insert [TopologicalSpace α] {x : α} {s : Set α} {g : α → E'} {g' : α → F'}
(h1 : g =o[𝓝[s] x] g') (h2 : g x = 0) : g =o[𝓝[insert x s] x] g' :=
(isLittleO_insert h2).mpr h1
@@ -1259,484 +665,160 @@ section NormAbs
variable {u v : α → ℝ}
-/- warning: asymptotics.is_O_with_norm_right -> Asymptotics.isBigOWith_norm_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, 0} α E Real _inst_1 Real.norm c l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_norm_right Asymptotics.isBigOWith_norm_rightₓ'. -/
@[simp]
theorem isBigOWith_norm_right : (IsBigOWith c l f fun x => ‖g' x‖) ↔ IsBigOWith c l f g' := by
simp only [is_O_with, norm_norm]
#align asymptotics.is_O_with_norm_right Asymptotics.isBigOWith_norm_right
-/- warning: asymptotics.is_O_with_abs_right -> Asymptotics.isBigOWith_abs_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {c : Real} {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, Iff (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x))) (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f u)
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {c : Real} {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, Iff (Asymptotics.IsBigOWith.{u2, u1, 0} α E Real _inst_1 Real.norm c l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x))) (Asymptotics.IsBigOWith.{u2, u1, 0} α E Real _inst_1 Real.norm c l f u)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_abs_right Asymptotics.isBigOWith_abs_rightₓ'. -/
@[simp]
theorem isBigOWith_abs_right : (IsBigOWith c l f fun x => |u x|) ↔ IsBigOWith c l f u :=
@isBigOWith_norm_right _ _ _ _ _ _ f u l
#align asymptotics.is_O_with_abs_right Asymptotics.isBigOWith_abs_right
-/- warning: asymptotics.is_O_with.of_norm_right -> Asymptotics.IsBigOWith.of_norm_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, 0} α E Real _inst_1 Real.norm c l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_norm_right Asymptotics.IsBigOWith.of_norm_rightₓ'. -/
-/- warning: asymptotics.is_O_with.norm_right -> Asymptotics.IsBigOWith.norm_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') -> (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g') -> (Asymptotics.IsBigOWith.{u3, u2, 0} α E Real _inst_1 Real.norm c l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.norm_right Asymptotics.IsBigOWith.norm_rightₓ'. -/
alias is_O_with_norm_right ↔ is_O_with.of_norm_right is_O_with.norm_right
#align asymptotics.is_O_with.of_norm_right Asymptotics.IsBigOWith.of_norm_right
#align asymptotics.is_O_with.norm_right Asymptotics.IsBigOWith.norm_right
-/- warning: asymptotics.is_O_with.of_abs_right -> Asymptotics.IsBigOWith.of_abs_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {c : Real} {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x))) -> (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f u)
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {c : Real} {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u2, u1, 0} α E Real _inst_1 Real.norm c l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x))) -> (Asymptotics.IsBigOWith.{u2, u1, 0} α E Real _inst_1 Real.norm c l f u)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_abs_right Asymptotics.IsBigOWith.of_abs_rightₓ'. -/
-/- warning: asymptotics.is_O_with.abs_right -> Asymptotics.IsBigOWith.abs_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {c : Real} {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f u) -> (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {c : Real} {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u2, u1, 0} α E Real _inst_1 Real.norm c l f u) -> (Asymptotics.IsBigOWith.{u2, u1, 0} α E Real _inst_1 Real.norm c l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.abs_right Asymptotics.IsBigOWith.abs_rightₓ'. -/
alias is_O_with_abs_right ↔ is_O_with.of_abs_right is_O_with.abs_right
#align asymptotics.is_O_with.of_abs_right Asymptotics.IsBigOWith.of_abs_right
#align asymptotics.is_O_with.abs_right Asymptotics.IsBigOWith.abs_right
-/- warning: asymptotics.is_O_norm_right -> Asymptotics.isBigO_norm_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_norm_right Asymptotics.isBigO_norm_rightₓ'. -/
@[simp]
theorem isBigO_norm_right : (f =O[l] fun x => ‖g' x‖) ↔ f =O[l] g' := by unfold is_O;
exact exists_congr fun _ => is_O_with_norm_right
#align asymptotics.is_O_norm_right Asymptotics.isBigO_norm_right
-/- warning: asymptotics.is_O_abs_right -> Asymptotics.isBigO_abs_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, Iff (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x))) (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f u)
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, Iff (Asymptotics.IsBigO.{u2, u1, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x))) (Asymptotics.IsBigO.{u2, u1, 0} α E Real _inst_1 Real.norm l f u)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_abs_right Asymptotics.isBigO_abs_rightₓ'. -/
@[simp]
theorem isBigO_abs_right : (f =O[l] fun x => |u x|) ↔ f =O[l] u :=
@isBigO_norm_right _ _ ℝ _ _ _ _ _
#align asymptotics.is_O_abs_right Asymptotics.isBigO_abs_right
-/- warning: asymptotics.is_O.of_norm_right -> Asymptotics.IsBigO.of_norm_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_norm_right Asymptotics.IsBigO.of_norm_rightₓ'. -/
-/- warning: asymptotics.is_O.norm_right -> Asymptotics.IsBigO.norm_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u3, u2, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.norm_right Asymptotics.IsBigO.norm_rightₓ'. -/
alias is_O_norm_right ↔ is_O.of_norm_right is_O.norm_right
#align asymptotics.is_O.of_norm_right Asymptotics.IsBigO.of_norm_right
#align asymptotics.is_O.norm_right Asymptotics.IsBigO.norm_right
-/- warning: asymptotics.is_O.of_abs_right -> Asymptotics.IsBigO.of_abs_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x))) -> (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f u)
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigO.{u2, u1, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x))) -> (Asymptotics.IsBigO.{u2, u1, 0} α E Real _inst_1 Real.norm l f u)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_abs_right Asymptotics.IsBigO.of_abs_rightₓ'. -/
-/- warning: asymptotics.is_O.abs_right -> Asymptotics.IsBigO.abs_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f u) -> (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigO.{u2, u1, 0} α E Real _inst_1 Real.norm l f u) -> (Asymptotics.IsBigO.{u2, u1, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.abs_right Asymptotics.IsBigO.abs_rightₓ'. -/
alias is_O_abs_right ↔ is_O.of_abs_right is_O.abs_right
#align asymptotics.is_O.of_abs_right Asymptotics.IsBigO.of_abs_right
#align asymptotics.is_O.abs_right Asymptotics.IsBigO.abs_right
-/- warning: asymptotics.is_o_norm_right -> Asymptotics.isLittleO_norm_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_norm_right Asymptotics.isLittleO_norm_rightₓ'. -/
@[simp]
theorem isLittleO_norm_right : (f =o[l] fun x => ‖g' x‖) ↔ f =o[l] g' := by unfold is_o;
exact forall₂_congr fun _ _ => is_O_with_norm_right
#align asymptotics.is_o_norm_right Asymptotics.isLittleO_norm_right
-/- warning: asymptotics.is_o_abs_right -> Asymptotics.isLittleO_abs_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, Iff (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x))) (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f u)
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, Iff (Asymptotics.IsLittleO.{u2, u1, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x))) (Asymptotics.IsLittleO.{u2, u1, 0} α E Real _inst_1 Real.norm l f u)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_abs_right Asymptotics.isLittleO_abs_rightₓ'. -/
@[simp]
theorem isLittleO_abs_right : (f =o[l] fun x => |u x|) ↔ f =o[l] u :=
@isLittleO_norm_right _ _ ℝ _ _ _ _ _
#align asymptotics.is_o_abs_right Asymptotics.isLittleO_abs_right
-/- warning: asymptotics.is_o.of_norm_right -> Asymptotics.IsLittleO.of_norm_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_norm_right Asymptotics.IsLittleO.of_norm_rightₓ'. -/
-/- warning: asymptotics.is_o.norm_right -> Asymptotics.IsLittleO.norm_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u3, u2, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.norm_right Asymptotics.IsLittleO.norm_rightₓ'. -/
alias is_o_norm_right ↔ is_o.of_norm_right is_o.norm_right
#align asymptotics.is_o.of_norm_right Asymptotics.IsLittleO.of_norm_right
#align asymptotics.is_o.norm_right Asymptotics.IsLittleO.norm_right
-/- warning: asymptotics.is_o.of_abs_right -> Asymptotics.IsLittleO.of_abs_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x))) -> (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f u)
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u2, u1, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x))) -> (Asymptotics.IsLittleO.{u2, u1, 0} α E Real _inst_1 Real.norm l f u)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_abs_right Asymptotics.IsLittleO.of_abs_rightₓ'. -/
-/- warning: asymptotics.is_o.abs_right -> Asymptotics.IsLittleO.abs_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f u) -> (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u2, u1, 0} α E Real _inst_1 Real.norm l f u) -> (Asymptotics.IsLittleO.{u2, u1, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.abs_right Asymptotics.IsLittleO.abs_rightₓ'. -/
alias is_o_abs_right ↔ is_o.of_abs_right is_o.abs_right
#align asymptotics.is_o.of_abs_right Asymptotics.IsLittleO.of_abs_right
#align asymptotics.is_o.abs_right Asymptotics.IsLittleO.abs_right
-/- warning: asymptotics.is_O_with_norm_left -> Asymptotics.isBigOWith_norm_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g) (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l f' g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, 0, u2} α Real F Real.norm _inst_2 c l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g) (Asymptotics.IsBigOWith.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 c l f' g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_norm_left Asymptotics.isBigOWith_norm_leftₓ'. -/
@[simp]
theorem isBigOWith_norm_left : IsBigOWith c l (fun x => ‖f' x‖) g ↔ IsBigOWith c l f' g := by
simp only [is_O_with, norm_norm]
#align asymptotics.is_O_with_norm_left Asymptotics.isBigOWith_norm_left
-/- warning: asymptotics.is_O_with_abs_left -> Asymptotics.isBigOWith_abs_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {c : Real} {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, Iff (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g) (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l u g)
-but is expected to have type
- forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {c : Real} {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, Iff (Asymptotics.IsBigOWith.{u2, 0, u1} α Real F Real.norm _inst_2 c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g) (Asymptotics.IsBigOWith.{u2, 0, u1} α Real F Real.norm _inst_2 c l u g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_abs_left Asymptotics.isBigOWith_abs_leftₓ'. -/
@[simp]
theorem isBigOWith_abs_left : IsBigOWith c l (fun x => |u x|) g ↔ IsBigOWith c l u g :=
@isBigOWith_norm_left _ _ _ _ _ _ g u l
#align asymptotics.is_O_with_abs_left Asymptotics.isBigOWith_abs_left
-/- warning: asymptotics.is_O_with.of_norm_left -> Asymptotics.IsBigOWith.of_norm_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l f' g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, 0, u2} α Real F Real.norm _inst_2 c l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g) -> (Asymptotics.IsBigOWith.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 c l f' g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_norm_left Asymptotics.IsBigOWith.of_norm_leftₓ'. -/
-/- warning: asymptotics.is_O_with.norm_left -> Asymptotics.IsBigOWith.norm_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l f' g) -> (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 c l f' g) -> (Asymptotics.IsBigOWith.{u3, 0, u2} α Real F Real.norm _inst_2 c l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.norm_left Asymptotics.IsBigOWith.norm_leftₓ'. -/
alias is_O_with_norm_left ↔ is_O_with.of_norm_left is_O_with.norm_left
#align asymptotics.is_O_with.of_norm_left Asymptotics.IsBigOWith.of_norm_left
#align asymptotics.is_O_with.norm_left Asymptotics.IsBigOWith.norm_left
-/- warning: asymptotics.is_O_with.of_abs_left -> Asymptotics.IsBigOWith.of_abs_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {c : Real} {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g) -> (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l u g)
-but is expected to have type
- forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {c : Real} {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u2, 0, u1} α Real F Real.norm _inst_2 c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g) -> (Asymptotics.IsBigOWith.{u2, 0, u1} α Real F Real.norm _inst_2 c l u g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_abs_left Asymptotics.IsBigOWith.of_abs_leftₓ'. -/
-/- warning: asymptotics.is_O_with.abs_left -> Asymptotics.IsBigOWith.abs_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {c : Real} {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l u g) -> (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g)
-but is expected to have type
- forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {c : Real} {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u2, 0, u1} α Real F Real.norm _inst_2 c l u g) -> (Asymptotics.IsBigOWith.{u2, 0, u1} α Real F Real.norm _inst_2 c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.abs_left Asymptotics.IsBigOWith.abs_leftₓ'. -/
alias is_O_with_abs_left ↔ is_O_with.of_abs_left is_O_with.abs_left
#align asymptotics.is_O_with.of_abs_left Asymptotics.IsBigOWith.of_abs_left
#align asymptotics.is_O_with.abs_left Asymptotics.IsBigOWith.abs_left
-/- warning: asymptotics.is_O_norm_left -> Asymptotics.isBigO_norm_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g) (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, 0, u2} α Real F Real.norm _inst_2 l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g) (Asymptotics.IsBigO.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 l f' g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_norm_left Asymptotics.isBigO_norm_leftₓ'. -/
@[simp]
theorem isBigO_norm_left : (fun x => ‖f' x‖) =O[l] g ↔ f' =O[l] g := by unfold is_O;
exact exists_congr fun _ => is_O_with_norm_left
#align asymptotics.is_O_norm_left Asymptotics.isBigO_norm_left
-/- warning: asymptotics.is_O_abs_left -> Asymptotics.isBigO_abs_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g) (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l u g)
-but is expected to have type
- forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, Iff (Asymptotics.IsBigO.{u2, 0, u1} α Real F Real.norm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g) (Asymptotics.IsBigO.{u2, 0, u1} α Real F Real.norm _inst_2 l u g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_abs_left Asymptotics.isBigO_abs_leftₓ'. -/
@[simp]
theorem isBigO_abs_left : (fun x => |u x|) =O[l] g ↔ u =O[l] g :=
@isBigO_norm_left _ _ _ _ _ g u l
#align asymptotics.is_O_abs_left Asymptotics.isBigO_abs_left
-/- warning: asymptotics.is_O.of_norm_left -> Asymptotics.IsBigO.of_norm_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, 0, u2} α Real F Real.norm _inst_2 l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g) -> (Asymptotics.IsBigO.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 l f' g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_norm_left Asymptotics.IsBigO.of_norm_leftₓ'. -/
-/- warning: asymptotics.is_O.norm_left -> Asymptotics.IsBigO.norm_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsBigO.{u3, 0, u2} α Real F Real.norm _inst_2 l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.norm_left Asymptotics.IsBigO.norm_leftₓ'. -/
alias is_O_norm_left ↔ is_O.of_norm_left is_O.norm_left
#align asymptotics.is_O.of_norm_left Asymptotics.IsBigO.of_norm_left
#align asymptotics.is_O.norm_left Asymptotics.IsBigO.norm_left
-/- warning: asymptotics.is_O.of_abs_left -> Asymptotics.IsBigO.of_abs_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g) -> (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l u g)
-but is expected to have type
- forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigO.{u2, 0, u1} α Real F Real.norm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g) -> (Asymptotics.IsBigO.{u2, 0, u1} α Real F Real.norm _inst_2 l u g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_abs_left Asymptotics.IsBigO.of_abs_leftₓ'. -/
-/- warning: asymptotics.is_O.abs_left -> Asymptotics.IsBigO.abs_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l u g) -> (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g)
-but is expected to have type
- forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigO.{u2, 0, u1} α Real F Real.norm _inst_2 l u g) -> (Asymptotics.IsBigO.{u2, 0, u1} α Real F Real.norm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.abs_left Asymptotics.IsBigO.abs_leftₓ'. -/
alias is_O_abs_left ↔ is_O.of_abs_left is_O.abs_left
#align asymptotics.is_O.of_abs_left Asymptotics.IsBigO.of_abs_left
#align asymptotics.is_O.abs_left Asymptotics.IsBigO.abs_left
-/- warning: asymptotics.is_o_norm_left -> Asymptotics.isLittleO_norm_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g) (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, 0, u2} α Real F Real.norm _inst_2 l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g) (Asymptotics.IsLittleO.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 l f' g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_norm_left Asymptotics.isLittleO_norm_leftₓ'. -/
@[simp]
theorem isLittleO_norm_left : (fun x => ‖f' x‖) =o[l] g ↔ f' =o[l] g := by unfold is_o;
exact forall₂_congr fun _ _ => is_O_with_norm_left
#align asymptotics.is_o_norm_left Asymptotics.isLittleO_norm_left
-/- warning: asymptotics.is_o_abs_left -> Asymptotics.isLittleO_abs_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, Iff (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g) (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l u g)
-but is expected to have type
- forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, Iff (Asymptotics.IsLittleO.{u2, 0, u1} α Real F Real.norm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g) (Asymptotics.IsLittleO.{u2, 0, u1} α Real F Real.norm _inst_2 l u g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_abs_left Asymptotics.isLittleO_abs_leftₓ'. -/
@[simp]
theorem isLittleO_abs_left : (fun x => |u x|) =o[l] g ↔ u =o[l] g :=
@isLittleO_norm_left _ _ _ _ _ g u l
#align asymptotics.is_o_abs_left Asymptotics.isLittleO_abs_left
-/- warning: asymptotics.is_o.of_norm_left -> Asymptotics.IsLittleO.of_norm_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, 0, u2} α Real F Real.norm _inst_2 l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g) -> (Asymptotics.IsLittleO.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 l f' g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_norm_left Asymptotics.IsLittleO.of_norm_leftₓ'. -/
-/- warning: asymptotics.is_o.norm_left -> Asymptotics.IsLittleO.norm_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsLittleO.{u3, 0, u2} α Real F Real.norm _inst_2 l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.norm_left Asymptotics.IsLittleO.norm_leftₓ'. -/
alias is_o_norm_left ↔ is_o.of_norm_left is_o.norm_left
#align asymptotics.is_o.of_norm_left Asymptotics.IsLittleO.of_norm_left
#align asymptotics.is_o.norm_left Asymptotics.IsLittleO.norm_left
-/- warning: asymptotics.is_o.of_abs_left -> Asymptotics.IsLittleO.of_abs_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g) -> (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l u g)
-but is expected to have type
- forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u2, 0, u1} α Real F Real.norm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g) -> (Asymptotics.IsLittleO.{u2, 0, u1} α Real F Real.norm _inst_2 l u g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_abs_left Asymptotics.IsLittleO.of_abs_leftₓ'. -/
-/- warning: asymptotics.is_o.abs_left -> Asymptotics.IsLittleO.abs_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l u g) -> (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g)
-but is expected to have type
- forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u2, 0, u1} α Real F Real.norm _inst_2 l u g) -> (Asymptotics.IsLittleO.{u2, 0, u1} α Real F Real.norm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.abs_left Asymptotics.IsLittleO.abs_leftₓ'. -/
alias is_o_abs_left ↔ is_o.of_abs_left is_o.abs_left
#align asymptotics.is_o.of_abs_left Asymptotics.IsLittleO.of_abs_left
#align asymptotics.is_o.abs_left Asymptotics.IsLittleO.abs_left
-/- warning: asymptotics.is_O_with_norm_norm -> Asymptotics.isBigOWith_norm_norm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) (Asymptotics.IsBigOWith.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f' g')
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, 0, 0} α Real Real Real.norm Real.norm c l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f' g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_norm_norm Asymptotics.isBigOWith_norm_normₓ'. -/
theorem isBigOWith_norm_norm :
(IsBigOWith c l (fun x => ‖f' x‖) fun x => ‖g' x‖) ↔ IsBigOWith c l f' g' :=
isBigOWith_norm_left.trans isBigOWith_norm_right
#align asymptotics.is_O_with_norm_norm Asymptotics.isBigOWith_norm_norm
-/- warning: asymptotics.is_O_with_abs_abs -> Asymptotics.isBigOWith_abs_abs is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {c : Real} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, Iff (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x))) (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l u v)
-but is expected to have type
- forall {α : Type.{u1}} {c : Real} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, Iff (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.norm Real.norm c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x))) (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.norm Real.norm c l u v)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_abs_abs Asymptotics.isBigOWith_abs_absₓ'. -/
theorem isBigOWith_abs_abs :
(IsBigOWith c l (fun x => |u x|) fun x => |v x|) ↔ IsBigOWith c l u v :=
isBigOWith_abs_left.trans isBigOWith_abs_right
#align asymptotics.is_O_with_abs_abs Asymptotics.isBigOWith_abs_abs
-/- warning: asymptotics.is_O_with.of_norm_norm -> Asymptotics.IsBigOWith.of_norm_norm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f' g')
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, 0, 0} α Real Real Real.norm Real.norm c l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f' g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_norm_norm Asymptotics.IsBigOWith.of_norm_normₓ'. -/
-/- warning: asymptotics.is_O_with.norm_norm -> Asymptotics.IsBigOWith.norm_norm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f' g') -> (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f' g') -> (Asymptotics.IsBigOWith.{u3, 0, 0} α Real Real Real.norm Real.norm c l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.norm_norm Asymptotics.IsBigOWith.norm_normₓ'. -/
alias is_O_with_norm_norm ↔ is_O_with.of_norm_norm is_O_with.norm_norm
#align asymptotics.is_O_with.of_norm_norm Asymptotics.IsBigOWith.of_norm_norm
#align asymptotics.is_O_with.norm_norm Asymptotics.IsBigOWith.norm_norm
-/- warning: asymptotics.is_O_with.of_abs_abs -> Asymptotics.IsBigOWith.of_abs_abs is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {c : Real} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x))) -> (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l u v)
-but is expected to have type
- forall {α : Type.{u1}} {c : Real} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.norm Real.norm c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x))) -> (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.norm Real.norm c l u v)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_abs_abs Asymptotics.IsBigOWith.of_abs_absₓ'. -/
-/- warning: asymptotics.is_O_with.abs_abs -> Asymptotics.IsBigOWith.abs_abs is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {c : Real} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l u v) -> (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x)))
-but is expected to have type
- forall {α : Type.{u1}} {c : Real} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.norm Real.norm c l u v) -> (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.norm Real.norm c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.abs_abs Asymptotics.IsBigOWith.abs_absₓ'. -/
alias is_O_with_abs_abs ↔ is_O_with.of_abs_abs is_O_with.abs_abs
#align asymptotics.is_O_with.of_abs_abs Asymptotics.IsBigOWith.of_abs_abs
#align asymptotics.is_O_with.abs_abs Asymptotics.IsBigOWith.abs_abs
-/- warning: asymptotics.is_O_norm_norm -> Asymptotics.isBigO_norm_norm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) (Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g')
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) (Asymptotics.IsBigO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_norm_norm Asymptotics.isBigO_norm_normₓ'. -/
theorem isBigO_norm_norm : ((fun x => ‖f' x‖) =O[l] fun x => ‖g' x‖) ↔ f' =O[l] g' :=
isBigO_norm_left.trans isBigO_norm_right
#align asymptotics.is_O_norm_norm Asymptotics.isBigO_norm_norm
-/- warning: asymptotics.is_O_abs_abs -> Asymptotics.isBigO_abs_abs is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x))) (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l u v)
-but is expected to have type
- forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x))) (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.norm Real.norm l u v)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_abs_abs Asymptotics.isBigO_abs_absₓ'. -/
theorem isBigO_abs_abs : ((fun x => |u x|) =O[l] fun x => |v x|) ↔ u =O[l] v :=
isBigO_abs_left.trans isBigO_abs_right
#align asymptotics.is_O_abs_abs Asymptotics.isBigO_abs_abs
-/- warning: asymptotics.is_O.of_norm_norm -> Asymptotics.IsBigO.of_norm_norm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g')
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_norm_norm Asymptotics.IsBigO.of_norm_normₓ'. -/
-/- warning: asymptotics.is_O.norm_norm -> Asymptotics.IsBigO.norm_norm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g') -> (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g') -> (Asymptotics.IsBigO.{u3, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.norm_norm Asymptotics.IsBigO.norm_normₓ'. -/
alias is_O_norm_norm ↔ is_O.of_norm_norm is_O.norm_norm
#align asymptotics.is_O.of_norm_norm Asymptotics.IsBigO.of_norm_norm
#align asymptotics.is_O.norm_norm Asymptotics.IsBigO.norm_norm
-/- warning: asymptotics.is_O.of_abs_abs -> Asymptotics.IsBigO.of_abs_abs is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x))) -> (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l u v)
-but is expected to have type
- forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x))) -> (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.norm Real.norm l u v)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_abs_abs Asymptotics.IsBigO.of_abs_absₓ'. -/
-/- warning: asymptotics.is_O.abs_abs -> Asymptotics.IsBigO.abs_abs is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l u v) -> (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x)))
-but is expected to have type
- forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.norm Real.norm l u v) -> (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.abs_abs Asymptotics.IsBigO.abs_absₓ'. -/
alias is_O_abs_abs ↔ is_O.of_abs_abs is_O.abs_abs
#align asymptotics.is_O.of_abs_abs Asymptotics.IsBigO.of_abs_abs
#align asymptotics.is_O.abs_abs Asymptotics.IsBigO.abs_abs
-/- warning: asymptotics.is_o_norm_norm -> Asymptotics.isLittleO_norm_norm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g')
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_norm_norm Asymptotics.isLittleO_norm_normₓ'. -/
theorem isLittleO_norm_norm : ((fun x => ‖f' x‖) =o[l] fun x => ‖g' x‖) ↔ f' =o[l] g' :=
isLittleO_norm_left.trans isLittleO_norm_right
#align asymptotics.is_o_norm_norm Asymptotics.isLittleO_norm_norm
-/- warning: asymptotics.is_o_abs_abs -> Asymptotics.isLittleO_abs_abs is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, Iff (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x))) (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l u v)
-but is expected to have type
- forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, Iff (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x))) (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.norm Real.norm l u v)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_abs_abs Asymptotics.isLittleO_abs_absₓ'. -/
theorem isLittleO_abs_abs : ((fun x => |u x|) =o[l] fun x => |v x|) ↔ u =o[l] v :=
isLittleO_abs_left.trans isLittleO_abs_right
#align asymptotics.is_o_abs_abs Asymptotics.isLittleO_abs_abs
-/- warning: asymptotics.is_o.of_norm_norm -> Asymptotics.IsLittleO.of_norm_norm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g')
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_norm_norm Asymptotics.IsLittleO.of_norm_normₓ'. -/
-/- warning: asymptotics.is_o.norm_norm -> Asymptotics.IsLittleO.norm_norm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u3, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.norm_norm Asymptotics.IsLittleO.norm_normₓ'. -/
alias is_o_norm_norm ↔ is_o.of_norm_norm is_o.norm_norm
#align asymptotics.is_o.of_norm_norm Asymptotics.IsLittleO.of_norm_norm
#align asymptotics.is_o.norm_norm Asymptotics.IsLittleO.norm_norm
-/- warning: asymptotics.is_o.of_abs_abs -> Asymptotics.IsLittleO.of_abs_abs is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x))) -> (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l u v)
-but is expected to have type
- forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x))) -> (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.norm Real.norm l u v)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_abs_abs Asymptotics.IsLittleO.of_abs_absₓ'. -/
-/- warning: asymptotics.is_o.abs_abs -> Asymptotics.IsLittleO.abs_abs is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l u v) -> (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x)))
-but is expected to have type
- forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.norm Real.norm l u v) -> (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.abs_abs Asymptotics.IsLittleO.abs_absₓ'. -/
alias is_o_abs_abs ↔ is_o.of_abs_abs is_o.abs_abs
#align asymptotics.is_o.of_abs_abs Asymptotics.IsLittleO.of_abs_abs
#align asymptotics.is_o.abs_abs Asymptotics.IsLittleO.abs_abs
@@ -1746,164 +828,56 @@ end NormAbs
/-! ### Simplification: negate -/
-/- warning: asymptotics.is_O_with_neg_right -> Asymptotics.isBigOWith_neg_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x))) (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_neg_right Asymptotics.isBigOWith_neg_rightₓ'. -/
@[simp]
theorem isBigOWith_neg_right : (IsBigOWith c l f fun x => -g' x) ↔ IsBigOWith c l f g' := by
simp only [is_O_with, norm_neg]
#align asymptotics.is_O_with_neg_right Asymptotics.isBigOWith_neg_right
-/- warning: asymptotics.is_O_with.of_neg_right -> Asymptotics.IsBigOWith.of_neg_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x))) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_neg_right Asymptotics.IsBigOWith.of_neg_rightₓ'. -/
-/- warning: asymptotics.is_O_with.neg_right -> Asymptotics.IsBigOWith.neg_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x)))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g') -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.neg_right Asymptotics.IsBigOWith.neg_rightₓ'. -/
alias is_O_with_neg_right ↔ is_O_with.of_neg_right is_O_with.neg_right
#align asymptotics.is_O_with.of_neg_right Asymptotics.IsBigOWith.of_neg_right
#align asymptotics.is_O_with.neg_right Asymptotics.IsBigOWith.neg_right
-/- warning: asymptotics.is_O_neg_right -> Asymptotics.isBigO_neg_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x))) (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_neg_right Asymptotics.isBigO_neg_rightₓ'. -/
@[simp]
theorem isBigO_neg_right : (f =O[l] fun x => -g' x) ↔ f =O[l] g' := by unfold is_O;
exact exists_congr fun _ => is_O_with_neg_right
#align asymptotics.is_O_neg_right Asymptotics.isBigO_neg_right
-/- warning: asymptotics.is_O.of_neg_right -> Asymptotics.IsBigO.of_neg_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_neg_right Asymptotics.IsBigO.of_neg_rightₓ'. -/
-/- warning: asymptotics.is_O.neg_right -> Asymptotics.IsBigO.neg_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x)))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.neg_right Asymptotics.IsBigO.neg_rightₓ'. -/
alias is_O_neg_right ↔ is_O.of_neg_right is_O.neg_right
#align asymptotics.is_O.of_neg_right Asymptotics.IsBigO.of_neg_right
#align asymptotics.is_O.neg_right Asymptotics.IsBigO.neg_right
-/- warning: asymptotics.is_o_neg_right -> Asymptotics.isLittleO_neg_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x))) (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_neg_right Asymptotics.isLittleO_neg_rightₓ'. -/
@[simp]
theorem isLittleO_neg_right : (f =o[l] fun x => -g' x) ↔ f =o[l] g' := by unfold is_o;
exact forall₂_congr fun _ _ => is_O_with_neg_right
#align asymptotics.is_o_neg_right Asymptotics.isLittleO_neg_right
-/- warning: asymptotics.is_o.of_neg_right -> Asymptotics.IsLittleO.of_neg_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x))) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_neg_right Asymptotics.IsLittleO.of_neg_rightₓ'. -/
-/- warning: asymptotics.is_o.neg_right -> Asymptotics.IsLittleO.neg_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x)))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.neg_right Asymptotics.IsLittleO.neg_rightₓ'. -/
alias is_o_neg_right ↔ is_o.of_neg_right is_o.neg_right
#align asymptotics.is_o.of_neg_right Asymptotics.IsLittleO.of_neg_right
#align asymptotics.is_o.neg_right Asymptotics.IsLittleO.neg_right
-/- warning: asymptotics.is_O_with_neg_left -> Asymptotics.isBigOWith_neg_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g) (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l f' g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g) (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l f' g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_neg_left Asymptotics.isBigOWith_neg_leftₓ'. -/
@[simp]
theorem isBigOWith_neg_left : IsBigOWith c l (fun x => -f' x) g ↔ IsBigOWith c l f' g := by
simp only [is_O_with, norm_neg]
#align asymptotics.is_O_with_neg_left Asymptotics.isBigOWith_neg_left
-/- warning: asymptotics.is_O_with.of_neg_left -> Asymptotics.IsBigOWith.of_neg_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l f' g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l f' g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_neg_left Asymptotics.IsBigOWith.of_neg_leftₓ'. -/
-/- warning: asymptotics.is_O_with.neg_left -> Asymptotics.IsBigOWith.neg_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l f' g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l f' g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.neg_left Asymptotics.IsBigOWith.neg_leftₓ'. -/
alias is_O_with_neg_left ↔ is_O_with.of_neg_left is_O_with.neg_left
#align asymptotics.is_O_with.of_neg_left Asymptotics.IsBigOWith.of_neg_left
#align asymptotics.is_O_with.neg_left Asymptotics.IsBigOWith.neg_left
-/- warning: asymptotics.is_O_neg_left -> Asymptotics.isBigO_neg_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g) (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g) (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_neg_left Asymptotics.isBigO_neg_leftₓ'. -/
@[simp]
theorem isBigO_neg_left : (fun x => -f' x) =O[l] g ↔ f' =O[l] g := by unfold is_O;
exact exists_congr fun _ => is_O_with_neg_left
#align asymptotics.is_O_neg_left Asymptotics.isBigO_neg_left
-/- warning: asymptotics.is_O.of_neg_left -> Asymptotics.IsBigO.of_neg_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_neg_left Asymptotics.IsBigO.of_neg_leftₓ'. -/
-/- warning: asymptotics.is_O.neg_left -> Asymptotics.IsBigO.neg_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.neg_left Asymptotics.IsBigO.neg_leftₓ'. -/
alias is_O_neg_left ↔ is_O.of_neg_left is_O.neg_left
#align asymptotics.is_O.of_neg_left Asymptotics.IsBigO.of_neg_left
#align asymptotics.is_O.neg_left Asymptotics.IsBigO.neg_left
-/- warning: asymptotics.is_o_neg_left -> Asymptotics.isLittleO_neg_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g) (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g) (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_neg_left Asymptotics.isLittleO_neg_leftₓ'. -/
@[simp]
theorem isLittleO_neg_left : (fun x => -f' x) =o[l] g ↔ f' =o[l] g := by unfold is_o;
exact forall₂_congr fun _ _ => is_O_with_neg_left
#align asymptotics.is_o_neg_left Asymptotics.isLittleO_neg_left
-/- warning: asymptotics.is_o.of_neg_right -> Asymptotics.IsLittleO.of_neg_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x))) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_neg_right Asymptotics.IsLittleO.of_neg_rightₓ'. -/
-/- warning: asymptotics.is_o.neg_left -> Asymptotics.IsLittleO.neg_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.neg_left Asymptotics.IsLittleO.neg_leftₓ'. -/
alias is_o_neg_left ↔ is_o.of_neg_right is_o.neg_left
#align asymptotics.is_o.of_neg_right Asymptotics.IsLittleO.of_neg_right
#align asymptotics.is_o.neg_left Asymptotics.IsLittleO.neg_left
@@ -1911,62 +885,26 @@ alias is_o_neg_left ↔ is_o.of_neg_right is_o.neg_left
/-! ### Product of functions (right) -/
-/- warning: asymptotics.is_O_with_fst_prod -> Asymptotics.isBigOWith_fst_prod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, Asymptotics.IsBigOWith.{u1, u2, max u2 u3} α E' (Prod.{u2, u3} E' F') (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) l f' (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x))
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, Asymptotics.IsBigOWith.{u3, u2, max u1 u2} α E' (Prod.{u2, u1} E' F') (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (Prod.toNorm.{u2, u1} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) l f' (fun (x : α) => Prod.mk.{u2, u1} E' F' (f' x) (g' x))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_fst_prod Asymptotics.isBigOWith_fst_prodₓ'. -/
theorem isBigOWith_fst_prod : IsBigOWith 1 l f' fun x => (f' x, g' x) :=
isBigOWith_of_le l fun x => le_max_left _ _
#align asymptotics.is_O_with_fst_prod Asymptotics.isBigOWith_fst_prod
-/- warning: asymptotics.is_O_with_snd_prod -> Asymptotics.isBigOWith_snd_prod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, Asymptotics.IsBigOWith.{u1, u3, max u2 u3} α F' (Prod.{u2, u3} E' F') (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) l g' (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x))
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u1}} {F' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, Asymptotics.IsBigOWith.{u3, u2, max u2 u1} α F' (Prod.{u1, u2} E' F') (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (Prod.toNorm.{u1, u2} E' F' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) l g' (fun (x : α) => Prod.mk.{u1, u2} E' F' (f' x) (g' x))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_snd_prod Asymptotics.isBigOWith_snd_prodₓ'. -/
theorem isBigOWith_snd_prod : IsBigOWith 1 l g' fun x => (f' x, g' x) :=
isBigOWith_of_le l fun x => le_max_right _ _
#align asymptotics.is_O_with_snd_prod Asymptotics.isBigOWith_snd_prod
-/- warning: asymptotics.is_O_fst_prod -> Asymptotics.isBigO_fst_prod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, Asymptotics.IsBigO.{u1, u2, max u2 u3} α E' (Prod.{u2, u3} E' F') (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) l f' (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x))
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, Asymptotics.IsBigO.{u3, u2, max u1 u2} α E' (Prod.{u2, u1} E' F') (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (Prod.toNorm.{u2, u1} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5)) l f' (fun (x : α) => Prod.mk.{u2, u1} E' F' (f' x) (g' x))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_fst_prod Asymptotics.isBigO_fst_prodₓ'. -/
theorem isBigO_fst_prod : f' =O[l] fun x => (f' x, g' x) :=
isBigOWith_fst_prod.IsBigO
#align asymptotics.is_O_fst_prod Asymptotics.isBigO_fst_prod
-/- warning: asymptotics.is_O_snd_prod -> Asymptotics.isBigO_snd_prod is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, Asymptotics.IsBigO.{u1, u3, max u2 u3} α F' (Prod.{u2, u3} E' F') (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) l g' (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x))
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u1}} {F' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, Asymptotics.IsBigO.{u3, u2, max u2 u1} α F' (Prod.{u1, u2} E' F') (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (Prod.toNorm.{u1, u2} E' F' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5)) l g' (fun (x : α) => Prod.mk.{u1, u2} E' F' (f' x) (g' x))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_snd_prod Asymptotics.isBigO_snd_prodₓ'. -/
theorem isBigO_snd_prod : g' =O[l] fun x => (f' x, g' x) :=
isBigOWith_snd_prod.IsBigO
#align asymptotics.is_O_snd_prod Asymptotics.isBigO_snd_prod
-/- warning: asymptotics.is_O_fst_prod' -> Asymptotics.isBigO_fst_prod' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {l : Filter.{u1} α} {f' : α -> (Prod.{u2, u3} E' F')}, Asymptotics.IsBigO.{u1, u2, max u2 u3} α E' (Prod.{u2, u3} E' F') (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) l (fun (x : α) => Prod.fst.{u2, u3} E' F' (f' x)) f'
-but is expected to have type
- forall {α : Type.{u1}} {E' : Type.{u3}} {F' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {l : Filter.{u1} α} {f' : α -> (Prod.{u3, u2} E' F')}, Asymptotics.IsBigO.{u1, u3, max u3 u2} α E' (Prod.{u3, u2} E' F') (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (Prod.toNorm.{u3, u2} E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5)) l (fun (x : α) => Prod.fst.{u3, u2} E' F' (f' x)) f'
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_fst_prod' Asymptotics.isBigO_fst_prod'ₓ'. -/
theorem isBigO_fst_prod' {f' : α → E' × F'} : (fun x => (f' x).1) =O[l] f' := by
simpa [is_O, is_O_with] using is_O_fst_prod
#align asymptotics.is_O_fst_prod' Asymptotics.isBigO_fst_prod'
-/- warning: asymptotics.is_O_snd_prod' -> Asymptotics.isBigO_snd_prod' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {l : Filter.{u1} α} {f' : α -> (Prod.{u2, u3} E' F')}, Asymptotics.IsBigO.{u1, u3, max u2 u3} α F' (Prod.{u2, u3} E' F') (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) l (fun (x : α) => Prod.snd.{u2, u3} E' F' (f' x)) f'
-but is expected to have type
- forall {α : Type.{u1}} {E' : Type.{u3}} {F' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {l : Filter.{u1} α} {f' : α -> (Prod.{u3, u2} E' F')}, Asymptotics.IsBigO.{u1, u2, max u3 u2} α F' (Prod.{u3, u2} E' F') (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (Prod.toNorm.{u3, u2} E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5)) l (fun (x : α) => Prod.snd.{u3, u2} E' F' (f' x)) f'
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_snd_prod' Asymptotics.isBigO_snd_prod'ₓ'. -/
theorem isBigO_snd_prod' {f' : α → E' × F'} : (fun x => (f' x).2) =O[l] f' := by
simpa [is_O, is_O_with] using is_O_snd_prod
#align asymptotics.is_O_snd_prod' Asymptotics.isBigO_snd_prod'
@@ -1975,229 +913,103 @@ section
variable (f' k')
-/- warning: asymptotics.is_O_with.prod_rightl -> Asymptotics.IsBigOWith.prod_rightl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {c : Real} {f : α -> E} {g' : α -> F'} (k' : α -> G') {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, max u3 u4} α E (Prod.{u3, u4} F' G') _inst_1 (Prod.hasNorm.{u3, u4} F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6)) c l f (fun (x : α) => Prod.mk.{u3, u4} F' G' (g' x) (k' x)))
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {F' : Type.{u2}} {G' : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {c : Real} {f : α -> E} {g' : α -> F'} (k' : α -> G') {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) c l f g') -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u4, u3, max u1 u2} α E (Prod.{u2, u1} F' G') _inst_1 (Prod.toNorm.{u2, u1} F' G' (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6)) c l f (fun (x : α) => Prod.mk.{u2, u1} F' G' (g' x) (k' x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.prod_rightl Asymptotics.IsBigOWith.prod_rightlₓ'. -/
theorem IsBigOWith.prod_rightl (h : IsBigOWith c l f g') (hc : 0 ≤ c) :
IsBigOWith c l f fun x => (g' x, k' x) :=
(h.trans isBigOWith_fst_prod hc).congr_const (mul_one c)
#align asymptotics.is_O_with.prod_rightl Asymptotics.IsBigOWith.prod_rightl
-/- warning: asymptotics.is_O.prod_rightl -> Asymptotics.IsBigO.prod_rightl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f : α -> E} {g' : α -> F'} (k' : α -> G') {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u1, u2, max u3 u4} α E (Prod.{u3, u4} F' G') _inst_1 (Prod.hasNorm.{u3, u4} F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6)) l f (fun (x : α) => Prod.mk.{u3, u4} F' G' (g' x) (k' x)))
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {F' : Type.{u2}} {G' : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f : α -> E} {g' : α -> F'} (k' : α -> G') {l : Filter.{u4} α}, (Asymptotics.IsBigO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u4, u3, max u1 u2} α E (Prod.{u2, u1} F' G') _inst_1 (Prod.toNorm.{u2, u1} F' G' (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6)) l f (fun (x : α) => Prod.mk.{u2, u1} F' G' (g' x) (k' x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.prod_rightl Asymptotics.IsBigO.prod_rightlₓ'. -/
theorem IsBigO.prod_rightl (h : f =O[l] g') : f =O[l] fun x => (g' x, k' x) :=
let ⟨c, cnonneg, hc⟩ := h.exists_nonneg
(hc.prod_rightl k' cnonneg).IsBigO
#align asymptotics.is_O.prod_rightl Asymptotics.IsBigO.prod_rightl
-/- warning: asymptotics.is_o.prod_rightl -> Asymptotics.IsLittleO.prod_rightl is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f : α -> E} {g' : α -> F'} (k' : α -> G') {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u1, u2, max u3 u4} α E (Prod.{u3, u4} F' G') _inst_1 (Prod.hasNorm.{u3, u4} F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6)) l f (fun (x : α) => Prod.mk.{u3, u4} F' G' (g' x) (k' x)))
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {F' : Type.{u2}} {G' : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f : α -> E} {g' : α -> F'} (k' : α -> G') {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u4, u3, max u1 u2} α E (Prod.{u2, u1} F' G') _inst_1 (Prod.toNorm.{u2, u1} F' G' (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6)) l f (fun (x : α) => Prod.mk.{u2, u1} F' G' (g' x) (k' x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.prod_rightl Asymptotics.IsLittleO.prod_rightlₓ'. -/
theorem IsLittleO.prod_rightl (h : f =o[l] g') : f =o[l] fun x => (g' x, k' x) :=
IsLittleO.of_isBigOWith fun c cpos => (h.forall_isBigOWith cpos).prod_rightl k' cpos.le
#align asymptotics.is_o.prod_rightl Asymptotics.IsLittleO.prod_rightl
-/- warning: asymptotics.is_O_with.prod_rightr -> Asymptotics.IsBigOWith.prod_rightr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {E' : Type.{u3}} {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {c : Real} {f : α -> E} (f' : α -> E') {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u4} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) c l f g') -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, max u3 u4} α E (Prod.{u3, u4} E' F') _inst_1 (Prod.hasNorm.{u3, u4} E' F' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5)) c l f (fun (x : α) => Prod.mk.{u3, u4} E' F' (f' x) (g' x)))
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {E' : Type.{u1}} {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {c : Real} {f : α -> E} (f' : α -> E') {g' : α -> F'} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) c l f g') -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u4, u3, max u2 u1} α E (Prod.{u1, u2} E' F') _inst_1 (Prod.toNorm.{u1, u2} E' F' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5)) c l f (fun (x : α) => Prod.mk.{u1, u2} E' F' (f' x) (g' x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.prod_rightr Asymptotics.IsBigOWith.prod_rightrₓ'. -/
theorem IsBigOWith.prod_rightr (h : IsBigOWith c l f g') (hc : 0 ≤ c) :
IsBigOWith c l f fun x => (f' x, g' x) :=
(h.trans isBigOWith_snd_prod hc).congr_const (mul_one c)
#align asymptotics.is_O_with.prod_rightr Asymptotics.IsBigOWith.prod_rightr
-/- warning: asymptotics.is_O.prod_rightr -> Asymptotics.IsBigO.prod_rightr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {E' : Type.{u3}} {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {f : α -> E} (f' : α -> E') {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u4} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u1, u2, max u3 u4} α E (Prod.{u3, u4} E' F') _inst_1 (Prod.hasNorm.{u3, u4} E' F' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5)) l f (fun (x : α) => Prod.mk.{u3, u4} E' F' (f' x) (g' x)))
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {E' : Type.{u1}} {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {f : α -> E} (f' : α -> E') {g' : α -> F'} {l : Filter.{u4} α}, (Asymptotics.IsBigO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u4, u3, max u2 u1} α E (Prod.{u1, u2} E' F') _inst_1 (Prod.toNorm.{u1, u2} E' F' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5)) l f (fun (x : α) => Prod.mk.{u1, u2} E' F' (f' x) (g' x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.prod_rightr Asymptotics.IsBigO.prod_rightrₓ'. -/
theorem IsBigO.prod_rightr (h : f =O[l] g') : f =O[l] fun x => (f' x, g' x) :=
let ⟨c, cnonneg, hc⟩ := h.exists_nonneg
(hc.prod_rightr f' cnonneg).IsBigO
#align asymptotics.is_O.prod_rightr Asymptotics.IsBigO.prod_rightr
-/- warning: asymptotics.is_o.prod_rightr -> Asymptotics.IsLittleO.prod_rightr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {E' : Type.{u3}} {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {f : α -> E} (f' : α -> E') {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u4} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u1, u2, max u3 u4} α E (Prod.{u3, u4} E' F') _inst_1 (Prod.hasNorm.{u3, u4} E' F' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5)) l f (fun (x : α) => Prod.mk.{u3, u4} E' F' (f' x) (g' x)))
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} {E' : Type.{u1}} {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {f : α -> E} (f' : α -> E') {g' : α -> F'} {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u4, u3, max u2 u1} α E (Prod.{u1, u2} E' F') _inst_1 (Prod.toNorm.{u1, u2} E' F' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5)) l f (fun (x : α) => Prod.mk.{u1, u2} E' F' (f' x) (g' x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.prod_rightr Asymptotics.IsLittleO.prod_rightrₓ'. -/
theorem IsLittleO.prod_rightr (h : f =o[l] g') : f =o[l] fun x => (f' x, g' x) :=
IsLittleO.of_isBigOWith fun c cpos => (h.forall_isBigOWith cpos).prod_rightr f' cpos.le
#align asymptotics.is_o.prod_rightr Asymptotics.IsLittleO.prod_rightr
end
-/- warning: asymptotics.is_O_with.prod_left_same -> Asymptotics.IsBigOWith.prod_left_same is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l f' k') -> (Asymptotics.IsBigOWith.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l g' k') -> (Asymptotics.IsBigOWith.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k')
-but is expected to have type
- forall {α : Type.{u4}} {E' : Type.{u3}} {F' : Type.{u1}} {G' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_6 : SeminormedAddCommGroup.{u2} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E' G' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) c l f' k') -> (Asymptotics.IsBigOWith.{u4, u1, u2} α F' G' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) c l g' k') -> (Asymptotics.IsBigOWith.{u4, max u1 u3, u2} α (Prod.{u3, u1} E' F') G' (Prod.toNorm.{u3, u1} E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) c l (fun (x : α) => Prod.mk.{u3, u1} E' F' (f' x) (g' x)) k')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.prod_left_same Asymptotics.IsBigOWith.prod_left_sameₓ'. -/
theorem IsBigOWith.prod_left_same (hf : IsBigOWith c l f' k') (hg : IsBigOWith c l g' k') :
IsBigOWith c l (fun x => (f' x, g' x)) k' := by
rw [is_O_with_iff] at * <;> filter_upwards [hf, hg]with x using max_le
#align asymptotics.is_O_with.prod_left_same Asymptotics.IsBigOWith.prod_left_same
-/- warning: asymptotics.is_O_with.prod_left -> Asymptotics.IsBigOWith.prod_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {c : Real} {c' : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l f' k') -> (Asymptotics.IsBigOWith.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c' l g' k') -> (Asymptotics.IsBigOWith.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) (LinearOrder.max.{0} Real Real.linearOrder c c') l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k')
-but is expected to have type
- forall {α : Type.{u4}} {E' : Type.{u3}} {F' : Type.{u1}} {G' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_6 : SeminormedAddCommGroup.{u2} G'] {c : Real} {c' : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E' G' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) c l f' k') -> (Asymptotics.IsBigOWith.{u4, u1, u2} α F' G' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) c' l g' k') -> (Asymptotics.IsBigOWith.{u4, max u1 u3, u2} α (Prod.{u3, u1} E' F') G' (Prod.toNorm.{u3, u1} E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) c c') l (fun (x : α) => Prod.mk.{u3, u1} E' F' (f' x) (g' x)) k')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.prod_left Asymptotics.IsBigOWith.prod_leftₓ'. -/
theorem IsBigOWith.prod_left (hf : IsBigOWith c l f' k') (hg : IsBigOWith c' l g' k') :
IsBigOWith (max c c') l (fun x => (f' x, g' x)) k' :=
(hf.weaken <| le_max_left c c').prod_left_same (hg.weaken <| le_max_right c c')
#align asymptotics.is_O_with.prod_left Asymptotics.IsBigOWith.prod_left
-/- warning: asymptotics.is_O_with.prod_left_fst -> Asymptotics.IsBigOWith.prod_left_fst is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigOWith.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l f' k')
-but is expected to have type
- forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) c l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigOWith.{u4, u2, u1} α E' G' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) c l f' k')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.prod_left_fst Asymptotics.IsBigOWith.prod_left_fstₓ'. -/
theorem IsBigOWith.prod_left_fst (h : IsBigOWith c l (fun x => (f' x, g' x)) k') :
IsBigOWith c l f' k' :=
(isBigOWith_fst_prod.trans h zero_le_one).congr_const <| one_mul c
#align asymptotics.is_O_with.prod_left_fst Asymptotics.IsBigOWith.prod_left_fst
-/- warning: asymptotics.is_O_with.prod_left_snd -> Asymptotics.IsBigOWith.prod_left_snd is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigOWith.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l g' k')
-but is expected to have type
- forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) c l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigOWith.{u4, u3, u1} α F' G' (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) c l g' k')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.prod_left_snd Asymptotics.IsBigOWith.prod_left_sndₓ'. -/
theorem IsBigOWith.prod_left_snd (h : IsBigOWith c l (fun x => (f' x, g' x)) k') :
IsBigOWith c l g' k' :=
(isBigOWith_snd_prod.trans h zero_le_one).congr_const <| one_mul c
#align asymptotics.is_O_with.prod_left_snd Asymptotics.IsBigOWith.prod_left_snd
-/- warning: asymptotics.is_O_with_prod_left -> Asymptotics.isBigOWith_prod_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') (And (Asymptotics.IsBigOWith.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l f' k') (Asymptotics.IsBigOWith.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l g' k'))
-but is expected to have type
- forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, Iff (Asymptotics.IsBigOWith.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) c l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') (And (Asymptotics.IsBigOWith.{u4, u2, u1} α E' G' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) c l f' k') (Asymptotics.IsBigOWith.{u4, u3, u1} α F' G' (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) c l g' k'))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_prod_left Asymptotics.isBigOWith_prod_leftₓ'. -/
theorem isBigOWith_prod_left :
IsBigOWith c l (fun x => (f' x, g' x)) k' ↔ IsBigOWith c l f' k' ∧ IsBigOWith c l g' k' :=
⟨fun h => ⟨h.prod_left_fst, h.prod_left_snd⟩, fun h => h.1.prod_left_same h.2⟩
#align asymptotics.is_O_with_prod_left Asymptotics.isBigOWith_prod_left
-/- warning: asymptotics.is_O.prod_left -> Asymptotics.IsBigO.prod_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l f' k') -> (Asymptotics.IsBigO.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l g' k') -> (Asymptotics.IsBigO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k')
-but is expected to have type
- forall {α : Type.{u4}} {E' : Type.{u3}} {F' : Type.{u1}} {G' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_6 : SeminormedAddCommGroup.{u2} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsBigO.{u4, u3, u2} α E' G' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) l f' k') -> (Asymptotics.IsBigO.{u4, u1, u2} α F' G' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) l g' k') -> (Asymptotics.IsBigO.{u4, max u1 u3, u2} α (Prod.{u3, u1} E' F') G' (Prod.toNorm.{u3, u1} E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) l (fun (x : α) => Prod.mk.{u3, u1} E' F' (f' x) (g' x)) k')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.prod_left Asymptotics.IsBigO.prod_leftₓ'. -/
theorem IsBigO.prod_left (hf : f' =O[l] k') (hg : g' =O[l] k') : (fun x => (f' x, g' x)) =O[l] k' :=
let ⟨c, hf⟩ := hf.IsBigOWith
let ⟨c', hg⟩ := hg.IsBigOWith
(hf.prodLeft hg).IsBigO
#align asymptotics.is_O.prod_left Asymptotics.IsBigO.prod_left
-/- warning: asymptotics.is_O.prod_left_fst -> Asymptotics.IsBigO.prod_left_fst is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigO.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l f' k')
-but is expected to have type
- forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsBigO.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigO.{u4, u2, u1} α E' G' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l f' k')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.prod_left_fst Asymptotics.IsBigO.prod_left_fstₓ'. -/
theorem IsBigO.prod_left_fst : (fun x => (f' x, g' x)) =O[l] k' → f' =O[l] k' :=
IsBigO.trans isBigO_fst_prod
#align asymptotics.is_O.prod_left_fst Asymptotics.IsBigO.prod_left_fst
-/- warning: asymptotics.is_O.prod_left_snd -> Asymptotics.IsBigO.prod_left_snd is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigO.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l g' k')
-but is expected to have type
- forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsBigO.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigO.{u4, u3, u1} α F' G' (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l g' k')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.prod_left_snd Asymptotics.IsBigO.prod_left_sndₓ'. -/
theorem IsBigO.prod_left_snd : (fun x => (f' x, g' x)) =O[l] k' → g' =O[l] k' :=
IsBigO.trans isBigO_snd_prod
#align asymptotics.is_O.prod_left_snd Asymptotics.IsBigO.prod_left_snd
-/- warning: asymptotics.is_O_prod_left -> Asymptotics.isBigO_prod_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') (And (Asymptotics.IsBigO.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l f' k') (Asymptotics.IsBigO.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l g' k'))
-but is expected to have type
- forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, Iff (Asymptotics.IsBigO.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') (And (Asymptotics.IsBigO.{u4, u2, u1} α E' G' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l f' k') (Asymptotics.IsBigO.{u4, u3, u1} α F' G' (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l g' k'))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_prod_left Asymptotics.isBigO_prod_leftₓ'. -/
@[simp]
theorem isBigO_prod_left : (fun x => (f' x, g' x)) =O[l] k' ↔ f' =O[l] k' ∧ g' =O[l] k' :=
⟨fun h => ⟨h.prod_left_fst, h.prod_left_snd⟩, fun h => h.1.prodLeft h.2⟩
#align asymptotics.is_O_prod_left Asymptotics.isBigO_prod_left
-/- warning: asymptotics.is_o.prod_left -> Asymptotics.IsLittleO.prod_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l f' k') -> (Asymptotics.IsLittleO.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l g' k') -> (Asymptotics.IsLittleO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k')
-but is expected to have type
- forall {α : Type.{u4}} {E' : Type.{u3}} {F' : Type.{u1}} {G' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_6 : SeminormedAddCommGroup.{u2} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, u3, u2} α E' G' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) l f' k') -> (Asymptotics.IsLittleO.{u4, u1, u2} α F' G' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) l g' k') -> (Asymptotics.IsLittleO.{u4, max u1 u3, u2} α (Prod.{u3, u1} E' F') G' (Prod.toNorm.{u3, u1} E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) l (fun (x : α) => Prod.mk.{u3, u1} E' F' (f' x) (g' x)) k')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.prod_left Asymptotics.IsLittleO.prod_leftₓ'. -/
theorem IsLittleO.prod_left (hf : f' =o[l] k') (hg : g' =o[l] k') :
(fun x => (f' x, g' x)) =o[l] k' :=
IsLittleO.of_isBigOWith fun c hc =>
(hf.forall_isBigOWith hc).prod_left_same (hg.forall_isBigOWith hc)
#align asymptotics.is_o.prod_left Asymptotics.IsLittleO.prod_left
-/- warning: asymptotics.is_o.prod_left_fst -> Asymptotics.IsLittleO.prod_left_fst is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsLittleO.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l f' k')
-but is expected to have type
- forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsLittleO.{u4, u2, u1} α E' G' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l f' k')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.prod_left_fst Asymptotics.IsLittleO.prod_left_fstₓ'. -/
theorem IsLittleO.prod_left_fst : (fun x => (f' x, g' x)) =o[l] k' → f' =o[l] k' :=
IsBigO.trans_isLittleO isBigO_fst_prod
#align asymptotics.is_o.prod_left_fst Asymptotics.IsLittleO.prod_left_fst
-/- warning: asymptotics.is_o.prod_left_snd -> Asymptotics.IsLittleO.prod_left_snd is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsLittleO.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l g' k')
-but is expected to have type
- forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsLittleO.{u4, u3, u1} α F' G' (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l g' k')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.prod_left_snd Asymptotics.IsLittleO.prod_left_sndₓ'. -/
theorem IsLittleO.prod_left_snd : (fun x => (f' x, g' x)) =o[l] k' → g' =o[l] k' :=
IsBigO.trans_isLittleO isBigO_snd_prod
#align asymptotics.is_o.prod_left_snd Asymptotics.IsLittleO.prod_left_snd
-/- warning: asymptotics.is_o_prod_left -> Asymptotics.isLittleO_prod_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') (And (Asymptotics.IsLittleO.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l f' k') (Asymptotics.IsLittleO.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l g' k'))
-but is expected to have type
- forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, Iff (Asymptotics.IsLittleO.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') (And (Asymptotics.IsLittleO.{u4, u2, u1} α E' G' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l f' k') (Asymptotics.IsLittleO.{u4, u3, u1} α F' G' (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l g' k'))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_prod_left Asymptotics.isLittleO_prod_leftₓ'. -/
@[simp]
theorem isLittleO_prod_left : (fun x => (f' x, g' x)) =o[l] k' ↔ f' =o[l] k' ∧ g' =o[l] k' :=
⟨fun h => ⟨h.prod_left_fst, h.prod_left_snd⟩, fun h => h.1.prodLeft h.2⟩
#align asymptotics.is_o_prod_left Asymptotics.isLittleO_prod_left
-/- warning: asymptotics.is_O_with.eq_zero_imp -> Asymptotics.IsBigOWith.eq_zero_imp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {c : Real} {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) c l f'' g'') -> (Filter.Eventually.{u1} α (fun (x : α) => (Eq.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))))))))) l)
-but is expected to have type
- forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {c : Real} {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) c l f'' g'') -> (Filter.Eventually.{u3} α (fun (x : α) => (Eq.{succ u1} F'' (g'' x) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7)))))))))) l)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.eq_zero_imp Asymptotics.IsBigOWith.eq_zero_impₓ'. -/
theorem IsBigOWith.eq_zero_imp (h : IsBigOWith c l f'' g'') : ∀ᶠ x in l, g'' x = 0 → f'' x = 0 :=
Eventually.mono h.bound fun x hx hg => norm_le_zero_iff.1 <| by simpa [hg] using hx
#align asymptotics.is_O_with.eq_zero_imp Asymptotics.IsBigOWith.eq_zero_imp
-/- warning: asymptotics.is_O.eq_zero_imp -> Asymptotics.IsBigO.eq_zero_imp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f'' g'') -> (Filter.Eventually.{u1} α (fun (x : α) => (Eq.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))))))))) l)
-but is expected to have type
- forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' g'') -> (Filter.Eventually.{u3} α (fun (x : α) => (Eq.{succ u1} F'' (g'' x) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7)))))))))) l)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.eq_zero_imp Asymptotics.IsBigO.eq_zero_impₓ'. -/
theorem IsBigO.eq_zero_imp (h : f'' =O[l] g'') : ∀ᶠ x in l, g'' x = 0 → f'' x = 0 :=
let ⟨C, hC⟩ := h.IsBigOWith
hC.eq_zero_imp
@@ -2210,12 +1022,6 @@ section add_sub
variable {f₁ f₂ : α → E'} {g₁ g₂ : α → F'}
-/- warning: asymptotics.is_O_with.add -> Asymptotics.IsBigOWith.add is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₂ l f₂ g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) c₁ c₂) l (fun (x : α) => HAdd.hAdd.{u3, u3, u3} E' E' E' (instHAdd.{u3} E' (AddZeroClass.toHasAdd.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₂ l f₂ g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) c₁ c₂) l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.add Asymptotics.IsBigOWith.addₓ'. -/
theorem IsBigOWith.add (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : IsBigOWith c₂ l f₂ g) :
IsBigOWith (c₁ + c₂) l (fun x => f₁ x + f₂ x) g := by
rw [is_O_with] at * <;>
@@ -2226,24 +1032,12 @@ theorem IsBigOWith.add (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : IsBigOWith c₂
#align asymptotics.is_O_with.add Asymptotics.IsBigOWith.add
-/- warning: asymptotics.is_O.add -> Asymptotics.IsBigO.add is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u3, u3, u3} E' E' E' (instHAdd.{u3} E' (AddZeroClass.toHasAdd.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.add Asymptotics.IsBigO.addₓ'. -/
theorem IsBigO.add (h₁ : f₁ =O[l] g) (h₂ : f₂ =O[l] g) : (fun x => f₁ x + f₂ x) =O[l] g :=
let ⟨c₁, hc₁⟩ := h₁.IsBigOWith
let ⟨c₂, hc₂⟩ := h₂.IsBigOWith
(hc₁.add hc₂).IsBigO
#align asymptotics.is_O.add Asymptotics.IsBigO.add
-/- warning: asymptotics.is_o.add -> Asymptotics.IsLittleO.add is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u3, u3, u3} E' E' E' (instHAdd.{u3} E' (AddZeroClass.toHasAdd.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.add Asymptotics.IsLittleO.addₓ'. -/
theorem IsLittleO.add (h₁ : f₁ =o[l] g) (h₂ : f₂ =o[l] g) : (fun x => f₁ x + f₂ x) =o[l] g :=
IsLittleO.of_isBigOWith fun c cpos =>
((h₁.forall_isBigOWith <| half_pos cpos).add
@@ -2251,97 +1045,43 @@ theorem IsLittleO.add (h₁ : f₁ =o[l] g) (h₂ : f₂ =o[l] g) : (fun x => f
(add_halves c)
#align asymptotics.is_o.add Asymptotics.IsLittleO.add
-/- warning: asymptotics.is_o.add_add -> Asymptotics.IsLittleO.add_add is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'} {g₁ : α -> F'} {g₂ : α -> F'}, (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f₁ g₁) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f₂ g₂) -> (Asymptotics.IsLittleO.{u1, u2, 0} α E' Real (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) Real.hasNorm l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toHasAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) (fun (x : α) => HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g₁ x)) (Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g₂ x))))
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'} {g₁ : α -> F'} {g₂ : α -> F'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f₁ g₁) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f₂ g₂) -> (Asymptotics.IsLittleO.{u3, u2, 0} α E' Real (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) Real.norm l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) (fun (x : α) => HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g₁ x)) (Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g₂ x))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.add_add Asymptotics.IsLittleO.add_addₓ'. -/
theorem IsLittleO.add_add (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =o[l] g₂) :
(fun x => f₁ x + f₂ x) =o[l] fun x => ‖g₁ x‖ + ‖g₂ x‖ := by
refine' (h₁.trans_le fun x => _).add (h₂.trans_le _) <;> simp [abs_of_nonneg, add_nonneg]
#align asymptotics.is_o.add_add Asymptotics.IsLittleO.add_add
-/- warning: asymptotics.is_O.add_is_o -> Asymptotics.IsBigO.add_isLittleO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u3, u3, u3} E' E' E' (instHAdd.{u3} E' (AddZeroClass.toHasAdd.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.add_is_o Asymptotics.IsBigO.add_isLittleOₓ'. -/
theorem IsBigO.add_isLittleO (h₁ : f₁ =O[l] g) (h₂ : f₂ =o[l] g) : (fun x => f₁ x + f₂ x) =O[l] g :=
h₁.add h₂.IsBigO
#align asymptotics.is_O.add_is_o Asymptotics.IsBigO.add_isLittleO
-/- warning: asymptotics.is_o.add_is_O -> Asymptotics.IsLittleO.add_isBigO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u3, u3, u3} E' E' E' (instHAdd.{u3} E' (AddZeroClass.toHasAdd.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.add_is_O Asymptotics.IsLittleO.add_isBigOₓ'. -/
theorem IsLittleO.add_isBigO (h₁ : f₁ =o[l] g) (h₂ : f₂ =O[l] g) : (fun x => f₁ x + f₂ x) =O[l] g :=
h₁.IsBigO.add h₂
#align asymptotics.is_o.add_is_O Asymptotics.IsLittleO.add_isBigO
-/- warning: asymptotics.is_O_with.add_is_o -> Asymptotics.IsBigOWith.add_isLittleO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (LT.lt.{0} Real Real.hasLt c₁ c₂) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₂ l (fun (x : α) => HAdd.hAdd.{u3, u3, u3} E' E' E' (instHAdd.{u3} E' (AddZeroClass.toHasAdd.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (LT.lt.{0} Real Real.instLTReal c₁ c₂) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₂ l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.add_is_o Asymptotics.IsBigOWith.add_isLittleOₓ'. -/
theorem IsBigOWith.add_isLittleO (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : f₂ =o[l] g) (hc : c₁ < c₂) :
IsBigOWith c₂ l (fun x => f₁ x + f₂ x) g :=
(h₁.add (h₂.forall_isBigOWith (sub_pos.2 hc))).congr_const (add_sub_cancel'_right _ _)
#align asymptotics.is_O_with.add_is_o Asymptotics.IsBigOWith.add_isLittleO
-/- warning: asymptotics.is_o.add_is_O_with -> Asymptotics.IsLittleO.add_isBigOWith is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₁ l f₂ g) -> (LT.lt.{0} Real Real.hasLt c₁ c₂) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₂ l (fun (x : α) => HAdd.hAdd.{u3, u3, u3} E' E' E' (instHAdd.{u3} E' (AddZeroClass.toHasAdd.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₁ l f₂ g) -> (LT.lt.{0} Real Real.instLTReal c₁ c₂) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₂ l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.add_is_O_with Asymptotics.IsLittleO.add_isBigOWithₓ'. -/
theorem IsLittleO.add_isBigOWith (h₁ : f₁ =o[l] g) (h₂ : IsBigOWith c₁ l f₂ g) (hc : c₁ < c₂) :
IsBigOWith c₂ l (fun x => f₁ x + f₂ x) g :=
(h₂.add_isLittleO h₁ hc).congr_left fun _ => add_comm _ _
#align asymptotics.is_o.add_is_O_with Asymptotics.IsLittleO.add_isBigOWith
-/- warning: asymptotics.is_O_with.sub -> Asymptotics.IsBigOWith.sub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₂ l f₂ g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) c₁ c₂) l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₂ l f₂ g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) c₁ c₂) l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.sub Asymptotics.IsBigOWith.subₓ'. -/
theorem IsBigOWith.sub (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : IsBigOWith c₂ l f₂ g) :
IsBigOWith (c₁ + c₂) l (fun x => f₁ x - f₂ x) g := by
simpa only [sub_eq_add_neg] using h₁.add h₂.neg_left
#align asymptotics.is_O_with.sub Asymptotics.IsBigOWith.sub
-/- warning: asymptotics.is_O_with.sub_is_o -> Asymptotics.IsBigOWith.sub_isLittleO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (LT.lt.{0} Real Real.hasLt c₁ c₂) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₂ l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (LT.lt.{0} Real Real.instLTReal c₁ c₂) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₂ l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.sub_is_o Asymptotics.IsBigOWith.sub_isLittleOₓ'. -/
theorem IsBigOWith.sub_isLittleO (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : f₂ =o[l] g) (hc : c₁ < c₂) :
IsBigOWith c₂ l (fun x => f₁ x - f₂ x) g := by
simpa only [sub_eq_add_neg] using h₁.add_is_o h₂.neg_left hc
#align asymptotics.is_O_with.sub_is_o Asymptotics.IsBigOWith.sub_isLittleO
-/- warning: asymptotics.is_O.sub -> Asymptotics.IsBigO.sub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.sub Asymptotics.IsBigO.subₓ'. -/
theorem IsBigO.sub (h₁ : f₁ =O[l] g) (h₂ : f₂ =O[l] g) : (fun x => f₁ x - f₂ x) =O[l] g := by
simpa only [sub_eq_add_neg] using h₁.add h₂.neg_left
#align asymptotics.is_O.sub Asymptotics.IsBigO.sub
-/- warning: asymptotics.is_o.sub -> Asymptotics.IsLittleO.sub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.sub Asymptotics.IsLittleO.subₓ'. -/
theorem IsLittleO.sub (h₁ : f₁ =o[l] g) (h₂ : f₂ =o[l] g) : (fun x => f₁ x - f₂ x) =o[l] g := by
simpa only [sub_eq_add_neg] using h₁.add h₂.neg_left
#align asymptotics.is_o.sub Asymptotics.IsLittleO.sub
@@ -2355,119 +1095,53 @@ section IsOOAsRel
variable {f₁ f₂ f₃ : α → E'}
-/- warning: asymptotics.is_O_with.symm -> Asymptotics.IsBigOWith.symm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₁ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.symm Asymptotics.IsBigOWith.symmₓ'. -/
theorem IsBigOWith.symm (h : IsBigOWith c l (fun x => f₁ x - f₂ x) g) :
IsBigOWith c l (fun x => f₂ x - f₁ x) g :=
h.neg_left.congr_left fun x => neg_sub _ _
#align asymptotics.is_O_with.symm Asymptotics.IsBigOWith.symm
-/- warning: asymptotics.is_O_with_comm -> Asymptotics.isBigOWith_comm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, Iff (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₁ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_comm Asymptotics.isBigOWith_commₓ'. -/
theorem isBigOWith_comm :
IsBigOWith c l (fun x => f₁ x - f₂ x) g ↔ IsBigOWith c l (fun x => f₂ x - f₁ x) g :=
⟨IsBigOWith.symm, IsBigOWith.symm⟩
#align asymptotics.is_O_with_comm Asymptotics.isBigOWith_comm
-/- warning: asymptotics.is_O.symm -> Asymptotics.IsBigO.symm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₁ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.symm Asymptotics.IsBigO.symmₓ'. -/
theorem IsBigO.symm (h : (fun x => f₁ x - f₂ x) =O[l] g) : (fun x => f₂ x - f₁ x) =O[l] g :=
h.neg_left.congr_left fun x => neg_sub _ _
#align asymptotics.is_O.symm Asymptotics.IsBigO.symm
-/- warning: asymptotics.is_O_comm -> Asymptotics.isBigO_comm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, Iff (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₁ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_comm Asymptotics.isBigO_commₓ'. -/
theorem isBigO_comm : (fun x => f₁ x - f₂ x) =O[l] g ↔ (fun x => f₂ x - f₁ x) =O[l] g :=
⟨IsBigO.symm, IsBigO.symm⟩
#align asymptotics.is_O_comm Asymptotics.isBigO_comm
-/- warning: asymptotics.is_o.symm -> Asymptotics.IsLittleO.symm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₁ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.symm Asymptotics.IsLittleO.symmₓ'. -/
theorem IsLittleO.symm (h : (fun x => f₁ x - f₂ x) =o[l] g) : (fun x => f₂ x - f₁ x) =o[l] g := by
simpa only [neg_sub] using h.neg_left
#align asymptotics.is_o.symm Asymptotics.IsLittleO.symm
-/- warning: asymptotics.is_o_comm -> Asymptotics.isLittleO_comm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₁ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_comm Asymptotics.isLittleO_commₓ'. -/
theorem isLittleO_comm : (fun x => f₁ x - f₂ x) =o[l] g ↔ (fun x => f₂ x - f₁ x) =o[l] g :=
⟨IsLittleO.symm, IsLittleO.symm⟩
#align asymptotics.is_o_comm Asymptotics.isLittleO_comm
-/- warning: asymptotics.is_O_with.triangle -> Asymptotics.IsBigOWith.triangle is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {c' : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'} {f₃ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c' l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₃ x)) g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) c c') l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₃ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {c' : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'} {f₃ : α -> E'}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c' l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₃ x)) g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) c c') l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₃ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.triangle Asymptotics.IsBigOWith.triangleₓ'. -/
theorem IsBigOWith.triangle (h₁ : IsBigOWith c l (fun x => f₁ x - f₂ x) g)
(h₂ : IsBigOWith c' l (fun x => f₂ x - f₃ x) g) :
IsBigOWith (c + c') l (fun x => f₁ x - f₃ x) g :=
(h₁.add h₂).congr_left fun x => sub_add_sub_cancel _ _ _
#align asymptotics.is_O_with.triangle Asymptotics.IsBigOWith.triangle
-/- warning: asymptotics.is_O.triangle -> Asymptotics.IsBigO.triangle is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'} {f₃ : α -> E'}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₃ x)) g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₃ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'} {f₃ : α -> E'}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₃ x)) g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₃ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.triangle Asymptotics.IsBigO.triangleₓ'. -/
theorem IsBigO.triangle (h₁ : (fun x => f₁ x - f₂ x) =O[l] g)
(h₂ : (fun x => f₂ x - f₃ x) =O[l] g) : (fun x => f₁ x - f₃ x) =O[l] g :=
(h₁.add h₂).congr_left fun x => sub_add_sub_cancel _ _ _
#align asymptotics.is_O.triangle Asymptotics.IsBigO.triangle
-/- warning: asymptotics.is_o.triangle -> Asymptotics.IsLittleO.triangle is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'} {f₃ : α -> E'}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₃ x)) g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₃ x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'} {f₃ : α -> E'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₃ x)) g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₃ x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.triangle Asymptotics.IsLittleO.triangleₓ'. -/
theorem IsLittleO.triangle (h₁ : (fun x => f₁ x - f₂ x) =o[l] g)
(h₂ : (fun x => f₂ x - f₃ x) =o[l] g) : (fun x => f₁ x - f₃ x) =o[l] g :=
(h₁.add h₂).congr_left fun x => sub_add_sub_cancel _ _ _
#align asymptotics.is_o.triangle Asymptotics.IsLittleO.triangle
-/- warning: asymptotics.is_O.congr_of_sub -> Asymptotics.IsBigO.congr_of_sub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Iff (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g))
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Iff (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.congr_of_sub Asymptotics.IsBigO.congr_of_subₓ'. -/
theorem IsBigO.congr_of_sub (h : (fun x => f₁ x - f₂ x) =O[l] g) : f₁ =O[l] g ↔ f₂ =O[l] g :=
⟨fun h' => (h'.sub h).congr_left fun x => sub_sub_cancel _ _, fun h' =>
(h.add h').congr_left fun x => sub_add_cancel _ _⟩
#align asymptotics.is_O.congr_of_sub Asymptotics.IsBigO.congr_of_sub
-/- warning: asymptotics.is_o.congr_of_sub -> Asymptotics.IsLittleO.congr_of_sub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g))
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.congr_of_sub Asymptotics.IsLittleO.congr_of_subₓ'. -/
theorem IsLittleO.congr_of_sub (h : (fun x => f₁ x - f₂ x) =o[l] g) : f₁ =o[l] g ↔ f₂ =o[l] g :=
⟨fun h' => (h'.sub h).congr_left fun x => sub_sub_cancel _ _, fun h' =>
(h.add h').congr_left fun x => sub_add_cancel _ _⟩
@@ -2482,87 +1156,39 @@ section ZeroConst
variable (g g' l)
-/- warning: asymptotics.is_o_zero -> Asymptotics.isLittleO_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] (g' : α -> F') (l : Filter.{u1} α), Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => OfNat.ofNat.{u2} E' 0 (OfNat.mk.{u2} E' 0 (Zero.zero.{u2} E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))))) g'
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] (g' : α -> F') (l : Filter.{u3} α), Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))))) g'
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_zero Asymptotics.isLittleO_zeroₓ'. -/
theorem isLittleO_zero : (fun x => (0 : E')) =o[l] g' :=
IsLittleO.of_bound fun c hc =>
univ_mem' fun x => by simpa using mul_nonneg hc.le (norm_nonneg <| g' x)
#align asymptotics.is_o_zero Asymptotics.isLittleO_zero
-/- warning: asymptotics.is_O_with_zero -> Asymptotics.isBigOWith_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} (g' : α -> F') (l : Filter.{u1} α), (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l (fun (x : α) => OfNat.ofNat.{u2} E' 0 (OfNat.mk.{u2} E' 0 (Zero.zero.{u2} E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))))) g')
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} (g' : α -> F') (l : Filter.{u3} α), (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l (fun (x : α) => OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))))) g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_zero Asymptotics.isBigOWith_zeroₓ'. -/
theorem isBigOWith_zero (hc : 0 ≤ c) : IsBigOWith c l (fun x => (0 : E')) g' :=
IsBigOWith.of_bound <| univ_mem' fun x => by simpa using mul_nonneg hc (norm_nonneg <| g' x)
#align asymptotics.is_O_with_zero Asymptotics.isBigOWith_zero
-/- warning: asymptotics.is_O_with_zero' -> Asymptotics.isBigOWith_zero' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] (g : α -> F) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) l (fun (x : α) => OfNat.ofNat.{u3} E' 0 (OfNat.mk.{u3} E' 0 (Zero.zero.{u3} E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))))) g
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] (g : α -> F) (l : Filter.{u3} α), Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) l (fun (x : α) => OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))))) g
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_zero' Asymptotics.isBigOWith_zero'ₓ'. -/
theorem isBigOWith_zero' : IsBigOWith 0 l (fun x => (0 : E')) g :=
IsBigOWith.of_bound <| univ_mem' fun x => by simp
#align asymptotics.is_O_with_zero' Asymptotics.isBigOWith_zero'
-/- warning: asymptotics.is_O_zero -> Asymptotics.isBigO_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] (g : α -> F) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => OfNat.ofNat.{u3} E' 0 (OfNat.mk.{u3} E' 0 (Zero.zero.{u3} E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))))) g
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] (g : α -> F) (l : Filter.{u3} α), Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))))) g
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_zero Asymptotics.isBigO_zeroₓ'. -/
theorem isBigO_zero : (fun x => (0 : E')) =O[l] g :=
isBigO_iff_isBigOWith.2 ⟨0, isBigOWith_zero' _ _⟩
#align asymptotics.is_O_zero Asymptotics.isBigO_zero
-/- warning: asymptotics.is_O_refl_left -> Asymptotics.isBigO_refl_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} (g' : α -> F') (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toHasSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f' x) (f' x)) g'
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} (g' : α -> F') (l : Filter.{u3} α), Asymptotics.IsBigO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f' x) (f' x)) g'
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_refl_left Asymptotics.isBigO_refl_leftₓ'. -/
theorem isBigO_refl_left : (fun x => f' x - f' x) =O[l] g' :=
(isBigO_zero g' l).congr_left fun x => (sub_self _).symm
#align asymptotics.is_O_refl_left Asymptotics.isBigO_refl_left
-/- warning: asymptotics.is_o_refl_left -> Asymptotics.isLittleO_refl_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} (g' : α -> F') (l : Filter.{u1} α), Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toHasSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f' x) (f' x)) g'
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} (g' : α -> F') (l : Filter.{u3} α), Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f' x) (f' x)) g'
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_refl_left Asymptotics.isLittleO_refl_leftₓ'. -/
theorem isLittleO_refl_left : (fun x => f' x - f' x) =o[l] g' :=
(isLittleO_zero g' l).congr_left fun x => (sub_self _).symm
#align asymptotics.is_o_refl_left Asymptotics.isLittleO_refl_left
variable {g g' l}
-/- warning: asymptotics.is_O_with_zero_right_iff -> Asymptotics.isBigOWith_zero_right_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {c : Real} {f'' : α -> E''} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) c l f'' (fun (x : α) => OfNat.ofNat.{u2} F' 0 (OfNat.mk.{u2} F' 0 (Zero.zero.{u2} F' (AddZeroClass.toHasZero.{u2} F' (AddMonoid.toAddZeroClass.{u2} F' (SubNegMonoid.toAddMonoid.{u2} F' (AddGroup.toSubNegMonoid.{u2} F' (SeminormedAddGroup.toAddGroup.{u2} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} F' _inst_5)))))))))) (Filter.EventuallyEq.{u1, u3} α E'' l f'' (OfNat.ofNat.{max u1 u3} (α -> E'') 0 (OfNat.mk.{max u1 u3} (α -> E'') 0 (Zero.zero.{max u1 u3} (α -> E'') (Pi.instZero.{u1, u3} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))))
-but is expected to have type
- forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {c : Real} {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19136 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_zero_right_iff Asymptotics.isBigOWith_zero_right_iffₓ'. -/
@[simp]
theorem isBigOWith_zero_right_iff : (IsBigOWith c l f'' fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 := by
simp only [is_O_with, exists_prop, true_and_iff, norm_zero, MulZeroClass.mul_zero,
norm_le_zero_iff, eventually_eq, Pi.zero_apply]
#align asymptotics.is_O_with_zero_right_iff Asymptotics.isBigOWith_zero_right_iff
-/- warning: asymptotics.is_O_zero_right_iff -> Asymptotics.isBigO_zero_right_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {f'' : α -> E''} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u2} F' 0 (OfNat.mk.{u2} F' 0 (Zero.zero.{u2} F' (AddZeroClass.toHasZero.{u2} F' (AddMonoid.toAddZeroClass.{u2} F' (SubNegMonoid.toAddMonoid.{u2} F' (AddGroup.toSubNegMonoid.{u2} F' (SeminormedAddGroup.toAddGroup.{u2} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} F' _inst_5)))))))))) (Filter.EventuallyEq.{u1, u3} α E'' l f'' (OfNat.ofNat.{max u1 u3} (α -> E'') 0 (OfNat.mk.{max u1 u3} (α -> E'') 0 (Zero.zero.{max u1 u3} (α -> E'') (Pi.instZero.{u1, u3} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))))
-but is expected to have type
- forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19136 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_zero_right_iff Asymptotics.isBigO_zero_right_iffₓ'. -/
@[simp]
theorem isBigO_zero_right_iff : (f'' =O[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 :=
⟨fun h =>
@@ -2571,24 +1197,12 @@ theorem isBigO_zero_right_iff : (f'' =O[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0
fun h => (isBigOWith_zero_right_iff.2 h : IsBigOWith 1 _ _ _).IsBigO⟩
#align asymptotics.is_O_zero_right_iff Asymptotics.isBigO_zero_right_iff
-/- warning: asymptotics.is_o_zero_right_iff -> Asymptotics.isLittleO_zero_right_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {f'' : α -> E''} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u2} F' 0 (OfNat.mk.{u2} F' 0 (Zero.zero.{u2} F' (AddZeroClass.toHasZero.{u2} F' (AddMonoid.toAddZeroClass.{u2} F' (SubNegMonoid.toAddMonoid.{u2} F' (AddGroup.toSubNegMonoid.{u2} F' (SeminormedAddGroup.toAddGroup.{u2} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} F' _inst_5)))))))))) (Filter.EventuallyEq.{u1, u3} α E'' l f'' (OfNat.ofNat.{max u1 u3} (α -> E'') 0 (OfNat.mk.{max u1 u3} (α -> E'') 0 (Zero.zero.{max u1 u3} (α -> E'') (Pi.instZero.{u1, u3} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))))
-but is expected to have type
- forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19136 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_zero_right_iff Asymptotics.isLittleO_zero_right_iffₓ'. -/
@[simp]
theorem isLittleO_zero_right_iff : (f'' =o[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 :=
⟨fun h => isBigO_zero_right_iff.1 h.IsBigO, fun h =>
IsLittleO.of_isBigOWith fun c hc => isBigOWith_zero_right_iff.2 h⟩
#align asymptotics.is_o_zero_right_iff Asymptotics.isLittleO_zero_right_iff
-/- warning: asymptotics.is_O_with_const_const -> Asymptotics.isBigOWith_const_const is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] (c : E) {c' : F''}, (Ne.{succ u3} F'' c' (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (forall (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (Norm.norm.{u2} E _inst_1 c) (Norm.norm.{u3} F'' (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) c')) l (fun (x : α) => c) (fun (x : α) => c'))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {F'' : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u3} F''] (c : E) {c' : F''}, (Ne.{succ u3} F'' c' (OfNat.ofNat.{u3} F'' 0 (Zero.toOfNat0.{u3} F'' (NegZeroClass.toZero.{u3} F'' (SubNegZeroMonoid.toNegZeroClass.{u3} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} F'' (AddCommGroup.toDivisionAddCommMonoid.{u3} F'' (NormedAddCommGroup.toAddCommGroup.{u3} F'' _inst_8))))))))) -> (forall (l : Filter.{u2} α), Asymptotics.IsBigOWith.{u2, u1, u3} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (Norm.norm.{u1} E _inst_1 c) (Norm.norm.{u3} F'' (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) c')) l (fun (x : α) => c) (fun (x : α) => c'))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_const_const Asymptotics.isBigOWith_const_constₓ'. -/
theorem isBigOWith_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter α) :
IsBigOWith (‖c‖ / ‖c'‖) l (fun x : α => c) fun x => c' :=
by
@@ -2599,23 +1213,11 @@ theorem isBigOWith_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter
rwa [Ne.def, norm_eq_zero]
#align asymptotics.is_O_with_const_const Asymptotics.isBigOWith_const_const
-/- warning: asymptotics.is_O_const_const -> Asymptotics.isBigO_const_const is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] (c : E) {c' : F''}, (Ne.{succ u3} F'' c' (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (forall (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l (fun (x : α) => c) (fun (x : α) => c'))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {F'' : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u3} F''] (c : E) {c' : F''}, (Ne.{succ u3} F'' c' (OfNat.ofNat.{u3} F'' 0 (Zero.toOfNat0.{u3} F'' (NegZeroClass.toZero.{u3} F'' (SubNegZeroMonoid.toNegZeroClass.{u3} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} F'' (AddCommGroup.toDivisionAddCommMonoid.{u3} F'' (NormedAddCommGroup.toAddCommGroup.{u3} F'' _inst_8))))))))) -> (forall (l : Filter.{u2} α), Asymptotics.IsBigO.{u2, u1, u3} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) l (fun (x : α) => c) (fun (x : α) => c'))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_const Asymptotics.isBigO_const_constₓ'. -/
theorem isBigO_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter α) :
(fun x : α => c) =O[l] fun x => c' :=
(isBigOWith_const_const c hc' l).IsBigO
#align asymptotics.is_O_const_const Asymptotics.isBigO_const_const
-/- warning: asymptotics.is_O_const_const_iff -> Asymptotics.isBigO_const_const_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {c : E''} {c' : F''} (l : Filter.{u1} α) [_inst_14 : Filter.NeBot.{u1} α l], Iff (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l (fun (x : α) => c) (fun (x : α) => c')) ((Eq.{succ u3} F'' c' (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Eq.{succ u2} E'' c (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))))
-but is expected to have type
- forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {c : E''} {c' : F''} (l : Filter.{u3} α) [_inst_14 : Filter.NeBot.{u3} α l], Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l (fun (x : α) => c) (fun (x : α) => c')) ((Eq.{succ u1} F'' c' (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Eq.{succ u2} E'' c (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_const_iff Asymptotics.isBigO_const_const_iffₓ'. -/
@[simp]
theorem isBigO_const_const_iff {c : E''} {c' : F''} (l : Filter α) [l.ne_bot] :
((fun x : α => c) =O[l] fun x => c') ↔ c' = 0 → c = 0 :=
@@ -2625,12 +1227,6 @@ theorem isBigO_const_const_iff {c : E''} {c' : F''} (l : Filter α) [l.ne_bot] :
· simp [hc', is_O_const_const _ hc']
#align asymptotics.is_O_const_const_iff Asymptotics.isBigO_const_const_iff
-/- warning: asymptotics.is_O_pure -> Asymptotics.isBigO_pure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''} {x : α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} α x) f'' g'') ((Eq.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))))
-but is expected to have type
- forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {g'' : α -> F''} {x : α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) (Pure.pure.{u3, u3} Filter.{u3} Filter.instPureFilter.{u3} α x) f'' g'') ((Eq.{succ u1} F'' (g'' x) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_pure Asymptotics.isBigO_pureₓ'. -/
@[simp]
theorem isBigO_pure {x} : f'' =O[pure x] g'' ↔ g'' x = 0 → f'' x = 0 :=
calc
@@ -2641,32 +1237,14 @@ theorem isBigO_pure {x} : f'' =O[pure x] g'' ↔ g'' x = 0 → f'' x = 0 :=
end ZeroConst
-/- warning: asymptotics.is_O_with_top -> Asymptotics.isBigOWith_top is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F}, Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c (Top.top.{u1} (Filter.{u1} α) (Filter.hasTop.{u1} α)) f g) (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x))))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c (Top.top.{u3} (Filter.{u3} α) (Filter.instTopFilter.{u3} α)) f g) (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_top Asymptotics.isBigOWith_topₓ'. -/
@[simp]
theorem isBigOWith_top : IsBigOWith c ⊤ f g ↔ ∀ x, ‖f x‖ ≤ c * ‖g x‖ := by rw [is_O_with] <;> rfl
#align asymptotics.is_O_with_top Asymptotics.isBigOWith_top
-/- warning: asymptotics.is_O_top -> Asymptotics.isBigO_top is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 (Top.top.{u1} (Filter.{u1} α) (Filter.hasTop.{u1} α)) f g) (Exists.{1} Real (fun (C : Real) => forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u3} F _inst_2 (g x)))))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 (Top.top.{u3} (Filter.{u3} α) (Filter.instTopFilter.{u3} α)) f g) (Exists.{1} Real (fun (C : Real) => forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u1} F _inst_2 (g x)))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_top Asymptotics.isBigO_topₓ'. -/
@[simp]
theorem isBigO_top : f =O[⊤] g ↔ ∃ C, ∀ x, ‖f x‖ ≤ C * ‖g x‖ := by rw [is_O_iff] <;> rfl
#align asymptotics.is_O_top Asymptotics.isBigO_top
-/- warning: asymptotics.is_o_top -> Asymptotics.isLittleO_top is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (Top.top.{u1} (Filter.{u1} α) (Filter.hasTop.{u1} α)) f'' g'') (forall (x : α), Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))))))))
-but is expected to have type
- forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {g'' : α -> F''}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) (Top.top.{u3} (Filter.{u3} α) (Filter.instTopFilter.{u3} α)) f'' g'') (forall (x : α), Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7)))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_top Asymptotics.isLittleO_topₓ'. -/
@[simp]
theorem isLittleO_top : f'' =o[⊤] g'' ↔ ∀ x, f'' x = 0 :=
by
@@ -2681,23 +1259,11 @@ theorem isLittleO_top : f'' =o[⊤] g'' ↔ ∀ x, f'' x = 0 :=
(eventually_nhdsWithin_iff.2 <| eventually_of_forall fun c hc => h hc x)
#align asymptotics.is_o_top Asymptotics.isLittleO_top
-/- warning: asymptotics.is_O_with_principal -> Asymptotics.isBigOWith_principal is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {s : Set.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c (Filter.principal.{u1} α s) f g) (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {s : Set.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c (Filter.principal.{u3} α s) f g) (forall (x : α), (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x s) -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_principal Asymptotics.isBigOWith_principalₓ'. -/
@[simp]
theorem isBigOWith_principal {s : Set α} : IsBigOWith c (𝓟 s) f g ↔ ∀ x ∈ s, ‖f x‖ ≤ c * ‖g x‖ := by
rw [is_O_with] <;> rfl
#align asymptotics.is_O_with_principal Asymptotics.isBigOWith_principal
-/- warning: asymptotics.is_O_principal -> Asymptotics.isBigO_principal is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {s : Set.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 (Filter.principal.{u1} α s) f g) (Exists.{1} Real (fun (c : Real) => forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x))))))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {s : Set.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 (Filter.principal.{u3} α s) f g) (Exists.{1} Real (fun (c : Real) => forall (x : α), (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x s) -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_principal Asymptotics.isBigO_principalₓ'. -/
theorem isBigO_principal {s : Set α} : f =O[𝓟 s] g ↔ ∃ c, ∀ x ∈ s, ‖f x‖ ≤ c * ‖g x‖ := by
rw [is_O_iff] <;> rfl
#align asymptotics.is_O_principal Asymptotics.isBigO_principal
@@ -2706,76 +1272,34 @@ section
variable (F) [One F] [NormOneClass F]
-/- warning: asymptotics.is_O_with_const_one -> Asymptotics.isBigOWith_const_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14] (c : E) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 (Norm.norm.{u2} E _inst_1 c) l (fun (x : α) => c) (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14)))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14] (c : E) (l : Filter.{u3} α), Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 (Norm.norm.{u2} E _inst_1 c) l (fun (x : α) => c) (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_const_one Asymptotics.isBigOWith_const_oneₓ'. -/
theorem isBigOWith_const_one (c : E) (l : Filter α) :
IsBigOWith ‖c‖ l (fun x : α => c) fun x => (1 : F) := by simp [is_O_with_iff]
#align asymptotics.is_O_with_const_one Asymptotics.isBigOWith_const_one
-/- warning: asymptotics.is_O_const_one -> Asymptotics.isBigO_const_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14] (c : E) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l (fun (x : α) => c) (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14)))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14] (c : E) (l : Filter.{u3} α), Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l (fun (x : α) => c) (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_one Asymptotics.isBigO_const_oneₓ'. -/
theorem isBigO_const_one (c : E) (l : Filter α) : (fun x : α => c) =O[l] fun x => (1 : F) :=
(isBigOWith_const_one F c l).IsBigO
#align asymptotics.is_O_const_one Asymptotics.isBigO_const_one
-/- warning: asymptotics.is_o_const_iff_is_o_one -> Asymptotics.isLittleO_const_iff_isLittleO_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) {F'' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_8 : NormedAddCommGroup.{u4} F''] {f : α -> E} {l : Filter.{u1} α} [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14] {c : F''}, (Ne.{succ u4} F'' c (OfNat.ofNat.{u4} F'' 0 (OfNat.mk.{u4} F'' 0 (Zero.zero.{u4} F'' (AddZeroClass.toHasZero.{u4} F'' (AddMonoid.toAddZeroClass.{u4} F'' (SubNegMonoid.toAddMonoid.{u4} F'' (AddGroup.toSubNegMonoid.{u4} F'' (NormedAddGroup.toAddGroup.{u4} F'' (NormedAddCommGroup.toNormedAddGroup.{u4} F'' _inst_8)))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u4} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u4} F'' _inst_8) l f (fun (x : α) => c)) (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14)))))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) {F'' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] [_inst_8 : NormedAddCommGroup.{u4} F''] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14] {c : F''}, (Ne.{succ u4} F'' c (OfNat.ofNat.{u4} F'' 0 (Zero.toOfNat0.{u4} F'' (NegZeroClass.toZero.{u4} F'' (SubNegZeroMonoid.toNegZeroClass.{u4} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u4} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u4} F'' (AddCommGroup.toDivisionAddCommMonoid.{u4} F'' (NormedAddCommGroup.toAddCommGroup.{u4} F'' _inst_8))))))))) -> (Iff (Asymptotics.IsLittleO.{u3, u2, u4} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u4} F'' _inst_8) l f (fun (x : α) => c)) (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_iff_is_o_one Asymptotics.isLittleO_const_iff_isLittleO_oneₓ'. -/
theorem isLittleO_const_iff_isLittleO_one {c : F''} (hc : c ≠ 0) :
(f =o[l] fun x => c) ↔ f =o[l] fun x => (1 : F) :=
⟨fun h => h.trans_isBigOWith (isBigOWith_const_one _ _ _) (norm_pos_iff.2 hc), fun h =>
h.trans_isBigO <| isBigO_const_const _ hc _⟩
#align asymptotics.is_o_const_iff_is_o_one Asymptotics.isLittleO_const_iff_isLittleO_one
-/- warning: asymptotics.is_o_one_iff -> Asymptotics.isLittleO_one_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (F : Type.{u2}) {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : One.{u2} F] [_inst_15 : NormOneClass.{u2} F _inst_2 _inst_14], Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' (fun (x : α) => OfNat.ofNat.{u2} F 1 (OfNat.mk.{u2} F 1 (One.one.{u2} F _inst_14)))) (Filter.Tendsto.{u1, u3} α E' f' l (nhds.{u3} E' (UniformSpace.toTopologicalSpace.{u3} E' (PseudoMetricSpace.toUniformSpace.{u3} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} E' _inst_4))) (OfNat.ofNat.{u3} E' 0 (OfNat.mk.{u3} E' 0 (Zero.zero.{u3} E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))))))))))
-but is expected to have type
- forall {α : Type.{u3}} (F : Type.{u1}) {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {f' : α -> E'} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))) (Filter.Tendsto.{u3, u2} α E' f' l (nhds.{u2} E' (UniformSpace.toTopologicalSpace.{u2} E' (PseudoMetricSpace.toUniformSpace.{u2} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E' _inst_4))) (OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_one_iff Asymptotics.isLittleO_one_iffₓ'. -/
@[simp]
theorem isLittleO_one_iff : f' =o[l] (fun x => 1 : α → F) ↔ Tendsto f' l (𝓝 0) := by
simp only [is_o_iff, norm_one, mul_one, metric.nhds_basis_closed_ball.tendsto_right_iff,
Metric.mem_closedBall, dist_zero_right]
#align asymptotics.is_o_one_iff Asymptotics.isLittleO_one_iff
-/- warning: asymptotics.is_O_one_iff -> Asymptotics.isBigO_one_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14], Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14)))) (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x)))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))) (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35346 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35348 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35346 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35348) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_one_iff Asymptotics.isBigO_one_iffₓ'. -/
@[simp]
theorem isBigO_one_iff : f =O[l] (fun x => 1 : α → F) ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x‖ :=
by simp only [is_O_iff, norm_one, mul_one]; rfl
#align asymptotics.is_O_one_iff Asymptotics.isBigO_one_iff
-/- warning: filter.is_bounded_under.is_O_one -> Filter.IsBoundedUnder.isBigO_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14], (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14))))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35346 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35348 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35346 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35348) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14)))
-Case conversion may be inaccurate. Consider using '#align filter.is_bounded_under.is_O_one Filter.IsBoundedUnder.isBigO_oneₓ'. -/
alias is_O_one_iff ↔ _ _root_.filter.is_bounded_under.is_O_one
#align filter.is_bounded_under.is_O_one Filter.IsBoundedUnder.isBigO_one
-/- warning: asymptotics.is_o_one_left_iff -> Asymptotics.isLittleO_one_left_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14], Iff (Asymptotics.IsLittleO.{u1, u3, u2} α F E _inst_2 _inst_1 l (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14))) f) (Filter.Tendsto.{u1, 0} α Real (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x)) l (Filter.atTop.{0} Real Real.preorder))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u1}} (F : Type.{u2}) [_inst_1 : Norm.{u1} E] [_inst_2 : Norm.{u2} F] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u2} F] [_inst_15 : NormOneClass.{u2} F _inst_2 _inst_14], Iff (Asymptotics.IsLittleO.{u3, u2, u1} α F E _inst_2 _inst_1 l (fun (x : α) => OfNat.ofNat.{u2} F 1 (One.toOfNat1.{u2} F _inst_14)) f) (Filter.Tendsto.{u3, 0} α Real (fun (x : α) => Norm.norm.{u1} E _inst_1 (f x)) l (Filter.atTop.{0} Real Real.instPreorderReal))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_one_left_iff Asymptotics.isLittleO_one_left_iffₓ'. -/
@[simp]
theorem isLittleO_one_left_iff : (fun x => 1 : α → F) =o[l] f ↔ Tendsto (fun x => ‖f x‖) l atTop :=
calc
@@ -2788,23 +1312,11 @@ theorem isLittleO_one_left_iff : (fun x => 1 : α → F) =o[l] f ↔ Tendsto (fu
#align asymptotics.is_o_one_left_iff Asymptotics.isLittleO_one_left_iff
-/- warning: filter.tendsto.is_O_one -> Filter.Tendsto.isBigO_one is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} (F : Type.{u2}) {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : One.{u2} F] [_inst_15 : NormOneClass.{u2} F _inst_2 _inst_14] {c : E'}, (Filter.Tendsto.{u1, u3} α E' f' l (nhds.{u3} E' (UniformSpace.toTopologicalSpace.{u3} E' (PseudoMetricSpace.toUniformSpace.{u3} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} E' _inst_4))) c)) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' (fun (x : α) => OfNat.ofNat.{u2} F 1 (OfNat.mk.{u2} F 1 (One.one.{u2} F _inst_14))))
-but is expected to have type
- forall {α : Type.{u3}} (F : Type.{u1}) {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {f' : α -> E'} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14] {c : E'}, (Filter.Tendsto.{u3, u2} α E' f' l (nhds.{u2} E' (UniformSpace.toTopologicalSpace.{u2} E' (PseudoMetricSpace.toUniformSpace.{u2} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E' _inst_4))) c)) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14)))
-Case conversion may be inaccurate. Consider using '#align filter.tendsto.is_O_one Filter.Tendsto.isBigO_oneₓ'. -/
theorem Filter.Tendsto.isBigO_one {c : E'} (h : Tendsto f' l (𝓝 c)) :
f' =O[l] (fun x => 1 : α → F) :=
h.norm.isBoundedUnder_le.isBigO_one F
#align filter.tendsto.is_O_one Filter.Tendsto.isBigO_one
-/- warning: asymptotics.is_O.trans_tendsto_nhds -> Asymptotics.IsBigO.trans_tendsto_nhds is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14], (Asymptotics.IsBigO.{u1, u2, u4} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) l f g') -> (forall {y : F'}, (Filter.Tendsto.{u1, u4} α F' g' l (nhds.{u4} F' (UniformSpace.toTopologicalSpace.{u4} F' (PseudoMetricSpace.toUniformSpace.{u4} F' (SeminormedAddCommGroup.toPseudoMetricSpace.{u4} F' _inst_5))) y)) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14)))))
-but is expected to have type
- forall {α : Type.{u4}} {E : Type.{u3}} (F : Type.{u1}) {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u1} F] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u4} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], (Asymptotics.IsBigO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g') -> (forall {y : F'}, (Filter.Tendsto.{u4, u2} α F' g' l (nhds.{u2} F' (UniformSpace.toTopologicalSpace.{u2} F' (PseudoMetricSpace.toUniformSpace.{u2} F' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} F' _inst_5))) y)) -> (Asymptotics.IsBigO.{u4, u3, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.trans_tendsto_nhds Asymptotics.IsBigO.trans_tendsto_nhdsₓ'. -/
theorem IsBigO.trans_tendsto_nhds (hfg : f =O[l] g') {y : F'} (hg : Tendsto g' l (𝓝 y)) :
f =O[l] (fun x => 1 : α → F) :=
hfg.trans <| hg.isBigO_one F
@@ -2812,77 +1324,35 @@ theorem IsBigO.trans_tendsto_nhds (hfg : f =O[l] g') {y : F'} (hg : Tendsto g' l
end
-/- warning: asymptotics.is_o_const_iff -> Asymptotics.isLittleO_const_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {l : Filter.{u1} α} {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f'' (fun (x : α) => c)) (Filter.Tendsto.{u1, u2} α E'' f'' l (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))))))))))
-but is expected to have type
- forall {α : Type.{u2}} {E'' : Type.{u1}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {l : Filter.{u2} α} {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (Zero.toOfNat0.{u3} F'' (NegZeroClass.toZero.{u3} F'' (SubNegZeroMonoid.toNegZeroClass.{u3} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} F'' (AddCommGroup.toDivisionAddCommMonoid.{u3} F'' (NormedAddCommGroup.toAddCommGroup.{u3} F'' _inst_8))))))))) -> (Iff (Asymptotics.IsLittleO.{u2, u1, u3} α E'' F'' (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) l f'' (fun (x : α) => c)) (Filter.Tendsto.{u2, u1} α E'' f'' l (nhds.{u1} E'' (UniformSpace.toTopologicalSpace.{u1} E'' (PseudoMetricSpace.toUniformSpace.{u1} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E'' _inst_7)))) (OfNat.ofNat.{u1} E'' 0 (Zero.toOfNat0.{u1} E'' (NegZeroClass.toZero.{u1} E'' (SubNegZeroMonoid.toNegZeroClass.{u1} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E'' (AddCommGroup.toDivisionAddCommMonoid.{u1} E'' (NormedAddCommGroup.toAddCommGroup.{u1} E'' _inst_7)))))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_iff Asymptotics.isLittleO_const_iffₓ'. -/
theorem isLittleO_const_iff {c : F''} (hc : c ≠ 0) : (f'' =o[l] fun x => c) ↔ Tendsto f'' l (𝓝 0) :=
(isLittleO_const_iff_isLittleO_one ℝ hc).trans (isLittleO_one_iff _)
#align asymptotics.is_o_const_iff Asymptotics.isLittleO_const_iff
-/- warning: asymptotics.is_o_id_const -> Asymptotics.isLittleO_id_const is a dubious translation:
-lean 3 declaration is
- forall {E'' : Type.{u1}} {F'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u2} F''] {c : F''}, (Ne.{succ u2} F'' c (OfNat.ofNat.{u2} F'' 0 (OfNat.mk.{u2} F'' 0 (Zero.zero.{u2} F'' (AddZeroClass.toHasZero.{u2} F'' (AddMonoid.toAddZeroClass.{u2} F'' (SubNegMonoid.toAddMonoid.{u2} F'' (AddGroup.toSubNegMonoid.{u2} F'' (NormedAddGroup.toAddGroup.{u2} F'' (NormedAddCommGroup.toNormedAddGroup.{u2} F'' _inst_8)))))))))) -> (Asymptotics.IsLittleO.{u1, u1, u2} E'' E'' F'' (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u2} F'' _inst_8) (nhds.{u1} E'' (UniformSpace.toTopologicalSpace.{u1} E'' (PseudoMetricSpace.toUniformSpace.{u1} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E'' _inst_7)))) (OfNat.ofNat.{u1} E'' 0 (OfNat.mk.{u1} E'' 0 (Zero.zero.{u1} E'' (AddZeroClass.toHasZero.{u1} E'' (AddMonoid.toAddZeroClass.{u1} E'' (SubNegMonoid.toAddMonoid.{u1} E'' (AddGroup.toSubNegMonoid.{u1} E'' (NormedAddGroup.toAddGroup.{u1} E'' (NormedAddCommGroup.toNormedAddGroup.{u1} E'' _inst_7)))))))))) (fun (x : E'') => x) (fun (x : E'') => c))
-but is expected to have type
- forall {E'' : Type.{u1}} {F'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u2} F''] {c : F''}, (Ne.{succ u2} F'' c (OfNat.ofNat.{u2} F'' 0 (Zero.toOfNat0.{u2} F'' (NegZeroClass.toZero.{u2} F'' (SubNegZeroMonoid.toNegZeroClass.{u2} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} F'' (AddCommGroup.toDivisionAddCommMonoid.{u2} F'' (NormedAddCommGroup.toAddCommGroup.{u2} F'' _inst_8))))))))) -> (Asymptotics.IsLittleO.{u1, u1, u2} E'' E'' F'' (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) (nhds.{u1} E'' (UniformSpace.toTopologicalSpace.{u1} E'' (PseudoMetricSpace.toUniformSpace.{u1} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E'' _inst_7)))) (OfNat.ofNat.{u1} E'' 0 (Zero.toOfNat0.{u1} E'' (NegZeroClass.toZero.{u1} E'' (SubNegZeroMonoid.toNegZeroClass.{u1} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E'' (AddCommGroup.toDivisionAddCommMonoid.{u1} E'' (NormedAddCommGroup.toAddCommGroup.{u1} E'' _inst_7))))))))) (fun (x : E'') => x) (fun (x : E'') => c))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_id_const Asymptotics.isLittleO_id_constₓ'. -/
theorem isLittleO_id_const {c : F''} (hc : c ≠ 0) : (fun x : E'' => x) =o[𝓝 0] fun x => c :=
(isLittleO_const_iff hc).mpr (continuous_id.Tendsto 0)
#align asymptotics.is_o_id_const Asymptotics.isLittleO_id_const
-/- warning: filter.is_bounded_under.is_O_const -> Filter.IsBoundedUnder.isBigO_const is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {l : Filter.{u1} α}, (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f)) -> (forall {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f (fun (x : α) => c)))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F'' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u1} F''] {f : α -> E} {l : Filter.{u3} α}, (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36325 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36327 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36325 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36327) l (Function.comp.{succ u3, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f)) -> (forall {c : F''}, (Ne.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f (fun (x : α) => c)))
-Case conversion may be inaccurate. Consider using '#align filter.is_bounded_under.is_O_const Filter.IsBoundedUnder.isBigO_constₓ'. -/
theorem Filter.IsBoundedUnder.isBigO_const (h : IsBoundedUnder (· ≤ ·) l (norm ∘ f)) {c : F''}
(hc : c ≠ 0) : f =O[l] fun x => c :=
(h.isBigO_one ℝ).trans (isBigO_const_const _ hc _)
#align filter.is_bounded_under.is_O_const Filter.IsBoundedUnder.isBigO_const
-/- warning: asymptotics.is_O_const_of_tendsto -> Asymptotics.isBigO_const_of_tendsto is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {l : Filter.{u1} α} {y : E''}, (Filter.Tendsto.{u1, u2} α E'' f'' l (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) y)) -> (forall {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f'' (fun (x : α) => c)))
-but is expected to have type
- forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {l : Filter.{u3} α} {y : E''}, (Filter.Tendsto.{u3, u2} α E'' f'' l (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) y)) -> (forall {c : F''}, (Ne.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' (fun (x : α) => c)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_of_tendsto Asymptotics.isBigO_const_of_tendstoₓ'. -/
theorem isBigO_const_of_tendsto {y : E''} (h : Tendsto f'' l (𝓝 y)) {c : F''} (hc : c ≠ 0) :
f'' =O[l] fun x => c :=
h.norm.isBoundedUnder_le.isBigO_const hc
#align asymptotics.is_O_const_of_tendsto Asymptotics.isBigO_const_of_tendsto
-/- warning: asymptotics.is_O.is_bounded_under_le -> Asymptotics.IsBigO.isBoundedUnder_le is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} {c : F}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => c)) -> (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} {c : F}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => c)) -> (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36616 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36618 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36616 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36618) l (Function.comp.{succ u3, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.is_bounded_under_le Asymptotics.IsBigO.isBoundedUnder_leₓ'. -/
theorem IsBigO.isBoundedUnder_le {c : F} (h : f =O[l] fun x => c) :
IsBoundedUnder (· ≤ ·) l (norm ∘ f) :=
let ⟨c', hc'⟩ := h.bound
⟨c' * ‖c‖, eventually_map.2 hc'⟩
#align asymptotics.is_O.is_bounded_under_le Asymptotics.IsBigO.isBoundedUnder_le
-/- warning: asymptotics.is_O_const_of_ne -> Asymptotics.isBigO_const_of_ne is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {l : Filter.{u1} α} {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f (fun (x : α) => c)) (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f)))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {F'' : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {l : Filter.{u2} α} {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (Zero.toOfNat0.{u3} F'' (NegZeroClass.toZero.{u3} F'' (SubNegZeroMonoid.toNegZeroClass.{u3} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} F'' (AddCommGroup.toDivisionAddCommMonoid.{u3} F'' (NormedAddCommGroup.toAddCommGroup.{u3} F'' _inst_8))))))))) -> (Iff (Asymptotics.IsBigO.{u2, u1, u3} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) l f (fun (x : α) => c)) (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36786 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36788 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36786 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36788) l (Function.comp.{succ u2, succ u1, 1} α E Real (Norm.norm.{u1} E _inst_1) f)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_of_ne Asymptotics.isBigO_const_of_neₓ'. -/
theorem isBigO_const_of_ne {c : F''} (hc : c ≠ 0) :
(f =O[l] fun x => c) ↔ IsBoundedUnder (· ≤ ·) l (norm ∘ f) :=
⟨fun h => h.isBoundedUnder_le, fun h => h.isBigO_const hc⟩
#align asymptotics.is_O_const_of_ne Asymptotics.isBigO_const_of_ne
-/- warning: asymptotics.is_O_const_iff -> Asymptotics.isBigO_const_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {l : Filter.{u1} α} {c : F''}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f'' (fun (x : α) => c)) (And ((Eq.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Filter.EventuallyEq.{u1, u2} α E'' l f'' (OfNat.ofNat.{max u1 u2} (α -> E'') 0 (OfNat.mk.{max u1 u2} (α -> E'') 0 (Zero.zero.{max u1 u2} (α -> E'') (Pi.instZero.{u1, u2} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))))) (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u2} E'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (f'' x))))
-but is expected to have type
- forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {l : Filter.{u3} α} {c : F''}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' (fun (x : α) => c)) (And ((Eq.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19136 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))) (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36952 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36954 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36952 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36954) l (fun (x : α) => Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (f'' x))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_iff Asymptotics.isBigO_const_iffₓ'. -/
theorem isBigO_const_iff {c : F''} :
(f'' =O[l] fun x => c) ↔ (c = 0 → f'' =ᶠ[l] 0) ∧ IsBoundedUnder (· ≤ ·) l fun x => ‖f'' x‖ :=
by
@@ -2892,12 +1362,6 @@ theorem isBigO_const_iff {c : F''} :
exacts[(hcf hc).trans_isBigO (is_O_zero _ _), hf.is_O_const hc]
#align asymptotics.is_O_const_iff Asymptotics.isBigO_const_iff
-/- warning: asymptotics.is_O_iff_is_bounded_under_le_div -> Asymptotics.isBigO_iff_isBoundedUnder_le_div is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {g'' : α -> F''} {l : Filter.{u1} α}, (Filter.Eventually.{u1} α (fun (x : α) => Ne.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) l) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f g'') (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (Norm.norm.{u2} E _inst_1 (f x)) (Norm.norm.{u3} F'' (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (g'' x)))))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u1}} {F'' : Type.{u2}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u2} F''] {f : α -> E} {g'' : α -> F''} {l : Filter.{u3} α}, (Filter.Eventually.{u3} α (fun (x : α) => Ne.{succ u2} F'' (g'' x) (OfNat.ofNat.{u2} F'' 0 (Zero.toOfNat0.{u2} F'' (NegZeroClass.toZero.{u2} F'' (SubNegZeroMonoid.toNegZeroClass.{u2} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} F'' (AddCommGroup.toDivisionAddCommMonoid.{u2} F'' (NormedAddCommGroup.toAddCommGroup.{u2} F'' _inst_8))))))))) l) -> (Iff (Asymptotics.IsBigO.{u3, u1, u2} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) l f g'') (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37187 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37189 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37187 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37189) l (fun (x : α) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (Norm.norm.{u1} E _inst_1 (f x)) (Norm.norm.{u2} F'' (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) (g'' x)))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_is_bounded_under_le_div Asymptotics.isBigO_iff_isBoundedUnder_le_divₓ'. -/
theorem isBigO_iff_isBoundedUnder_le_div (h : ∀ᶠ x in l, g'' x ≠ 0) :
f =O[l] g'' ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x‖ / ‖g'' x‖ :=
by
@@ -2907,12 +1371,6 @@ theorem isBigO_iff_isBoundedUnder_le_div (h : ∀ᶠ x in l, g'' x ≠ 0) :
eventually_congr <| h.mono fun x hx => (div_le_iff <| norm_pos_iff.2 hx).symm
#align asymptotics.is_O_iff_is_bounded_under_le_div Asymptotics.isBigO_iff_isBoundedUnder_le_div
-/- warning: asymptotics.is_O_const_left_iff_pos_le_norm -> Asymptotics.isBigO_const_left_iff_pos_le_norm is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {E'' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_7 : NormedAddCommGroup.{u3} E''] {f' : α -> E'} {l : Filter.{u1} α} {c : E''}, (Ne.{succ u3} E'' c (OfNat.ofNat.{u3} E'' 0 (OfNat.mk.{u3} E'' 0 (Zero.zero.{u3} E'' (AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u3, u2} α E'' E' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) l (fun (x : α) => c) f') (Exists.{1} Real (fun (b : Real) => And (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) b) (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe b (Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x))) l))))
-but is expected to have type
- forall {α : Type.{u2}} {E' : Type.{u1}} {E'' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_7 : NormedAddCommGroup.{u3} E''] {f' : α -> E'} {l : Filter.{u2} α} {c : E''}, (Ne.{succ u3} E'' c (OfNat.ofNat.{u3} E'' 0 (Zero.toOfNat0.{u3} E'' (NegZeroClass.toZero.{u3} E'' (SubNegZeroMonoid.toNegZeroClass.{u3} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E'' (AddCommGroup.toDivisionAddCommMonoid.{u3} E'' (NormedAddCommGroup.toAddCommGroup.{u3} E'' _inst_7))))))))) -> (Iff (Asymptotics.IsBigO.{u2, u3, u1} α E'' E' (NormedAddCommGroup.toNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l (fun (x : α) => c) f') (Exists.{1} Real (fun (b : Real) => And (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) b) (Filter.Eventually.{u2} α (fun (x : α) => LE.le.{0} Real Real.instLEReal b (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x))) l))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_left_iff_pos_le_norm Asymptotics.isBigO_const_left_iff_pos_le_normₓ'. -/
/-- `(λ x, c) =O[l] f` if and only if `f` is bounded away from zero. -/
theorem isBigO_const_left_iff_pos_le_norm {c : E''} (hc : c ≠ 0) :
(fun x => c) =O[l] f' ↔ ∃ b, 0 < b ∧ ∀ᶠ x in l, b ≤ ‖f' x‖ :=
@@ -2934,23 +1392,11 @@ variable (𝕜)
end
-/- warning: asymptotics.is_O.trans_tendsto -> Asymptotics.IsBigO.trans_tendsto is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f'' g'') -> (Filter.Tendsto.{u1, u3} α F'' g'' l (nhds.{u3} F'' (UniformSpace.toTopologicalSpace.{u3} F'' (PseudoMetricSpace.toUniformSpace.{u3} F'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F'' _inst_8)))) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8))))))))))) -> (Filter.Tendsto.{u1, u2} α E'' f'' l (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))))
-but is expected to have type
- forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' g'') -> (Filter.Tendsto.{u3, u1} α F'' g'' l (nhds.{u1} F'' (UniformSpace.toTopologicalSpace.{u1} F'' (PseudoMetricSpace.toUniformSpace.{u1} F'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} F'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} F'' _inst_8)))) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8)))))))))) -> (Filter.Tendsto.{u3, u2} α E'' f'' l (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.trans_tendsto Asymptotics.IsBigO.trans_tendstoₓ'. -/
theorem IsBigO.trans_tendsto (hfg : f'' =O[l] g'') (hg : Tendsto g'' l (𝓝 0)) :
Tendsto f'' l (𝓝 0) :=
(isLittleO_one_iff ℝ).1 <| hfg.trans_isLittleO <| (isLittleO_one_iff ℝ).2 hg
#align asymptotics.is_O.trans_tendsto Asymptotics.IsBigO.trans_tendsto
-/- warning: asymptotics.is_o.trans_tendsto -> Asymptotics.IsLittleO.trans_tendsto is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f'' g'') -> (Filter.Tendsto.{u1, u3} α F'' g'' l (nhds.{u3} F'' (UniformSpace.toTopologicalSpace.{u3} F'' (PseudoMetricSpace.toUniformSpace.{u3} F'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F'' _inst_8)))) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8))))))))))) -> (Filter.Tendsto.{u1, u2} α E'' f'' l (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))))
-but is expected to have type
- forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' g'') -> (Filter.Tendsto.{u3, u1} α F'' g'' l (nhds.{u1} F'' (UniformSpace.toTopologicalSpace.{u1} F'' (PseudoMetricSpace.toUniformSpace.{u1} F'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} F'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} F'' _inst_8)))) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8)))))))))) -> (Filter.Tendsto.{u3, u2} α E'' f'' l (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.trans_tendsto Asymptotics.IsLittleO.trans_tendstoₓ'. -/
theorem IsLittleO.trans_tendsto (hfg : f'' =o[l] g'') (hg : Tendsto g'' l (𝓝 0)) :
Tendsto f'' l (𝓝 0) :=
hfg.IsBigO.trans_tendsto hg
@@ -2959,286 +1405,130 @@ theorem IsLittleO.trans_tendsto (hfg : f'' =o[l] g'') (hg : Tendsto g'' l (𝓝
/-! ### Multiplication by a constant -/
-/- warning: asymptotics.is_O_with_const_mul_self -> Asymptotics.isBigOWith_const_mul_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} [_inst_10 : SeminormedRing.{u2} R] (c : R) (f : α -> R) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u2} α R R (SeminormedRing.toHasNorm.{u2} R _inst_10) (SeminormedRing.toHasNorm.{u2} R _inst_10) (Norm.norm.{u2} R (SeminormedRing.toHasNorm.{u2} R _inst_10) c) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) c (f x)) f
-but is expected to have type
- forall {α : Type.{u2}} {R : Type.{u1}} [_inst_10 : SeminormedRing.{u1} R] (c : R) (f : α -> R) (l : Filter.{u2} α), Asymptotics.IsBigOWith.{u2, u1, u1} α R R (SeminormedRing.toNorm.{u1} R _inst_10) (SeminormedRing.toNorm.{u1} R _inst_10) (Norm.norm.{u1} R (SeminormedRing.toNorm.{u1} R _inst_10) c) l (fun (x : α) => HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))) c (f x)) f
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_const_mul_self Asymptotics.isBigOWith_const_mul_selfₓ'. -/
theorem isBigOWith_const_mul_self (c : R) (f : α → R) (l : Filter α) :
IsBigOWith ‖c‖ l (fun x => c * f x) f :=
isBigOWith_of_le' _ fun x => norm_mul_le _ _
#align asymptotics.is_O_with_const_mul_self Asymptotics.isBigOWith_const_mul_self
-/- warning: asymptotics.is_O_const_mul_self -> Asymptotics.isBigO_const_mul_self is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} [_inst_10 : SeminormedRing.{u2} R] (c : R) (f : α -> R) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u2} α R R (SeminormedRing.toHasNorm.{u2} R _inst_10) (SeminormedRing.toHasNorm.{u2} R _inst_10) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) c (f x)) f
-but is expected to have type
- forall {α : Type.{u2}} {R : Type.{u1}} [_inst_10 : SeminormedRing.{u1} R] (c : R) (f : α -> R) (l : Filter.{u2} α), Asymptotics.IsBigO.{u2, u1, u1} α R R (SeminormedRing.toNorm.{u1} R _inst_10) (SeminormedRing.toNorm.{u1} R _inst_10) l (fun (x : α) => HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))) c (f x)) f
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_mul_self Asymptotics.isBigO_const_mul_selfₓ'. -/
theorem isBigO_const_mul_self (c : R) (f : α → R) (l : Filter α) : (fun x => c * f x) =O[l] f :=
(isBigOWith_const_mul_self c f l).IsBigO
#align asymptotics.is_O_const_mul_self Asymptotics.isBigO_const_mul_self
-/- warning: asymptotics.is_O_with.const_mul_left -> Asymptotics.IsBigOWith.const_mul_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {R : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_10 : SeminormedRing.{u3} R] {c : Real} {g : α -> F} {l : Filter.{u1} α} {f : α -> R}, (Asymptotics.IsBigOWith.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 c l f g) -> (forall (c' : R), Asymptotics.IsBigOWith.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (Norm.norm.{u3} R (SeminormedRing.toHasNorm.{u3} R _inst_10) c') c) l (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c' (f x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {R : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_10 : SeminormedRing.{u2} R] {c : Real} {g : α -> F} {l : Filter.{u3} α} {f : α -> R}, (Asymptotics.IsBigOWith.{u3, u2, u1} α R F (SeminormedRing.toNorm.{u2} R _inst_10) _inst_2 c l f g) -> (forall (c' : R), Asymptotics.IsBigOWith.{u3, u2, u1} α R F (SeminormedRing.toNorm.{u2} R _inst_10) _inst_2 (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (Norm.norm.{u2} R (SeminormedRing.toNorm.{u2} R _inst_10) c') c) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) c' (f x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.const_mul_left Asymptotics.IsBigOWith.const_mul_leftₓ'. -/
theorem IsBigOWith.const_mul_left {f : α → R} (h : IsBigOWith c l f g) (c' : R) :
IsBigOWith (‖c'‖ * c) l (fun x => c' * f x) g :=
(isBigOWith_const_mul_self c' f l).trans h (norm_nonneg c')
#align asymptotics.is_O_with.const_mul_left Asymptotics.IsBigOWith.const_mul_left
-/- warning: asymptotics.is_O.const_mul_left -> Asymptotics.IsBigO.const_mul_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {R : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_10 : SeminormedRing.{u3} R] {g : α -> F} {l : Filter.{u1} α} {f : α -> R}, (Asymptotics.IsBigO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l f g) -> (forall (c' : R), Asymptotics.IsBigO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c' (f x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {R : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_10 : SeminormedRing.{u2} R] {g : α -> F} {l : Filter.{u3} α} {f : α -> R}, (Asymptotics.IsBigO.{u3, u2, u1} α R F (SeminormedRing.toNorm.{u2} R _inst_10) _inst_2 l f g) -> (forall (c' : R), Asymptotics.IsBigO.{u3, u2, u1} α R F (SeminormedRing.toNorm.{u2} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) c' (f x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.const_mul_left Asymptotics.IsBigO.const_mul_leftₓ'. -/
theorem IsBigO.const_mul_left {f : α → R} (h : f =O[l] g) (c' : R) : (fun x => c' * f x) =O[l] g :=
let ⟨c, hc⟩ := h.IsBigOWith
(hc.const_mul_left c').IsBigO
#align asymptotics.is_O.const_mul_left Asymptotics.IsBigO.const_mul_left
-/- warning: asymptotics.is_O_with_self_const_mul' -> Asymptotics.isBigOWith_self_const_mul' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} [_inst_10 : SeminormedRing.{u2} R] (u : Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) (f : α -> R) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u2} α R R (SeminormedRing.toHasNorm.{u2} R _inst_10) (SeminormedRing.toHasNorm.{u2} R _inst_10) (Norm.norm.{u2} R (SeminormedRing.toHasNorm.{u2} R _inst_10) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (coeBase.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (Units.hasCoe.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) (Inv.inv.{u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) (Units.hasInv.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) u))) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (coeBase.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (Units.hasCoe.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) u) (f x))
-but is expected to have type
- forall {α : Type.{u1}} {R : Type.{u2}} [_inst_10 : SeminormedRing.{u2} R] (u : Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (f : α -> R) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u2} α R R (SeminormedRing.toNorm.{u2} R _inst_10) (SeminormedRing.toNorm.{u2} R _inst_10) (Norm.norm.{u2} R (SeminormedRing.toNorm.{u2} R _inst_10) (Units.val.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (Inv.inv.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (Units.instInv.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) u))) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (Units.val.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) u) (f x))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_self_const_mul' Asymptotics.isBigOWith_self_const_mul'ₓ'. -/
theorem isBigOWith_self_const_mul' (u : Rˣ) (f : α → R) (l : Filter α) :
IsBigOWith ‖(↑u⁻¹ : R)‖ l f fun x => ↑u * f x :=
(isBigOWith_const_mul_self ↑u⁻¹ _ l).congr_left fun x => u.inv_mul_cancel_left (f x)
#align asymptotics.is_O_with_self_const_mul' Asymptotics.isBigOWith_self_const_mul'
-/- warning: asymptotics.is_O_with_self_const_mul -> Asymptotics.isBigOWith_self_const_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] (c : 𝕜), (Ne.{succ u2} 𝕜 c (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (forall (f : α -> 𝕜) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (Inv.inv.{0} Real Real.hasInv (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) c)) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) c (f x)))
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] (c : 𝕜), (Ne.{succ u2} 𝕜 c (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)))))))) -> (forall (f : α -> 𝕜) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toNorm.{u2} 𝕜 _inst_12) (NormedField.toNorm.{u2} 𝕜 _inst_12) (Inv.inv.{0} Real Real.instInvReal (Norm.norm.{u2} 𝕜 (NormedField.toNorm.{u2} 𝕜 _inst_12) c)) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) c (f x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_self_const_mul Asymptotics.isBigOWith_self_const_mulₓ'. -/
theorem isBigOWith_self_const_mul (c : 𝕜) (hc : c ≠ 0) (f : α → 𝕜) (l : Filter α) :
IsBigOWith ‖c‖⁻¹ l f fun x => c * f x :=
(isBigOWith_self_const_mul' (Units.mk0 c hc) f l).congr_const <| norm_inv c
#align asymptotics.is_O_with_self_const_mul Asymptotics.isBigOWith_self_const_mul
-/- warning: asymptotics.is_O_self_const_mul' -> Asymptotics.isBigO_self_const_mul' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} [_inst_10 : SeminormedRing.{u2} R] {c : R}, (IsUnit.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)) c) -> (forall (f : α -> R) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u2} α R R (SeminormedRing.toHasNorm.{u2} R _inst_10) (SeminormedRing.toHasNorm.{u2} R _inst_10) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) c (f x)))
-but is expected to have type
- forall {α : Type.{u1}} {R : Type.{u2}} [_inst_10 : SeminormedRing.{u2} R] {c : R}, (IsUnit.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) c) -> (forall (f : α -> R) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u2} α R R (SeminormedRing.toNorm.{u2} R _inst_10) (SeminormedRing.toNorm.{u2} R _inst_10) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) c (f x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_self_const_mul' Asymptotics.isBigO_self_const_mul'ₓ'. -/
theorem isBigO_self_const_mul' {c : R} (hc : IsUnit c) (f : α → R) (l : Filter α) :
f =O[l] fun x => c * f x :=
let ⟨u, hu⟩ := hc
hu ▸ (isBigOWith_self_const_mul' u f l).IsBigO
#align asymptotics.is_O_self_const_mul' Asymptotics.isBigO_self_const_mul'
-/- warning: asymptotics.is_O_self_const_mul -> Asymptotics.isBigO_self_const_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] (c : 𝕜), (Ne.{succ u2} 𝕜 c (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (forall (f : α -> 𝕜) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) c (f x)))
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] (c : 𝕜), (Ne.{succ u2} 𝕜 c (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)))))))) -> (forall (f : α -> 𝕜) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toNorm.{u2} 𝕜 _inst_12) (NormedField.toNorm.{u2} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) c (f x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_self_const_mul Asymptotics.isBigO_self_const_mulₓ'. -/
theorem isBigO_self_const_mul (c : 𝕜) (hc : c ≠ 0) (f : α → 𝕜) (l : Filter α) :
f =O[l] fun x => c * f x :=
isBigO_self_const_mul' (IsUnit.mk0 c hc) f l
#align asymptotics.is_O_self_const_mul Asymptotics.isBigO_self_const_mul
-/- warning: asymptotics.is_O_const_mul_left_iff' -> Asymptotics.isBigO_const_mul_left_iff' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {R : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_10 : SeminormedRing.{u3} R] {g : α -> F} {l : Filter.{u1} α} {f : α -> R} {c : R}, (IsUnit.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)) c) -> (Iff (Asymptotics.IsBigO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (f x)) g) (Asymptotics.IsBigO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l f g))
-but is expected to have type
- forall {α : Type.{u2}} {F : Type.{u1}} {R : Type.{u3}} [_inst_2 : Norm.{u1} F] [_inst_10 : SeminormedRing.{u3} R] {g : α -> F} {l : Filter.{u2} α} {f : α -> R} {c : R}, (IsUnit.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c) -> (Iff (Asymptotics.IsBigO.{u2, u3, u1} α R F (SeminormedRing.toNorm.{u3} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) c (f x)) g) (Asymptotics.IsBigO.{u2, u3, u1} α R F (SeminormedRing.toNorm.{u3} R _inst_10) _inst_2 l f g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_mul_left_iff' Asymptotics.isBigO_const_mul_left_iff'ₓ'. -/
theorem isBigO_const_mul_left_iff' {f : α → R} {c : R} (hc : IsUnit c) :
(fun x => c * f x) =O[l] g ↔ f =O[l] g :=
⟨(isBigO_self_const_mul' hc f l).trans, fun h => h.const_mul_left c⟩
#align asymptotics.is_O_const_mul_left_iff' Asymptotics.isBigO_const_mul_left_iff'
-/- warning: asymptotics.is_O_const_mul_left_iff -> Asymptotics.isBigO_const_mul_left_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {𝕜 : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_12 : NormedField.{u3} 𝕜] {g : α -> F} {l : Filter.{u1} α} {f : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (OfNat.mk.{u3} 𝕜 0 (Zero.zero.{u3} 𝕜 (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u3, u2} α 𝕜 F (NormedField.toHasNorm.{u3} 𝕜 _inst_12) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) c (f x)) g) (Asymptotics.IsBigO.{u1, u3, u2} α 𝕜 F (NormedField.toHasNorm.{u3} 𝕜 _inst_12) _inst_2 l f g))
-but is expected to have type
- forall {α : Type.{u2}} {F : Type.{u1}} {𝕜 : Type.{u3}} [_inst_2 : Norm.{u1} F] [_inst_12 : NormedField.{u3} 𝕜] {g : α -> F} {l : Filter.{u2} α} {f : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (Zero.toOfNat0.{u3} 𝕜 (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsBigO.{u2, u3, u1} α 𝕜 F (NormedField.toNorm.{u3} 𝕜 _inst_12) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (NonUnitalNonAssocRing.toMul.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) c (f x)) g) (Asymptotics.IsBigO.{u2, u3, u1} α 𝕜 F (NormedField.toNorm.{u3} 𝕜 _inst_12) _inst_2 l f g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_mul_left_iff Asymptotics.isBigO_const_mul_left_iffₓ'. -/
theorem isBigO_const_mul_left_iff {f : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
(fun x => c * f x) =O[l] g ↔ f =O[l] g :=
isBigO_const_mul_left_iff' <| IsUnit.mk0 c hc
#align asymptotics.is_O_const_mul_left_iff Asymptotics.isBigO_const_mul_left_iff
-/- warning: asymptotics.is_o.const_mul_left -> Asymptotics.IsLittleO.const_mul_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {R : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_10 : SeminormedRing.{u3} R] {g : α -> F} {l : Filter.{u1} α} {f : α -> R}, (Asymptotics.IsLittleO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l f g) -> (forall (c : R), Asymptotics.IsLittleO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (f x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {R : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_10 : SeminormedRing.{u2} R] {g : α -> F} {l : Filter.{u3} α} {f : α -> R}, (Asymptotics.IsLittleO.{u3, u2, u1} α R F (SeminormedRing.toNorm.{u2} R _inst_10) _inst_2 l f g) -> (forall (c : R), Asymptotics.IsLittleO.{u3, u2, u1} α R F (SeminormedRing.toNorm.{u2} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) c (f x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.const_mul_left Asymptotics.IsLittleO.const_mul_leftₓ'. -/
theorem IsLittleO.const_mul_left {f : α → R} (h : f =o[l] g) (c : R) : (fun x => c * f x) =o[l] g :=
(isBigO_const_mul_self c f l).trans_isLittleO h
#align asymptotics.is_o.const_mul_left Asymptotics.IsLittleO.const_mul_left
-/- warning: asymptotics.is_o_const_mul_left_iff' -> Asymptotics.isLittleO_const_mul_left_iff' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {R : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_10 : SeminormedRing.{u3} R] {g : α -> F} {l : Filter.{u1} α} {f : α -> R} {c : R}, (IsUnit.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)) c) -> (Iff (Asymptotics.IsLittleO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (f x)) g) (Asymptotics.IsLittleO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l f g))
-but is expected to have type
- forall {α : Type.{u2}} {F : Type.{u1}} {R : Type.{u3}} [_inst_2 : Norm.{u1} F] [_inst_10 : SeminormedRing.{u3} R] {g : α -> F} {l : Filter.{u2} α} {f : α -> R} {c : R}, (IsUnit.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c) -> (Iff (Asymptotics.IsLittleO.{u2, u3, u1} α R F (SeminormedRing.toNorm.{u3} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) c (f x)) g) (Asymptotics.IsLittleO.{u2, u3, u1} α R F (SeminormedRing.toNorm.{u3} R _inst_10) _inst_2 l f g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_mul_left_iff' Asymptotics.isLittleO_const_mul_left_iff'ₓ'. -/
theorem isLittleO_const_mul_left_iff' {f : α → R} {c : R} (hc : IsUnit c) :
(fun x => c * f x) =o[l] g ↔ f =o[l] g :=
⟨(isBigO_self_const_mul' hc f l).trans_isLittleO, fun h => h.const_mul_left c⟩
#align asymptotics.is_o_const_mul_left_iff' Asymptotics.isLittleO_const_mul_left_iff'
-/- warning: asymptotics.is_o_const_mul_left_iff -> Asymptotics.isLittleO_const_mul_left_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {𝕜 : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_12 : NormedField.{u3} 𝕜] {g : α -> F} {l : Filter.{u1} α} {f : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (OfNat.mk.{u3} 𝕜 0 (Zero.zero.{u3} 𝕜 (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u3, u2} α 𝕜 F (NormedField.toHasNorm.{u3} 𝕜 _inst_12) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) c (f x)) g) (Asymptotics.IsLittleO.{u1, u3, u2} α 𝕜 F (NormedField.toHasNorm.{u3} 𝕜 _inst_12) _inst_2 l f g))
-but is expected to have type
- forall {α : Type.{u2}} {F : Type.{u1}} {𝕜 : Type.{u3}} [_inst_2 : Norm.{u1} F] [_inst_12 : NormedField.{u3} 𝕜] {g : α -> F} {l : Filter.{u2} α} {f : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (Zero.toOfNat0.{u3} 𝕜 (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsLittleO.{u2, u3, u1} α 𝕜 F (NormedField.toNorm.{u3} 𝕜 _inst_12) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (NonUnitalNonAssocRing.toMul.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) c (f x)) g) (Asymptotics.IsLittleO.{u2, u3, u1} α 𝕜 F (NormedField.toNorm.{u3} 𝕜 _inst_12) _inst_2 l f g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_mul_left_iff Asymptotics.isLittleO_const_mul_left_iffₓ'. -/
theorem isLittleO_const_mul_left_iff {f : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
(fun x => c * f x) =o[l] g ↔ f =o[l] g :=
isLittleO_const_mul_left_iff' <| IsUnit.mk0 c hc
#align asymptotics.is_o_const_mul_left_iff Asymptotics.isLittleO_const_mul_left_iff
-/- warning: asymptotics.is_O_with.of_const_mul_right -> Asymptotics.IsBigOWith.of_const_mul_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {c' : Real} {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {c : R}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) c' l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (g x))) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c' (Norm.norm.{u3} R (SeminormedRing.toHasNorm.{u3} R _inst_10) c)) l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {R : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u1} R] {c' : Real} {f : α -> E} {l : Filter.{u3} α} {g : α -> R} {c : R}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E R _inst_1 (SeminormedRing.toNorm.{u1} R _inst_10) c' l f (fun (x : α) => HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))) c (g x))) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E R _inst_1 (SeminormedRing.toNorm.{u1} R _inst_10) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c' (Norm.norm.{u1} R (SeminormedRing.toNorm.{u1} R _inst_10) c)) l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_const_mul_right Asymptotics.IsBigOWith.of_const_mul_rightₓ'. -/
theorem IsBigOWith.of_const_mul_right {g : α → R} {c : R} (hc' : 0 ≤ c')
(h : IsBigOWith c' l f fun x => c * g x) : IsBigOWith (c' * ‖c‖) l f g :=
h.trans (isBigOWith_const_mul_self c g l) hc'
#align asymptotics.is_O_with.of_const_mul_right Asymptotics.IsBigOWith.of_const_mul_right
-/- warning: asymptotics.is_O.of_const_mul_right -> Asymptotics.IsBigO.of_const_mul_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {c : R}, (Asymptotics.IsBigO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (g x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {R : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u1} R] {f : α -> E} {l : Filter.{u3} α} {g : α -> R} {c : R}, (Asymptotics.IsBigO.{u3, u2, u1} α E R _inst_1 (SeminormedRing.toNorm.{u1} R _inst_10) l f (fun (x : α) => HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))) c (g x))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E R _inst_1 (SeminormedRing.toNorm.{u1} R _inst_10) l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_const_mul_right Asymptotics.IsBigO.of_const_mul_rightₓ'. -/
theorem IsBigO.of_const_mul_right {g : α → R} {c : R} (h : f =O[l] fun x => c * g x) : f =O[l] g :=
let ⟨c, cnonneg, hc⟩ := h.exists_nonneg
(hc.of_const_mul_right cnonneg).IsBigO
#align asymptotics.is_O.of_const_mul_right Asymptotics.IsBigO.of_const_mul_right
-/- warning: asymptotics.is_O_with.const_mul_right' -> Asymptotics.IsBigOWith.const_mul_right' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {u : Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))} {c' : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) c' l f g) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c' (Norm.norm.{u3} R (SeminormedRing.toHasNorm.{u3} R _inst_10) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (HasLiftT.mk.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (CoeTCₓ.coe.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (coeBase.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (Units.hasCoe.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))))) (Inv.inv.{u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) (Units.hasInv.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) u)))) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (HasLiftT.mk.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (CoeTCₓ.coe.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (coeBase.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (Units.hasCoe.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))))) u) (g x)))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {R : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u2} α} {g : α -> R} {u : Units.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))} {c' : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') -> (Asymptotics.IsBigOWith.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) c' l f g) -> (Asymptotics.IsBigOWith.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c' (Norm.norm.{u3} R (SeminormedRing.toNorm.{u3} R _inst_10) (Units.val.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) (Inv.inv.{u3} (Units.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) (Units.instInv.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) u)))) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) (Units.val.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) u) (g x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.const_mul_right' Asymptotics.IsBigOWith.const_mul_right'ₓ'. -/
theorem IsBigOWith.const_mul_right' {g : α → R} {u : Rˣ} {c' : ℝ} (hc' : 0 ≤ c')
(h : IsBigOWith c' l f g) : IsBigOWith (c' * ‖(↑u⁻¹ : R)‖) l f fun x => ↑u * g x :=
h.trans (isBigOWith_self_const_mul' _ _ _) hc'
#align asymptotics.is_O_with.const_mul_right' Asymptotics.IsBigOWith.const_mul_right'
-/- warning: asymptotics.is_O_with.const_mul_right -> Asymptotics.IsBigOWith.const_mul_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u1} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (OfNat.mk.{u3} 𝕜 0 (Zero.zero.{u3} 𝕜 (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))))))) -> (forall {c' : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) c' l f g) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c' (Inv.inv.{0} Real Real.hasInv (Norm.norm.{u3} 𝕜 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) c))) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) c (g x))))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u2} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (Zero.toOfNat0.{u3} 𝕜 (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))))))) -> (forall {c' : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') -> (Asymptotics.IsBigOWith.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) c' l f g) -> (Asymptotics.IsBigOWith.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c' (Inv.inv.{0} Real Real.instInvReal (Norm.norm.{u3} 𝕜 (NormedField.toNorm.{u3} 𝕜 _inst_12) c))) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (NonUnitalNonAssocRing.toMul.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) c (g x))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.const_mul_right Asymptotics.IsBigOWith.const_mul_rightₓ'. -/
theorem IsBigOWith.const_mul_right {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) {c' : ℝ} (hc' : 0 ≤ c')
(h : IsBigOWith c' l f g) : IsBigOWith (c' * ‖c‖⁻¹) l f fun x => c * g x :=
h.trans (isBigOWith_self_const_mul c hc g l) hc'
#align asymptotics.is_O_with.const_mul_right Asymptotics.IsBigOWith.const_mul_right
-/- warning: asymptotics.is_O.const_mul_right' -> Asymptotics.IsBigO.const_mul_right' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)) c) -> (Asymptotics.IsBigO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f g) -> (Asymptotics.IsBigO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (g x)))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {R : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u2} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c) -> (Asymptotics.IsBigO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f g) -> (Asymptotics.IsBigO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) c (g x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.const_mul_right' Asymptotics.IsBigO.const_mul_right'ₓ'. -/
theorem IsBigO.const_mul_right' {g : α → R} {c : R} (hc : IsUnit c) (h : f =O[l] g) :
f =O[l] fun x => c * g x :=
h.trans (isBigO_self_const_mul' hc g l)
#align asymptotics.is_O.const_mul_right' Asymptotics.IsBigO.const_mul_right'
-/- warning: asymptotics.is_O.const_mul_right -> Asymptotics.IsBigO.const_mul_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u1} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (OfNat.mk.{u3} 𝕜 0 (Zero.zero.{u3} 𝕜 (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))))))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f g) -> (Asymptotics.IsBigO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) c (g x)))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u2} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (Zero.toOfNat0.{u3} 𝕜 (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))))))) -> (Asymptotics.IsBigO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f g) -> (Asymptotics.IsBigO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (NonUnitalNonAssocRing.toMul.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) c (g x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.const_mul_right Asymptotics.IsBigO.const_mul_rightₓ'. -/
theorem IsBigO.const_mul_right {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) (h : f =O[l] g) :
f =O[l] fun x => c * g x :=
h.const_mul_right' <| IsUnit.mk0 c hc
#align asymptotics.is_O.const_mul_right Asymptotics.IsBigO.const_mul_right
-/- warning: asymptotics.is_O_const_mul_right_iff' -> Asymptotics.isBigO_const_mul_right_iff' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)) c) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (g x))) (Asymptotics.IsBigO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f g))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {R : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u2} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c) -> (Iff (Asymptotics.IsBigO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) c (g x))) (Asymptotics.IsBigO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_mul_right_iff' Asymptotics.isBigO_const_mul_right_iff'ₓ'. -/
theorem isBigO_const_mul_right_iff' {g : α → R} {c : R} (hc : IsUnit c) :
(f =O[l] fun x => c * g x) ↔ f =O[l] g :=
⟨fun h => h.of_const_mul_right, fun h => h.const_mul_right' hc⟩
#align asymptotics.is_O_const_mul_right_iff' Asymptotics.isBigO_const_mul_right_iff'
-/- warning: asymptotics.is_O_const_mul_right_iff -> Asymptotics.isBigO_const_mul_right_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u1} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (OfNat.mk.{u3} 𝕜 0 (Zero.zero.{u3} 𝕜 (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) c (g x))) (Asymptotics.IsBigO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f g))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u2} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (Zero.toOfNat0.{u3} 𝕜 (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsBigO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (NonUnitalNonAssocRing.toMul.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) c (g x))) (Asymptotics.IsBigO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_mul_right_iff Asymptotics.isBigO_const_mul_right_iffₓ'. -/
theorem isBigO_const_mul_right_iff {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
(f =O[l] fun x => c * g x) ↔ f =O[l] g :=
isBigO_const_mul_right_iff' <| IsUnit.mk0 c hc
#align asymptotics.is_O_const_mul_right_iff Asymptotics.isBigO_const_mul_right_iff
-/- warning: asymptotics.is_o.of_const_mul_right -> Asymptotics.IsLittleO.of_const_mul_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {c : R}, (Asymptotics.IsLittleO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (g x))) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f g)
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {R : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u1} R] {f : α -> E} {l : Filter.{u3} α} {g : α -> R} {c : R}, (Asymptotics.IsLittleO.{u3, u2, u1} α E R _inst_1 (SeminormedRing.toNorm.{u1} R _inst_10) l f (fun (x : α) => HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))) c (g x))) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E R _inst_1 (SeminormedRing.toNorm.{u1} R _inst_10) l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_const_mul_right Asymptotics.IsLittleO.of_const_mul_rightₓ'. -/
theorem IsLittleO.of_const_mul_right {g : α → R} {c : R} (h : f =o[l] fun x => c * g x) :
f =o[l] g :=
h.trans_isBigO (isBigO_const_mul_self c g l)
#align asymptotics.is_o.of_const_mul_right Asymptotics.IsLittleO.of_const_mul_right
-/- warning: asymptotics.is_o.const_mul_right' -> Asymptotics.IsLittleO.const_mul_right' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)) c) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f g) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (g x)))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {R : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u2} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c) -> (Asymptotics.IsLittleO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f g) -> (Asymptotics.IsLittleO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) c (g x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.const_mul_right' Asymptotics.IsLittleO.const_mul_right'ₓ'. -/
theorem IsLittleO.const_mul_right' {g : α → R} {c : R} (hc : IsUnit c) (h : f =o[l] g) :
f =o[l] fun x => c * g x :=
h.trans_isBigO (isBigO_self_const_mul' hc g l)
#align asymptotics.is_o.const_mul_right' Asymptotics.IsLittleO.const_mul_right'
-/- warning: asymptotics.is_o.const_mul_right -> Asymptotics.IsLittleO.const_mul_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u1} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (OfNat.mk.{u3} 𝕜 0 (Zero.zero.{u3} 𝕜 (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))))))) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f g) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) c (g x)))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u2} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (Zero.toOfNat0.{u3} 𝕜 (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))))))) -> (Asymptotics.IsLittleO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f g) -> (Asymptotics.IsLittleO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (NonUnitalNonAssocRing.toMul.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) c (g x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.const_mul_right Asymptotics.IsLittleO.const_mul_rightₓ'. -/
theorem IsLittleO.const_mul_right {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) (h : f =o[l] g) :
f =o[l] fun x => c * g x :=
h.const_mul_right' <| IsUnit.mk0 c hc
#align asymptotics.is_o.const_mul_right Asymptotics.IsLittleO.const_mul_right
-/- warning: asymptotics.is_o_const_mul_right_iff' -> Asymptotics.isLittleO_const_mul_right_iff' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)) c) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (g x))) (Asymptotics.IsLittleO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f g))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {R : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u2} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c) -> (Iff (Asymptotics.IsLittleO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) c (g x))) (Asymptotics.IsLittleO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_mul_right_iff' Asymptotics.isLittleO_const_mul_right_iff'ₓ'. -/
theorem isLittleO_const_mul_right_iff' {g : α → R} {c : R} (hc : IsUnit c) :
(f =o[l] fun x => c * g x) ↔ f =o[l] g :=
⟨fun h => h.of_const_mul_right, fun h => h.const_mul_right' hc⟩
#align asymptotics.is_o_const_mul_right_iff' Asymptotics.isLittleO_const_mul_right_iff'
-/- warning: asymptotics.is_o_const_mul_right_iff -> Asymptotics.isLittleO_const_mul_right_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u1} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (OfNat.mk.{u3} 𝕜 0 (Zero.zero.{u3} 𝕜 (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) c (g x))) (Asymptotics.IsLittleO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f g))
-but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u2} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (Zero.toOfNat0.{u3} 𝕜 (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsLittleO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (NonUnitalNonAssocRing.toMul.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) c (g x))) (Asymptotics.IsLittleO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_mul_right_iff Asymptotics.isLittleO_const_mul_right_iffₓ'. -/
theorem isLittleO_const_mul_right_iff {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
(f =o[l] fun x => c * g x) ↔ f =o[l] g :=
isLittleO_const_mul_right_iff' <| IsUnit.mk0 c hc
@@ -3247,12 +1537,6 @@ theorem isLittleO_const_mul_right_iff {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0
/-! ### Multiplication -/
-/- warning: asymptotics.is_O_with.mul -> Asymptotics.IsBigOWith.mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜} {c₁ : Real} {c₂ : Real}, (Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) c₁ l f₁ g₁) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) c₂ l f₂ g₂) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c₁ c₂) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g₁ x) (g₂ x)))
-but is expected to have type
- forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u3} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜} {c₁ : Real} {c₂ : Real}, (Asymptotics.IsBigOWith.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) c₁ l f₁ g₁) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) c₂ l f₂ g₂) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c₁ c₂) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))) (g₁ x) (g₂ x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.mul Asymptotics.IsBigOWith.mulₓ'. -/
theorem IsBigOWith.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} {c₁ c₂ : ℝ} (h₁ : IsBigOWith c₁ l f₁ g₁)
(h₂ : IsBigOWith c₂ l f₂ g₂) :
IsBigOWith (c₁ * c₂) l (fun x => f₁ x * f₂ x) fun x => g₁ x * g₂ x :=
@@ -3264,12 +1548,6 @@ theorem IsBigOWith.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} {c₁ c
rw [norm_mul, mul_mul_mul_comm]
#align asymptotics.is_O_with.mul Asymptotics.IsBigOWith.mul
-/- warning: asymptotics.is_O.mul -> Asymptotics.IsBigO.mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsBigO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsBigO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsBigO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g₁ x) (g₂ x)))
-but is expected to have type
- forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u3} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsBigO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsBigO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsBigO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))) (g₁ x) (g₂ x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.mul Asymptotics.IsBigO.mulₓ'. -/
theorem IsBigO.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =O[l] g₁) (h₂ : f₂ =O[l] g₂) :
(fun x => f₁ x * f₂ x) =O[l] fun x => g₁ x * g₂ x :=
let ⟨c, hc⟩ := h₁.IsBigOWith
@@ -3277,12 +1555,6 @@ theorem IsBigO.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁
(hc.mul hc').IsBigO
#align asymptotics.is_O.mul Asymptotics.IsBigO.mul
-/- warning: asymptotics.is_O.mul_is_o -> Asymptotics.IsBigO.mul_isLittleO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsBigO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g₁ x) (g₂ x)))
-but is expected to have type
- forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u3} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsBigO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))) (g₁ x) (g₂ x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.mul_is_o Asymptotics.IsBigO.mul_isLittleOₓ'. -/
theorem IsBigO.mul_isLittleO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =O[l] g₁) (h₂ : f₂ =o[l] g₂) :
(fun x => f₁ x * f₂ x) =o[l] fun x => g₁ x * g₂ x :=
by
@@ -3292,12 +1564,6 @@ theorem IsBigO.mul_isLittleO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h
exact (hc'.mul (h₂ (div_pos cpos c'pos))).congr_const (mul_div_cancel' _ (ne_of_gt c'pos))
#align asymptotics.is_O.mul_is_o Asymptotics.IsBigO.mul_isLittleO
-/- warning: asymptotics.is_o.mul_is_O -> Asymptotics.IsLittleO.mul_isBigO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsBigO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g₁ x) (g₂ x)))
-but is expected to have type
- forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u3} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsBigO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))) (g₁ x) (g₂ x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.mul_is_O Asymptotics.IsLittleO.mul_isBigOₓ'. -/
theorem IsLittleO.mul_isBigO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =O[l] g₂) :
(fun x => f₁ x * f₂ x) =o[l] fun x => g₁ x * g₂ x :=
by
@@ -3307,23 +1573,11 @@ theorem IsLittleO.mul_isBigO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h
exact ((h₁ (div_pos cpos c'pos)).mul hc').congr_const (div_mul_cancel _ (ne_of_gt c'pos))
#align asymptotics.is_o.mul_is_O Asymptotics.IsLittleO.mul_isBigO
-/- warning: asymptotics.is_o.mul -> Asymptotics.IsLittleO.mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g₁ x) (g₂ x)))
-but is expected to have type
- forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u3} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))) (g₁ x) (g₂ x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.mul Asymptotics.IsLittleO.mulₓ'. -/
theorem IsLittleO.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =o[l] g₂) :
(fun x => f₁ x * f₂ x) =o[l] fun x => g₁ x * g₂ x :=
h₁.mul_isBigO h₂.IsBigO
#align asymptotics.is_o.mul Asymptotics.IsLittleO.mul
-/- warning: asymptotics.is_O_with.pow' -> Asymptotics.IsBigOWith.pow' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {c : Real} {l : Filter.{u1} α} {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) c l f g) -> (forall (n : Nat), Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (Nat.casesOn.{1} (fun (_x : Nat) => Real) n (Norm.norm.{u2} R (SeminormedRing.toHasNorm.{u2} R _inst_10) (OfNat.ofNat.{u2} R 1 (OfNat.mk.{u2} R 1 (One.one.{u2} R (AddMonoidWithOne.toOne.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (AddCommGroupWithOne.toAddGroupWithOne.{u2} R (Ring.toAddCommGroupWithOne.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))))))) (fun (n : Nat) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) c (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))))) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f x) n) (fun (x : α) => HPow.hPow.{u3, 0, u3} 𝕜 Nat 𝕜 (instHPow.{u3, 0} 𝕜 Nat (Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g x) n))
-but is expected to have type
- forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u3} α} {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigOWith.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l f g) -> (forall (n : Nat), Asymptotics.IsBigOWith.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) (Nat.casesOn.{1} (fun (_x : Nat) => Real) n (Norm.norm.{u2} R (SeminormedRing.toNorm.{u2} R _inst_10) (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (Semiring.toOne.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) (fun (n : Nat) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) c (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) (f x) n) (fun (x : α) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (g x) n))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.pow' Asymptotics.IsBigOWith.pow'ₓ'. -/
theorem IsBigOWith.pow' {f : α → R} {g : α → 𝕜} (h : IsBigOWith c l f g) :
∀ n : ℕ,
IsBigOWith (Nat.casesOn n ‖(1 : R)‖ fun n => c ^ (n + 1)) l (fun x => f x ^ n) fun x =>
@@ -3333,24 +1587,12 @@ theorem IsBigOWith.pow' {f : α → R} {g : α → 𝕜} (h : IsBigOWith c l f g
| n + 2 => by simpa [pow_succ] using h.mul (is_O_with.pow' (n + 1))
#align asymptotics.is_O_with.pow' Asymptotics.IsBigOWith.pow'
-/- warning: asymptotics.is_O_with.pow -> Asymptotics.IsBigOWith.pow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {c : Real} {l : Filter.{u1} α} [_inst_14 : NormOneClass.{u2} R (SeminormedRing.toHasNorm.{u2} R _inst_10) (AddMonoidWithOne.toOne.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (AddCommGroupWithOne.toAddGroupWithOne.{u2} R (Ring.toAddCommGroupWithOne.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))] {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) c l f g) -> (forall (n : Nat), Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) c n) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f x) n) (fun (x : α) => HPow.hPow.{u3, 0, u3} 𝕜 Nat 𝕜 (instHPow.{u3, 0} 𝕜 Nat (Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g x) n))
-but is expected to have type
- forall {α : Type.{u2}} {R : Type.{u3}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u3} R] [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u2} α} [_inst_14 : NormOneClass.{u3} R (SeminormedRing.toNorm.{u3} R _inst_10) (Semiring.toOne.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))] {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigOWith.{u2, u3, u1} α R 𝕜 (SeminormedRing.toNorm.{u3} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l f g) -> (forall (n : Nat), Asymptotics.IsBigOWith.{u2, u3, u1} α R 𝕜 (SeminormedRing.toNorm.{u3} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) c n) l (fun (x : α) => HPow.hPow.{u3, 0, u3} R Nat R (instHPow.{u3, 0} R Nat (Monoid.Pow.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))))) (f x) n) (fun (x : α) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (g x) n))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.pow Asymptotics.IsBigOWith.powₓ'. -/
theorem IsBigOWith.pow [NormOneClass R] {f : α → R} {g : α → 𝕜} (h : IsBigOWith c l f g) :
∀ n : ℕ, IsBigOWith (c ^ n) l (fun x => f x ^ n) fun x => g x ^ n
| 0 => by simpa using h.pow' 0
| n + 1 => h.pow' (n + 1)
#align asymptotics.is_O_with.pow Asymptotics.IsBigOWith.pow
-/- warning: asymptotics.is_O_with.of_pow -> Asymptotics.IsBigOWith.of_pow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {c : Real} {c' : Real} {l : Filter.{u1} α} {n : Nat} {f : α -> 𝕜} {g : α -> R}, (Asymptotics.IsBigOWith.{u1, u3, u2} α 𝕜 R (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (SeminormedRing.toHasNorm.{u2} R _inst_10) c l (HPow.hPow.{max u1 u3, 0, max u1 u3} (α -> 𝕜) Nat (α -> 𝕜) (instHPow.{max u1 u3, 0} (α -> 𝕜) Nat (Pi.hasPow.{u1, u3, 0} α Nat (fun (ᾰ : α) => 𝕜) (fun (i : α) => Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) f n) (HPow.hPow.{max u1 u2, 0, max u1 u2} (α -> R) Nat (α -> R) (instHPow.{max u1 u2, 0} (α -> R) Nat (Pi.hasPow.{u1, u2, 0} α Nat (fun (ᾰ : α) => R) (fun (i : α) => Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) g n)) -> (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (LE.le.{0} Real Real.hasLe c (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) c' n)) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') -> (Asymptotics.IsBigOWith.{u1, u3, u2} α 𝕜 R (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (SeminormedRing.toHasNorm.{u2} R _inst_10) c' l f g)
-but is expected to have type
- forall {α : Type.{u3}} {R : Type.{u1}} {𝕜 : Type.{u2}} [_inst_10 : SeminormedRing.{u1} R] [_inst_12 : NormedField.{u2} 𝕜] {c : Real} {c' : Real} {l : Filter.{u3} α} {n : Nat} {f : α -> 𝕜} {g : α -> R}, (Asymptotics.IsBigOWith.{u3, u2, u1} α 𝕜 R (NormedField.toNorm.{u2} 𝕜 _inst_12) (SeminormedRing.toNorm.{u1} R _inst_10) c l (HPow.hPow.{max u3 u2, 0, max u3 u2} (α -> 𝕜) Nat (α -> 𝕜) (instHPow.{max u3 u2, 0} (α -> 𝕜) Nat (Pi.instPow.{u3, u2, 0} α Nat (fun (ᾰ : α) => 𝕜) (fun (i : α) => Monoid.Pow.{u2} 𝕜 (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))))))))) f n) (HPow.hPow.{max u3 u1, 0, max u3 u1} (α -> R) Nat (α -> R) (instHPow.{max u3 u1, 0} (α -> R) Nat (Pi.instPow.{u3, u1, 0} α Nat (fun (ᾰ : α) => R) (fun (i : α) => Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))))) g n)) -> (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (LE.le.{0} Real Real.instLEReal c (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) c' n)) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') -> (Asymptotics.IsBigOWith.{u3, u2, u1} α 𝕜 R (NormedField.toNorm.{u2} 𝕜 _inst_12) (SeminormedRing.toNorm.{u1} R _inst_10) c' l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_pow Asymptotics.IsBigOWith.of_powₓ'. -/
theorem IsBigOWith.of_pow {n : ℕ} {f : α → 𝕜} {g : α → R} (h : IsBigOWith c l (f ^ n) (g ^ n))
(hn : n ≠ 0) (hc : c ≤ c' ^ n) (hc' : 0 ≤ c') : IsBigOWith c' l f g :=
IsBigOWith.of_bound <|
@@ -3365,24 +1607,12 @@ theorem IsBigOWith.of_pow {n : ℕ} {f : α → 𝕜} {g : α → R} (h : IsBigO
#align asymptotics.is_O_with.of_pow Asymptotics.IsBigOWith.of_pow
-/- warning: asymptotics.is_O.pow -> Asymptotics.IsBigO.pow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f g) -> (forall (n : Nat), Asymptotics.IsBigO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f x) n) (fun (x : α) => HPow.hPow.{u3, 0, u3} 𝕜 Nat 𝕜 (instHPow.{u3, 0} 𝕜 Nat (Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g x) n))
-but is expected to have type
- forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u3} α} {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) -> (forall (n : Nat), Asymptotics.IsBigO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) (f x) n) (fun (x : α) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (g x) n))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.pow Asymptotics.IsBigO.powₓ'. -/
theorem IsBigO.pow {f : α → R} {g : α → 𝕜} (h : f =O[l] g) (n : ℕ) :
(fun x => f x ^ n) =O[l] fun x => g x ^ n :=
let ⟨C, hC⟩ := h.IsBigOWith
isBigO_iff_isBigOWith.2 ⟨_, hC.pow' n⟩
#align asymptotics.is_O.pow Asymptotics.IsBigO.pow
-/- warning: asymptotics.is_O.of_pow -> Asymptotics.IsBigO.of_pow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> R} {n : Nat}, (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (Asymptotics.IsBigO.{u1, u3, u2} α 𝕜 R (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (SeminormedRing.toHasNorm.{u2} R _inst_10) l (HPow.hPow.{max u1 u3, 0, max u1 u3} (α -> 𝕜) Nat (α -> 𝕜) (instHPow.{max u1 u3, 0} (α -> 𝕜) Nat (Pi.hasPow.{u1, u3, 0} α Nat (fun (ᾰ : α) => 𝕜) (fun (i : α) => Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) f n) (HPow.hPow.{max u1 u2, 0, max u1 u2} (α -> R) Nat (α -> R) (instHPow.{max u1 u2, 0} (α -> R) Nat (Pi.hasPow.{u1, u2, 0} α Nat (fun (ᾰ : α) => R) (fun (i : α) => Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) g n)) -> (Asymptotics.IsBigO.{u1, u3, u2} α 𝕜 R (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (SeminormedRing.toHasNorm.{u2} R _inst_10) l f g)
-but is expected to have type
- forall {α : Type.{u3}} {R : Type.{u1}} {𝕜 : Type.{u2}} [_inst_10 : SeminormedRing.{u1} R] [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u3} α} {f : α -> 𝕜} {g : α -> R} {n : Nat}, (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (Asymptotics.IsBigO.{u3, u2, u1} α 𝕜 R (NormedField.toNorm.{u2} 𝕜 _inst_12) (SeminormedRing.toNorm.{u1} R _inst_10) l (HPow.hPow.{max u3 u2, 0, max u3 u2} (α -> 𝕜) Nat (α -> 𝕜) (instHPow.{max u3 u2, 0} (α -> 𝕜) Nat (Pi.instPow.{u3, u2, 0} α Nat (fun (ᾰ : α) => 𝕜) (fun (i : α) => Monoid.Pow.{u2} 𝕜 (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))))))))) f n) (HPow.hPow.{max u3 u1, 0, max u3 u1} (α -> R) Nat (α -> R) (instHPow.{max u3 u1, 0} (α -> R) Nat (Pi.instPow.{u3, u1, 0} α Nat (fun (ᾰ : α) => R) (fun (i : α) => Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))))) g n)) -> (Asymptotics.IsBigO.{u3, u2, u1} α 𝕜 R (NormedField.toNorm.{u2} 𝕜 _inst_12) (SeminormedRing.toNorm.{u1} R _inst_10) l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_pow Asymptotics.IsBigO.of_powₓ'. -/
theorem IsBigO.of_pow {f : α → 𝕜} {g : α → R} {n : ℕ} (hn : n ≠ 0) (h : (f ^ n) =O[l] (g ^ n)) :
f =O[l] g := by
rcases h.exists_pos with ⟨C, hC₀, hC⟩
@@ -3391,12 +1621,6 @@ theorem IsBigO.of_pow {f : α → 𝕜} {g : α → R} {n : ℕ} (hn : n ≠ 0)
exact (hC.of_pow hn hc hc₀).IsBigO
#align asymptotics.is_O.of_pow Asymptotics.IsBigO.of_pow
-/- warning: asymptotics.is_o.pow -> Asymptotics.IsLittleO.pow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f g) -> (forall {n : Nat}, (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) n) -> (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f x) n) (fun (x : α) => HPow.hPow.{u3, 0, u3} 𝕜 Nat 𝕜 (instHPow.{u3, 0} 𝕜 Nat (Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g x) n)))
-but is expected to have type
- forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u3} α} {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) -> (forall {n : Nat}, (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) n) -> (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) (f x) n) (fun (x : α) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (g x) n)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.pow Asymptotics.IsLittleO.powₓ'. -/
theorem IsLittleO.pow {f : α → R} {g : α → 𝕜} (h : f =o[l] g) {n : ℕ} (hn : 0 < n) :
(fun x => f x ^ n) =o[l] fun x => g x ^ n :=
by
@@ -3405,12 +1629,6 @@ theorem IsLittleO.pow {f : α → R} {g : α → 𝕜} (h : f =o[l] g) {n : ℕ}
convert h.mul ihn <;> simp [pow_succ]
#align asymptotics.is_o.pow Asymptotics.IsLittleO.pow
-/- warning: asymptotics.is_o.of_pow -> Asymptotics.IsLittleO.of_pow is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> R} {n : Nat}, (Asymptotics.IsLittleO.{u1, u3, u2} α 𝕜 R (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (SeminormedRing.toHasNorm.{u2} R _inst_10) l (HPow.hPow.{max u1 u3, 0, max u1 u3} (α -> 𝕜) Nat (α -> 𝕜) (instHPow.{max u1 u3, 0} (α -> 𝕜) Nat (Pi.hasPow.{u1, u3, 0} α Nat (fun (ᾰ : α) => 𝕜) (fun (i : α) => Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) f n) (HPow.hPow.{max u1 u2, 0, max u1 u2} (α -> R) Nat (α -> R) (instHPow.{max u1 u2, 0} (α -> R) Nat (Pi.hasPow.{u1, u2, 0} α Nat (fun (ᾰ : α) => R) (fun (i : α) => Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) g n)) -> (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (Asymptotics.IsLittleO.{u1, u3, u2} α 𝕜 R (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (SeminormedRing.toHasNorm.{u2} R _inst_10) l f g)
-but is expected to have type
- forall {α : Type.{u3}} {R : Type.{u1}} {𝕜 : Type.{u2}} [_inst_10 : SeminormedRing.{u1} R] [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u3} α} {f : α -> 𝕜} {g : α -> R} {n : Nat}, (Asymptotics.IsLittleO.{u3, u2, u1} α 𝕜 R (NormedField.toNorm.{u2} 𝕜 _inst_12) (SeminormedRing.toNorm.{u1} R _inst_10) l (HPow.hPow.{max u3 u2, 0, max u3 u2} (α -> 𝕜) Nat (α -> 𝕜) (instHPow.{max u3 u2, 0} (α -> 𝕜) Nat (Pi.instPow.{u3, u2, 0} α Nat (fun (ᾰ : α) => 𝕜) (fun (i : α) => Monoid.Pow.{u2} 𝕜 (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))))))))) f n) (HPow.hPow.{max u3 u1, 0, max u3 u1} (α -> R) Nat (α -> R) (instHPow.{max u3 u1, 0} (α -> R) Nat (Pi.instPow.{u3, u1, 0} α Nat (fun (ᾰ : α) => R) (fun (i : α) => Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))))) g n)) -> (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (Asymptotics.IsLittleO.{u3, u2, u1} α 𝕜 R (NormedField.toNorm.{u2} 𝕜 _inst_12) (SeminormedRing.toNorm.{u1} R _inst_10) l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_pow Asymptotics.IsLittleO.of_powₓ'. -/
theorem IsLittleO.of_pow {f : α → 𝕜} {g : α → R} {n : ℕ} (h : (f ^ n) =o[l] (g ^ n)) (hn : n ≠ 0) :
f =o[l] g :=
IsLittleO.of_isBigOWith fun c hc => (h.def' <| pow_pos hc _).ofPow hn le_rfl hc.le
@@ -3419,12 +1637,6 @@ theorem IsLittleO.of_pow {f : α → 𝕜} {g : α → R} {n : ℕ} (h : (f ^ n)
/-! ### Inverse -/
-/- warning: asymptotics.is_O_with.inv_rev -> Asymptotics.IsBigOWith.inv_rev is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} {𝕜' : Type.{u3}} [_inst_12 : NormedField.{u2} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {c : Real} {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜'}, (Asymptotics.IsBigOWith.{u1, u2, u3} α 𝕜 𝕜' (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u3} 𝕜' _inst_13) c l f g) -> (Filter.Eventually.{u1} α (fun (x : α) => (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u3} 𝕜' (g x) (OfNat.ofNat.{u3} 𝕜' 0 (OfNat.mk.{u3} 𝕜' 0 (Zero.zero.{u3} 𝕜' (MulZeroClass.toHasZero.{u3} 𝕜' (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜' (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜' (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜' (Ring.toNonAssocRing.{u3} 𝕜' (NormedRing.toRing.{u3} 𝕜' (NormedCommRing.toNormedRing.{u3} 𝕜' (NormedField.toNormedCommRing.{u3} 𝕜' _inst_13))))))))))))) l) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α 𝕜' 𝕜 (NormedField.toHasNorm.{u3} 𝕜' _inst_13) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) c l (fun (x : α) => Inv.inv.{u3} 𝕜' (DivInvMonoid.toHasInv.{u3} 𝕜' (DivisionRing.toDivInvMonoid.{u3} 𝕜' (NormedDivisionRing.toDivisionRing.{u3} 𝕜' (NormedField.toNormedDivisionRing.{u3} 𝕜' _inst_13)))) (g x)) (fun (x : α) => Inv.inv.{u2} 𝕜 (DivInvMonoid.toHasInv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12)))) (f x)))
-but is expected to have type
- forall {α : Type.{u3}} {𝕜 : Type.{u2}} {𝕜' : Type.{u1}} [_inst_12 : NormedField.{u2} 𝕜] [_inst_13 : NormedField.{u1} 𝕜'] {c : Real} {l : Filter.{u3} α} {f : α -> 𝕜} {g : α -> 𝕜'}, (Asymptotics.IsBigOWith.{u3, u2, u1} α 𝕜 𝕜' (NormedField.toNorm.{u2} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜' _inst_13) c l f g) -> (Filter.Eventually.{u3} α (fun (x : α) => (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜' (g x) (OfNat.ofNat.{u1} 𝕜' 0 (Zero.toOfNat0.{u1} 𝕜' (CommMonoidWithZero.toZero.{u1} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜' (Semifield.toCommGroupWithZero.{u1} 𝕜' (Field.toSemifield.{u1} 𝕜' (NormedField.toField.{u1} 𝕜' _inst_13))))))))) l) -> (Asymptotics.IsBigOWith.{u3, u1, u2} α 𝕜' 𝕜 (NormedField.toNorm.{u1} 𝕜' _inst_13) (NormedField.toNorm.{u2} 𝕜 _inst_12) c l (fun (x : α) => Inv.inv.{u1} 𝕜' (Field.toInv.{u1} 𝕜' (NormedField.toField.{u1} 𝕜' _inst_13)) (g x)) (fun (x : α) => Inv.inv.{u2} 𝕜 (Field.toInv.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)) (f x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.inv_rev Asymptotics.IsBigOWith.inv_revₓ'. -/
theorem IsBigOWith.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : IsBigOWith c l f g)
(h₀ : ∀ᶠ x in l, f x = 0 → g x = 0) : IsBigOWith c l (fun x => (g x)⁻¹) fun x => (f x)⁻¹ :=
by
@@ -3436,24 +1648,12 @@ theorem IsBigOWith.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : IsBigOWith
simpa only [norm_inv, mul_inv, ← div_eq_inv_mul, div_le_iff hc] using hle
#align asymptotics.is_O_with.inv_rev Asymptotics.IsBigOWith.inv_rev
-/- warning: asymptotics.is_O.inv_rev -> Asymptotics.IsBigO.inv_rev is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} {𝕜' : Type.{u3}} [_inst_12 : NormedField.{u2} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜'}, (Asymptotics.IsBigO.{u1, u2, u3} α 𝕜 𝕜' (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u3} 𝕜' _inst_13) l f g) -> (Filter.Eventually.{u1} α (fun (x : α) => (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u3} 𝕜' (g x) (OfNat.ofNat.{u3} 𝕜' 0 (OfNat.mk.{u3} 𝕜' 0 (Zero.zero.{u3} 𝕜' (MulZeroClass.toHasZero.{u3} 𝕜' (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜' (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜' (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜' (Ring.toNonAssocRing.{u3} 𝕜' (NormedRing.toRing.{u3} 𝕜' (NormedCommRing.toNormedRing.{u3} 𝕜' (NormedField.toNormedCommRing.{u3} 𝕜' _inst_13))))))))))))) l) -> (Asymptotics.IsBigO.{u1, u3, u2} α 𝕜' 𝕜 (NormedField.toHasNorm.{u3} 𝕜' _inst_13) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l (fun (x : α) => Inv.inv.{u3} 𝕜' (DivInvMonoid.toHasInv.{u3} 𝕜' (DivisionRing.toDivInvMonoid.{u3} 𝕜' (NormedDivisionRing.toDivisionRing.{u3} 𝕜' (NormedField.toNormedDivisionRing.{u3} 𝕜' _inst_13)))) (g x)) (fun (x : α) => Inv.inv.{u2} 𝕜 (DivInvMonoid.toHasInv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12)))) (f x)))
-but is expected to have type
- forall {α : Type.{u3}} {𝕜 : Type.{u2}} {𝕜' : Type.{u1}} [_inst_12 : NormedField.{u2} 𝕜] [_inst_13 : NormedField.{u1} 𝕜'] {l : Filter.{u3} α} {f : α -> 𝕜} {g : α -> 𝕜'}, (Asymptotics.IsBigO.{u3, u2, u1} α 𝕜 𝕜' (NormedField.toNorm.{u2} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜' _inst_13) l f g) -> (Filter.Eventually.{u3} α (fun (x : α) => (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜' (g x) (OfNat.ofNat.{u1} 𝕜' 0 (Zero.toOfNat0.{u1} 𝕜' (CommMonoidWithZero.toZero.{u1} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜' (Semifield.toCommGroupWithZero.{u1} 𝕜' (Field.toSemifield.{u1} 𝕜' (NormedField.toField.{u1} 𝕜' _inst_13))))))))) l) -> (Asymptotics.IsBigO.{u3, u1, u2} α 𝕜' 𝕜 (NormedField.toNorm.{u1} 𝕜' _inst_13) (NormedField.toNorm.{u2} 𝕜 _inst_12) l (fun (x : α) => Inv.inv.{u1} 𝕜' (Field.toInv.{u1} 𝕜' (NormedField.toField.{u1} 𝕜' _inst_13)) (g x)) (fun (x : α) => Inv.inv.{u2} 𝕜 (Field.toInv.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)) (f x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.inv_rev Asymptotics.IsBigO.inv_revₓ'. -/
theorem IsBigO.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : f =O[l] g)
(h₀ : ∀ᶠ x in l, f x = 0 → g x = 0) : (fun x => (g x)⁻¹) =O[l] fun x => (f x)⁻¹ :=
let ⟨c, hc⟩ := h.IsBigOWith
(hc.inv_rev h₀).IsBigO
#align asymptotics.is_O.inv_rev Asymptotics.IsBigO.inv_rev
-/- warning: asymptotics.is_o.inv_rev -> Asymptotics.IsLittleO.inv_rev is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} {𝕜' : Type.{u3}} [_inst_12 : NormedField.{u2} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜'}, (Asymptotics.IsLittleO.{u1, u2, u3} α 𝕜 𝕜' (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u3} 𝕜' _inst_13) l f g) -> (Filter.Eventually.{u1} α (fun (x : α) => (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u3} 𝕜' (g x) (OfNat.ofNat.{u3} 𝕜' 0 (OfNat.mk.{u3} 𝕜' 0 (Zero.zero.{u3} 𝕜' (MulZeroClass.toHasZero.{u3} 𝕜' (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜' (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜' (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜' (Ring.toNonAssocRing.{u3} 𝕜' (NormedRing.toRing.{u3} 𝕜' (NormedCommRing.toNormedRing.{u3} 𝕜' (NormedField.toNormedCommRing.{u3} 𝕜' _inst_13))))))))))))) l) -> (Asymptotics.IsLittleO.{u1, u3, u2} α 𝕜' 𝕜 (NormedField.toHasNorm.{u3} 𝕜' _inst_13) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l (fun (x : α) => Inv.inv.{u3} 𝕜' (DivInvMonoid.toHasInv.{u3} 𝕜' (DivisionRing.toDivInvMonoid.{u3} 𝕜' (NormedDivisionRing.toDivisionRing.{u3} 𝕜' (NormedField.toNormedDivisionRing.{u3} 𝕜' _inst_13)))) (g x)) (fun (x : α) => Inv.inv.{u2} 𝕜 (DivInvMonoid.toHasInv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12)))) (f x)))
-but is expected to have type
- forall {α : Type.{u3}} {𝕜 : Type.{u2}} {𝕜' : Type.{u1}} [_inst_12 : NormedField.{u2} 𝕜] [_inst_13 : NormedField.{u1} 𝕜'] {l : Filter.{u3} α} {f : α -> 𝕜} {g : α -> 𝕜'}, (Asymptotics.IsLittleO.{u3, u2, u1} α 𝕜 𝕜' (NormedField.toNorm.{u2} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜' _inst_13) l f g) -> (Filter.Eventually.{u3} α (fun (x : α) => (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜' (g x) (OfNat.ofNat.{u1} 𝕜' 0 (Zero.toOfNat0.{u1} 𝕜' (CommMonoidWithZero.toZero.{u1} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜' (Semifield.toCommGroupWithZero.{u1} 𝕜' (Field.toSemifield.{u1} 𝕜' (NormedField.toField.{u1} 𝕜' _inst_13))))))))) l) -> (Asymptotics.IsLittleO.{u3, u1, u2} α 𝕜' 𝕜 (NormedField.toNorm.{u1} 𝕜' _inst_13) (NormedField.toNorm.{u2} 𝕜 _inst_12) l (fun (x : α) => Inv.inv.{u1} 𝕜' (Field.toInv.{u1} 𝕜' (NormedField.toField.{u1} 𝕜' _inst_13)) (g x)) (fun (x : α) => Inv.inv.{u2} 𝕜 (Field.toInv.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)) (f x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.inv_rev Asymptotics.IsLittleO.inv_revₓ'. -/
theorem IsLittleO.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : f =o[l] g)
(h₀ : ∀ᶠ x in l, f x = 0 → g x = 0) : (fun x => (g x)⁻¹) =o[l] fun x => (f x)⁻¹ :=
IsLittleO.of_isBigOWith fun c hc => (h.def' hc).inv_rev h₀
@@ -3466,33 +1666,21 @@ section SmulConst
variable [NormedSpace 𝕜 E']
-/- warning: asymptotics.is_O_with.const_smul_left -> Asymptotics.IsBigOWith.const_smul_left is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.const_smul_left Asymptotics.IsBigOWith.const_smul_leftₓ'. -/
theorem IsBigOWith.const_smul_left (h : IsBigOWith c l f' g) (c' : 𝕜) :
IsBigOWith (‖c'‖ * c) l (fun x => c' • f' x) g :=
IsBigOWith.of_norm_left <| by
simpa only [← norm_smul, norm_norm] using h.norm_left.const_mul_left ‖c'‖
#align asymptotics.is_O_with.const_smul_left Asymptotics.IsBigOWith.const_smul_left
-/- warning: asymptotics.is_O.const_smul_left -> Asymptotics.IsBigO.const_smul_left is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.const_smul_left Asymptotics.IsBigO.const_smul_leftₓ'. -/
theorem IsBigO.const_smul_left (h : f' =O[l] g) (c : 𝕜) : (c • f') =O[l] g :=
let ⟨b, hb⟩ := h.IsBigOWith
(hb.const_smul_left _).IsBigO
#align asymptotics.is_O.const_smul_left Asymptotics.IsBigO.const_smul_left
-/- warning: asymptotics.is_o.const_smul_left -> Asymptotics.IsLittleO.const_smul_left is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.const_smul_left Asymptotics.IsLittleO.const_smul_leftₓ'. -/
theorem IsLittleO.const_smul_left (h : f' =o[l] g) (c : 𝕜) : (c • f') =o[l] g :=
IsLittleO.of_norm_left <| by simpa only [← norm_smul] using h.norm_left.const_mul_left ‖c‖
#align asymptotics.is_o.const_smul_left Asymptotics.IsLittleO.const_smul_left
-/- warning: asymptotics.is_O_const_smul_left -> Asymptotics.isBigO_const_smul_left is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_smul_left Asymptotics.isBigO_const_smul_leftₓ'. -/
theorem isBigO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x) =O[l] g ↔ f' =O[l] g :=
by
have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
@@ -3500,9 +1688,6 @@ theorem isBigO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x)
rw [is_O_const_mul_left_iff cne0, is_O_norm_left]
#align asymptotics.is_O_const_smul_left Asymptotics.isBigO_const_smul_left
-/- warning: asymptotics.is_o_const_smul_left -> Asymptotics.isLittleO_const_smul_left is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_smul_left Asymptotics.isLittleO_const_smul_leftₓ'. -/
theorem isLittleO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x) =o[l] g ↔ f' =o[l] g :=
by
have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
@@ -3510,9 +1695,6 @@ theorem isLittleO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f'
rw [is_o_const_mul_left_iff cne0, is_o_norm_left]
#align asymptotics.is_o_const_smul_left Asymptotics.isLittleO_const_smul_left
-/- warning: asymptotics.is_O_const_smul_right -> Asymptotics.isBigO_const_smul_right is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_smul_right Asymptotics.isBigO_const_smul_rightₓ'. -/
theorem isBigO_const_smul_right {c : 𝕜} (hc : c ≠ 0) : (f =O[l] fun x => c • f' x) ↔ f =O[l] f' :=
by
have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
@@ -3520,9 +1702,6 @@ theorem isBigO_const_smul_right {c : 𝕜} (hc : c ≠ 0) : (f =O[l] fun x => c
rw [is_O_const_mul_right_iff cne0, is_O_norm_right]
#align asymptotics.is_O_const_smul_right Asymptotics.isBigO_const_smul_right
-/- warning: asymptotics.is_o_const_smul_right -> Asymptotics.isLittleO_const_smul_right is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_smul_right Asymptotics.isLittleO_const_smul_rightₓ'. -/
theorem isLittleO_const_smul_right {c : 𝕜} (hc : c ≠ 0) :
(f =o[l] fun x => c • f' x) ↔ f =o[l] f' :=
by
@@ -3537,45 +1716,30 @@ section Smul
variable [NormedSpace 𝕜 E'] [NormedSpace 𝕜' F'] {k₁ : α → 𝕜} {k₂ : α → 𝕜'}
-/- warning: asymptotics.is_O_with.smul -> Asymptotics.IsBigOWith.smul is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.smul Asymptotics.IsBigOWith.smulₓ'. -/
theorem IsBigOWith.smul (h₁ : IsBigOWith c l k₁ k₂) (h₂ : IsBigOWith c' l f' g') :
IsBigOWith (c * c') l (fun x => k₁ x • f' x) fun x => k₂ x • g' x := by
refine' ((h₁.norm_norm.mul h₂.norm_norm).congr rfl _ _).of_norm_norm <;>
· intros <;> simp only [norm_smul]
#align asymptotics.is_O_with.smul Asymptotics.IsBigOWith.smul
-/- warning: asymptotics.is_O.smul -> Asymptotics.IsBigO.smul is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.smul Asymptotics.IsBigO.smulₓ'. -/
theorem IsBigO.smul (h₁ : k₁ =O[l] k₂) (h₂ : f' =O[l] g') :
(fun x => k₁ x • f' x) =O[l] fun x => k₂ x • g' x := by
refine' ((h₁.norm_norm.mul h₂.norm_norm).congr _ _).of_norm_norm <;>
· intros <;> simp only [norm_smul]
#align asymptotics.is_O.smul Asymptotics.IsBigO.smul
-/- warning: asymptotics.is_O.smul_is_o -> Asymptotics.IsBigO.smul_isLittleO is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.smul_is_o Asymptotics.IsBigO.smul_isLittleOₓ'. -/
theorem IsBigO.smul_isLittleO (h₁ : k₁ =O[l] k₂) (h₂ : f' =o[l] g') :
(fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x := by
refine' ((h₁.norm_norm.mul_is_o h₂.norm_norm).congr _ _).of_norm_norm <;>
· intros <;> simp only [norm_smul]
#align asymptotics.is_O.smul_is_o Asymptotics.IsBigO.smul_isLittleO
-/- warning: asymptotics.is_o.smul_is_O -> Asymptotics.IsLittleO.smul_isBigO is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.smul_is_O Asymptotics.IsLittleO.smul_isBigOₓ'. -/
theorem IsLittleO.smul_isBigO (h₁ : k₁ =o[l] k₂) (h₂ : f' =O[l] g') :
(fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x := by
refine' ((h₁.norm_norm.mul_is_O h₂.norm_norm).congr _ _).of_norm_norm <;>
· intros <;> simp only [norm_smul]
#align asymptotics.is_o.smul_is_O Asymptotics.IsLittleO.smul_isBigO
-/- warning: asymptotics.is_o.smul -> Asymptotics.IsLittleO.smul is a dubious translation:
-<too large>
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.smul Asymptotics.IsLittleO.smulₓ'. -/
theorem IsLittleO.smul (h₁ : k₁ =o[l] k₂) (h₂ : f' =o[l] g') :
(fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x := by
refine' ((h₁.norm_norm.mul h₂.norm_norm).congr _ _).of_norm_norm <;>
@@ -3591,12 +1755,6 @@ section Sum
variable {ι : Type _} {A : ι → α → E'} {C : ι → ℝ} {s : Finset ι}
-/- warning: asymptotics.is_O_with.sum -> Asymptotics.IsBigOWith.sum is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {ι : Type.{u4}} {A : ι -> α -> E'} {C : ι -> Real} {s : Finset.{u4} ι}, (forall (i : ι), (Membership.Mem.{u4, u4} ι (Finset.{u4} ι) (Finset.hasMem.{u4} ι) i s) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 (C i) l (A i) g)) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 (Finset.sum.{0, u4} Real ι Real.addCommMonoid s (fun (i : ι) => C i)) l (fun (x : α) => Finset.sum.{u3, u4} E' ι (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) s (fun (i : ι) => A i x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {ι : Type.{u4}} {A : ι -> α -> E'} {C : ι -> Real} {s : Finset.{u4} ι}, (forall (i : ι), (Membership.mem.{u4, u4} ι (Finset.{u4} ι) (Finset.instMembershipFinset.{u4} ι) i s) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 (C i) l (A i) g)) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 (Finset.sum.{0, u4} Real ι Real.instAddCommMonoidReal s (fun (i : ι) => C i)) l (fun (x : α) => Finset.sum.{u2, u4} E' ι (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) s (fun (i : ι) => A i x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.sum Asymptotics.IsBigOWith.sumₓ'. -/
theorem IsBigOWith.sum (h : ∀ i ∈ s, IsBigOWith (C i) l (A i) g) :
IsBigOWith (∑ i in s, C i) l (fun x => ∑ i in s, A i x) g :=
by
@@ -3606,12 +1764,6 @@ theorem IsBigOWith.sum (h : ∀ i ∈ s, IsBigOWith (C i) l (A i) g) :
exact (h _ (Finset.mem_insert_self i s)).add (IH fun j hj => h _ (Finset.mem_insert_of_mem hj))
#align asymptotics.is_O_with.sum Asymptotics.IsBigOWith.sum
-/- warning: asymptotics.is_O.sum -> Asymptotics.IsBigO.sum is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {ι : Type.{u4}} {A : ι -> α -> E'} {s : Finset.{u4} ι}, (forall (i : ι), (Membership.Mem.{u4, u4} ι (Finset.{u4} ι) (Finset.hasMem.{u4} ι) i s) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (A i) g)) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => Finset.sum.{u3, u4} E' ι (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) s (fun (i : ι) => A i x)) g)
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {ι : Type.{u4}} {A : ι -> α -> E'} {s : Finset.{u4} ι}, (forall (i : ι), (Membership.mem.{u4, u4} ι (Finset.{u4} ι) (Finset.instMembershipFinset.{u4} ι) i s) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (A i) g)) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => Finset.sum.{u2, u4} E' ι (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) s (fun (i : ι) => A i x)) g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.sum Asymptotics.IsBigO.sumₓ'. -/
theorem IsBigO.sum (h : ∀ i ∈ s, A i =O[l] g) : (fun x => ∑ i in s, A i x) =O[l] g :=
by
unfold is_O at *
@@ -3619,12 +1771,6 @@ theorem IsBigO.sum (h : ∀ i ∈ s, A i =O[l] g) : (fun x => ∑ i in s, A i x)
exact ⟨_, is_O_with.sum hC⟩
#align asymptotics.is_O.sum Asymptotics.IsBigO.sum
-/- warning: asymptotics.is_o.sum -> Asymptotics.IsLittleO.sum is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {g' : α -> F'} {l : Filter.{u1} α} {ι : Type.{u4}} {A : ι -> α -> E'} {s : Finset.{u4} ι}, (forall (i : ι), (Membership.Mem.{u4, u4} ι (Finset.{u4} ι) (Finset.hasMem.{u4} ι) i s) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (A i) g')) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => Finset.sum.{u2, u4} E' ι (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) s (fun (i : ι) => A i x)) g')
-but is expected to have type
- forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {g' : α -> F'} {l : Filter.{u3} α} {ι : Type.{u4}} {A : ι -> α -> E'} {s : Finset.{u4} ι}, (forall (i : ι), (Membership.mem.{u4, u4} ι (Finset.{u4} ι) (Finset.instMembershipFinset.{u4} ι) i s) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (A i) g')) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => Finset.sum.{u2, u4} E' ι (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) s (fun (i : ι) => A i x)) g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.sum Asymptotics.IsLittleO.sumₓ'. -/
theorem IsLittleO.sum (h : ∀ i ∈ s, A i =o[l] g') : (fun x => ∑ i in s, A i x) =o[l] g' :=
by
induction' s using Finset.induction_on with i s is IH
@@ -3638,12 +1784,6 @@ end Sum
/-! ### Relation between `f = o(g)` and `f / g → 0` -/
-/- warning: asymptotics.is_o.tendsto_div_nhds_zero -> Asymptotics.IsLittleO.tendsto_div_nhds_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l f g) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (x : α) => HDiv.hDiv.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHDiv.{u2} 𝕜 (DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12))))) (f x) (g x)) l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Asymptotics.IsLittleO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) -> (Filter.Tendsto.{u2, u1} α 𝕜 (fun (x : α) => HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x)) l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.tendsto_div_nhds_zero Asymptotics.IsLittleO.tendsto_div_nhds_zeroₓ'. -/
theorem IsLittleO.tendsto_div_nhds_zero {f g : α → 𝕜} (h : f =o[l] g) :
Tendsto (fun x => f x / g x) l (𝓝 0) :=
(isLittleO_one_iff 𝕜).mp <|
@@ -3654,24 +1794,12 @@ theorem IsLittleO.tendsto_div_nhds_zero {f g : α → 𝕜} (h : f =o[l] g) :
#align asymptotics.is_o.tendsto_div_nhds_zero Asymptotics.IsLittleO.tendsto_div_nhds_zero
-/- warning: asymptotics.is_o.tendsto_inv_smul_nhds_zero -> Asymptotics.IsLittleO.tendsto_inv_smul_nhds_zero is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {𝕜 : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_12 : NormedField.{u3} 𝕜] [_inst_14 : NormedSpace.{u3, u2} 𝕜 E' _inst_12 _inst_4] {f : α -> E'} {g : α -> 𝕜} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E' 𝕜 (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f g) -> (Filter.Tendsto.{u1, u2} α E' (fun (x : α) => SMul.smul.{u3, u2} 𝕜 E' (SMulZeroClass.toHasSmul.{u3, u2} 𝕜 E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u3, u2} 𝕜 E' (MulZeroClass.toHasZero.{u3} 𝕜 (MulZeroOneClass.toMulZeroClass.{u3} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u3} 𝕜 (Semiring.toMonoidWithZero.{u3} 𝕜 (Ring.toSemiring.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u3, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u3} 𝕜 (Ring.toSemiring.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (Module.toMulActionWithZero.{u3, u2} 𝕜 E' (Ring.toSemiring.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u3, u2} 𝕜 E' _inst_12 _inst_4 _inst_14))))) (Inv.inv.{u3} 𝕜 (DivInvMonoid.toHasInv.{u3} 𝕜 (DivisionRing.toDivInvMonoid.{u3} 𝕜 (NormedDivisionRing.toDivisionRing.{u3} 𝕜 (NormedField.toNormedDivisionRing.{u3} 𝕜 _inst_12)))) (g x)) (f x)) l (nhds.{u2} E' (UniformSpace.toTopologicalSpace.{u2} E' (PseudoMetricSpace.toUniformSpace.{u2} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E' _inst_4))) (OfNat.ofNat.{u2} E' 0 (OfNat.mk.{u2} E' 0 (Zero.zero.{u2} E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4)))))))))))
-but is expected to have type
- forall {α : Type.{u1}} {E' : Type.{u2}} {𝕜 : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_12 : NormedField.{u3} 𝕜] [_inst_14 : NormedSpace.{u3, u2} 𝕜 E' _inst_12 _inst_4] {f : α -> E'} {g : α -> 𝕜} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E' 𝕜 (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (NormedField.toNorm.{u3} 𝕜 _inst_12) l f g) -> (Filter.Tendsto.{u1, u2} α E' (fun (x : α) => HSMul.hSMul.{u3, u2, u2} 𝕜 E' E' (instHSMul.{u3, u2} 𝕜 E' (SMulZeroClass.toSMul.{u3, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u3, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u3, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u3} 𝕜 (DivisionSemiring.toSemiring.{u3} 𝕜 (Semifield.toDivisionSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u3, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u3} 𝕜 (Semifield.toDivisionSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u3, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) (Inv.inv.{u3} 𝕜 (Field.toInv.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)) (g x)) (f x)) l (nhds.{u2} E' (UniformSpace.toTopologicalSpace.{u2} E' (PseudoMetricSpace.toUniformSpace.{u2} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E' _inst_4))) (OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.tendsto_inv_smul_nhds_zero Asymptotics.IsLittleO.tendsto_inv_smul_nhds_zeroₓ'. -/
theorem IsLittleO.tendsto_inv_smul_nhds_zero [NormedSpace 𝕜 E'] {f : α → E'} {g : α → 𝕜}
{l : Filter α} (h : f =o[l] g) : Tendsto (fun x => (g x)⁻¹ • f x) l (𝓝 0) := by
simpa only [div_eq_inv_mul, ← norm_inv, ← norm_smul, ← tendsto_zero_iff_norm_tendsto_zero] using
h.norm_norm.tendsto_div_nhds_zero
#align asymptotics.is_o.tendsto_inv_smul_nhds_zero Asymptotics.IsLittleO.tendsto_inv_smul_nhds_zero
-/- warning: asymptotics.is_o_iff_tendsto' -> Asymptotics.isLittleO_iff_tendsto' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u1} α (fun (x : α) => (Eq.{succ u2} 𝕜 (g x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) l) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l f g) (Filter.Tendsto.{u1, u2} α 𝕜 (fun (x : α) => HDiv.hDiv.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHDiv.{u2} 𝕜 (DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12))))) (f x) (g x)) l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) l) -> (Iff (Asymptotics.IsLittleO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) (Filter.Tendsto.{u2, u1} α 𝕜 (fun (x : α) => HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x)) l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff_tendsto' Asymptotics.isLittleO_iff_tendsto'ₓ'. -/
theorem isLittleO_iff_tendsto' {f g : α → 𝕜} (hgf : ∀ᶠ x in l, g x = 0 → f x = 0) :
f =o[l] g ↔ Tendsto (fun x => f x / g x) l (𝓝 0) :=
⟨IsLittleO.tendsto_div_nhds_zero, fun h =>
@@ -3679,41 +1807,17 @@ theorem isLittleO_iff_tendsto' {f g : α → 𝕜} (hgf : ∀ᶠ x in l, g x = 0
(hgf.mono fun x => div_mul_cancel_of_imp) (eventually_of_forall fun x => one_mul _)⟩
#align asymptotics.is_o_iff_tendsto' Asymptotics.isLittleO_iff_tendsto'
-/- warning: asymptotics.is_o_iff_tendsto -> Asymptotics.isLittleO_iff_tendsto is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜}, (forall (x : α), (Eq.{succ u2} 𝕜 (g x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l f g) (Filter.Tendsto.{u1, u2} α 𝕜 (fun (x : α) => HDiv.hDiv.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHDiv.{u2} 𝕜 (DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12))))) (f x) (g x)) l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))))
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜}, (forall (x : α), (Eq.{succ u2} 𝕜 (g x) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)))))))) -> (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toNorm.{u2} 𝕜 _inst_12) (NormedField.toNorm.{u2} 𝕜 _inst_12) l f g) (Filter.Tendsto.{u1, u2} α 𝕜 (fun (x : α) => HDiv.hDiv.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHDiv.{u2} 𝕜 (Field.toDiv.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))) (f x) (g x)) l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSeminormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff_tendsto Asymptotics.isLittleO_iff_tendstoₓ'. -/
theorem isLittleO_iff_tendsto {f g : α → 𝕜} (hgf : ∀ x, g x = 0 → f x = 0) :
f =o[l] g ↔ Tendsto (fun x => f x / g x) l (𝓝 0) :=
isLittleO_iff_tendsto' (eventually_of_forall hgf)
#align asymptotics.is_o_iff_tendsto Asymptotics.isLittleO_iff_tendsto
-/- warning: asymptotics.is_o_of_tendsto' -> Asymptotics.isLittleO_of_tendsto' is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u1} α (fun (x : α) => (Eq.{succ u2} 𝕜 (g x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) l) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (x : α) => HDiv.hDiv.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHDiv.{u2} 𝕜 (DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12))))) (f x) (g x)) l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) -> (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l f g)
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) l) -> (Filter.Tendsto.{u2, u1} α 𝕜 (fun (x : α) => HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x)) l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) -> (Asymptotics.IsLittleO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_of_tendsto' Asymptotics.isLittleO_of_tendsto'ₓ'. -/
alias is_o_iff_tendsto' ↔ _ is_o_of_tendsto'
#align asymptotics.is_o_of_tendsto' Asymptotics.isLittleO_of_tendsto'
-/- warning: asymptotics.is_o_of_tendsto -> Asymptotics.isLittleO_of_tendsto is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜}, (forall (x : α), (Eq.{succ u2} 𝕜 (g x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (x : α) => HDiv.hDiv.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHDiv.{u2} 𝕜 (DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12))))) (f x) (g x)) l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) -> (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l f g)
-but is expected to have type
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜}, (forall (x : α), (Eq.{succ u2} 𝕜 (g x) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)))))))) -> (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))))))))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (x : α) => HDiv.hDiv.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHDiv.{u2} 𝕜 (Field.toDiv.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))) (f x) (g x)) l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSeminormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))))))))) -> (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toNorm.{u2} 𝕜 _inst_12) (NormedField.toNorm.{u2} 𝕜 _inst_12) l f g)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_of_tendsto Asymptotics.isLittleO_of_tendstoₓ'. -/
alias is_o_iff_tendsto ↔ _ is_o_of_tendsto
#align asymptotics.is_o_of_tendsto Asymptotics.isLittleO_of_tendsto
-/- warning: asymptotics.is_o_const_left_of_ne -> Asymptotics.isLittleO_const_left_of_ne is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E'' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_7 : NormedAddCommGroup.{u3} E''] {g : α -> F} {l : Filter.{u1} α} {c : E''}, (Ne.{succ u3} E'' c (OfNat.ofNat.{u3} E'' 0 (OfNat.mk.{u3} E'' 0 (Zero.zero.{u3} E'' (AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E'' F (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) _inst_2 l (fun (x : α) => c) g) (Filter.Tendsto.{u1, 0} α Real (fun (x : α) => Norm.norm.{u2} F _inst_2 (g x)) l (Filter.atTop.{0} Real Real.preorder)))
-but is expected to have type
- forall {α : Type.{u2}} {F : Type.{u1}} {E'' : Type.{u3}} [_inst_2 : Norm.{u1} F] [_inst_7 : NormedAddCommGroup.{u3} E''] {g : α -> F} {l : Filter.{u2} α} {c : E''}, (Ne.{succ u3} E'' c (OfNat.ofNat.{u3} E'' 0 (Zero.toOfNat0.{u3} E'' (NegZeroClass.toZero.{u3} E'' (SubNegZeroMonoid.toNegZeroClass.{u3} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E'' (AddCommGroup.toDivisionAddCommMonoid.{u3} E'' (NormedAddCommGroup.toAddCommGroup.{u3} E'' _inst_7))))))))) -> (Iff (Asymptotics.IsLittleO.{u2, u3, u1} α E'' F (NormedAddCommGroup.toNorm.{u3} E'' _inst_7) _inst_2 l (fun (x : α) => c) g) (Filter.Tendsto.{u2, 0} α Real (fun (x : α) => Norm.norm.{u1} F _inst_2 (g x)) l (Filter.atTop.{0} Real Real.instPreorderReal)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_left_of_ne Asymptotics.isLittleO_const_left_of_neₓ'. -/
theorem isLittleO_const_left_of_ne {c : E''} (hc : c ≠ 0) :
(fun x => c) =o[l] g ↔ Tendsto (fun x => ‖g x‖) l atTop :=
by
@@ -3721,12 +1825,6 @@ theorem isLittleO_const_left_of_ne {c : E''} (hc : c ≠ 0) :
exact ⟨(is_O_const_const (1 : ℝ) hc l).trans_isLittleO, (is_O_const_one ℝ c l).trans_isLittleO⟩
#align asymptotics.is_o_const_left_of_ne Asymptotics.isLittleO_const_left_of_ne
-/- warning: asymptotics.is_o_const_left -> Asymptotics.isLittleO_const_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {g'' : α -> F''} {l : Filter.{u1} α} {c : E''}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l (fun (x : α) => c) g'') (Or (Eq.{succ u2} E'' c (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))) (Filter.Tendsto.{u1, 0} α Real (Function.comp.{succ u1, succ u3, 1} α F'' Real (Norm.norm.{u3} F'' (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8)) g'') l (Filter.atTop.{0} Real Real.preorder)))
-but is expected to have type
- forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {g'' : α -> F''} {l : Filter.{u3} α} {c : E''}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l (fun (x : α) => c) g'') (Or (Eq.{succ u2} E'' c (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))) (Filter.Tendsto.{u3, 0} α Real (Function.comp.{succ u3, succ u1, 1} α F'' Real (Norm.norm.{u1} F'' (NormedAddCommGroup.toNorm.{u1} F'' _inst_8)) g'') l (Filter.atTop.{0} Real Real.instPreorderReal)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_left Asymptotics.isLittleO_const_leftₓ'. -/
@[simp]
theorem isLittleO_const_left {c : E''} :
(fun x => c) =o[l] g'' ↔ c = 0 ∨ Tendsto (norm ∘ g'') l atTop :=
@@ -3736,12 +1834,6 @@ theorem isLittleO_const_left {c : E''} :
· simp only [hc, false_or_iff, is_o_const_left_of_ne hc]
#align asymptotics.is_o_const_left Asymptotics.isLittleO_const_left
-/- warning: asymptotics.is_o_const_const_iff -> Asymptotics.isLittleO_const_const_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {l : Filter.{u1} α} [_inst_14 : Filter.NeBot.{u1} α l] {d : E''} {c : F''}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l (fun (x : α) => d) (fun (x : α) => c)) (Eq.{succ u2} E'' d (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))))))))
-but is expected to have type
- forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {l : Filter.{u3} α} [_inst_14 : Filter.NeBot.{u3} α l] {d : E''} {c : F''}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l (fun (x : α) => d) (fun (x : α) => c)) (Eq.{succ u2} E'' d (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7)))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_const_iff Asymptotics.isLittleO_const_const_iffₓ'. -/
@[simp]
theorem isLittleO_const_const_iff [NeBot l] {d : E''} {c : F''} :
((fun x => d) =o[l] fun x => c) ↔ d = 0 :=
@@ -3751,12 +1843,6 @@ theorem isLittleO_const_const_iff [NeBot l] {d : E''} {c : F''} :
simp [Function.const, this]
#align asymptotics.is_o_const_const_iff Asymptotics.isLittleO_const_const_iff
-/- warning: asymptotics.is_o_pure -> Asymptotics.isLittleO_pure is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''} {x : α}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} α x) f'' g'') (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))))))))
-but is expected to have type
- forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {g'' : α -> F''} {x : α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) (Pure.pure.{u3, u3} Filter.{u3} Filter.instPureFilter.{u3} α x) f'' g'') (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7)))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_pure Asymptotics.isLittleO_pureₓ'. -/
@[simp]
theorem isLittleO_pure {x} : f'' =o[pure x] g'' ↔ f'' x = 0 :=
calc
@@ -3765,33 +1851,15 @@ theorem isLittleO_pure {x} : f'' =o[pure x] g'' ↔ f'' x = 0 :=
#align asymptotics.is_o_pure Asymptotics.isLittleO_pure
-/- warning: asymptotics.is_o_const_id_comap_norm_at_top -> Asymptotics.isLittleO_const_id_comap_norm_atTop is a dubious translation:
-lean 3 declaration is
- forall {E'' : Type.{u1}} {F'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u2} F''] (c : F''), Asymptotics.IsLittleO.{u1, u2, u1} E'' F'' E'' (NormedAddCommGroup.toHasNorm.{u2} F'' _inst_8) (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) (Filter.comap.{u1, 0} E'' Real (Norm.norm.{u1} E'' (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7)) (Filter.atTop.{0} Real Real.preorder)) (fun (x : E'') => c) (id.{succ u1} E'')
-but is expected to have type
- forall {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] (c : F''), Asymptotics.IsLittleO.{u2, u1, u2} E'' F'' E'' (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (Filter.comap.{u2, 0} E'' Real (Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7)) (Filter.atTop.{0} Real Real.instPreorderReal)) (fun (x : E'') => c) (id.{succ u2} E'')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_id_comap_norm_at_top Asymptotics.isLittleO_const_id_comap_norm_atTopₓ'. -/
theorem isLittleO_const_id_comap_norm_atTop (c : F'') :
(fun x : E'' => c) =o[comap norm atTop] id :=
isLittleO_const_left.2 <| Or.inr tendsto_comap
#align asymptotics.is_o_const_id_comap_norm_at_top Asymptotics.isLittleO_const_id_comap_norm_atTop
-/- warning: asymptotics.is_o_const_id_at_top -> Asymptotics.isLittleO_const_id_atTop is a dubious translation:
-lean 3 declaration is
- forall {E'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u1} E''] (c : E''), Asymptotics.IsLittleO.{0, u1, 0} Real E'' Real (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) Real.hasNorm (Filter.atTop.{0} Real Real.preorder) (fun (x : Real) => c) (id.{1} Real)
-but is expected to have type
- forall {E'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u1} E''] (c : E''), Asymptotics.IsLittleO.{0, u1, 0} Real E'' Real (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) Real.norm (Filter.atTop.{0} Real Real.instPreorderReal) (fun (x : Real) => c) (id.{1} Real)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_id_at_top Asymptotics.isLittleO_const_id_atTopₓ'. -/
theorem isLittleO_const_id_atTop (c : E'') : (fun x : ℝ => c) =o[atTop] id :=
isLittleO_const_left.2 <| Or.inr tendsto_abs_atTop_atTop
#align asymptotics.is_o_const_id_at_top Asymptotics.isLittleO_const_id_atTop
-/- warning: asymptotics.is_o_const_id_at_bot -> Asymptotics.isLittleO_const_id_atBot is a dubious translation:
-lean 3 declaration is
- forall {E'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u1} E''] (c : E''), Asymptotics.IsLittleO.{0, u1, 0} Real E'' Real (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) Real.hasNorm (Filter.atBot.{0} Real Real.preorder) (fun (x : Real) => c) (id.{1} Real)
-but is expected to have type
- forall {E'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u1} E''] (c : E''), Asymptotics.IsLittleO.{0, u1, 0} Real E'' Real (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) Real.norm (Filter.atBot.{0} Real Real.instPreorderReal) (fun (x : Real) => c) (id.{1} Real)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_id_at_bot Asymptotics.isLittleO_const_id_atBotₓ'. -/
theorem isLittleO_const_id_atBot (c : E'') : (fun x : ℝ => c) =o[atBot] id :=
isLittleO_const_left.2 <| Or.inr tendsto_abs_atBot_atTop
#align asymptotics.is_o_const_id_at_bot Asymptotics.isLittleO_const_id_atBot
@@ -3808,34 +1876,16 @@ section EventuallyMulDivCancel
variable {u v : α → 𝕜}
-/- warning: asymptotics.is_O_with.eventually_mul_div_cancel -> Asymptotics.IsBigOWith.eventually_mul_div_cancel is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {c : Real} {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigOWith.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) c l u v) -> (Filter.EventuallyEq.{u1, u2} α 𝕜 l (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u1 u2} (α -> 𝕜) (Pi.instDiv.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12)))))) u v) v) u)
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigOWith.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l u v) -> (Filter.EventuallyEq.{u2, u1} α 𝕜 l (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u2 u1} (α -> 𝕜) (Pi.instDiv.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) u v) v) u)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.eventually_mul_div_cancel Asymptotics.IsBigOWith.eventually_mul_div_cancelₓ'. -/
theorem IsBigOWith.eventually_mul_div_cancel (h : IsBigOWith c l u v) : u / v * v =ᶠ[l] u :=
Eventually.mono h.bound fun y hy => div_mul_cancel_of_imp fun hv => by simpa [hv] using hy
#align asymptotics.is_O_with.eventually_mul_div_cancel Asymptotics.IsBigOWith.eventually_mul_div_cancel
-/- warning: asymptotics.is_O.eventually_mul_div_cancel -> Asymptotics.IsBigO.eventually_mul_div_cancel is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) -> (Filter.EventuallyEq.{u1, u2} α 𝕜 l (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u1 u2} (α -> 𝕜) (Pi.instDiv.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12)))))) u v) v) u)
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) -> (Filter.EventuallyEq.{u2, u1} α 𝕜 l (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u2 u1} (α -> 𝕜) (Pi.instDiv.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) u v) v) u)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.eventually_mul_div_cancel Asymptotics.IsBigO.eventually_mul_div_cancelₓ'. -/
/-- If `u = O(v)` along `l`, then `(u / v) * v = u` eventually at `l`. -/
theorem IsBigO.eventually_mul_div_cancel (h : u =O[l] v) : u / v * v =ᶠ[l] u :=
let ⟨c, hc⟩ := h.IsBigOWith
hc.eventually_mul_div_cancel
#align asymptotics.is_O.eventually_mul_div_cancel Asymptotics.IsBigO.eventually_mul_div_cancel
-/- warning: asymptotics.is_o.eventually_mul_div_cancel -> Asymptotics.IsLittleO.eventually_mul_div_cancel is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) -> (Filter.EventuallyEq.{u1, u2} α 𝕜 l (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u1 u2} (α -> 𝕜) (Pi.instDiv.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12)))))) u v) v) u)
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsLittleO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) -> (Filter.EventuallyEq.{u2, u1} α 𝕜 l (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u2 u1} (α -> 𝕜) (Pi.instDiv.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) u v) v) u)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.eventually_mul_div_cancel Asymptotics.IsLittleO.eventually_mul_div_cancelₓ'. -/
/-- If `u = o(v)` along `l`, then `(u / v) * v = u` eventually at `l`. -/
theorem IsLittleO.eventually_mul_div_cancel (h : u =o[l] v) : u / v * v =ᶠ[l] u :=
(h.forall_isBigOWith zero_lt_one).eventually_mul_div_cancel
@@ -3850,12 +1900,6 @@ section ExistsMulEq
variable {u v : α → 𝕜}
-/- warning: asymptotics.is_O_with_of_eq_mul -> Asymptotics.isBigOWith_of_eq_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {c : Real} {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜} (φ : α -> 𝕜), (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (φ x)) c) l) -> (Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v)) -> (Asymptotics.IsBigOWith.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) c l u v)
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜} (φ : α -> 𝕜), (Filter.Eventually.{u2} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (φ x)) c) l) -> (Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v)) -> (Asymptotics.IsBigOWith.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l u v)
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_of_eq_mul Asymptotics.isBigOWith_of_eq_mulₓ'. -/
/-- If `‖φ‖` is eventually bounded by `c`, and `u =ᶠ[l] φ * v`, then we have `is_O_with c u v l`.
This does not require any assumptions on `c`, which is why we keep this version along with
`is_O_with_iff_exists_eq_mul`. -/
@@ -3867,12 +1911,6 @@ theorem isBigOWith_of_eq_mul (φ : α → 𝕜) (hφ : ∀ᶠ x in l, ‖φ x‖
exact mul_le_mul_of_nonneg_right hx (norm_nonneg _)
#align asymptotics.is_O_with_of_eq_mul Asymptotics.isBigOWith_of_eq_mul
-/- warning: asymptotics.is_O_with_iff_exists_eq_mul -> Asymptotics.isBigOWith_iff_exists_eq_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {c : Real} {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Iff (Asymptotics.IsBigOWith.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) c l u v) (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (φ x)) c) l) (fun (hφ : Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (φ x)) c) l) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v)))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Iff (Asymptotics.IsBigOWith.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l u v) (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Eventually.{u2} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (φ x)) c) l) (fun (hφ : Filter.Eventually.{u2} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (φ x)) c) l) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v)))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_iff_exists_eq_mul Asymptotics.isBigOWith_iff_exists_eq_mulₓ'. -/
theorem isBigOWith_iff_exists_eq_mul (hc : 0 ≤ c) :
IsBigOWith c l u v ↔ ∃ (φ : α → 𝕜)(hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v :=
by
@@ -3885,23 +1923,11 @@ theorem isBigOWith_iff_exists_eq_mul (hc : 0 ≤ c) :
exact is_O_with_of_eq_mul φ hφ h
#align asymptotics.is_O_with_iff_exists_eq_mul Asymptotics.isBigOWith_iff_exists_eq_mul
-/- warning: asymptotics.is_O_with.exists_eq_mul -> Asymptotics.IsBigOWith.exists_eq_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {c : Real} {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigOWith.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) c l u v) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (φ x)) c) l) (fun (hφ : Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (φ x)) c) l) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigOWith.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l u v) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Eventually.{u2} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (φ x)) c) l) (fun (hφ : Filter.Eventually.{u2} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (φ x)) c) l) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.exists_eq_mul Asymptotics.IsBigOWith.exists_eq_mulₓ'. -/
theorem IsBigOWith.exists_eq_mul (h : IsBigOWith c l u v) (hc : 0 ≤ c) :
∃ (φ : α → 𝕜)(hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v :=
(isBigOWith_iff_exists_eq_mul hc).mp h
#align asymptotics.is_O_with.exists_eq_mul Asymptotics.IsBigOWith.exists_eq_mul
-/- warning: asymptotics.is_O_iff_exists_eq_mul -> Asymptotics.isBigO_iff_exists_eq_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, Iff (Asymptotics.IsBigO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_exists_eq_mul Asymptotics.isBigO_iff_exists_eq_mulₓ'. -/
theorem isBigO_iff_exists_eq_mul :
u =O[l] v ↔ ∃ (φ : α → 𝕜)(hφ : l.IsBoundedUnder (· ≤ ·) (norm ∘ φ)), u =ᶠ[l] φ * v :=
by
@@ -3914,21 +1940,9 @@ theorem isBigO_iff_exists_eq_mul :
exact is_O_iff_is_O_with.2 ⟨c, is_O_with_of_eq_mul φ hφ huvφ⟩
#align asymptotics.is_O_iff_exists_eq_mul Asymptotics.isBigO_iff_exists_eq_mul
-/- warning: asymptotics.is_O.exists_eq_mul -> Asymptotics.IsBigO.exists_eq_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) -> (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) -> (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.exists_eq_mul Asymptotics.IsBigO.exists_eq_mulₓ'. -/
alias is_O_iff_exists_eq_mul ↔ is_O.exists_eq_mul _
#align asymptotics.is_O.exists_eq_mul Asymptotics.IsBigO.exists_eq_mul
-/- warning: asymptotics.is_o_iff_exists_eq_mul -> Asymptotics.isLittleO_iff_exists_eq_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, Iff (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Tendsto.{u1, u2} α 𝕜 φ l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) (fun (hφ : Filter.Tendsto.{u1, u2} α 𝕜 φ l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, Iff (Asymptotics.IsLittleO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Tendsto.{u2, u1} α 𝕜 φ l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) (fun (hφ : Filter.Tendsto.{u2, u1} α 𝕜 φ l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff_exists_eq_mul Asymptotics.isLittleO_iff_exists_eq_mulₓ'. -/
theorem isLittleO_iff_exists_eq_mul :
u =o[l] v ↔ ∃ (φ : α → 𝕜)(hφ : Tendsto φ l (𝓝 0)), u =ᶠ[l] φ * v :=
by
@@ -3939,12 +1953,6 @@ theorem isLittleO_iff_exists_eq_mul :
exact is_O_with_of_eq_mul _ ((hφ c hpos).mono fun x => le_of_lt) huvφ
#align asymptotics.is_o_iff_exists_eq_mul Asymptotics.isLittleO_iff_exists_eq_mul
-/- warning: asymptotics.is_o.exists_eq_mul -> Asymptotics.IsLittleO.exists_eq_mul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) -> (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Tendsto.{u1, u2} α 𝕜 φ l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) (fun (hφ : Filter.Tendsto.{u1, u2} α 𝕜 φ l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v))))
-but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsLittleO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) -> (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Tendsto.{u2, u1} α 𝕜 φ l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) (fun (hφ : Filter.Tendsto.{u2, u1} α 𝕜 φ l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.exists_eq_mul Asymptotics.IsLittleO.exists_eq_mulₓ'. -/
alias is_o_iff_exists_eq_mul ↔ is_o.exists_eq_mul _
#align asymptotics.is_o.exists_eq_mul Asymptotics.IsLittleO.exists_eq_mul
@@ -3953,12 +1961,6 @@ end ExistsMulEq
/-! ### Miscellanous lemmas -/
-/- warning: asymptotics.div_is_bounded_under_of_is_O -> Asymptotics.div_isBoundedUnder_of_isBigO is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (NormedField.toHasNorm.{u1} 𝕜 _inst_12) l f g) -> (Filter.IsBoundedUnder.{0, u2} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (DivInvMonoid.toHasDiv.{u1} 𝕜 (DivisionRing.toDivInvMonoid.{u1} 𝕜 (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_12))))) (f x) (g x))))
-but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) -> (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51479 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51481 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51479 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51481) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.div_is_bounded_under_of_is_O Asymptotics.div_isBoundedUnder_of_isBigOₓ'. -/
theorem div_isBoundedUnder_of_isBigO {α : Type _} {l : Filter α} {f g : α → 𝕜} (h : f =O[l] g) :
IsBoundedUnder (· ≤ ·) l fun x => ‖f x / g x‖ :=
by
@@ -3968,12 +1970,6 @@ theorem div_isBoundedUnder_of_isBigO {α : Type _} {l : Filter α} {f g : α →
exact div_le_of_nonneg_of_le_mul (norm_nonneg _) h₀ hx
#align asymptotics.div_is_bounded_under_of_is_O Asymptotics.div_isBoundedUnder_of_isBigO
-/- warning: asymptotics.is_O_iff_div_is_bounded_under -> Asymptotics.isBigO_iff_div_isBoundedUnder is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))))))))) l) -> (Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (NormedField.toHasNorm.{u1} 𝕜 _inst_12) l f g) (Filter.IsBoundedUnder.{0, u2} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (DivInvMonoid.toHasDiv.{u1} 𝕜 (DivisionRing.toDivInvMonoid.{u1} 𝕜 (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_12))))) (f x) (g x)))))
-but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) l) -> (Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51713 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51715 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51713 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51715) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x)))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_div_is_bounded_under Asymptotics.isBigO_iff_div_isBoundedUnderₓ'. -/
theorem isBigO_iff_div_isBoundedUnder {α : Type _} {l : Filter α} {f g : α → 𝕜}
(hgf : ∀ᶠ x in l, g x = 0 → f x = 0) :
f =O[l] g ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x / g x‖ :=
@@ -3987,23 +1983,11 @@ theorem isBigO_iff_div_isBoundedUnder {α : Type _} {l : Filter α} {f g : α
· exact (div_le_iff (norm_pos_iff.2 hgx)).mp hx₂
#align asymptotics.is_O_iff_div_is_bounded_under Asymptotics.isBigO_iff_div_isBoundedUnder
-/- warning: asymptotics.is_O_of_div_tendsto_nhds -> Asymptotics.isBigO_of_div_tendsto_nhds is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))))))))) l) -> (forall (c : 𝕜), (Filter.Tendsto.{u2, u1} α 𝕜 (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u2 u1} (α -> 𝕜) (Pi.instDiv.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => DivInvMonoid.toHasDiv.{u1} 𝕜 (DivisionRing.toDivInvMonoid.{u1} 𝕜 (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_12)))))) f g) l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) c)) -> (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (NormedField.toHasNorm.{u1} 𝕜 _inst_12) l f g))
-but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) l) -> (forall (c : 𝕜), (Filter.Tendsto.{u2, u1} α 𝕜 (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u1 u2} (α -> 𝕜) (Pi.instDiv.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) f g) l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) c)) -> (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_of_div_tendsto_nhds Asymptotics.isBigO_of_div_tendsto_nhdsₓ'. -/
theorem isBigO_of_div_tendsto_nhds {α : Type _} {l : Filter α} {f g : α → 𝕜}
(hgf : ∀ᶠ x in l, g x = 0 → f x = 0) (c : 𝕜) (H : Filter.Tendsto (f / g) l (𝓝 c)) : f =O[l] g :=
(isBigO_iff_div_isBoundedUnder hgf).2 <| H.norm.isBoundedUnder_le
#align asymptotics.is_O_of_div_tendsto_nhds Asymptotics.isBigO_of_div_tendsto_nhds
-/- warning: asymptotics.is_o.tendsto_zero_of_tendsto -> Asymptotics.IsLittleO.tendsto_zero_of_tendsto is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {𝕜 : Type.{u3}} [_inst_14 : NormedAddCommGroup.{u2} E] [_inst_15 : NormedField.{u3} 𝕜] {u : α -> E} {v : α -> 𝕜} {l : Filter.{u1} α} {y : 𝕜}, (Asymptotics.IsLittleO.{u1, u2, u3} α E 𝕜 (NormedAddCommGroup.toHasNorm.{u2} E _inst_14) (NormedField.toHasNorm.{u3} 𝕜 _inst_15) l u v) -> (Filter.Tendsto.{u1, u3} α 𝕜 v l (nhds.{u3} 𝕜 (UniformSpace.toTopologicalSpace.{u3} 𝕜 (PseudoMetricSpace.toUniformSpace.{u3} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u3} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u3} 𝕜 (NormedCommRing.toSeminormedCommRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_15)))))) y)) -> (Filter.Tendsto.{u1, u2} α E u l (nhds.{u2} E (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_14)))) (OfNat.ofNat.{u2} E 0 (OfNat.mk.{u2} E 0 (Zero.zero.{u2} E (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (SubNegMonoid.toAddMonoid.{u2} E (AddGroup.toSubNegMonoid.{u2} E (NormedAddGroup.toAddGroup.{u2} E (NormedAddCommGroup.toNormedAddGroup.{u2} E _inst_14)))))))))))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {𝕜 : Type.{u1}} [_inst_14 : NormedAddCommGroup.{u2} E] [_inst_15 : NormedField.{u1} 𝕜] {u : α -> E} {v : α -> 𝕜} {l : Filter.{u3} α} {y : 𝕜}, (Asymptotics.IsLittleO.{u3, u2, u1} α E 𝕜 (NormedAddCommGroup.toNorm.{u2} E _inst_14) (NormedField.toNorm.{u1} 𝕜 _inst_15) l u v) -> (Filter.Tendsto.{u3, u1} α 𝕜 v l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_15)))))) y)) -> (Filter.Tendsto.{u3, u2} α E u l (nhds.{u2} E (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_14)))) (OfNat.ofNat.{u2} E 0 (Zero.toOfNat0.{u2} E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_14))))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.tendsto_zero_of_tendsto Asymptotics.IsLittleO.tendsto_zero_of_tendstoₓ'. -/
theorem IsLittleO.tendsto_zero_of_tendsto {α E 𝕜 : Type _} [NormedAddCommGroup E] [NormedField 𝕜]
{u : α → E} {v : α → 𝕜} {l : Filter α} {y : 𝕜} (huv : u =o[l] v) (hv : Tendsto v l (𝓝 y)) :
Tendsto u l (𝓝 0) := by
@@ -4012,12 +1996,6 @@ theorem IsLittleO.tendsto_zero_of_tendsto {α E 𝕜 : Type _} [NormedAddCommGro
exact huv.trans_is_O (hv.is_O_one 𝕜)
#align asymptotics.is_o.tendsto_zero_of_tendsto Asymptotics.IsLittleO.tendsto_zero_of_tendsto
-/- warning: asymptotics.is_o_pow_pow -> Asymptotics.isLittleO_pow_pow is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {m : Nat} {n : Nat}, (LT.lt.{0} Nat Nat.hasLt m n) -> (Asymptotics.IsLittleO.{u1, u1, u1} 𝕜 𝕜 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))))))) (fun (x : 𝕜) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (Ring.toMonoid.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) x n) (fun (x : 𝕜) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (Ring.toMonoid.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) x m))
-but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {m : Nat} {n : Nat}, (LT.lt.{0} Nat instLTNat m n) -> (Asymptotics.IsLittleO.{u1, u1, u1} 𝕜 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (fun (x : 𝕜) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) x n) (fun (x : 𝕜) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) x m))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_pow_pow Asymptotics.isLittleO_pow_powₓ'. -/
theorem isLittleO_pow_pow {m n : ℕ} (h : m < n) : (fun x : 𝕜 => x ^ n) =o[𝓝 0] fun x => x ^ m :=
by
rcases lt_iff_exists_add.1 h with ⟨p, hp0 : 0 < p, rfl⟩
@@ -4026,65 +2004,29 @@ theorem isLittleO_pow_pow {m n : ℕ} (h : m < n) : (fun x : 𝕜 => x ^ n) =o[
exact is_O.mul_is_o (is_O_refl _ _) (is_o.pow ((is_o_one_iff _).2 tendsto_id) hp0)
#align asymptotics.is_o_pow_pow Asymptotics.isLittleO_pow_pow
-/- warning: asymptotics.is_o_norm_pow_norm_pow -> Asymptotics.isLittleO_norm_pow_norm_pow is a dubious translation:
-lean 3 declaration is
- forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {m : Nat} {n : Nat}, (LT.lt.{0} Nat Nat.hasLt m n) -> (Asymptotics.IsLittleO.{u1, 0, 0} E' Real Real Real.hasNorm Real.hasNorm (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) (OfNat.ofNat.{u1} E' 0 (OfNat.mk.{u1} E' 0 (Zero.zero.{u1} E' (AddZeroClass.toHasZero.{u1} E' (AddMonoid.toAddZeroClass.{u1} E' (SubNegMonoid.toAddMonoid.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4)))))))))) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) x) n) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) x) m))
-but is expected to have type
- forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {m : Nat} {n : Nat}, (LT.lt.{0} Nat instLTNat m n) -> (Asymptotics.IsLittleO.{u1, 0, 0} E' Real Real Real.norm Real.norm (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) (OfNat.ofNat.{u1} E' 0 (Zero.toOfNat0.{u1} E' (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4))))))))) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) x) n) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) x) m))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_norm_pow_norm_pow Asymptotics.isLittleO_norm_pow_norm_powₓ'. -/
theorem isLittleO_norm_pow_norm_pow {m n : ℕ} (h : m < n) :
(fun x : E' => ‖x‖ ^ n) =o[𝓝 0] fun x => ‖x‖ ^ m :=
(isLittleO_pow_pow h).comp_tendsto tendsto_norm_zero
#align asymptotics.is_o_norm_pow_norm_pow Asymptotics.isLittleO_norm_pow_norm_pow
-/- warning: asymptotics.is_o_pow_id -> Asymptotics.isLittleO_pow_id is a dubious translation:
-lean 3 declaration is
- forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {n : Nat}, (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))) n) -> (Asymptotics.IsLittleO.{u1, u1, u1} 𝕜 𝕜 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))))))) (fun (x : 𝕜) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (Ring.toMonoid.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) x n) (fun (x : 𝕜) => x))
-but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {n : Nat}, (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)) n) -> (Asymptotics.IsLittleO.{u1, u1, u1} 𝕜 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (fun (x : 𝕜) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) x n) (fun (x : 𝕜) => x))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_pow_id Asymptotics.isLittleO_pow_idₓ'. -/
theorem isLittleO_pow_id {n : ℕ} (h : 1 < n) : (fun x : 𝕜 => x ^ n) =o[𝓝 0] fun x => x := by
convert is_o_pow_pow h; simp only [pow_one]
#align asymptotics.is_o_pow_id Asymptotics.isLittleO_pow_id
-/- warning: asymptotics.is_o_norm_pow_id -> Asymptotics.isLittleO_norm_pow_id is a dubious translation:
-lean 3 declaration is
- forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {n : Nat}, (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))) n) -> (Asymptotics.IsLittleO.{u1, 0, u1} E' Real E' Real.hasNorm (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) (OfNat.ofNat.{u1} E' 0 (OfNat.mk.{u1} E' 0 (Zero.zero.{u1} E' (AddZeroClass.toHasZero.{u1} E' (AddMonoid.toAddZeroClass.{u1} E' (SubNegMonoid.toAddMonoid.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4)))))))))) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) x) n) (fun (x : E') => x))
-but is expected to have type
- forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {n : Nat}, (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)) n) -> (Asymptotics.IsLittleO.{u1, 0, u1} E' Real E' Real.norm (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) (OfNat.ofNat.{u1} E' 0 (Zero.toOfNat0.{u1} E' (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4))))))))) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) x) n) (fun (x : E') => x))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_norm_pow_id Asymptotics.isLittleO_norm_pow_idₓ'. -/
theorem isLittleO_norm_pow_id {n : ℕ} (h : 1 < n) : (fun x : E' => ‖x‖ ^ n) =o[𝓝 0] fun x => x := by
simpa only [pow_one, is_o_norm_right] using @is_o_norm_pow_norm_pow E' _ _ _ h
#align asymptotics.is_o_norm_pow_id Asymptotics.isLittleO_norm_pow_id
-/- warning: asymptotics.is_O.eq_zero_of_norm_pow_within -> Asymptotics.IsBigO.eq_zero_of_norm_pow_within is a dubious translation:
-lean 3 declaration is
- forall {E'' : Type.{u1}} {F'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u2} F''] {f : E'' -> F''} {s : Set.{u1} E''} {x₀ : E''} {n : Nat}, (Asymptotics.IsBigO.{u1, u2, 0} E'' F'' Real (NormedAddCommGroup.toHasNorm.{u2} F'' _inst_8) Real.hasNorm (nhdsWithin.{u1} E'' (UniformSpace.toTopologicalSpace.{u1} E'' (PseudoMetricSpace.toUniformSpace.{u1} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E'' _inst_7)))) x₀ s) f (fun (x : E'') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E'' (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) (HSub.hSub.{u1, u1, u1} E'' E'' E'' (instHSub.{u1} E'' (SubNegMonoid.toHasSub.{u1} E'' (AddGroup.toSubNegMonoid.{u1} E'' (NormedAddGroup.toAddGroup.{u1} E'' (NormedAddCommGroup.toNormedAddGroup.{u1} E'' _inst_7))))) x x₀)) n)) -> (Membership.Mem.{u1, u1} E'' (Set.{u1} E'') (Set.hasMem.{u1} E'') x₀ s) -> (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) n) -> (Eq.{succ u2} F'' (f x₀) (OfNat.ofNat.{u2} F'' 0 (OfNat.mk.{u2} F'' 0 (Zero.zero.{u2} F'' (AddZeroClass.toHasZero.{u2} F'' (AddMonoid.toAddZeroClass.{u2} F'' (SubNegMonoid.toAddMonoid.{u2} F'' (AddGroup.toSubNegMonoid.{u2} F'' (NormedAddGroup.toAddGroup.{u2} F'' (NormedAddCommGroup.toNormedAddGroup.{u2} F'' _inst_8))))))))))
-but is expected to have type
- forall {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f : E'' -> F''} {s : Set.{u2} E''} {x₀ : E''} {n : Nat}, (Asymptotics.IsBigO.{u2, u1, 0} E'' F'' Real (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) Real.norm (nhdsWithin.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) x₀ s) f (fun (x : E'') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (HSub.hSub.{u2, u2, u2} E'' E'' E'' (instHSub.{u2} E'' (SubNegMonoid.toSub.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))) x x₀)) n)) -> (Membership.mem.{u2, u2} E'' (Set.{u2} E'') (Set.instMembershipSet.{u2} E'') x₀ s) -> (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) n) -> (Eq.{succ u1} F'' (f x₀) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8)))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.eq_zero_of_norm_pow_within Asymptotics.IsBigO.eq_zero_of_norm_pow_withinₓ'. -/
theorem IsBigO.eq_zero_of_norm_pow_within {f : E'' → F''} {s : Set E''} {x₀ : E''} {n : ℕ}
(h : f =O[𝓝[s] x₀] fun x => ‖x - x₀‖ ^ n) (hx₀ : x₀ ∈ s) (hn : 0 < n) : f x₀ = 0 :=
mem_of_mem_nhdsWithin hx₀ h.eq_zero_imp <| by simp_rw [sub_self, norm_zero, zero_pow hn]
#align asymptotics.is_O.eq_zero_of_norm_pow_within Asymptotics.IsBigO.eq_zero_of_norm_pow_within
-/- warning: asymptotics.is_O.eq_zero_of_norm_pow -> Asymptotics.IsBigO.eq_zero_of_norm_pow is a dubious translation:
-lean 3 declaration is
- forall {E'' : Type.{u1}} {F'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u2} F''] {f : E'' -> F''} {x₀ : E''} {n : Nat}, (Asymptotics.IsBigO.{u1, u2, 0} E'' F'' Real (NormedAddCommGroup.toHasNorm.{u2} F'' _inst_8) Real.hasNorm (nhds.{u1} E'' (UniformSpace.toTopologicalSpace.{u1} E'' (PseudoMetricSpace.toUniformSpace.{u1} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E'' _inst_7)))) x₀) f (fun (x : E'') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E'' (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) (HSub.hSub.{u1, u1, u1} E'' E'' E'' (instHSub.{u1} E'' (SubNegMonoid.toHasSub.{u1} E'' (AddGroup.toSubNegMonoid.{u1} E'' (NormedAddGroup.toAddGroup.{u1} E'' (NormedAddCommGroup.toNormedAddGroup.{u1} E'' _inst_7))))) x x₀)) n)) -> (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) n) -> (Eq.{succ u2} F'' (f x₀) (OfNat.ofNat.{u2} F'' 0 (OfNat.mk.{u2} F'' 0 (Zero.zero.{u2} F'' (AddZeroClass.toHasZero.{u2} F'' (AddMonoid.toAddZeroClass.{u2} F'' (SubNegMonoid.toAddMonoid.{u2} F'' (AddGroup.toSubNegMonoid.{u2} F'' (NormedAddGroup.toAddGroup.{u2} F'' (NormedAddCommGroup.toNormedAddGroup.{u2} F'' _inst_8))))))))))
-but is expected to have type
- forall {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f : E'' -> F''} {x₀ : E''} {n : Nat}, (Asymptotics.IsBigO.{u2, u1, 0} E'' F'' Real (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) Real.norm (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) x₀) f (fun (x : E'') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (HSub.hSub.{u2, u2, u2} E'' E'' E'' (instHSub.{u2} E'' (SubNegMonoid.toSub.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))) x x₀)) n)) -> (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) n) -> (Eq.{succ u1} F'' (f x₀) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8)))))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.eq_zero_of_norm_pow Asymptotics.IsBigO.eq_zero_of_norm_powₓ'. -/
theorem IsBigO.eq_zero_of_norm_pow {f : E'' → F''} {x₀ : E''} {n : ℕ}
(h : f =O[𝓝 x₀] fun x => ‖x - x₀‖ ^ n) (hn : 0 < n) : f x₀ = 0 := by
rw [← nhdsWithin_univ] at h; exact h.eq_zero_of_norm_pow_within (mem_univ _) hn
#align asymptotics.is_O.eq_zero_of_norm_pow Asymptotics.IsBigO.eq_zero_of_norm_pow
-/- warning: asymptotics.is_o_pow_sub_pow_sub -> Asymptotics.isLittleO_pow_sub_pow_sub is a dubious translation:
-lean 3 declaration is
- forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] (x₀ : E') {n : Nat} {m : Nat}, (LT.lt.{0} Nat Nat.hasLt n m) -> (Asymptotics.IsLittleO.{u1, 0, 0} E' Real Real Real.hasNorm Real.hasNorm (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) x₀) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) (HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toHasSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀)) m) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) (HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toHasSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀)) n))
-but is expected to have type
- forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] (x₀ : E') {n : Nat} {m : Nat}, (LT.lt.{0} Nat instLTNat n m) -> (Asymptotics.IsLittleO.{u1, 0, 0} E' Real Real Real.norm Real.norm (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) x₀) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀)) m) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀)) n))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_pow_sub_pow_sub Asymptotics.isLittleO_pow_sub_pow_subₓ'. -/
theorem isLittleO_pow_sub_pow_sub (x₀ : E') {n m : ℕ} (h : n < m) :
(fun x => ‖x - x₀‖ ^ m) =o[𝓝 x₀] fun x => ‖x - x₀‖ ^ n :=
haveI : tendsto (fun x => ‖x - x₀‖) (𝓝 x₀) (𝓝 0) :=
@@ -4095,23 +2037,11 @@ theorem isLittleO_pow_sub_pow_sub (x₀ : E') {n m : ℕ} (h : n < m) :
(is_o_pow_pow h).comp_tendsto this
#align asymptotics.is_o_pow_sub_pow_sub Asymptotics.isLittleO_pow_sub_pow_sub
-/- warning: asymptotics.is_o_pow_sub_sub -> Asymptotics.isLittleO_pow_sub_sub is a dubious translation:
-lean 3 declaration is
- forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] (x₀ : E') {m : Nat}, (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))) m) -> (Asymptotics.IsLittleO.{u1, 0, u1} E' Real E' Real.hasNorm (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) x₀) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) (HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toHasSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀)) m) (fun (x : E') => HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toHasSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀))
-but is expected to have type
- forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] (x₀ : E') {m : Nat}, (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)) m) -> (Asymptotics.IsLittleO.{u1, 0, u1} E' Real E' Real.norm (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) x₀) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀)) m) (fun (x : E') => HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_pow_sub_sub Asymptotics.isLittleO_pow_sub_subₓ'. -/
theorem isLittleO_pow_sub_sub (x₀ : E') {m : ℕ} (h : 1 < m) :
(fun x => ‖x - x₀‖ ^ m) =o[𝓝 x₀] fun x => x - x₀ := by
simpa only [is_o_norm_right, pow_one] using is_o_pow_sub_pow_sub x₀ h
#align asymptotics.is_o_pow_sub_sub Asymptotics.isLittleO_pow_sub_sub
-/- warning: asymptotics.is_O_with.right_le_sub_of_lt_1 -> Asymptotics.IsBigOWith.right_le_sub_of_lt_1 is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) c l f₁ f₂) -> (LT.lt.{0} Real Real.hasLt c (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) -> (Asymptotics.IsBigOWith.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.hasSub) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) c)) l f₂ (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toHasSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)))
-but is expected to have type
- forall {α : Type.{u2}} {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {c : Real} {l : Filter.{u2} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) c l f₁ f₂) -> (LT.lt.{0} Real Real.instLTReal c (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) -> (Asymptotics.IsBigOWith.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.instSubReal) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) c)) l f₂ (fun (x : α) => HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) (f₂ x) (f₁ x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.right_le_sub_of_lt_1 Asymptotics.IsBigOWith.right_le_sub_of_lt_1ₓ'. -/
theorem IsBigOWith.right_le_sub_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith c l f₁ f₂) (hc : c < 1) :
IsBigOWith (1 / (1 - c)) l f₂ fun x => f₂ x - f₁ x :=
IsBigOWith.of_bound <|
@@ -4123,46 +2053,22 @@ theorem IsBigOWith.right_le_sub_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith
· exact sub_pos.2 hc
#align asymptotics.is_O_with.right_le_sub_of_lt_1 Asymptotics.IsBigOWith.right_le_sub_of_lt_1
-/- warning: asymptotics.is_O_with.right_le_add_of_lt_1 -> Asymptotics.IsBigOWith.right_le_add_of_lt_1 is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) c l f₁ f₂) -> (LT.lt.{0} Real Real.hasLt c (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) -> (Asymptotics.IsBigOWith.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.hasSub) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) c)) l f₂ (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toHasAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)))
-but is expected to have type
- forall {α : Type.{u2}} {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {c : Real} {l : Filter.{u2} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) c l f₁ f₂) -> (LT.lt.{0} Real Real.instLTReal c (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) -> (Asymptotics.IsBigOWith.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.instSubReal) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) c)) l f₂ (fun (x : α) => HAdd.hAdd.{u1, u1, u1} E' E' E' (instHAdd.{u1} E' (AddZeroClass.toAdd.{u1} E' (AddMonoid.toAddZeroClass.{u1} E' (SubNegMonoid.toAddMonoid.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))))) (f₁ x) (f₂ x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.right_le_add_of_lt_1 Asymptotics.IsBigOWith.right_le_add_of_lt_1ₓ'. -/
theorem IsBigOWith.right_le_add_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith c l f₁ f₂) (hc : c < 1) :
IsBigOWith (1 / (1 - c)) l f₂ fun x => f₁ x + f₂ x :=
(h.neg_right.right_le_sub_of_lt_1 hc).neg_right.of_neg_left.congr rfl (fun x => rfl) fun x => by
rw [neg_sub, sub_neg_eq_add]
#align asymptotics.is_O_with.right_le_add_of_lt_1 Asymptotics.IsBigOWith.right_le_add_of_lt_1
-/- warning: asymptotics.is_o.right_is_O_sub -> Asymptotics.IsLittleO.right_isBigO_sub is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) l f₁ f₂) -> (Asymptotics.IsBigO.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) l f₂ (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toHasSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)))
-but is expected to have type
- forall {α : Type.{u2}} {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {l : Filter.{u2} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f₁ f₂) -> (Asymptotics.IsBigO.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f₂ (fun (x : α) => HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) (f₂ x) (f₁ x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.right_is_O_sub Asymptotics.IsLittleO.right_isBigO_subₓ'. -/
theorem IsLittleO.right_isBigO_sub {f₁ f₂ : α → E'} (h : f₁ =o[l] f₂) :
f₂ =O[l] fun x => f₂ x - f₁ x :=
((h.def' one_half_pos).right_le_sub_of_lt_1 one_half_lt_one).IsBigO
#align asymptotics.is_o.right_is_O_sub Asymptotics.IsLittleO.right_isBigO_sub
-/- warning: asymptotics.is_o.right_is_O_add -> Asymptotics.IsLittleO.right_isBigO_add is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) l f₁ f₂) -> (Asymptotics.IsBigO.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) l f₂ (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toHasAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)))
-but is expected to have type
- forall {α : Type.{u2}} {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {l : Filter.{u2} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f₁ f₂) -> (Asymptotics.IsBigO.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f₂ (fun (x : α) => HAdd.hAdd.{u1, u1, u1} E' E' E' (instHAdd.{u1} E' (AddZeroClass.toAdd.{u1} E' (AddMonoid.toAddZeroClass.{u1} E' (SubNegMonoid.toAddMonoid.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))))) (f₁ x) (f₂ x)))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.right_is_O_add Asymptotics.IsLittleO.right_isBigO_addₓ'. -/
theorem IsLittleO.right_isBigO_add {f₁ f₂ : α → E'} (h : f₁ =o[l] f₂) :
f₂ =O[l] fun x => f₁ x + f₂ x :=
((h.def' one_half_pos).right_le_add_of_lt_1 one_half_lt_one).IsBigO
#align asymptotics.is_o.right_is_O_add Asymptotics.IsLittleO.right_isBigO_add
-/- warning: asymptotics.bound_of_is_O_cofinite -> Asymptotics.bound_of_isBigO_cofinite is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {g'' : α -> F''}, (Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (Filter.cofinite.{u1} α) f g'') -> (Exists.{1} Real (fun (C : Real) => Exists.{0} (GT.gt.{0} Real Real.hasLt C (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) (fun (H : GT.gt.{0} Real Real.hasLt C (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) => forall {{x : α}}, (Ne.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u3} F'' (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (g'' x)))))))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F'' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u1} F''] {f : α -> E} {g'' : α -> F''}, (Asymptotics.IsBigO.{u3, u2, u1} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) (Filter.cofinite.{u3} α) f g'') -> (Exists.{1} Real (fun (C : Real) => And (GT.gt.{0} Real Real.instLTReal C (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) (forall {{x : α}}, (Ne.{succ u1} F'' (g'' x) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u1} F'' (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) (g'' x)))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.bound_of_is_O_cofinite Asymptotics.bound_of_isBigO_cofiniteₓ'. -/
/-- If `f x = O(g x)` along `cofinite`, then there exists a positive constant `C` such that
`‖f x‖ ≤ C * ‖g x‖` whenever `g x ≠ 0`. -/
theorem bound_of_isBigO_cofinite (h : f =O[cofinite] g'') :
@@ -4177,12 +2083,6 @@ theorem bound_of_isBigO_cofinite (h : f =O[cofinite] g'') :
exact fun hx => (div_le_iff (norm_pos_iff.2 h₀)).1 (this _ hx)
#align asymptotics.bound_of_is_O_cofinite Asymptotics.bound_of_isBigO_cofinite
-/- warning: asymptotics.is_O_cofinite_iff -> Asymptotics.isBigO_cofinite_iff is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''}, (forall (x : α), (Eq.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (Filter.cofinite.{u1} α) f'' g'') (Exists.{1} Real (fun (C : Real) => forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (f'' x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u3} F'' (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (g'' x))))))
-but is expected to have type
- forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''}, (forall (x : α), (Eq.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (Zero.toOfNat0.{u3} F'' (NegZeroClass.toZero.{u3} F'' (SubNegZeroMonoid.toNegZeroClass.{u3} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} F'' (AddCommGroup.toDivisionAddCommMonoid.{u3} F'' (NormedAddCommGroup.toAddCommGroup.{u3} F'' _inst_8))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7)))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) (Filter.cofinite.{u1} α) f'' g'') (Exists.{1} Real (fun (C : Real) => forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (f'' x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u3} F'' (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) (g'' x))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_cofinite_iff Asymptotics.isBigO_cofinite_iffₓ'. -/
theorem isBigO_cofinite_iff (h : ∀ x, g'' x = 0 → f'' x = 0) :
f'' =O[cofinite] g'' ↔ ∃ C, ∀ x, ‖f'' x‖ ≤ C * ‖g'' x‖ :=
⟨fun h' =>
@@ -4191,46 +2091,22 @@ theorem isBigO_cofinite_iff (h : ∀ x, g'' x = 0 → f'' x = 0) :
fun h => (isBigO_top.2 h).mono le_top⟩
#align asymptotics.is_O_cofinite_iff Asymptotics.isBigO_cofinite_iff
-/- warning: asymptotics.bound_of_is_O_nat_at_top -> Asymptotics.bound_of_isBigO_nat_atTop is a dubious translation:
-lean 3 declaration is
- forall {E : Type.{u1}} {E'' : Type.{u2}} [_inst_1 : Norm.{u1} E] [_inst_7 : NormedAddCommGroup.{u2} E''] {f : Nat -> E} {g'' : Nat -> E''}, (Asymptotics.IsBigO.{0, u1, u2} Nat E E'' _inst_1 (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring)))) f g'') -> (Exists.{1} Real (fun (C : Real) => Exists.{0} (GT.gt.{0} Real Real.hasLt C (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) (fun (H : GT.gt.{0} Real Real.hasLt C (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) => forall {{x : Nat}}, (Ne.{succ u2} E'' (g'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))) -> (LE.le.{0} Real Real.hasLe (Norm.norm.{u1} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u2} E'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (g'' x)))))))
-but is expected to have type
- forall {E : Type.{u2}} {E'' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_7 : NormedAddCommGroup.{u1} E''] {f : Nat -> E} {g'' : Nat -> E''}, (Asymptotics.IsBigO.{0, u2, u1} Nat E E'' _inst_1 (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring))) f g'') -> (Exists.{1} Real (fun (C : Real) => And (GT.gt.{0} Real Real.instLTReal C (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) (forall {{x : Nat}}, (Ne.{succ u1} E'' (g'' x) (OfNat.ofNat.{u1} E'' 0 (Zero.toOfNat0.{u1} E'' (NegZeroClass.toZero.{u1} E'' (SubNegZeroMonoid.toNegZeroClass.{u1} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E'' (AddCommGroup.toDivisionAddCommMonoid.{u1} E'' (NormedAddCommGroup.toAddCommGroup.{u1} E'' _inst_7))))))))) -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u1} E'' (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (g'' x)))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.bound_of_is_O_nat_at_top Asymptotics.bound_of_isBigO_nat_atTopₓ'. -/
theorem bound_of_isBigO_nat_atTop {f : ℕ → E} {g'' : ℕ → E''} (h : f =O[atTop] g'') :
∃ C > 0, ∀ ⦃x⦄, g'' x ≠ 0 → ‖f x‖ ≤ C * ‖g'' x‖ :=
bound_of_isBigO_cofinite <| by rwa [Nat.cofinite_eq_atTop]
#align asymptotics.bound_of_is_O_nat_at_top Asymptotics.bound_of_isBigO_nat_atTop
-/- warning: asymptotics.is_O_nat_at_top_iff -> Asymptotics.isBigO_nat_atTop_iff is a dubious translation:
-lean 3 declaration is
- forall {E'' : Type.{u1}} {F'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u2} F''] {f : Nat -> E''} {g : Nat -> F''}, (forall (x : Nat), (Eq.{succ u2} F'' (g x) (OfNat.ofNat.{u2} F'' 0 (OfNat.mk.{u2} F'' 0 (Zero.zero.{u2} F'' (AddZeroClass.toHasZero.{u2} F'' (AddMonoid.toAddZeroClass.{u2} F'' (SubNegMonoid.toAddMonoid.{u2} F'' (AddGroup.toSubNegMonoid.{u2} F'' (NormedAddGroup.toAddGroup.{u2} F'' (NormedAddCommGroup.toNormedAddGroup.{u2} F'' _inst_8)))))))))) -> (Eq.{succ u1} E'' (f x) (OfNat.ofNat.{u1} E'' 0 (OfNat.mk.{u1} E'' 0 (Zero.zero.{u1} E'' (AddZeroClass.toHasZero.{u1} E'' (AddMonoid.toAddZeroClass.{u1} E'' (SubNegMonoid.toAddMonoid.{u1} E'' (AddGroup.toSubNegMonoid.{u1} E'' (NormedAddGroup.toAddGroup.{u1} E'' (NormedAddCommGroup.toNormedAddGroup.{u1} E'' _inst_7))))))))))) -> (Iff (Asymptotics.IsBigO.{0, u1, u2} Nat E'' F'' (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u2} F'' _inst_8) (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring)))) f g) (Exists.{1} Real (fun (C : Real) => forall (x : Nat), LE.le.{0} Real Real.hasLe (Norm.norm.{u1} E'' (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u2} F'' (NormedAddCommGroup.toHasNorm.{u2} F'' _inst_8) (g x))))))
-but is expected to have type
- forall {E'' : Type.{u1}} {F'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u2} F''] {f : Nat -> E''} {g : Nat -> F''}, (forall (x : Nat), (Eq.{succ u2} F'' (g x) (OfNat.ofNat.{u2} F'' 0 (Zero.toOfNat0.{u2} F'' (NegZeroClass.toZero.{u2} F'' (SubNegZeroMonoid.toNegZeroClass.{u2} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} F'' (AddCommGroup.toDivisionAddCommMonoid.{u2} F'' (NormedAddCommGroup.toAddCommGroup.{u2} F'' _inst_8))))))))) -> (Eq.{succ u1} E'' (f x) (OfNat.ofNat.{u1} E'' 0 (Zero.toOfNat0.{u1} E'' (NegZeroClass.toZero.{u1} E'' (SubNegZeroMonoid.toNegZeroClass.{u1} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E'' (AddCommGroup.toDivisionAddCommMonoid.{u1} E'' (NormedAddCommGroup.toAddCommGroup.{u1} E'' _inst_7)))))))))) -> (Iff (Asymptotics.IsBigO.{0, u1, u2} Nat E'' F'' (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring))) f g) (Exists.{1} Real (fun (C : Real) => forall (x : Nat), LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} E'' (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u2} F'' (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) (g x))))))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_nat_at_top_iff Asymptotics.isBigO_nat_atTop_iffₓ'. -/
theorem isBigO_nat_atTop_iff {f : ℕ → E''} {g : ℕ → F''} (h : ∀ x, g x = 0 → f x = 0) :
f =O[atTop] g ↔ ∃ C, ∀ x, ‖f x‖ ≤ C * ‖g x‖ := by
rw [← Nat.cofinite_eq_atTop, is_O_cofinite_iff h]
#align asymptotics.is_O_nat_at_top_iff Asymptotics.isBigO_nat_atTop_iff
-/- warning: asymptotics.is_O_one_nat_at_top_iff -> Asymptotics.isBigO_one_nat_atTop_iff is a dubious translation:
-lean 3 declaration is
- forall {E'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u1} E''] {f : Nat -> E''}, Iff (Asymptotics.IsBigO.{0, u1, 0} Nat E'' Real (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) Real.hasNorm (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring)))) f (fun (n : Nat) => OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) (Exists.{1} Real (fun (C : Real) => forall (n : Nat), LE.le.{0} Real Real.hasLe (Norm.norm.{u1} E'' (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) (f n)) C))
-but is expected to have type
- forall {E'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u1} E''] {f : Nat -> E''}, Iff (Asymptotics.IsBigO.{0, u1, 0} Nat E'' Real (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) Real.norm (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring))) f (fun (n : Nat) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) (Exists.{1} Real (fun (C : Real) => forall (n : Nat), LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} E'' (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (f n)) C))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_one_nat_at_top_iff Asymptotics.isBigO_one_nat_atTop_iffₓ'. -/
theorem isBigO_one_nat_atTop_iff {f : ℕ → E''} :
f =O[atTop] (fun n => 1 : ℕ → ℝ) ↔ ∃ C, ∀ n, ‖f n‖ ≤ C :=
Iff.trans (isBigO_nat_atTop_iff fun n h => (one_ne_zero h).elim) <| by
simp only [norm_one, mul_one]
#align asymptotics.is_O_one_nat_at_top_iff Asymptotics.isBigO_one_nat_atTop_iff
-/- warning: asymptotics.is_O_with_pi -> Asymptotics.isBigOWith_pi is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] {g' : α -> F'} {l : Filter.{u1} α} {ι : Type.{u3}} [_inst_14 : Fintype.{u3} ι] {E' : ι -> Type.{u4}} [_inst_15 : forall (i : ι), NormedAddCommGroup.{u4} (E' i)] {f : α -> (forall (i : ι), E' i)} {C : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) C) -> (Iff (Asymptotics.IsBigOWith.{u1, max u3 u4, u2} α (forall (i : ι), E' i) F' (NormedAddCommGroup.toHasNorm.{max u3 u4} (forall (i : ι), E' i) (Pi.normedAddCommGroup.{u3, u4} ι (fun (i : ι) => E' i) _inst_14 (fun (i : ι) => _inst_15 i))) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) C l f g') (forall (i : ι), Asymptotics.IsBigOWith.{u1, u4, u2} α (E' i) F' (NormedAddCommGroup.toHasNorm.{u4} (E' i) (_inst_15 i)) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) C l (fun (x : α) => f x i) g'))
-but is expected to have type
- forall {α : Type.{u2}} {F' : Type.{u1}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] {g' : α -> F'} {l : Filter.{u2} α} {ι : Type.{u4}} [_inst_14 : Fintype.{u4} ι] {E' : ι -> Type.{u3}} [_inst_15 : forall (i : ι), NormedAddCommGroup.{u3} (E' i)] {f : α -> (forall (i : ι), E' i)} {C : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) C) -> (Iff (Asymptotics.IsBigOWith.{u2, max u4 u3, u1} α (forall (i : ι), E' i) F' (NormedAddCommGroup.toNorm.{max u4 u3} (forall (i : ι), E' i) (Pi.normedAddCommGroup.{u4, u3} ι (fun (i : ι) => E' i) _inst_14 (fun (i : ι) => _inst_15 i))) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) C l f g') (forall (i : ι), Asymptotics.IsBigOWith.{u2, u3, u1} α (E' i) F' (NormedAddCommGroup.toNorm.{u3} (E' i) (_inst_15 i)) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) C l (fun (x : α) => f x i) g'))
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_pi Asymptotics.isBigOWith_piₓ'. -/
theorem isBigOWith_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, NormedAddCommGroup (E' i)]
{f : α → ∀ i, E' i} {C : ℝ} (hC : 0 ≤ C) :
IsBigOWith C l f g' ↔ ∀ i, IsBigOWith C l (fun x => f x i) g' :=
@@ -4239,12 +2115,6 @@ theorem isBigOWith_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, No
simp only [is_O_with_iff, pi_norm_le_iff_of_nonneg (this _), eventually_all]
#align asymptotics.is_O_with_pi Asymptotics.isBigOWith_pi
-/- warning: asymptotics.is_O_pi -> Asymptotics.isBigO_pi is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] {g' : α -> F'} {l : Filter.{u1} α} {ι : Type.{u3}} [_inst_14 : Fintype.{u3} ι] {E' : ι -> Type.{u4}} [_inst_15 : forall (i : ι), NormedAddCommGroup.{u4} (E' i)] {f : α -> (forall (i : ι), E' i)}, Iff (Asymptotics.IsBigO.{u1, max u3 u4, u2} α (forall (i : ι), E' i) F' (NormedAddCommGroup.toHasNorm.{max u3 u4} (forall (i : ι), E' i) (Pi.normedAddCommGroup.{u3, u4} ι (fun (i : ι) => E' i) _inst_14 (fun (i : ι) => _inst_15 i))) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f g') (forall (i : ι), Asymptotics.IsBigO.{u1, u4, u2} α (E' i) F' (NormedAddCommGroup.toHasNorm.{u4} (E' i) (_inst_15 i)) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l (fun (x : α) => f x i) g')
-but is expected to have type
- forall {α : Type.{u2}} {F' : Type.{u1}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] {g' : α -> F'} {l : Filter.{u2} α} {ι : Type.{u4}} [_inst_14 : Fintype.{u4} ι] {E' : ι -> Type.{u3}} [_inst_15 : forall (i : ι), NormedAddCommGroup.{u3} (E' i)] {f : α -> (forall (i : ι), E' i)}, Iff (Asymptotics.IsBigO.{u2, max u4 u3, u1} α (forall (i : ι), E' i) F' (NormedAddCommGroup.toNorm.{max u4 u3} (forall (i : ι), E' i) (Pi.normedAddCommGroup.{u4, u3} ι (fun (i : ι) => E' i) _inst_14 (fun (i : ι) => _inst_15 i))) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') (forall (i : ι), Asymptotics.IsBigO.{u2, u3, u1} α (E' i) F' (NormedAddCommGroup.toNorm.{u3} (E' i) (_inst_15 i)) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => f x i) g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_pi Asymptotics.isBigO_piₓ'. -/
@[simp]
theorem isBigO_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, NormedAddCommGroup (E' i)]
{f : α → ∀ i, E' i} : f =O[l] g' ↔ ∀ i, (fun x => f x i) =O[l] g' :=
@@ -4253,12 +2123,6 @@ theorem isBigO_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, Normed
exact eventually_congr (eventually_at_top.2 ⟨0, fun c => is_O_with_pi⟩)
#align asymptotics.is_O_pi Asymptotics.isBigO_pi
-/- warning: asymptotics.is_o_pi -> Asymptotics.isLittleO_pi is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] {g' : α -> F'} {l : Filter.{u1} α} {ι : Type.{u3}} [_inst_14 : Fintype.{u3} ι] {E' : ι -> Type.{u4}} [_inst_15 : forall (i : ι), NormedAddCommGroup.{u4} (E' i)] {f : α -> (forall (i : ι), E' i)}, Iff (Asymptotics.IsLittleO.{u1, max u3 u4, u2} α (forall (i : ι), E' i) F' (NormedAddCommGroup.toHasNorm.{max u3 u4} (forall (i : ι), E' i) (Pi.normedAddCommGroup.{u3, u4} ι (fun (i : ι) => E' i) _inst_14 (fun (i : ι) => _inst_15 i))) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f g') (forall (i : ι), Asymptotics.IsLittleO.{u1, u4, u2} α (E' i) F' (NormedAddCommGroup.toHasNorm.{u4} (E' i) (_inst_15 i)) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l (fun (x : α) => f x i) g')
-but is expected to have type
- forall {α : Type.{u2}} {F' : Type.{u1}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] {g' : α -> F'} {l : Filter.{u2} α} {ι : Type.{u4}} [_inst_14 : Fintype.{u4} ι] {E' : ι -> Type.{u3}} [_inst_15 : forall (i : ι), NormedAddCommGroup.{u3} (E' i)] {f : α -> (forall (i : ι), E' i)}, Iff (Asymptotics.IsLittleO.{u2, max u4 u3, u1} α (forall (i : ι), E' i) F' (NormedAddCommGroup.toNorm.{max u4 u3} (forall (i : ι), E' i) (Pi.normedAddCommGroup.{u4, u3} ι (fun (i : ι) => E' i) _inst_14 (fun (i : ι) => _inst_15 i))) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') (forall (i : ι), Asymptotics.IsLittleO.{u2, u3, u1} α (E' i) F' (NormedAddCommGroup.toNorm.{u3} (E' i) (_inst_15 i)) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => f x i) g')
-Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_pi Asymptotics.isLittleO_piₓ'. -/
@[simp]
theorem isLittleO_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, NormedAddCommGroup (E' i)]
{f : α → ∀ i, E' i} : f =o[l] g' ↔ ∀ i, (fun x => f x i) =o[l] g' :=
@@ -4271,24 +2135,12 @@ end Asymptotics
open Asymptotics
-/- warning: summable_of_is_O -> summable_of_isBigO is a dubious translation:
-lean 3 declaration is
- forall {ι : Type.{u1}} {E : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u2} E] [_inst_2 : CompleteSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_1)))] {f : ι -> E} {g : ι -> Real}, (Summable.{0, u1} Real ι Real.addCommMonoid (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) g) -> (Asymptotics.IsBigO.{u1, u2, 0} ι E Real (NormedAddCommGroup.toHasNorm.{u2} E _inst_1) Real.hasNorm (Filter.cofinite.{u1} ι) f g) -> (Summable.{u2, u1} E ι (AddCommGroup.toAddCommMonoid.{u2} E (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_1)) (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_1)))) f)
-but is expected to have type
- forall {ι : Type.{u2}} {E : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} E] [_inst_2 : CompleteSpace.{u1} E (PseudoMetricSpace.toUniformSpace.{u1} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)))] {f : ι -> E} {g : ι -> Real}, (Summable.{0, u2} Real ι Real.instAddCommMonoidReal (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) g) -> (Asymptotics.IsBigO.{u2, u1, 0} ι E Real (NormedAddCommGroup.toNorm.{u1} E _inst_1) Real.norm (Filter.cofinite.{u2} ι) f g) -> (Summable.{u1, u2} E ι (AddCommGroup.toAddCommMonoid.{u1} E (NormedAddCommGroup.toAddCommGroup.{u1} E _inst_1)) (UniformSpace.toTopologicalSpace.{u1} E (PseudoMetricSpace.toUniformSpace.{u1} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)))) f)
-Case conversion may be inaccurate. Consider using '#align summable_of_is_O summable_of_isBigOₓ'. -/
theorem summable_of_isBigO {ι E} [NormedAddCommGroup E] [CompleteSpace E] {f : ι → E} {g : ι → ℝ}
(hg : Summable g) (h : f =O[cofinite] g) : Summable f :=
let ⟨C, hC⟩ := h.IsBigOWith
summable_of_norm_bounded_eventually (fun x => C * ‖g x‖) (hg.abs.mul_left _) hC.bound
#align summable_of_is_O summable_of_isBigO
-/- warning: summable_of_is_O_nat -> summable_of_isBigO_nat is a dubious translation:
-lean 3 declaration is
- forall {E : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} E] [_inst_2 : CompleteSpace.{u1} E (PseudoMetricSpace.toUniformSpace.{u1} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)))] {f : Nat -> E} {g : Nat -> Real}, (Summable.{0, 0} Real Nat Real.addCommMonoid (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) g) -> (Asymptotics.IsBigO.{0, u1, 0} Nat E Real (NormedAddCommGroup.toHasNorm.{u1} E _inst_1) Real.hasNorm (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring)))) f g) -> (Summable.{u1, 0} E Nat (AddCommGroup.toAddCommMonoid.{u1} E (NormedAddCommGroup.toAddCommGroup.{u1} E _inst_1)) (UniformSpace.toTopologicalSpace.{u1} E (PseudoMetricSpace.toUniformSpace.{u1} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)))) f)
-but is expected to have type
- forall {E : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} E] [_inst_2 : CompleteSpace.{u1} E (PseudoMetricSpace.toUniformSpace.{u1} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)))] {f : Nat -> E} {g : Nat -> Real}, (Summable.{0, 0} Real Nat Real.instAddCommMonoidReal (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) g) -> (Asymptotics.IsBigO.{0, u1, 0} Nat E Real (NormedAddCommGroup.toNorm.{u1} E _inst_1) Real.norm (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring))) f g) -> (Summable.{u1, 0} E Nat (AddCommGroup.toAddCommMonoid.{u1} E (NormedAddCommGroup.toAddCommGroup.{u1} E _inst_1)) (UniformSpace.toTopologicalSpace.{u1} E (PseudoMetricSpace.toUniformSpace.{u1} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)))) f)
-Case conversion may be inaccurate. Consider using '#align summable_of_is_O_nat summable_of_isBigO_natₓ'. -/
theorem summable_of_isBigO_nat {E} [NormedAddCommGroup E] [CompleteSpace E] {f : ℕ → E} {g : ℕ → ℝ}
(hg : Summable g) (h : f =O[atTop] g) : Summable f :=
summable_of_isBigO hg <| Nat.cofinite_eq_atTop.symm ▸ h
@@ -4300,12 +2152,6 @@ variable {α : Type _} {β : Type _} [TopologicalSpace α] [TopologicalSpace β]
variable {E : Type _} [Norm E] {F : Type _} [Norm F]
-/- warning: local_homeomorph.is_O_with_congr -> LocalHomeomorph.isBigOWith_congr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {E : Type.{u3}} [_inst_3 : Norm.{u3} E] {F : Type.{u4}} [_inst_4 : Norm.{u4} F] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {b : β}, (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) b (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (forall {f : β -> E} {g : β -> F} {C : Real}, Iff (Asymptotics.IsBigOWith.{u2, u3, u4} β E F _inst_3 _inst_4 C (nhds.{u2} β _inst_2 b) f g) (Asymptotics.IsBigOWith.{u1, u3, u4} α E F _inst_3 _inst_4 C (nhds.{u1} α _inst_1 (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u1, succ u2, succ u3} α β E f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)) (Function.comp.{succ u1, succ u2, succ u4} α β F g (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e))))
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] {E : Type.{u2}} [_inst_3 : Norm.{u2} E] {F : Type.{u1}} [_inst_4 : Norm.{u1} F] (e : LocalHomeomorph.{u4, u3} α β _inst_1 _inst_2) {b : β}, (Membership.mem.{u3, u3} β (Set.{u3} β) (Set.instMembershipSet.{u3} β) b (LocalEquiv.target.{u4, u3} α β (LocalHomeomorph.toLocalEquiv.{u4, u3} α β _inst_1 _inst_2 e))) -> (forall {f : β -> E} {g : β -> F} {C : Real}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} β E F _inst_3 _inst_4 C (nhds.{u3} β _inst_2 b) f g) (Asymptotics.IsBigOWith.{u4, u2, u1} α E F _inst_3 _inst_4 C (nhds.{u4} α _inst_1 (LocalHomeomorph.toFun'.{u3, u4} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u4, u3} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u4, succ u3, succ u2} α β E f (LocalHomeomorph.toFun'.{u4, u3} α β _inst_1 _inst_2 e)) (Function.comp.{succ u4, succ u3, succ u1} α β F g (LocalHomeomorph.toFun'.{u4, u3} α β _inst_1 _inst_2 e))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_O_with_congr LocalHomeomorph.isBigOWith_congrₓ'. -/
/-- Transfer `is_O_with` over a `local_homeomorph`. -/
theorem isBigOWith_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
{g : β → F} {C : ℝ} : IsBigOWith C (𝓝 b) f g ↔ IsBigOWith C (𝓝 (e.symm b)) (f ∘ e) (g ∘ e) :=
@@ -4317,24 +2163,12 @@ theorem isBigOWith_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.targ
((e.eventually_right_inverse hb).mono fun x hx => congr_arg g hx)⟩
#align local_homeomorph.is_O_with_congr LocalHomeomorph.isBigOWith_congr
-/- warning: local_homeomorph.is_O_congr -> LocalHomeomorph.isBigO_congr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {E : Type.{u3}} [_inst_3 : Norm.{u3} E] {F : Type.{u4}} [_inst_4 : Norm.{u4} F] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {b : β}, (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) b (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (forall {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsBigO.{u2, u3, u4} β E F _inst_3 _inst_4 (nhds.{u2} β _inst_2 b) f g) (Asymptotics.IsBigO.{u1, u3, u4} α E F _inst_3 _inst_4 (nhds.{u1} α _inst_1 (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u1, succ u2, succ u3} α β E f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)) (Function.comp.{succ u1, succ u2, succ u4} α β F g (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e))))
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] {E : Type.{u2}} [_inst_3 : Norm.{u2} E] {F : Type.{u1}} [_inst_4 : Norm.{u1} F] (e : LocalHomeomorph.{u4, u3} α β _inst_1 _inst_2) {b : β}, (Membership.mem.{u3, u3} β (Set.{u3} β) (Set.instMembershipSet.{u3} β) b (LocalEquiv.target.{u4, u3} α β (LocalHomeomorph.toLocalEquiv.{u4, u3} α β _inst_1 _inst_2 e))) -> (forall {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsBigO.{u3, u2, u1} β E F _inst_3 _inst_4 (nhds.{u3} β _inst_2 b) f g) (Asymptotics.IsBigO.{u4, u2, u1} α E F _inst_3 _inst_4 (nhds.{u4} α _inst_1 (LocalHomeomorph.toFun'.{u3, u4} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u4, u3} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u4, succ u3, succ u2} α β E f (LocalHomeomorph.toFun'.{u4, u3} α β _inst_1 _inst_2 e)) (Function.comp.{succ u4, succ u3, succ u1} α β F g (LocalHomeomorph.toFun'.{u4, u3} α β _inst_1 _inst_2 e))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_O_congr LocalHomeomorph.isBigO_congrₓ'. -/
/-- Transfer `is_O` over a `local_homeomorph`. -/
theorem isBigO_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E} {g : β → F} :
f =O[𝓝 b] g ↔ (f ∘ e) =O[𝓝 (e.symm b)] (g ∘ e) := by unfold is_O;
exact exists_congr fun C => e.is_O_with_congr hb
#align local_homeomorph.is_O_congr LocalHomeomorph.isBigO_congr
-/- warning: local_homeomorph.is_o_congr -> LocalHomeomorph.isLittleO_congr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {E : Type.{u3}} [_inst_3 : Norm.{u3} E] {F : Type.{u4}} [_inst_4 : Norm.{u4} F] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {b : β}, (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) b (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (forall {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsLittleO.{u2, u3, u4} β E F _inst_3 _inst_4 (nhds.{u2} β _inst_2 b) f g) (Asymptotics.IsLittleO.{u1, u3, u4} α E F _inst_3 _inst_4 (nhds.{u1} α _inst_1 (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u1, succ u2, succ u3} α β E f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)) (Function.comp.{succ u1, succ u2, succ u4} α β F g (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e))))
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] {E : Type.{u2}} [_inst_3 : Norm.{u2} E] {F : Type.{u1}} [_inst_4 : Norm.{u1} F] (e : LocalHomeomorph.{u4, u3} α β _inst_1 _inst_2) {b : β}, (Membership.mem.{u3, u3} β (Set.{u3} β) (Set.instMembershipSet.{u3} β) b (LocalEquiv.target.{u4, u3} α β (LocalHomeomorph.toLocalEquiv.{u4, u3} α β _inst_1 _inst_2 e))) -> (forall {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} β E F _inst_3 _inst_4 (nhds.{u3} β _inst_2 b) f g) (Asymptotics.IsLittleO.{u4, u2, u1} α E F _inst_3 _inst_4 (nhds.{u4} α _inst_1 (LocalHomeomorph.toFun'.{u3, u4} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u4, u3} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u4, succ u3, succ u2} α β E f (LocalHomeomorph.toFun'.{u4, u3} α β _inst_1 _inst_2 e)) (Function.comp.{succ u4, succ u3, succ u1} α β F g (LocalHomeomorph.toFun'.{u4, u3} α β _inst_1 _inst_2 e))))
-Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_o_congr LocalHomeomorph.isLittleO_congrₓ'. -/
/-- Transfer `is_o` over a `local_homeomorph`. -/
theorem isLittleO_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
{g : β → F} : f =o[𝓝 b] g ↔ (f ∘ e) =o[𝓝 (e.symm b)] (g ∘ e) := by unfold is_o;
@@ -4351,36 +2185,18 @@ variable {E : Type _} [Norm E] {F : Type _} [Norm F]
open Asymptotics
-/- warning: homeomorph.is_O_with_congr -> Homeomorph.isBigOWith_congr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {E : Type.{u3}} [_inst_3 : Norm.{u3} E] {F : Type.{u4}} [_inst_4 : Norm.{u4} F] (e : Homeomorph.{u1, u2} α β _inst_1 _inst_2) {b : β} {f : β -> E} {g : β -> F} {C : Real}, Iff (Asymptotics.IsBigOWith.{u2, u3, u4} β E F _inst_3 _inst_4 C (nhds.{u2} β _inst_2 b) f g) (Asymptotics.IsBigOWith.{u1, u3, u4} α E F _inst_3 _inst_4 C (nhds.{u1} α _inst_1 (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (Homeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : Homeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (Homeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (Homeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u1, succ u2, succ u3} α β E f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Homeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : Homeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (Homeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)) (Function.comp.{succ u1, succ u2, succ u4} α β F g (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Homeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : Homeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (Homeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)))
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] {E : Type.{u2}} [_inst_3 : Norm.{u2} E] {F : Type.{u1}} [_inst_4 : Norm.{u1} F] (e : Homeomorph.{u4, u3} α β _inst_1 _inst_2) {b : β} {f : β -> E} {g : β -> F} {C : Real}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} β E F _inst_3 _inst_4 C (nhds.{u3} β _inst_2 b) f g) (Asymptotics.IsBigOWith.{u4, u2, u1} α E F _inst_3 _inst_4 C (nhds.{u4} α _inst_1 (FunLike.coe.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β (fun (_x : β) => α) (EmbeddingLike.toFunLike.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β α (EquivLike.toEmbeddingLike.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β α (Homeomorph.instEquivLikeHomeomorph.{u3, u4} β α _inst_2 _inst_1))) (Homeomorph.symm.{u4, u3} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u4, succ u3, succ u2} α β E f (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α (fun (_x : α) => β) (EmbeddingLike.toFunLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (EquivLike.toEmbeddingLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (Homeomorph.instEquivLikeHomeomorph.{u4, u3} α β _inst_1 _inst_2))) e)) (Function.comp.{succ u4, succ u3, succ u1} α β F g (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α (fun (_x : α) => β) (EmbeddingLike.toFunLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (EquivLike.toEmbeddingLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (Homeomorph.instEquivLikeHomeomorph.{u4, u3} α β _inst_1 _inst_2))) e)))
-Case conversion may be inaccurate. Consider using '#align homeomorph.is_O_with_congr Homeomorph.isBigOWith_congrₓ'. -/
/-- Transfer `is_O_with` over a `homeomorph`. -/
theorem isBigOWith_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} {C : ℝ} :
IsBigOWith C (𝓝 b) f g ↔ IsBigOWith C (𝓝 (e.symm b)) (f ∘ e) (g ∘ e) :=
e.toLocalHomeomorph.isBigOWith_congr trivial
#align homeomorph.is_O_with_congr Homeomorph.isBigOWith_congr
-/- warning: homeomorph.is_O_congr -> Homeomorph.isBigO_congr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {E : Type.{u3}} [_inst_3 : Norm.{u3} E] {F : Type.{u4}} [_inst_4 : Norm.{u4} F] (e : Homeomorph.{u1, u2} α β _inst_1 _inst_2) {b : β} {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsBigO.{u2, u3, u4} β E F _inst_3 _inst_4 (nhds.{u2} β _inst_2 b) f g) (Asymptotics.IsBigO.{u1, u3, u4} α E F _inst_3 _inst_4 (nhds.{u1} α _inst_1 (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (Homeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : Homeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (Homeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (Homeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u1, succ u2, succ u3} α β E f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Homeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : Homeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (Homeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)) (Function.comp.{succ u1, succ u2, succ u4} α β F g (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Homeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : Homeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (Homeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)))
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] {E : Type.{u2}} [_inst_3 : Norm.{u2} E] {F : Type.{u1}} [_inst_4 : Norm.{u1} F] (e : Homeomorph.{u4, u3} α β _inst_1 _inst_2) {b : β} {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsBigO.{u3, u2, u1} β E F _inst_3 _inst_4 (nhds.{u3} β _inst_2 b) f g) (Asymptotics.IsBigO.{u4, u2, u1} α E F _inst_3 _inst_4 (nhds.{u4} α _inst_1 (FunLike.coe.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β (fun (_x : β) => α) (EmbeddingLike.toFunLike.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β α (EquivLike.toEmbeddingLike.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β α (Homeomorph.instEquivLikeHomeomorph.{u3, u4} β α _inst_2 _inst_1))) (Homeomorph.symm.{u4, u3} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u4, succ u3, succ u2} α β E f (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α (fun (_x : α) => β) (EmbeddingLike.toFunLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (EquivLike.toEmbeddingLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (Homeomorph.instEquivLikeHomeomorph.{u4, u3} α β _inst_1 _inst_2))) e)) (Function.comp.{succ u4, succ u3, succ u1} α β F g (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α (fun (_x : α) => β) (EmbeddingLike.toFunLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (EquivLike.toEmbeddingLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (Homeomorph.instEquivLikeHomeomorph.{u4, u3} α β _inst_1 _inst_2))) e)))
-Case conversion may be inaccurate. Consider using '#align homeomorph.is_O_congr Homeomorph.isBigO_congrₓ'. -/
/-- Transfer `is_O` over a `homeomorph`. -/
theorem isBigO_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} :
f =O[𝓝 b] g ↔ (f ∘ e) =O[𝓝 (e.symm b)] (g ∘ e) := by unfold is_O;
exact exists_congr fun C => e.is_O_with_congr
#align homeomorph.is_O_congr Homeomorph.isBigO_congr
-/- warning: homeomorph.is_o_congr -> Homeomorph.isLittleO_congr is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {E : Type.{u3}} [_inst_3 : Norm.{u3} E] {F : Type.{u4}} [_inst_4 : Norm.{u4} F] (e : Homeomorph.{u1, u2} α β _inst_1 _inst_2) {b : β} {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsLittleO.{u2, u3, u4} β E F _inst_3 _inst_4 (nhds.{u2} β _inst_2 b) f g) (Asymptotics.IsLittleO.{u1, u3, u4} α E F _inst_3 _inst_4 (nhds.{u1} α _inst_1 (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (Homeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : Homeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (Homeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (Homeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u1, succ u2, succ u3} α β E f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Homeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : Homeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (Homeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)) (Function.comp.{succ u1, succ u2, succ u4} α β F g (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Homeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : Homeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (Homeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)))
-but is expected to have type
- forall {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] {E : Type.{u2}} [_inst_3 : Norm.{u2} E] {F : Type.{u1}} [_inst_4 : Norm.{u1} F] (e : Homeomorph.{u4, u3} α β _inst_1 _inst_2) {b : β} {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} β E F _inst_3 _inst_4 (nhds.{u3} β _inst_2 b) f g) (Asymptotics.IsLittleO.{u4, u2, u1} α E F _inst_3 _inst_4 (nhds.{u4} α _inst_1 (FunLike.coe.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β (fun (_x : β) => α) (EmbeddingLike.toFunLike.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β α (EquivLike.toEmbeddingLike.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β α (Homeomorph.instEquivLikeHomeomorph.{u3, u4} β α _inst_2 _inst_1))) (Homeomorph.symm.{u4, u3} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u4, succ u3, succ u2} α β E f (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α (fun (_x : α) => β) (EmbeddingLike.toFunLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (EquivLike.toEmbeddingLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (Homeomorph.instEquivLikeHomeomorph.{u4, u3} α β _inst_1 _inst_2))) e)) (Function.comp.{succ u4, succ u3, succ u1} α β F g (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α (fun (_x : α) => β) (EmbeddingLike.toFunLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (EquivLike.toEmbeddingLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (Homeomorph.instEquivLikeHomeomorph.{u4, u3} α β _inst_1 _inst_2))) e)))
-Case conversion may be inaccurate. Consider using '#align homeomorph.is_o_congr Homeomorph.isLittleO_congrₓ'. -/
/-- Transfer `is_o` over a `homeomorph`. -/
theorem isLittleO_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} :
f =o[𝓝 b] g ↔ (f ∘ e) =o[𝓝 (e.symm b)] (g ∘ e) := by unfold is_o;
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -173,9 +173,7 @@ but is expected to have type
forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (Norm.norm.{u1} F _inst_2 (g x))) l) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_bound' Asymptotics.IsBigO.of_bound'ₓ'. -/
theorem IsBigO.of_bound' (h : ∀ᶠ x in l, ‖f x‖ ≤ ‖g x‖) : f =O[l] g :=
- IsBigO.of_bound 1 <| by
- simp_rw [one_mul]
- exact h
+ IsBigO.of_bound 1 <| by simp_rw [one_mul]; exact h
#align asymptotics.is_O.of_bound' Asymptotics.IsBigO.of_bound'
/- warning: asymptotics.is_O.bound -> Asymptotics.IsBigO.bound is a dubious translation:
@@ -581,10 +579,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g₁) (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g₂))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_congr Asymptotics.isBigO_congrₓ'. -/
-theorem isBigO_congr (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₁ =O[l] g₁ ↔ f₂ =O[l] g₂ :=
- by
- unfold is_O
- exact exists_congr fun c => is_O_with_congr rfl hf hg
+theorem isBigO_congr (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₁ =O[l] g₁ ↔ f₂ =O[l] g₂ := by
+ unfold is_O; exact exists_congr fun c => is_O_with_congr rfl hf hg
#align asymptotics.is_O_congr Asymptotics.isBigO_congr
/- warning: asymptotics.is_O.congr' -> Asymptotics.IsBigO.congr' is a dubious translation:
@@ -634,10 +630,8 @@ lean 3 declaration is
but is expected to have type
forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g₁) (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g₂))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_congr Asymptotics.isLittleO_congrₓ'. -/
-theorem isLittleO_congr (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₁ =o[l] g₁ ↔ f₂ =o[l] g₂ :=
- by
- unfold is_o
- exact forall₂_congr fun c hc => is_O_with_congr (Eq.refl c) hf hg
+theorem isLittleO_congr (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₁ =o[l] g₁ ↔ f₂ =o[l] g₂ := by
+ unfold is_o; exact forall₂_congr fun c hc => is_O_with_congr (Eq.refl c) hf hg
#align asymptotics.is_o_congr Asymptotics.isLittleO_congr
/- warning: asymptotics.is_o.congr' -> Asymptotics.IsLittleO.congr' is a dubious translation:
@@ -775,9 +769,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_map Asymptotics.isBigOWith_mapₓ'. -/
@[simp]
theorem isBigOWith_map {k : β → α} {l : Filter β} :
- IsBigOWith c (map k l) f g ↔ IsBigOWith c l (f ∘ k) (g ∘ k) :=
- by
- unfold is_O_with
+ IsBigOWith c (map k l) f g ↔ IsBigOWith c l (f ∘ k) (g ∘ k) := by unfold is_O_with;
exact eventually_map
#align asymptotics.is_O_with_map Asymptotics.isBigOWith_map
@@ -973,9 +965,7 @@ but is expected to have type
forall {α : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u3} E _inst_1 (f x)) (Norm.norm.{u2} F _inst_2 (g x))) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E F _inst_1 _inst_2 (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) l f g)
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_of_le Asymptotics.isBigOWith_of_leₓ'. -/
theorem isBigOWith_of_le (hfg : ∀ x, ‖f x‖ ≤ ‖g x‖) : IsBigOWith 1 l f g :=
- isBigOWith_of_le' l fun x => by
- rw [one_mul]
- exact hfg x
+ isBigOWith_of_le' l fun x => by rw [one_mul]; exact hfg x
#align asymptotics.is_O_with_of_le Asymptotics.isBigOWith_of_le
/- warning: asymptotics.is_O_of_le' -> Asymptotics.isBigO_of_le' is a dubious translation:
@@ -1330,9 +1320,7 @@ but is expected to have type
forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_norm_right Asymptotics.isBigO_norm_rightₓ'. -/
@[simp]
-theorem isBigO_norm_right : (f =O[l] fun x => ‖g' x‖) ↔ f =O[l] g' :=
- by
- unfold is_O
+theorem isBigO_norm_right : (f =O[l] fun x => ‖g' x‖) ↔ f =O[l] g' := by unfold is_O;
exact exists_congr fun _ => is_O_with_norm_right
#align asymptotics.is_O_norm_right Asymptotics.isBigO_norm_right
@@ -1386,9 +1374,7 @@ but is expected to have type
forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_norm_right Asymptotics.isLittleO_norm_rightₓ'. -/
@[simp]
-theorem isLittleO_norm_right : (f =o[l] fun x => ‖g' x‖) ↔ f =o[l] g' :=
- by
- unfold is_o
+theorem isLittleO_norm_right : (f =o[l] fun x => ‖g' x‖) ↔ f =o[l] g' := by unfold is_o;
exact forall₂_congr fun _ _ => is_O_with_norm_right
#align asymptotics.is_o_norm_right Asymptotics.isLittleO_norm_right
@@ -1496,9 +1482,7 @@ but is expected to have type
forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, 0, u2} α Real F Real.norm _inst_2 l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g) (Asymptotics.IsBigO.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 l f' g)
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_norm_left Asymptotics.isBigO_norm_leftₓ'. -/
@[simp]
-theorem isBigO_norm_left : (fun x => ‖f' x‖) =O[l] g ↔ f' =O[l] g :=
- by
- unfold is_O
+theorem isBigO_norm_left : (fun x => ‖f' x‖) =O[l] g ↔ f' =O[l] g := by unfold is_O;
exact exists_congr fun _ => is_O_with_norm_left
#align asymptotics.is_O_norm_left Asymptotics.isBigO_norm_left
@@ -1552,9 +1536,7 @@ but is expected to have type
forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, 0, u2} α Real F Real.norm _inst_2 l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g) (Asymptotics.IsLittleO.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 l f' g)
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_norm_left Asymptotics.isLittleO_norm_leftₓ'. -/
@[simp]
-theorem isLittleO_norm_left : (fun x => ‖f' x‖) =o[l] g ↔ f' =o[l] g :=
- by
- unfold is_o
+theorem isLittleO_norm_left : (fun x => ‖f' x‖) =o[l] g ↔ f' =o[l] g := by unfold is_o;
exact forall₂_congr fun _ _ => is_O_with_norm_left
#align asymptotics.is_o_norm_left Asymptotics.isLittleO_norm_left
@@ -1798,9 +1780,7 @@ but is expected to have type
forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_neg_right Asymptotics.isBigO_neg_rightₓ'. -/
@[simp]
-theorem isBigO_neg_right : (f =O[l] fun x => -g' x) ↔ f =O[l] g' :=
- by
- unfold is_O
+theorem isBigO_neg_right : (f =O[l] fun x => -g' x) ↔ f =O[l] g' := by unfold is_O;
exact exists_congr fun _ => is_O_with_neg_right
#align asymptotics.is_O_neg_right Asymptotics.isBigO_neg_right
@@ -1827,9 +1807,7 @@ but is expected to have type
forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_neg_right Asymptotics.isLittleO_neg_rightₓ'. -/
@[simp]
-theorem isLittleO_neg_right : (f =o[l] fun x => -g' x) ↔ f =o[l] g' :=
- by
- unfold is_o
+theorem isLittleO_neg_right : (f =o[l] fun x => -g' x) ↔ f =o[l] g' := by unfold is_o;
exact forall₂_congr fun _ _ => is_O_with_neg_right
#align asymptotics.is_o_neg_right Asymptotics.isLittleO_neg_right
@@ -1883,9 +1861,7 @@ but is expected to have type
forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g) (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g)
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_neg_left Asymptotics.isBigO_neg_leftₓ'. -/
@[simp]
-theorem isBigO_neg_left : (fun x => -f' x) =O[l] g ↔ f' =O[l] g :=
- by
- unfold is_O
+theorem isBigO_neg_left : (fun x => -f' x) =O[l] g ↔ f' =O[l] g := by unfold is_O;
exact exists_congr fun _ => is_O_with_neg_left
#align asymptotics.is_O_neg_left Asymptotics.isBigO_neg_left
@@ -1912,9 +1888,7 @@ but is expected to have type
forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g) (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g)
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_neg_left Asymptotics.isLittleO_neg_leftₓ'. -/
@[simp]
-theorem isLittleO_neg_left : (fun x => -f' x) =o[l] g ↔ f' =o[l] g :=
- by
- unfold is_o
+theorem isLittleO_neg_left : (fun x => -f' x) =o[l] g ↔ f' =o[l] g := by unfold is_o;
exact forall₂_congr fun _ _ => is_O_with_neg_left
#align asymptotics.is_o_neg_left Asymptotics.isLittleO_neg_left
@@ -2784,9 +2758,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_one_iff Asymptotics.isBigO_one_iffₓ'. -/
@[simp]
theorem isBigO_one_iff : f =O[l] (fun x => 1 : α → F) ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x‖ :=
- by
- simp only [is_O_iff, norm_one, mul_one]
- rfl
+ by simp only [is_O_iff, norm_one, mul_one]; rfl
#align asymptotics.is_O_one_iff Asymptotics.isBigO_one_iff
/- warning: filter.is_bounded_under.is_O_one -> Filter.IsBoundedUnder.isBigO_one is a dubious translation:
@@ -3524,8 +3496,7 @@ Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const
theorem isBigO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x) =O[l] g ↔ f' =O[l] g :=
by
have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
- rw [← is_O_norm_left]
- simp only [norm_smul]
+ rw [← is_O_norm_left]; simp only [norm_smul]
rw [is_O_const_mul_left_iff cne0, is_O_norm_left]
#align asymptotics.is_O_const_smul_left Asymptotics.isBigO_const_smul_left
@@ -3535,8 +3506,7 @@ Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const
theorem isLittleO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x) =o[l] g ↔ f' =o[l] g :=
by
have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
- rw [← is_o_norm_left]
- simp only [norm_smul]
+ rw [← is_o_norm_left]; simp only [norm_smul]
rw [is_o_const_mul_left_iff cne0, is_o_norm_left]
#align asymptotics.is_o_const_smul_left Asymptotics.isLittleO_const_smul_left
@@ -3546,8 +3516,7 @@ Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const
theorem isBigO_const_smul_right {c : 𝕜} (hc : c ≠ 0) : (f =O[l] fun x => c • f' x) ↔ f =O[l] f' :=
by
have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
- rw [← is_O_norm_right]
- simp only [norm_smul]
+ rw [← is_O_norm_right]; simp only [norm_smul]
rw [is_O_const_mul_right_iff cne0, is_O_norm_right]
#align asymptotics.is_O_const_smul_right Asymptotics.isBigO_const_smul_right
@@ -3558,8 +3527,7 @@ theorem isLittleO_const_smul_right {c : 𝕜} (hc : c ≠ 0) :
(f =o[l] fun x => c • f' x) ↔ f =o[l] f' :=
by
have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
- rw [← is_o_norm_right]
- simp only [norm_smul]
+ rw [← is_o_norm_right]; simp only [norm_smul]
rw [is_o_const_mul_right_iff cne0, is_o_norm_right]
#align asymptotics.is_o_const_smul_right Asymptotics.isLittleO_const_smul_right
@@ -3966,8 +3934,7 @@ theorem isLittleO_iff_exists_eq_mul :
by
constructor
· exact fun h => ⟨fun x => u x / v x, h.tendsto_div_nhds_zero, h.eventually_mul_div_cancel.symm⟩
- · unfold is_o
- rintro ⟨φ, hφ, huvφ⟩ c hpos
+ · unfold is_o; rintro ⟨φ, hφ, huvφ⟩ c hpos
rw [NormedAddCommGroup.tendsto_nhds_zero] at hφ
exact is_O_with_of_eq_mul _ ((hφ c hpos).mono fun x => le_of_lt) huvφ
#align asymptotics.is_o_iff_exists_eq_mul Asymptotics.isLittleO_iff_exists_eq_mul
@@ -4076,10 +4043,8 @@ lean 3 declaration is
but is expected to have type
forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {n : Nat}, (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)) n) -> (Asymptotics.IsLittleO.{u1, u1, u1} 𝕜 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (fun (x : 𝕜) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) x n) (fun (x : 𝕜) => x))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_pow_id Asymptotics.isLittleO_pow_idₓ'. -/
-theorem isLittleO_pow_id {n : ℕ} (h : 1 < n) : (fun x : 𝕜 => x ^ n) =o[𝓝 0] fun x => x :=
- by
- convert is_o_pow_pow h
- simp only [pow_one]
+theorem isLittleO_pow_id {n : ℕ} (h : 1 < n) : (fun x : 𝕜 => x ^ n) =o[𝓝 0] fun x => x := by
+ convert is_o_pow_pow h; simp only [pow_one]
#align asymptotics.is_o_pow_id Asymptotics.isLittleO_pow_id
/- warning: asymptotics.is_o_norm_pow_id -> Asymptotics.isLittleO_norm_pow_id is a dubious translation:
@@ -4110,10 +4075,8 @@ but is expected to have type
forall {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f : E'' -> F''} {x₀ : E''} {n : Nat}, (Asymptotics.IsBigO.{u2, u1, 0} E'' F'' Real (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) Real.norm (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) x₀) f (fun (x : E'') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (HSub.hSub.{u2, u2, u2} E'' E'' E'' (instHSub.{u2} E'' (SubNegMonoid.toSub.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))) x x₀)) n)) -> (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) n) -> (Eq.{succ u1} F'' (f x₀) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8)))))))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.eq_zero_of_norm_pow Asymptotics.IsBigO.eq_zero_of_norm_powₓ'. -/
theorem IsBigO.eq_zero_of_norm_pow {f : E'' → F''} {x₀ : E''} {n : ℕ}
- (h : f =O[𝓝 x₀] fun x => ‖x - x₀‖ ^ n) (hn : 0 < n) : f x₀ = 0 :=
- by
- rw [← nhdsWithin_univ] at h
- exact h.eq_zero_of_norm_pow_within (mem_univ _) hn
+ (h : f =O[𝓝 x₀] fun x => ‖x - x₀‖ ^ n) (hn : 0 < n) : f x₀ = 0 := by
+ rw [← nhdsWithin_univ] at h; exact h.eq_zero_of_norm_pow_within (mem_univ _) hn
#align asymptotics.is_O.eq_zero_of_norm_pow Asymptotics.IsBigO.eq_zero_of_norm_pow
/- warning: asymptotics.is_o_pow_sub_pow_sub -> Asymptotics.isLittleO_pow_sub_pow_sub is a dubious translation:
@@ -4347,9 +4310,7 @@ Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_O_
theorem isBigOWith_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
{g : β → F} {C : ℝ} : IsBigOWith C (𝓝 b) f g ↔ IsBigOWith C (𝓝 (e.symm b)) (f ∘ e) (g ∘ e) :=
⟨fun h =>
- h.comp_tendsto <| by
- convert e.continuous_at (e.map_target hb)
- exact (e.right_inv hb).symm,
+ h.comp_tendsto <| by convert e.continuous_at (e.map_target hb); exact (e.right_inv hb).symm,
fun h =>
(h.comp_tendsto (e.continuousAt_symm hb)).congr' rfl
((e.eventually_right_inverse hb).mono fun x hx => congr_arg f hx)
@@ -4364,9 +4325,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_O_congr LocalHomeomorph.isBigO_congrₓ'. -/
/-- Transfer `is_O` over a `local_homeomorph`. -/
theorem isBigO_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E} {g : β → F} :
- f =O[𝓝 b] g ↔ (f ∘ e) =O[𝓝 (e.symm b)] (g ∘ e) :=
- by
- unfold is_O
+ f =O[𝓝 b] g ↔ (f ∘ e) =O[𝓝 (e.symm b)] (g ∘ e) := by unfold is_O;
exact exists_congr fun C => e.is_O_with_congr hb
#align local_homeomorph.is_O_congr LocalHomeomorph.isBigO_congr
@@ -4378,9 +4337,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_o_congr LocalHomeomorph.isLittleO_congrₓ'. -/
/-- Transfer `is_o` over a `local_homeomorph`. -/
theorem isLittleO_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
- {g : β → F} : f =o[𝓝 b] g ↔ (f ∘ e) =o[𝓝 (e.symm b)] (g ∘ e) :=
- by
- unfold is_o
+ {g : β → F} : f =o[𝓝 b] g ↔ (f ∘ e) =o[𝓝 (e.symm b)] (g ∘ e) := by unfold is_o;
exact forall₂_congr fun c hc => e.is_O_with_congr hb
#align local_homeomorph.is_o_congr LocalHomeomorph.isLittleO_congr
@@ -4414,9 +4371,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align homeomorph.is_O_congr Homeomorph.isBigO_congrₓ'. -/
/-- Transfer `is_O` over a `homeomorph`. -/
theorem isBigO_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} :
- f =O[𝓝 b] g ↔ (f ∘ e) =O[𝓝 (e.symm b)] (g ∘ e) :=
- by
- unfold is_O
+ f =O[𝓝 b] g ↔ (f ∘ e) =O[𝓝 (e.symm b)] (g ∘ e) := by unfold is_O;
exact exists_congr fun C => e.is_O_with_congr
#align homeomorph.is_O_congr Homeomorph.isBigO_congr
@@ -4428,9 +4383,7 @@ but is expected to have type
Case conversion may be inaccurate. Consider using '#align homeomorph.is_o_congr Homeomorph.isLittleO_congrₓ'. -/
/-- Transfer `is_o` over a `homeomorph`. -/
theorem isLittleO_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} :
- f =o[𝓝 b] g ↔ (f ∘ e) =o[𝓝 (e.symm b)] (g ∘ e) :=
- by
- unfold is_o
+ f =o[𝓝 b] g ↔ (f ∘ e) =o[𝓝 (e.symm b)] (g ∘ e) := by unfold is_o;
exact forall₂_congr fun c hc => e.is_O_with_congr
#align homeomorph.is_o_congr Homeomorph.isLittleO_congr
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -3495,10 +3495,7 @@ section SmulConst
variable [NormedSpace 𝕜 E']
/- warning: asymptotics.is_O_with.const_smul_left -> Asymptotics.IsBigOWith.const_smul_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l f' g) -> (forall (c' : 𝕜), Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (Norm.norm.{u4} 𝕜 (NormedField.toHasNorm.{u4} 𝕜 _inst_12) c') c) l (fun (x : α) => SMul.smul.{u4, u3} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))) c' (f' x)) g)
-but is expected to have type
- forall {α : Type.{u4}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u4} α} [_inst_14 : NormedSpace.{u1, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsBigOWith.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 c l f' g) -> (forall (c' : 𝕜), Asymptotics.IsBigOWith.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) c') c) l (fun (x : α) => HSMul.hSMul.{u1, u3, u3} 𝕜 E' E' (instHSMul.{u1, u3} 𝕜 E' (SMulZeroClass.toSMul.{u1, u3} 𝕜 E' (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u1, u3} 𝕜 E' (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (Module.toMulActionWithZero.{u1, u3} 𝕜 E' (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u1, u3} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c' (f' x)) g)
+<too large>
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.const_smul_left Asymptotics.IsBigOWith.const_smul_leftₓ'. -/
theorem IsBigOWith.const_smul_left (h : IsBigOWith c l f' g) (c' : 𝕜) :
IsBigOWith (‖c'‖ * c) l (fun x => c' • f' x) g :=
@@ -3507,10 +3504,7 @@ theorem IsBigOWith.const_smul_left (h : IsBigOWith c l f' g) (c' : 𝕜) :
#align asymptotics.is_O_with.const_smul_left Asymptotics.IsBigOWith.const_smul_left
/- warning: asymptotics.is_O.const_smul_left -> Asymptotics.IsBigO.const_smul_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (SMul.smul.{u4, max u1 u3} 𝕜 (α -> E') (Function.hasSMul.{u1, u4, u3} α 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c f') g)
-but is expected to have type
- forall {α : Type.{u4}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u1} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u4} α} [_inst_14 : NormedSpace.{u1, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsBigO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsBigO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l (HSMul.hSMul.{u1, max u4 u3, max u4 u3} 𝕜 (α -> E') (α -> E') (instHSMul.{u1, max u4 u3} 𝕜 (α -> E') (Pi.instSMul.{u4, u3, u1} α 𝕜 (fun (a._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.45074 : α) => E') (fun (i : α) => SMulZeroClass.toSMul.{u1, u3} 𝕜 E' (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u1, u3} 𝕜 E' (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (Module.toMulActionWithZero.{u1, u3} 𝕜 E' (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u1, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))))) c f') g)
+<too large>
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.const_smul_left Asymptotics.IsBigO.const_smul_leftₓ'. -/
theorem IsBigO.const_smul_left (h : f' =O[l] g) (c : 𝕜) : (c • f') =O[l] g :=
let ⟨b, hb⟩ := h.IsBigOWith
@@ -3518,20 +3512,14 @@ theorem IsBigO.const_smul_left (h : f' =O[l] g) (c : 𝕜) : (c • f') =O[l] g
#align asymptotics.is_O.const_smul_left Asymptotics.IsBigO.const_smul_left
/- warning: asymptotics.is_o.const_smul_left -> Asymptotics.IsLittleO.const_smul_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (SMul.smul.{u4, max u1 u3} 𝕜 (α -> E') (Function.hasSMul.{u1, u4, u3} α 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c f') g)
-but is expected to have type
- forall {α : Type.{u4}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u1} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u4} α} [_inst_14 : NormedSpace.{u1, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsLittleO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsLittleO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l (HSMul.hSMul.{u1, max u4 u3, max u4 u3} 𝕜 (α -> E') (α -> E') (instHSMul.{u1, max u4 u3} 𝕜 (α -> E') (Pi.instSMul.{u4, u3, u1} α 𝕜 (fun (a._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.45220 : α) => E') (fun (i : α) => SMulZeroClass.toSMul.{u1, u3} 𝕜 E' (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u1, u3} 𝕜 E' (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (Module.toMulActionWithZero.{u1, u3} 𝕜 E' (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u1, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))))) c f') g)
+<too large>
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.const_smul_left Asymptotics.IsLittleO.const_smul_leftₓ'. -/
theorem IsLittleO.const_smul_left (h : f' =o[l] g) (c : 𝕜) : (c • f') =o[l] g :=
IsLittleO.of_norm_left <| by simpa only [← norm_smul] using h.norm_left.const_mul_left ‖c‖
#align asymptotics.is_o.const_smul_left Asymptotics.IsLittleO.const_smul_left
/- warning: asymptotics.is_O_const_smul_left -> Asymptotics.isBigO_const_smul_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (OfNat.mk.{u4} 𝕜 0 (Zero.zero.{u4} 𝕜 (MulZeroClass.toHasZero.{u4} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u4} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u4} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u4} 𝕜 (Ring.toNonAssocRing.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => SMul.smul.{u4, u3} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))) c (f' x)) g) (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g))
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (Zero.toOfNat0.{u4} 𝕜 (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSMul.hSMul.{u4, u2, u2} 𝕜 E' E' (instHSMul.{u4, u2} 𝕜 E' (SMulZeroClass.toSMul.{u4, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c (f' x)) g) (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g))
+<too large>
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_smul_left Asymptotics.isBigO_const_smul_leftₓ'. -/
theorem isBigO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x) =O[l] g ↔ f' =O[l] g :=
by
@@ -3542,10 +3530,7 @@ theorem isBigO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x)
#align asymptotics.is_O_const_smul_left Asymptotics.isBigO_const_smul_left
/- warning: asymptotics.is_o_const_smul_left -> Asymptotics.isLittleO_const_smul_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (OfNat.mk.{u4} 𝕜 0 (Zero.zero.{u4} 𝕜 (MulZeroClass.toHasZero.{u4} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u4} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u4} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u4} 𝕜 (Ring.toNonAssocRing.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => SMul.smul.{u4, u3} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))) c (f' x)) g) (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g))
-but is expected to have type
- forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (Zero.toOfNat0.{u4} 𝕜 (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSMul.hSMul.{u4, u2, u2} 𝕜 E' E' (instHSMul.{u4, u2} 𝕜 E' (SMulZeroClass.toSMul.{u4, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c (f' x)) g) (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g))
+<too large>
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_smul_left Asymptotics.isLittleO_const_smul_leftₓ'. -/
theorem isLittleO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x) =o[l] g ↔ f' =o[l] g :=
by
@@ -3556,10 +3541,7 @@ theorem isLittleO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f'
#align asymptotics.is_o_const_smul_left Asymptotics.isLittleO_const_smul_left
/- warning: asymptotics.is_O_const_smul_right -> Asymptotics.isBigO_const_smul_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {f : α -> E} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (OfNat.mk.{u4} 𝕜 0 (Zero.zero.{u4} 𝕜 (MulZeroClass.toHasZero.{u4} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u4} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u4} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u4} 𝕜 (Ring.toNonAssocRing.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E E' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) l f (fun (x : α) => SMul.smul.{u4, u3} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))) c (f' x))) (Asymptotics.IsBigO.{u1, u2, u3} α E E' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) l f f'))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {E' : Type.{u1}} {𝕜 : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_12 : NormedField.{u4} 𝕜] {f : α -> E} {f' : α -> E'} {l : Filter.{u3} α} [_inst_14 : NormedSpace.{u4, u1} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (Zero.toOfNat0.{u4} 𝕜 (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsBigO.{u3, u2, u1} α E E' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f (fun (x : α) => HSMul.hSMul.{u4, u1, u1} 𝕜 E' E' (instHSMul.{u4, u1} 𝕜 E' (SMulZeroClass.toSMul.{u4, u1} 𝕜 E' (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u1} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u1} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u1} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)) (NormedSpace.toModule.{u4, u1} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c (f' x))) (Asymptotics.IsBigO.{u3, u2, u1} α E E' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f f'))
+<too large>
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_smul_right Asymptotics.isBigO_const_smul_rightₓ'. -/
theorem isBigO_const_smul_right {c : 𝕜} (hc : c ≠ 0) : (f =O[l] fun x => c • f' x) ↔ f =O[l] f' :=
by
@@ -3570,10 +3552,7 @@ theorem isBigO_const_smul_right {c : 𝕜} (hc : c ≠ 0) : (f =O[l] fun x => c
#align asymptotics.is_O_const_smul_right Asymptotics.isBigO_const_smul_right
/- warning: asymptotics.is_o_const_smul_right -> Asymptotics.isLittleO_const_smul_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {f : α -> E} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (OfNat.mk.{u4} 𝕜 0 (Zero.zero.{u4} 𝕜 (MulZeroClass.toHasZero.{u4} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u4} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u4} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u4} 𝕜 (Ring.toNonAssocRing.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E E' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) l f (fun (x : α) => SMul.smul.{u4, u3} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))) c (f' x))) (Asymptotics.IsLittleO.{u1, u2, u3} α E E' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) l f f'))
-but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {E' : Type.{u1}} {𝕜 : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_12 : NormedField.{u4} 𝕜] {f : α -> E} {f' : α -> E'} {l : Filter.{u3} α} [_inst_14 : NormedSpace.{u4, u1} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (Zero.toOfNat0.{u4} 𝕜 (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E E' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f (fun (x : α) => HSMul.hSMul.{u4, u1, u1} 𝕜 E' E' (instHSMul.{u4, u1} 𝕜 E' (SMulZeroClass.toSMul.{u4, u1} 𝕜 E' (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u1} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u1} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u1} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)) (NormedSpace.toModule.{u4, u1} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c (f' x))) (Asymptotics.IsLittleO.{u3, u2, u1} α E E' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f f'))
+<too large>
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_smul_right Asymptotics.isLittleO_const_smul_rightₓ'. -/
theorem isLittleO_const_smul_right {c : 𝕜} (hc : c ≠ 0) :
(f =o[l] fun x => c • f' x) ↔ f =o[l] f' :=
@@ -3591,10 +3570,7 @@ section Smul
variable [NormedSpace 𝕜 E'] [NormedSpace 𝕜' F'] {k₁ : α → 𝕜} {k₂ : α → 𝕜'}
/- warning: asymptotics.is_O_with.smul -> Asymptotics.IsBigOWith.smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {𝕜 : Type.{u4}} {𝕜' : Type.{u5}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u5} 𝕜'] {c : Real} {c' : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u5, u3} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsBigOWith.{u1, u4, u5} α 𝕜 𝕜' (NormedField.toHasNorm.{u4} 𝕜 _inst_12) (NormedField.toHasNorm.{u5} 𝕜' _inst_13) c l k₁ k₂) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c' l f' g') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c c') l (fun (x : α) => SMul.smul.{u4, u2} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u2} 𝕜 E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u2} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14))))) (k₁ x) (f' x)) (fun (x : α) => SMul.smul.{u5, u3} 𝕜' F' (SMulZeroClass.toHasSmul.{u5, u3} 𝕜' F' (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (SMulWithZero.toSmulZeroClass.{u5, u3} 𝕜' F' (MulZeroClass.toHasZero.{u5} 𝕜' (MulZeroOneClass.toMulZeroClass.{u5} 𝕜' (MonoidWithZero.toMulZeroOneClass.{u5} 𝕜' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (MulActionWithZero.toSMulWithZero.{u5, u3} 𝕜' F' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (Module.toMulActionWithZero.{u5, u3} 𝕜' F' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5)) (NormedSpace.toModule.{u5, u3} 𝕜' F' _inst_13 _inst_5 _inst_15))))) (k₂ x) (g' x)))
-but is expected to have type
- forall {α : Type.{u5}} {E' : Type.{u2}} {F' : Type.{u1}} {𝕜 : Type.{u4}} {𝕜' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {c : Real} {c' : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u5} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u3, u1} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsBigOWith.{u5, u4, u3} α 𝕜 𝕜' (NormedField.toNorm.{u4} 𝕜 _inst_12) (NormedField.toNorm.{u3} 𝕜' _inst_13) c l k₁ k₂) -> (Asymptotics.IsBigOWith.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c' l f' g') -> (Asymptotics.IsBigOWith.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c c') l (fun (x : α) => HSMul.hSMul.{u4, u2, u2} 𝕜 E' E' (instHSMul.{u4, u2} 𝕜 E' (SMulZeroClass.toSMul.{u4, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) (k₁ x) (f' x)) (fun (x : α) => HSMul.hSMul.{u3, u1, u1} 𝕜' F' F' (instHSMul.{u3, u1} 𝕜' F' (SMulZeroClass.toSMul.{u3, u1} 𝕜' F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (SMulWithZero.toSMulZeroClass.{u3, u1} 𝕜' F' (CommMonoidWithZero.toZero.{u3} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜' (Semifield.toCommGroupWithZero.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (MulActionWithZero.toSMulWithZero.{u3, u1} 𝕜' F' (Semiring.toMonoidWithZero.{u3} 𝕜' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (Module.toMulActionWithZero.{u3, u1} 𝕜' F' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)) (NormedSpace.toModule.{u3, u1} 𝕜' F' _inst_13 _inst_5 _inst_15)))))) (k₂ x) (g' x)))
+<too large>
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.smul Asymptotics.IsBigOWith.smulₓ'. -/
theorem IsBigOWith.smul (h₁ : IsBigOWith c l k₁ k₂) (h₂ : IsBigOWith c' l f' g') :
IsBigOWith (c * c') l (fun x => k₁ x • f' x) fun x => k₂ x • g' x := by
@@ -3603,10 +3579,7 @@ theorem IsBigOWith.smul (h₁ : IsBigOWith c l k₁ k₂) (h₂ : IsBigOWith c'
#align asymptotics.is_O_with.smul Asymptotics.IsBigOWith.smul
/- warning: asymptotics.is_O.smul -> Asymptotics.IsBigO.smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {𝕜 : Type.{u4}} {𝕜' : Type.{u5}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u5} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u5, u3} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsBigO.{u1, u4, u5} α 𝕜 𝕜' (NormedField.toHasNorm.{u4} 𝕜 _inst_12) (NormedField.toHasNorm.{u5} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g') -> (Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => SMul.smul.{u4, u2} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u2} 𝕜 E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u2} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14))))) (k₁ x) (f' x)) (fun (x : α) => SMul.smul.{u5, u3} 𝕜' F' (SMulZeroClass.toHasSmul.{u5, u3} 𝕜' F' (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (SMulWithZero.toSmulZeroClass.{u5, u3} 𝕜' F' (MulZeroClass.toHasZero.{u5} 𝕜' (MulZeroOneClass.toMulZeroClass.{u5} 𝕜' (MonoidWithZero.toMulZeroOneClass.{u5} 𝕜' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (MulActionWithZero.toSMulWithZero.{u5, u3} 𝕜' F' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (Module.toMulActionWithZero.{u5, u3} 𝕜' F' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5)) (NormedSpace.toModule.{u5, u3} 𝕜' F' _inst_13 _inst_5 _inst_15))))) (k₂ x) (g' x)))
-but is expected to have type
- forall {α : Type.{u5}} {E' : Type.{u2}} {F' : Type.{u1}} {𝕜 : Type.{u4}} {𝕜' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u5} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u3, u1} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsBigO.{u5, u4, u3} α 𝕜 𝕜' (NormedField.toNorm.{u4} 𝕜 _inst_12) (NormedField.toNorm.{u3} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsBigO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g') -> (Asymptotics.IsBigO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => HSMul.hSMul.{u4, u2, u2} 𝕜 E' E' (instHSMul.{u4, u2} 𝕜 E' (SMulZeroClass.toSMul.{u4, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) (k₁ x) (f' x)) (fun (x : α) => HSMul.hSMul.{u3, u1, u1} 𝕜' F' F' (instHSMul.{u3, u1} 𝕜' F' (SMulZeroClass.toSMul.{u3, u1} 𝕜' F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (SMulWithZero.toSMulZeroClass.{u3, u1} 𝕜' F' (CommMonoidWithZero.toZero.{u3} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜' (Semifield.toCommGroupWithZero.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (MulActionWithZero.toSMulWithZero.{u3, u1} 𝕜' F' (Semiring.toMonoidWithZero.{u3} 𝕜' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (Module.toMulActionWithZero.{u3, u1} 𝕜' F' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)) (NormedSpace.toModule.{u3, u1} 𝕜' F' _inst_13 _inst_5 _inst_15)))))) (k₂ x) (g' x)))
+<too large>
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.smul Asymptotics.IsBigO.smulₓ'. -/
theorem IsBigO.smul (h₁ : k₁ =O[l] k₂) (h₂ : f' =O[l] g') :
(fun x => k₁ x • f' x) =O[l] fun x => k₂ x • g' x := by
@@ -3615,10 +3588,7 @@ theorem IsBigO.smul (h₁ : k₁ =O[l] k₂) (h₂ : f' =O[l] g') :
#align asymptotics.is_O.smul Asymptotics.IsBigO.smul
/- warning: asymptotics.is_O.smul_is_o -> Asymptotics.IsBigO.smul_isLittleO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {𝕜 : Type.{u4}} {𝕜' : Type.{u5}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u5} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u5, u3} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsBigO.{u1, u4, u5} α 𝕜 𝕜' (NormedField.toHasNorm.{u4} 𝕜 _inst_12) (NormedField.toHasNorm.{u5} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => SMul.smul.{u4, u2} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u2} 𝕜 E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u2} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14))))) (k₁ x) (f' x)) (fun (x : α) => SMul.smul.{u5, u3} 𝕜' F' (SMulZeroClass.toHasSmul.{u5, u3} 𝕜' F' (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (SMulWithZero.toSmulZeroClass.{u5, u3} 𝕜' F' (MulZeroClass.toHasZero.{u5} 𝕜' (MulZeroOneClass.toMulZeroClass.{u5} 𝕜' (MonoidWithZero.toMulZeroOneClass.{u5} 𝕜' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (MulActionWithZero.toSMulWithZero.{u5, u3} 𝕜' F' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (Module.toMulActionWithZero.{u5, u3} 𝕜' F' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5)) (NormedSpace.toModule.{u5, u3} 𝕜' F' _inst_13 _inst_5 _inst_15))))) (k₂ x) (g' x)))
-but is expected to have type
- forall {α : Type.{u5}} {E' : Type.{u2}} {F' : Type.{u1}} {𝕜 : Type.{u4}} {𝕜' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u5} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u3, u1} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsBigO.{u5, u4, u3} α 𝕜 𝕜' (NormedField.toNorm.{u4} 𝕜 _inst_12) (NormedField.toNorm.{u3} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsLittleO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => HSMul.hSMul.{u4, u2, u2} 𝕜 E' E' (instHSMul.{u4, u2} 𝕜 E' (SMulZeroClass.toSMul.{u4, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) (k₁ x) (f' x)) (fun (x : α) => HSMul.hSMul.{u3, u1, u1} 𝕜' F' F' (instHSMul.{u3, u1} 𝕜' F' (SMulZeroClass.toSMul.{u3, u1} 𝕜' F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (SMulWithZero.toSMulZeroClass.{u3, u1} 𝕜' F' (CommMonoidWithZero.toZero.{u3} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜' (Semifield.toCommGroupWithZero.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (MulActionWithZero.toSMulWithZero.{u3, u1} 𝕜' F' (Semiring.toMonoidWithZero.{u3} 𝕜' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (Module.toMulActionWithZero.{u3, u1} 𝕜' F' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)) (NormedSpace.toModule.{u3, u1} 𝕜' F' _inst_13 _inst_5 _inst_15)))))) (k₂ x) (g' x)))
+<too large>
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.smul_is_o Asymptotics.IsBigO.smul_isLittleOₓ'. -/
theorem IsBigO.smul_isLittleO (h₁ : k₁ =O[l] k₂) (h₂ : f' =o[l] g') :
(fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x := by
@@ -3627,10 +3597,7 @@ theorem IsBigO.smul_isLittleO (h₁ : k₁ =O[l] k₂) (h₂ : f' =o[l] g') :
#align asymptotics.is_O.smul_is_o Asymptotics.IsBigO.smul_isLittleO
/- warning: asymptotics.is_o.smul_is_O -> Asymptotics.IsLittleO.smul_isBigO is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {𝕜 : Type.{u4}} {𝕜' : Type.{u5}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u5} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u5, u3} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsLittleO.{u1, u4, u5} α 𝕜 𝕜' (NormedField.toHasNorm.{u4} 𝕜 _inst_12) (NormedField.toHasNorm.{u5} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => SMul.smul.{u4, u2} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u2} 𝕜 E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u2} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14))))) (k₁ x) (f' x)) (fun (x : α) => SMul.smul.{u5, u3} 𝕜' F' (SMulZeroClass.toHasSmul.{u5, u3} 𝕜' F' (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (SMulWithZero.toSmulZeroClass.{u5, u3} 𝕜' F' (MulZeroClass.toHasZero.{u5} 𝕜' (MulZeroOneClass.toMulZeroClass.{u5} 𝕜' (MonoidWithZero.toMulZeroOneClass.{u5} 𝕜' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (MulActionWithZero.toSMulWithZero.{u5, u3} 𝕜' F' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (Module.toMulActionWithZero.{u5, u3} 𝕜' F' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5)) (NormedSpace.toModule.{u5, u3} 𝕜' F' _inst_13 _inst_5 _inst_15))))) (k₂ x) (g' x)))
-but is expected to have type
- forall {α : Type.{u5}} {E' : Type.{u2}} {F' : Type.{u1}} {𝕜 : Type.{u4}} {𝕜' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u5} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u3, u1} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsLittleO.{u5, u4, u3} α 𝕜 𝕜' (NormedField.toNorm.{u4} 𝕜 _inst_12) (NormedField.toNorm.{u3} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsBigO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => HSMul.hSMul.{u4, u2, u2} 𝕜 E' E' (instHSMul.{u4, u2} 𝕜 E' (SMulZeroClass.toSMul.{u4, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) (k₁ x) (f' x)) (fun (x : α) => HSMul.hSMul.{u3, u1, u1} 𝕜' F' F' (instHSMul.{u3, u1} 𝕜' F' (SMulZeroClass.toSMul.{u3, u1} 𝕜' F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (SMulWithZero.toSMulZeroClass.{u3, u1} 𝕜' F' (CommMonoidWithZero.toZero.{u3} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜' (Semifield.toCommGroupWithZero.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (MulActionWithZero.toSMulWithZero.{u3, u1} 𝕜' F' (Semiring.toMonoidWithZero.{u3} 𝕜' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (Module.toMulActionWithZero.{u3, u1} 𝕜' F' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)) (NormedSpace.toModule.{u3, u1} 𝕜' F' _inst_13 _inst_5 _inst_15)))))) (k₂ x) (g' x)))
+<too large>
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.smul_is_O Asymptotics.IsLittleO.smul_isBigOₓ'. -/
theorem IsLittleO.smul_isBigO (h₁ : k₁ =o[l] k₂) (h₂ : f' =O[l] g') :
(fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x := by
@@ -3639,10 +3606,7 @@ theorem IsLittleO.smul_isBigO (h₁ : k₁ =o[l] k₂) (h₂ : f' =O[l] g') :
#align asymptotics.is_o.smul_is_O Asymptotics.IsLittleO.smul_isBigO
/- warning: asymptotics.is_o.smul -> Asymptotics.IsLittleO.smul is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {𝕜 : Type.{u4}} {𝕜' : Type.{u5}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u5} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u5, u3} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsLittleO.{u1, u4, u5} α 𝕜 𝕜' (NormedField.toHasNorm.{u4} 𝕜 _inst_12) (NormedField.toHasNorm.{u5} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => SMul.smul.{u4, u2} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u2} 𝕜 E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u2} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14))))) (k₁ x) (f' x)) (fun (x : α) => SMul.smul.{u5, u3} 𝕜' F' (SMulZeroClass.toHasSmul.{u5, u3} 𝕜' F' (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (SMulWithZero.toSmulZeroClass.{u5, u3} 𝕜' F' (MulZeroClass.toHasZero.{u5} 𝕜' (MulZeroOneClass.toMulZeroClass.{u5} 𝕜' (MonoidWithZero.toMulZeroOneClass.{u5} 𝕜' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (MulActionWithZero.toSMulWithZero.{u5, u3} 𝕜' F' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (Module.toMulActionWithZero.{u5, u3} 𝕜' F' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5)) (NormedSpace.toModule.{u5, u3} 𝕜' F' _inst_13 _inst_5 _inst_15))))) (k₂ x) (g' x)))
-but is expected to have type
- forall {α : Type.{u5}} {E' : Type.{u2}} {F' : Type.{u1}} {𝕜 : Type.{u4}} {𝕜' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u5} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u3, u1} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsLittleO.{u5, u4, u3} α 𝕜 𝕜' (NormedField.toNorm.{u4} 𝕜 _inst_12) (NormedField.toNorm.{u3} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsLittleO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => HSMul.hSMul.{u4, u2, u2} 𝕜 E' E' (instHSMul.{u4, u2} 𝕜 E' (SMulZeroClass.toSMul.{u4, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) (k₁ x) (f' x)) (fun (x : α) => HSMul.hSMul.{u3, u1, u1} 𝕜' F' F' (instHSMul.{u3, u1} 𝕜' F' (SMulZeroClass.toSMul.{u3, u1} 𝕜' F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (SMulWithZero.toSMulZeroClass.{u3, u1} 𝕜' F' (CommMonoidWithZero.toZero.{u3} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜' (Semifield.toCommGroupWithZero.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (MulActionWithZero.toSMulWithZero.{u3, u1} 𝕜' F' (Semiring.toMonoidWithZero.{u3} 𝕜' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (Module.toMulActionWithZero.{u3, u1} 𝕜' F' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)) (NormedSpace.toModule.{u3, u1} 𝕜' F' _inst_13 _inst_5 _inst_15)))))) (k₂ x) (g' x)))
+<too large>
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.smul Asymptotics.IsLittleO.smulₓ'. -/
theorem IsLittleO.smul (h₁ : k₁ =o[l] k₂) (h₂ : f' =o[l] g') :
(fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x := by
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -805,7 +805,7 @@ theorem isLittleO_map {k : β → α} {l : Filter β} : f =o[map k l] g ↔ (f
/- warning: asymptotics.is_O_with.mono -> Asymptotics.IsBigOWith.mono is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l' f g) -> (LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) l l') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g)
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l' f g) -> (LE.le.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) l l') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g)
but is expected to have type
forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l' f g) -> (LE.le.{u3} (Filter.{u3} α) (Preorder.toLE.{u3} (Filter.{u3} α) (PartialOrder.toPreorder.{u3} (Filter.{u3} α) (Filter.instPartialOrderFilter.{u3} α))) l l') -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g)
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.mono Asymptotics.IsBigOWith.monoₓ'. -/
@@ -815,7 +815,7 @@ theorem IsBigOWith.mono (h : IsBigOWith c l' f g) (hl : l ≤ l') : IsBigOWith c
/- warning: asymptotics.is_O.mono -> Asymptotics.IsBigO.mono is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l' f g) -> (LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) l l') -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l' f g) -> (LE.le.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) l l') -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
but is expected to have type
forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l' f g) -> (LE.le.{u3} (Filter.{u3} α) (Preorder.toLE.{u3} (Filter.{u3} α) (PartialOrder.toPreorder.{u3} (Filter.{u3} α) (Filter.instPartialOrderFilter.{u3} α))) l l') -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.mono Asymptotics.IsBigO.monoₓ'. -/
@@ -825,7 +825,7 @@ theorem IsBigO.mono (h : f =O[l'] g) (hl : l ≤ l') : f =O[l] g :=
/- warning: asymptotics.is_o.mono -> Asymptotics.IsLittleO.mono is a dubious translation:
lean 3 declaration is
- forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l' f g) -> (LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) l l') -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l' f g) -> (LE.le.{u1} (Filter.{u1} α) (Preorder.toHasLe.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) l l') -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
but is expected to have type
forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l' f g) -> (LE.le.{u3} (Filter.{u3} α) (Preorder.toLE.{u3} (Filter.{u3} α) (PartialOrder.toPreorder.{u3} (Filter.{u3} α) (Filter.instPartialOrderFilter.{u3} α))) l l') -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.mono Asymptotics.IsLittleO.monoₓ'. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/0b9eaaa7686280fad8cce467f5c3c57ee6ce77f8
@@ -2575,7 +2575,7 @@ variable {g g' l}
lean 3 declaration is
forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {c : Real} {f'' : α -> E''} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) c l f'' (fun (x : α) => OfNat.ofNat.{u2} F' 0 (OfNat.mk.{u2} F' 0 (Zero.zero.{u2} F' (AddZeroClass.toHasZero.{u2} F' (AddMonoid.toAddZeroClass.{u2} F' (SubNegMonoid.toAddMonoid.{u2} F' (AddGroup.toSubNegMonoid.{u2} F' (SeminormedAddGroup.toAddGroup.{u2} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} F' _inst_5)))))))))) (Filter.EventuallyEq.{u1, u3} α E'' l f'' (OfNat.ofNat.{max u1 u3} (α -> E'') 0 (OfNat.mk.{max u1 u3} (α -> E'') 0 (Zero.zero.{max u1 u3} (α -> E'') (Pi.instZero.{u1, u3} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))))
but is expected to have type
- forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {c : Real} {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19133 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
+ forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {c : Real} {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19136 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_zero_right_iff Asymptotics.isBigOWith_zero_right_iffₓ'. -/
@[simp]
theorem isBigOWith_zero_right_iff : (IsBigOWith c l f'' fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 := by
@@ -2587,7 +2587,7 @@ theorem isBigOWith_zero_right_iff : (IsBigOWith c l f'' fun x => (0 : F')) ↔ f
lean 3 declaration is
forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {f'' : α -> E''} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u2} F' 0 (OfNat.mk.{u2} F' 0 (Zero.zero.{u2} F' (AddZeroClass.toHasZero.{u2} F' (AddMonoid.toAddZeroClass.{u2} F' (SubNegMonoid.toAddMonoid.{u2} F' (AddGroup.toSubNegMonoid.{u2} F' (SeminormedAddGroup.toAddGroup.{u2} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} F' _inst_5)))))))))) (Filter.EventuallyEq.{u1, u3} α E'' l f'' (OfNat.ofNat.{max u1 u3} (α -> E'') 0 (OfNat.mk.{max u1 u3} (α -> E'') 0 (Zero.zero.{max u1 u3} (α -> E'') (Pi.instZero.{u1, u3} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))))
but is expected to have type
- forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19133 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
+ forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19136 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_zero_right_iff Asymptotics.isBigO_zero_right_iffₓ'. -/
@[simp]
theorem isBigO_zero_right_iff : (f'' =O[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 :=
@@ -2601,7 +2601,7 @@ theorem isBigO_zero_right_iff : (f'' =O[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0
lean 3 declaration is
forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {f'' : α -> E''} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u2} F' 0 (OfNat.mk.{u2} F' 0 (Zero.zero.{u2} F' (AddZeroClass.toHasZero.{u2} F' (AddMonoid.toAddZeroClass.{u2} F' (SubNegMonoid.toAddMonoid.{u2} F' (AddGroup.toSubNegMonoid.{u2} F' (SeminormedAddGroup.toAddGroup.{u2} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} F' _inst_5)))))))))) (Filter.EventuallyEq.{u1, u3} α E'' l f'' (OfNat.ofNat.{max u1 u3} (α -> E'') 0 (OfNat.mk.{max u1 u3} (α -> E'') 0 (Zero.zero.{max u1 u3} (α -> E'') (Pi.instZero.{u1, u3} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))))
but is expected to have type
- forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19133 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
+ forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19136 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_zero_right_iff Asymptotics.isLittleO_zero_right_iffₓ'. -/
@[simp]
theorem isLittleO_zero_right_iff : (f'' =o[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 :=
@@ -2909,7 +2909,7 @@ theorem isBigO_const_of_ne {c : F''} (hc : c ≠ 0) :
lean 3 declaration is
forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {l : Filter.{u1} α} {c : F''}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f'' (fun (x : α) => c)) (And ((Eq.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Filter.EventuallyEq.{u1, u2} α E'' l f'' (OfNat.ofNat.{max u1 u2} (α -> E'') 0 (OfNat.mk.{max u1 u2} (α -> E'') 0 (Zero.zero.{max u1 u2} (α -> E'') (Pi.instZero.{u1, u2} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))))) (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u2} E'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (f'' x))))
but is expected to have type
- forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {l : Filter.{u3} α} {c : F''}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' (fun (x : α) => c)) (And ((Eq.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19133 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))) (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36952 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36954 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36952 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36954) l (fun (x : α) => Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (f'' x))))
+ forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {l : Filter.{u3} α} {c : F''}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' (fun (x : α) => c)) (And ((Eq.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19136 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))) (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36952 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36954 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36952 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36954) l (fun (x : α) => Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (f'' x))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_iff Asymptotics.isBigO_const_iffₓ'. -/
theorem isBigO_const_iff {c : F''} :
(f'' =O[l] fun x => c) ↔ (c = 0 → f'' =ᶠ[l] 0) ∧ IsBoundedUnder (· ≤ ·) l fun x => ‖f'' x‖ :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/08e1d8d4d989df3a6df86f385e9053ec8a372cc1
@@ -3350,7 +3350,7 @@ theorem IsLittleO.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f
lean 3 declaration is
forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {c : Real} {l : Filter.{u1} α} {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) c l f g) -> (forall (n : Nat), Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (Nat.casesOn.{1} (fun (_x : Nat) => Real) n (Norm.norm.{u2} R (SeminormedRing.toHasNorm.{u2} R _inst_10) (OfNat.ofNat.{u2} R 1 (OfNat.mk.{u2} R 1 (One.one.{u2} R (AddMonoidWithOne.toOne.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (AddCommGroupWithOne.toAddGroupWithOne.{u2} R (Ring.toAddCommGroupWithOne.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))))))) (fun (n : Nat) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) c (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))))) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f x) n) (fun (x : α) => HPow.hPow.{u3, 0, u3} 𝕜 Nat 𝕜 (instHPow.{u3, 0} 𝕜 Nat (Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g x) n))
but is expected to have type
- forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u3} α} {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigOWith.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l f g) -> (forall (n : Nat), Asymptotics.IsBigOWith.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) (Nat.casesOn.{1} (fun (_x : Nat) => Real) n (Norm.norm.{u2} R (SeminormedRing.toNorm.{u2} R _inst_10) (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) (fun (n : Nat) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) c (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) (f x) n) (fun (x : α) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (g x) n))
+ forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u3} α} {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigOWith.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l f g) -> (forall (n : Nat), Asymptotics.IsBigOWith.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) (Nat.casesOn.{1} (fun (_x : Nat) => Real) n (Norm.norm.{u2} R (SeminormedRing.toNorm.{u2} R _inst_10) (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (Semiring.toOne.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) (fun (n : Nat) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) c (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) (f x) n) (fun (x : α) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (g x) n))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.pow' Asymptotics.IsBigOWith.pow'ₓ'. -/
theorem IsBigOWith.pow' {f : α → R} {g : α → 𝕜} (h : IsBigOWith c l f g) :
∀ n : ℕ,
@@ -3365,7 +3365,7 @@ theorem IsBigOWith.pow' {f : α → R} {g : α → 𝕜} (h : IsBigOWith c l f g
lean 3 declaration is
forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {c : Real} {l : Filter.{u1} α} [_inst_14 : NormOneClass.{u2} R (SeminormedRing.toHasNorm.{u2} R _inst_10) (AddMonoidWithOne.toOne.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (AddCommGroupWithOne.toAddGroupWithOne.{u2} R (Ring.toAddCommGroupWithOne.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))] {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) c l f g) -> (forall (n : Nat), Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) c n) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f x) n) (fun (x : α) => HPow.hPow.{u3, 0, u3} 𝕜 Nat 𝕜 (instHPow.{u3, 0} 𝕜 Nat (Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g x) n))
but is expected to have type
- forall {α : Type.{u2}} {R : Type.{u3}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u3} R] [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u2} α} [_inst_14 : NormOneClass.{u3} R (SeminormedRing.toNorm.{u3} R _inst_10) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))] {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigOWith.{u2, u3, u1} α R 𝕜 (SeminormedRing.toNorm.{u3} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l f g) -> (forall (n : Nat), Asymptotics.IsBigOWith.{u2, u3, u1} α R 𝕜 (SeminormedRing.toNorm.{u3} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) c n) l (fun (x : α) => HPow.hPow.{u3, 0, u3} R Nat R (instHPow.{u3, 0} R Nat (Monoid.Pow.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))))) (f x) n) (fun (x : α) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (g x) n))
+ forall {α : Type.{u2}} {R : Type.{u3}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u3} R] [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u2} α} [_inst_14 : NormOneClass.{u3} R (SeminormedRing.toNorm.{u3} R _inst_10) (Semiring.toOne.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))] {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigOWith.{u2, u3, u1} α R 𝕜 (SeminormedRing.toNorm.{u3} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l f g) -> (forall (n : Nat), Asymptotics.IsBigOWith.{u2, u3, u1} α R 𝕜 (SeminormedRing.toNorm.{u3} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) c n) l (fun (x : α) => HPow.hPow.{u3, 0, u3} R Nat R (instHPow.{u3, 0} R Nat (Monoid.Pow.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))))) (f x) n) (fun (x : α) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (g x) n))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.pow Asymptotics.IsBigOWith.powₓ'. -/
theorem IsBigOWith.pow [NormOneClass R] {f : α → R} {g : α → 𝕜} (h : IsBigOWith c l f g) :
∀ n : ℕ, IsBigOWith (c ^ n) l (fun x => f x ^ n) fun x => g x ^ n
mathlib commit https://github.com/leanprover-community/mathlib/commit/36b8aa61ea7c05727161f96a0532897bd72aedab
@@ -2575,7 +2575,7 @@ variable {g g' l}
lean 3 declaration is
forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {c : Real} {f'' : α -> E''} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) c l f'' (fun (x : α) => OfNat.ofNat.{u2} F' 0 (OfNat.mk.{u2} F' 0 (Zero.zero.{u2} F' (AddZeroClass.toHasZero.{u2} F' (AddMonoid.toAddZeroClass.{u2} F' (SubNegMonoid.toAddMonoid.{u2} F' (AddGroup.toSubNegMonoid.{u2} F' (SeminormedAddGroup.toAddGroup.{u2} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} F' _inst_5)))))))))) (Filter.EventuallyEq.{u1, u3} α E'' l f'' (OfNat.ofNat.{max u1 u3} (α -> E'') 0 (OfNat.mk.{max u1 u3} (α -> E'') 0 (Zero.zero.{max u1 u3} (α -> E'') (Pi.instZero.{u1, u3} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))))
but is expected to have type
- forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {c : Real} {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19139 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
+ forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {c : Real} {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19133 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_zero_right_iff Asymptotics.isBigOWith_zero_right_iffₓ'. -/
@[simp]
theorem isBigOWith_zero_right_iff : (IsBigOWith c l f'' fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 := by
@@ -2587,7 +2587,7 @@ theorem isBigOWith_zero_right_iff : (IsBigOWith c l f'' fun x => (0 : F')) ↔ f
lean 3 declaration is
forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {f'' : α -> E''} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u2} F' 0 (OfNat.mk.{u2} F' 0 (Zero.zero.{u2} F' (AddZeroClass.toHasZero.{u2} F' (AddMonoid.toAddZeroClass.{u2} F' (SubNegMonoid.toAddMonoid.{u2} F' (AddGroup.toSubNegMonoid.{u2} F' (SeminormedAddGroup.toAddGroup.{u2} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} F' _inst_5)))))))))) (Filter.EventuallyEq.{u1, u3} α E'' l f'' (OfNat.ofNat.{max u1 u3} (α -> E'') 0 (OfNat.mk.{max u1 u3} (α -> E'') 0 (Zero.zero.{max u1 u3} (α -> E'') (Pi.instZero.{u1, u3} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))))
but is expected to have type
- forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19139 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
+ forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19133 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_zero_right_iff Asymptotics.isBigO_zero_right_iffₓ'. -/
@[simp]
theorem isBigO_zero_right_iff : (f'' =O[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 :=
@@ -2601,7 +2601,7 @@ theorem isBigO_zero_right_iff : (f'' =O[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0
lean 3 declaration is
forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {f'' : α -> E''} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u2} F' 0 (OfNat.mk.{u2} F' 0 (Zero.zero.{u2} F' (AddZeroClass.toHasZero.{u2} F' (AddMonoid.toAddZeroClass.{u2} F' (SubNegMonoid.toAddMonoid.{u2} F' (AddGroup.toSubNegMonoid.{u2} F' (SeminormedAddGroup.toAddGroup.{u2} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} F' _inst_5)))))))))) (Filter.EventuallyEq.{u1, u3} α E'' l f'' (OfNat.ofNat.{max u1 u3} (α -> E'') 0 (OfNat.mk.{max u1 u3} (α -> E'') 0 (Zero.zero.{max u1 u3} (α -> E'') (Pi.instZero.{u1, u3} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))))
but is expected to have type
- forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19139 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
+ forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19133 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_zero_right_iff Asymptotics.isLittleO_zero_right_iffₓ'. -/
@[simp]
theorem isLittleO_zero_right_iff : (f'' =o[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 :=
@@ -2780,7 +2780,7 @@ theorem isLittleO_one_iff : f' =o[l] (fun x => 1 : α → F) ↔ Tendsto f' l (
lean 3 declaration is
forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14], Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14)))) (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x)))
but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))) (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35352 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35354 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35352 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35354) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x)))
+ forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))) (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35346 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35348 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35346 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35348) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x)))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_one_iff Asymptotics.isBigO_one_iffₓ'. -/
@[simp]
theorem isBigO_one_iff : f =O[l] (fun x => 1 : α → F) ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x‖ :=
@@ -2793,7 +2793,7 @@ theorem isBigO_one_iff : f =O[l] (fun x => 1 : α → F) ↔ IsBoundedUnder (·
lean 3 declaration is
forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14], (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14))))
but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35352 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35354 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35352 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35354) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14)))
+ forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35346 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35348 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35346 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35348) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14)))
Case conversion may be inaccurate. Consider using '#align filter.is_bounded_under.is_O_one Filter.IsBoundedUnder.isBigO_oneₓ'. -/
alias is_O_one_iff ↔ _ _root_.filter.is_bounded_under.is_O_one
#align filter.is_bounded_under.is_O_one Filter.IsBoundedUnder.isBigO_one
@@ -2864,7 +2864,7 @@ theorem isLittleO_id_const {c : F''} (hc : c ≠ 0) : (fun x : E'' => x) =o[𝓝
lean 3 declaration is
forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {l : Filter.{u1} α}, (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f)) -> (forall {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f (fun (x : α) => c)))
but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F'' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u1} F''] {f : α -> E} {l : Filter.{u3} α}, (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36331 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36333 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36331 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36333) l (Function.comp.{succ u3, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f)) -> (forall {c : F''}, (Ne.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f (fun (x : α) => c)))
+ forall {α : Type.{u3}} {E : Type.{u2}} {F'' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u1} F''] {f : α -> E} {l : Filter.{u3} α}, (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36325 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36327 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36325 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36327) l (Function.comp.{succ u3, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f)) -> (forall {c : F''}, (Ne.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f (fun (x : α) => c)))
Case conversion may be inaccurate. Consider using '#align filter.is_bounded_under.is_O_const Filter.IsBoundedUnder.isBigO_constₓ'. -/
theorem Filter.IsBoundedUnder.isBigO_const (h : IsBoundedUnder (· ≤ ·) l (norm ∘ f)) {c : F''}
(hc : c ≠ 0) : f =O[l] fun x => c :=
@@ -2886,7 +2886,7 @@ theorem isBigO_const_of_tendsto {y : E''} (h : Tendsto f'' l (𝓝 y)) {c : F''}
lean 3 declaration is
forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} {c : F}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => c)) -> (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f))
but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} {c : F}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => c)) -> (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36622 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36624 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36622 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36624) l (Function.comp.{succ u3, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f))
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} {c : F}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => c)) -> (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36616 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36618 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36616 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36618) l (Function.comp.{succ u3, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.is_bounded_under_le Asymptotics.IsBigO.isBoundedUnder_leₓ'. -/
theorem IsBigO.isBoundedUnder_le {c : F} (h : f =O[l] fun x => c) :
IsBoundedUnder (· ≤ ·) l (norm ∘ f) :=
@@ -2898,7 +2898,7 @@ theorem IsBigO.isBoundedUnder_le {c : F} (h : f =O[l] fun x => c) :
lean 3 declaration is
forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {l : Filter.{u1} α} {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f (fun (x : α) => c)) (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f)))
but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {F'' : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {l : Filter.{u2} α} {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (Zero.toOfNat0.{u3} F'' (NegZeroClass.toZero.{u3} F'' (SubNegZeroMonoid.toNegZeroClass.{u3} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} F'' (AddCommGroup.toDivisionAddCommMonoid.{u3} F'' (NormedAddCommGroup.toAddCommGroup.{u3} F'' _inst_8))))))))) -> (Iff (Asymptotics.IsBigO.{u2, u1, u3} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) l f (fun (x : α) => c)) (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36792 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36794 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36792 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36794) l (Function.comp.{succ u2, succ u1, 1} α E Real (Norm.norm.{u1} E _inst_1) f)))
+ forall {α : Type.{u2}} {E : Type.{u1}} {F'' : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {l : Filter.{u2} α} {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (Zero.toOfNat0.{u3} F'' (NegZeroClass.toZero.{u3} F'' (SubNegZeroMonoid.toNegZeroClass.{u3} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} F'' (AddCommGroup.toDivisionAddCommMonoid.{u3} F'' (NormedAddCommGroup.toAddCommGroup.{u3} F'' _inst_8))))))))) -> (Iff (Asymptotics.IsBigO.{u2, u1, u3} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) l f (fun (x : α) => c)) (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36786 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36788 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36786 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36788) l (Function.comp.{succ u2, succ u1, 1} α E Real (Norm.norm.{u1} E _inst_1) f)))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_of_ne Asymptotics.isBigO_const_of_neₓ'. -/
theorem isBigO_const_of_ne {c : F''} (hc : c ≠ 0) :
(f =O[l] fun x => c) ↔ IsBoundedUnder (· ≤ ·) l (norm ∘ f) :=
@@ -2909,7 +2909,7 @@ theorem isBigO_const_of_ne {c : F''} (hc : c ≠ 0) :
lean 3 declaration is
forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {l : Filter.{u1} α} {c : F''}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f'' (fun (x : α) => c)) (And ((Eq.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Filter.EventuallyEq.{u1, u2} α E'' l f'' (OfNat.ofNat.{max u1 u2} (α -> E'') 0 (OfNat.mk.{max u1 u2} (α -> E'') 0 (Zero.zero.{max u1 u2} (α -> E'') (Pi.instZero.{u1, u2} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))))) (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u2} E'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (f'' x))))
but is expected to have type
- forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {l : Filter.{u3} α} {c : F''}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' (fun (x : α) => c)) (And ((Eq.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19139 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))) (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36958 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36960 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36958 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36960) l (fun (x : α) => Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (f'' x))))
+ forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {l : Filter.{u3} α} {c : F''}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' (fun (x : α) => c)) (And ((Eq.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19133 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))) (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36952 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36954 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36952 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36954) l (fun (x : α) => Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (f'' x))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_iff Asymptotics.isBigO_const_iffₓ'. -/
theorem isBigO_const_iff {c : F''} :
(f'' =O[l] fun x => c) ↔ (c = 0 → f'' =ᶠ[l] 0) ∧ IsBoundedUnder (· ≤ ·) l fun x => ‖f'' x‖ :=
@@ -2924,7 +2924,7 @@ theorem isBigO_const_iff {c : F''} :
lean 3 declaration is
forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {g'' : α -> F''} {l : Filter.{u1} α}, (Filter.Eventually.{u1} α (fun (x : α) => Ne.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) l) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f g'') (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (Norm.norm.{u2} E _inst_1 (f x)) (Norm.norm.{u3} F'' (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (g'' x)))))
but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u1}} {F'' : Type.{u2}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u2} F''] {f : α -> E} {g'' : α -> F''} {l : Filter.{u3} α}, (Filter.Eventually.{u3} α (fun (x : α) => Ne.{succ u2} F'' (g'' x) (OfNat.ofNat.{u2} F'' 0 (Zero.toOfNat0.{u2} F'' (NegZeroClass.toZero.{u2} F'' (SubNegZeroMonoid.toNegZeroClass.{u2} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} F'' (AddCommGroup.toDivisionAddCommMonoid.{u2} F'' (NormedAddCommGroup.toAddCommGroup.{u2} F'' _inst_8))))))))) l) -> (Iff (Asymptotics.IsBigO.{u3, u1, u2} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) l f g'') (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37193 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37195 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37193 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37195) l (fun (x : α) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (Norm.norm.{u1} E _inst_1 (f x)) (Norm.norm.{u2} F'' (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) (g'' x)))))
+ forall {α : Type.{u3}} {E : Type.{u1}} {F'' : Type.{u2}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u2} F''] {f : α -> E} {g'' : α -> F''} {l : Filter.{u3} α}, (Filter.Eventually.{u3} α (fun (x : α) => Ne.{succ u2} F'' (g'' x) (OfNat.ofNat.{u2} F'' 0 (Zero.toOfNat0.{u2} F'' (NegZeroClass.toZero.{u2} F'' (SubNegZeroMonoid.toNegZeroClass.{u2} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} F'' (AddCommGroup.toDivisionAddCommMonoid.{u2} F'' (NormedAddCommGroup.toAddCommGroup.{u2} F'' _inst_8))))))))) l) -> (Iff (Asymptotics.IsBigO.{u3, u1, u2} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) l f g'') (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37187 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37189 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37187 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37189) l (fun (x : α) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (Norm.norm.{u1} E _inst_1 (f x)) (Norm.norm.{u2} F'' (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) (g'' x)))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_is_bounded_under_le_div Asymptotics.isBigO_iff_isBoundedUnder_le_divₓ'. -/
theorem isBigO_iff_isBoundedUnder_le_div (h : ∀ᶠ x in l, g'' x ≠ 0) :
f =O[l] g'' ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x‖ / ‖g'' x‖ :=
@@ -3510,7 +3510,7 @@ theorem IsBigOWith.const_smul_left (h : IsBigOWith c l f' g) (c' : 𝕜) :
lean 3 declaration is
forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (SMul.smul.{u4, max u1 u3} 𝕜 (α -> E') (Function.hasSMul.{u1, u4, u3} α 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c f') g)
but is expected to have type
- forall {α : Type.{u4}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u1} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u4} α} [_inst_14 : NormedSpace.{u1, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsBigO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsBigO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l (HSMul.hSMul.{u1, max u4 u3, max u4 u3} 𝕜 (α -> E') (α -> E') (instHSMul.{u1, max u4 u3} 𝕜 (α -> E') (Pi.instSMul.{u4, u3, u1} α 𝕜 (fun (a._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.45080 : α) => E') (fun (i : α) => SMulZeroClass.toSMul.{u1, u3} 𝕜 E' (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u1, u3} 𝕜 E' (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (Module.toMulActionWithZero.{u1, u3} 𝕜 E' (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u1, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))))) c f') g)
+ forall {α : Type.{u4}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u1} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u4} α} [_inst_14 : NormedSpace.{u1, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsBigO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsBigO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l (HSMul.hSMul.{u1, max u4 u3, max u4 u3} 𝕜 (α -> E') (α -> E') (instHSMul.{u1, max u4 u3} 𝕜 (α -> E') (Pi.instSMul.{u4, u3, u1} α 𝕜 (fun (a._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.45074 : α) => E') (fun (i : α) => SMulZeroClass.toSMul.{u1, u3} 𝕜 E' (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u1, u3} 𝕜 E' (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (Module.toMulActionWithZero.{u1, u3} 𝕜 E' (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u1, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))))) c f') g)
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.const_smul_left Asymptotics.IsBigO.const_smul_leftₓ'. -/
theorem IsBigO.const_smul_left (h : f' =O[l] g) (c : 𝕜) : (c • f') =O[l] g :=
let ⟨b, hb⟩ := h.IsBigOWith
@@ -3521,7 +3521,7 @@ theorem IsBigO.const_smul_left (h : f' =O[l] g) (c : 𝕜) : (c • f') =O[l] g
lean 3 declaration is
forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (SMul.smul.{u4, max u1 u3} 𝕜 (α -> E') (Function.hasSMul.{u1, u4, u3} α 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c f') g)
but is expected to have type
- forall {α : Type.{u4}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u1} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u4} α} [_inst_14 : NormedSpace.{u1, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsLittleO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsLittleO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l (HSMul.hSMul.{u1, max u4 u3, max u4 u3} 𝕜 (α -> E') (α -> E') (instHSMul.{u1, max u4 u3} 𝕜 (α -> E') (Pi.instSMul.{u4, u3, u1} α 𝕜 (fun (a._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.45226 : α) => E') (fun (i : α) => SMulZeroClass.toSMul.{u1, u3} 𝕜 E' (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u1, u3} 𝕜 E' (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (Module.toMulActionWithZero.{u1, u3} 𝕜 E' (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u1, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))))) c f') g)
+ forall {α : Type.{u4}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u1} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u4} α} [_inst_14 : NormedSpace.{u1, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsLittleO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsLittleO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l (HSMul.hSMul.{u1, max u4 u3, max u4 u3} 𝕜 (α -> E') (α -> E') (instHSMul.{u1, max u4 u3} 𝕜 (α -> E') (Pi.instSMul.{u4, u3, u1} α 𝕜 (fun (a._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.45220 : α) => E') (fun (i : α) => SMulZeroClass.toSMul.{u1, u3} 𝕜 E' (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u1, u3} 𝕜 E' (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (Module.toMulActionWithZero.{u1, u3} 𝕜 E' (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u1, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))))) c f') g)
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.const_smul_left Asymptotics.IsLittleO.const_smul_leftₓ'. -/
theorem IsLittleO.const_smul_left (h : f' =o[l] g) (c : 𝕜) : (c • f') =o[l] g :=
IsLittleO.of_norm_left <| by simpa only [← norm_smul] using h.norm_left.const_mul_left ‖c‖
@@ -3968,7 +3968,7 @@ theorem IsBigOWith.exists_eq_mul (h : IsBigOWith c l u v) (hc : 0 ≤ c) :
lean 3 declaration is
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, Iff (Asymptotics.IsBigO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v))))
but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_exists_eq_mul Asymptotics.isBigO_iff_exists_eq_mulₓ'. -/
theorem isBigO_iff_exists_eq_mul :
u =O[l] v ↔ ∃ (φ : α → 𝕜)(hφ : l.IsBoundedUnder (· ≤ ·) (norm ∘ φ)), u =ᶠ[l] φ * v :=
@@ -3986,7 +3986,7 @@ theorem isBigO_iff_exists_eq_mul :
lean 3 declaration is
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) -> (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v))))
but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) -> (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) -> (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51058 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51060) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.exists_eq_mul Asymptotics.IsBigO.exists_eq_mulₓ'. -/
alias is_O_iff_exists_eq_mul ↔ is_O.exists_eq_mul _
#align asymptotics.is_O.exists_eq_mul Asymptotics.IsBigO.exists_eq_mul
@@ -4026,7 +4026,7 @@ end ExistsMulEq
lean 3 declaration is
forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (NormedField.toHasNorm.{u1} 𝕜 _inst_12) l f g) -> (Filter.IsBoundedUnder.{0, u2} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (DivInvMonoid.toHasDiv.{u1} 𝕜 (DivisionRing.toDivInvMonoid.{u1} 𝕜 (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_12))))) (f x) (g x))))
but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) -> (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51485 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51487 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51485 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51487) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x))))
+ forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) -> (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51479 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51481 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51479 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51481) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x))))
Case conversion may be inaccurate. Consider using '#align asymptotics.div_is_bounded_under_of_is_O Asymptotics.div_isBoundedUnder_of_isBigOₓ'. -/
theorem div_isBoundedUnder_of_isBigO {α : Type _} {l : Filter α} {f g : α → 𝕜} (h : f =O[l] g) :
IsBoundedUnder (· ≤ ·) l fun x => ‖f x / g x‖ :=
@@ -4041,7 +4041,7 @@ theorem div_isBoundedUnder_of_isBigO {α : Type _} {l : Filter α} {f g : α →
lean 3 declaration is
forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))))))))) l) -> (Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (NormedField.toHasNorm.{u1} 𝕜 _inst_12) l f g) (Filter.IsBoundedUnder.{0, u2} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (DivInvMonoid.toHasDiv.{u1} 𝕜 (DivisionRing.toDivInvMonoid.{u1} 𝕜 (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_12))))) (f x) (g x)))))
but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) l) -> (Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51719 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51721 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51719 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51721) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x)))))
+ forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) l) -> (Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51713 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51715 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51713 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51715) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x)))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_div_is_bounded_under Asymptotics.isBigO_iff_div_isBoundedUnderₓ'. -/
theorem isBigO_iff_div_isBoundedUnder {α : Type _} {l : Filter α} {f g : α → 𝕜}
(hgf : ∀ᶠ x in l, g x = 0 → f x = 0) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/2651125b48fc5c170ab1111afd0817c903b1fc6c
@@ -3034,7 +3034,7 @@ theorem IsBigO.const_mul_left {f : α → R} (h : f =O[l] g) (c' : R) : (fun x =
lean 3 declaration is
forall {α : Type.{u1}} {R : Type.{u2}} [_inst_10 : SeminormedRing.{u2} R] (u : Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) (f : α -> R) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u2} α R R (SeminormedRing.toHasNorm.{u2} R _inst_10) (SeminormedRing.toHasNorm.{u2} R _inst_10) (Norm.norm.{u2} R (SeminormedRing.toHasNorm.{u2} R _inst_10) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (coeBase.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (Units.hasCoe.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) (Inv.inv.{u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) (Units.hasInv.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) u))) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (coeBase.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (Units.hasCoe.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) u) (f x))
but is expected to have type
- forall {α : Type.{u1}} {R : Type.{u2}} [_inst_10 : SeminormedRing.{u2} R] (u : Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (f : α -> R) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u2} α R R (SeminormedRing.toNorm.{u2} R _inst_10) (SeminormedRing.toNorm.{u2} R _inst_10) (Norm.norm.{u2} R (SeminormedRing.toNorm.{u2} R _inst_10) (Units.val.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (Inv.inv.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (Units.instInvUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) u))) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (Units.val.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) u) (f x))
+ forall {α : Type.{u1}} {R : Type.{u2}} [_inst_10 : SeminormedRing.{u2} R] (u : Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (f : α -> R) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u2} α R R (SeminormedRing.toNorm.{u2} R _inst_10) (SeminormedRing.toNorm.{u2} R _inst_10) (Norm.norm.{u2} R (SeminormedRing.toNorm.{u2} R _inst_10) (Units.val.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (Inv.inv.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (Units.instInv.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) u))) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (Units.val.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) u) (f x))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_self_const_mul' Asymptotics.isBigOWith_self_const_mul'ₓ'. -/
theorem isBigOWith_self_const_mul' (u : Rˣ) (f : α → R) (l : Filter α) :
IsBigOWith ‖(↑u⁻¹ : R)‖ l f fun x => ↑u * f x :=
@@ -3155,7 +3155,7 @@ theorem IsBigO.of_const_mul_right {g : α → R} {c : R} (h : f =O[l] fun x => c
lean 3 declaration is
forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {u : Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))} {c' : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) c' l f g) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c' (Norm.norm.{u3} R (SeminormedRing.toHasNorm.{u3} R _inst_10) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (HasLiftT.mk.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (CoeTCₓ.coe.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (coeBase.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (Units.hasCoe.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))))) (Inv.inv.{u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) (Units.hasInv.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) u)))) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (HasLiftT.mk.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (CoeTCₓ.coe.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (coeBase.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (Units.hasCoe.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))))) u) (g x)))
but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {R : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u2} α} {g : α -> R} {u : Units.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))} {c' : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') -> (Asymptotics.IsBigOWith.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) c' l f g) -> (Asymptotics.IsBigOWith.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c' (Norm.norm.{u3} R (SeminormedRing.toNorm.{u3} R _inst_10) (Units.val.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) (Inv.inv.{u3} (Units.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) (Units.instInvUnits.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) u)))) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) (Units.val.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) u) (g x)))
+ forall {α : Type.{u2}} {E : Type.{u1}} {R : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u2} α} {g : α -> R} {u : Units.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))} {c' : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') -> (Asymptotics.IsBigOWith.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) c' l f g) -> (Asymptotics.IsBigOWith.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c' (Norm.norm.{u3} R (SeminormedRing.toNorm.{u3} R _inst_10) (Units.val.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) (Inv.inv.{u3} (Units.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) (Units.instInv.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) u)))) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) (Units.val.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) u) (g x)))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.const_mul_right' Asymptotics.IsBigOWith.const_mul_right'ₓ'. -/
theorem IsBigOWith.const_mul_right' {g : α → R} {u : Rˣ} {c' : ℝ} (hc' : 0 ≤ c')
(h : IsBigOWith c' l f g) : IsBigOWith (c' * ‖(↑u⁻¹ : R)‖) l f fun x => ↑u * g x :=
mathlib commit https://github.com/leanprover-community/mathlib/commit/7ebf83ed9c262adbf983ef64d5e8c2ae94b625f4
@@ -2780,7 +2780,7 @@ theorem isLittleO_one_iff : f' =o[l] (fun x => 1 : α → F) ↔ Tendsto f' l (
lean 3 declaration is
forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14], Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14)))) (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x)))
but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))) (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35877 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35879 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35877 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35879) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x)))
+ forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))) (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35352 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35354 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35352 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35354) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x)))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_one_iff Asymptotics.isBigO_one_iffₓ'. -/
@[simp]
theorem isBigO_one_iff : f =O[l] (fun x => 1 : α → F) ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x‖ :=
@@ -2793,7 +2793,7 @@ theorem isBigO_one_iff : f =O[l] (fun x => 1 : α → F) ↔ IsBoundedUnder (·
lean 3 declaration is
forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14], (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14))))
but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35877 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35879 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35877 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35879) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14)))
+ forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35352 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35354 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35352 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35354) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14)))
Case conversion may be inaccurate. Consider using '#align filter.is_bounded_under.is_O_one Filter.IsBoundedUnder.isBigO_oneₓ'. -/
alias is_O_one_iff ↔ _ _root_.filter.is_bounded_under.is_O_one
#align filter.is_bounded_under.is_O_one Filter.IsBoundedUnder.isBigO_one
@@ -2864,7 +2864,7 @@ theorem isLittleO_id_const {c : F''} (hc : c ≠ 0) : (fun x : E'' => x) =o[𝓝
lean 3 declaration is
forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {l : Filter.{u1} α}, (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f)) -> (forall {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f (fun (x : α) => c)))
but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F'' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u1} F''] {f : α -> E} {l : Filter.{u3} α}, (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36856 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36858 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36856 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36858) l (Function.comp.{succ u3, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f)) -> (forall {c : F''}, (Ne.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f (fun (x : α) => c)))
+ forall {α : Type.{u3}} {E : Type.{u2}} {F'' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u1} F''] {f : α -> E} {l : Filter.{u3} α}, (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36331 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36333 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36331 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36333) l (Function.comp.{succ u3, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f)) -> (forall {c : F''}, (Ne.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f (fun (x : α) => c)))
Case conversion may be inaccurate. Consider using '#align filter.is_bounded_under.is_O_const Filter.IsBoundedUnder.isBigO_constₓ'. -/
theorem Filter.IsBoundedUnder.isBigO_const (h : IsBoundedUnder (· ≤ ·) l (norm ∘ f)) {c : F''}
(hc : c ≠ 0) : f =O[l] fun x => c :=
@@ -2886,7 +2886,7 @@ theorem isBigO_const_of_tendsto {y : E''} (h : Tendsto f'' l (𝓝 y)) {c : F''}
lean 3 declaration is
forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} {c : F}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => c)) -> (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f))
but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} {c : F}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => c)) -> (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37147 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37149 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37147 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37149) l (Function.comp.{succ u3, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f))
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} {c : F}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => c)) -> (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36622 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36624 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36622 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36624) l (Function.comp.{succ u3, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.is_bounded_under_le Asymptotics.IsBigO.isBoundedUnder_leₓ'. -/
theorem IsBigO.isBoundedUnder_le {c : F} (h : f =O[l] fun x => c) :
IsBoundedUnder (· ≤ ·) l (norm ∘ f) :=
@@ -2898,7 +2898,7 @@ theorem IsBigO.isBoundedUnder_le {c : F} (h : f =O[l] fun x => c) :
lean 3 declaration is
forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {l : Filter.{u1} α} {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f (fun (x : α) => c)) (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f)))
but is expected to have type
- forall {α : Type.{u2}} {E : Type.{u1}} {F'' : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {l : Filter.{u2} α} {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (Zero.toOfNat0.{u3} F'' (NegZeroClass.toZero.{u3} F'' (SubNegZeroMonoid.toNegZeroClass.{u3} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} F'' (AddCommGroup.toDivisionAddCommMonoid.{u3} F'' (NormedAddCommGroup.toAddCommGroup.{u3} F'' _inst_8))))))))) -> (Iff (Asymptotics.IsBigO.{u2, u1, u3} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) l f (fun (x : α) => c)) (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37317 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37319 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37317 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37319) l (Function.comp.{succ u2, succ u1, 1} α E Real (Norm.norm.{u1} E _inst_1) f)))
+ forall {α : Type.{u2}} {E : Type.{u1}} {F'' : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {l : Filter.{u2} α} {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (Zero.toOfNat0.{u3} F'' (NegZeroClass.toZero.{u3} F'' (SubNegZeroMonoid.toNegZeroClass.{u3} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} F'' (AddCommGroup.toDivisionAddCommMonoid.{u3} F'' (NormedAddCommGroup.toAddCommGroup.{u3} F'' _inst_8))))))))) -> (Iff (Asymptotics.IsBigO.{u2, u1, u3} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) l f (fun (x : α) => c)) (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36792 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36794 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36792 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36794) l (Function.comp.{succ u2, succ u1, 1} α E Real (Norm.norm.{u1} E _inst_1) f)))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_of_ne Asymptotics.isBigO_const_of_neₓ'. -/
theorem isBigO_const_of_ne {c : F''} (hc : c ≠ 0) :
(f =O[l] fun x => c) ↔ IsBoundedUnder (· ≤ ·) l (norm ∘ f) :=
@@ -2909,7 +2909,7 @@ theorem isBigO_const_of_ne {c : F''} (hc : c ≠ 0) :
lean 3 declaration is
forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {l : Filter.{u1} α} {c : F''}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f'' (fun (x : α) => c)) (And ((Eq.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Filter.EventuallyEq.{u1, u2} α E'' l f'' (OfNat.ofNat.{max u1 u2} (α -> E'') 0 (OfNat.mk.{max u1 u2} (α -> E'') 0 (Zero.zero.{max u1 u2} (α -> E'') (Pi.instZero.{u1, u2} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))))) (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u2} E'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (f'' x))))
but is expected to have type
- forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {l : Filter.{u3} α} {c : F''}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' (fun (x : α) => c)) (And ((Eq.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19139 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))) (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37483 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37485 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37483 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37485) l (fun (x : α) => Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (f'' x))))
+ forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {l : Filter.{u3} α} {c : F''}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' (fun (x : α) => c)) (And ((Eq.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19139 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))) (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36958 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36960 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36958 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36960) l (fun (x : α) => Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (f'' x))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_iff Asymptotics.isBigO_const_iffₓ'. -/
theorem isBigO_const_iff {c : F''} :
(f'' =O[l] fun x => c) ↔ (c = 0 → f'' =ᶠ[l] 0) ∧ IsBoundedUnder (· ≤ ·) l fun x => ‖f'' x‖ :=
@@ -2924,7 +2924,7 @@ theorem isBigO_const_iff {c : F''} :
lean 3 declaration is
forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {g'' : α -> F''} {l : Filter.{u1} α}, (Filter.Eventually.{u1} α (fun (x : α) => Ne.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) l) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f g'') (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (Norm.norm.{u2} E _inst_1 (f x)) (Norm.norm.{u3} F'' (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (g'' x)))))
but is expected to have type
- forall {α : Type.{u3}} {E : Type.{u1}} {F'' : Type.{u2}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u2} F''] {f : α -> E} {g'' : α -> F''} {l : Filter.{u3} α}, (Filter.Eventually.{u3} α (fun (x : α) => Ne.{succ u2} F'' (g'' x) (OfNat.ofNat.{u2} F'' 0 (Zero.toOfNat0.{u2} F'' (NegZeroClass.toZero.{u2} F'' (SubNegZeroMonoid.toNegZeroClass.{u2} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} F'' (AddCommGroup.toDivisionAddCommMonoid.{u2} F'' (NormedAddCommGroup.toAddCommGroup.{u2} F'' _inst_8))))))))) l) -> (Iff (Asymptotics.IsBigO.{u3, u1, u2} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) l f g'') (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37718 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37720 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37718 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37720) l (fun (x : α) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (Norm.norm.{u1} E _inst_1 (f x)) (Norm.norm.{u2} F'' (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) (g'' x)))))
+ forall {α : Type.{u3}} {E : Type.{u1}} {F'' : Type.{u2}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u2} F''] {f : α -> E} {g'' : α -> F''} {l : Filter.{u3} α}, (Filter.Eventually.{u3} α (fun (x : α) => Ne.{succ u2} F'' (g'' x) (OfNat.ofNat.{u2} F'' 0 (Zero.toOfNat0.{u2} F'' (NegZeroClass.toZero.{u2} F'' (SubNegZeroMonoid.toNegZeroClass.{u2} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} F'' (AddCommGroup.toDivisionAddCommMonoid.{u2} F'' (NormedAddCommGroup.toAddCommGroup.{u2} F'' _inst_8))))))))) l) -> (Iff (Asymptotics.IsBigO.{u3, u1, u2} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) l f g'') (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37193 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37195 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37193 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37195) l (fun (x : α) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (Norm.norm.{u1} E _inst_1 (f x)) (Norm.norm.{u2} F'' (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) (g'' x)))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_is_bounded_under_le_div Asymptotics.isBigO_iff_isBoundedUnder_le_divₓ'. -/
theorem isBigO_iff_isBoundedUnder_le_div (h : ∀ᶠ x in l, g'' x ≠ 0) :
f =O[l] g'' ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x‖ / ‖g'' x‖ :=
@@ -3510,7 +3510,7 @@ theorem IsBigOWith.const_smul_left (h : IsBigOWith c l f' g) (c' : 𝕜) :
lean 3 declaration is
forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (SMul.smul.{u4, max u1 u3} 𝕜 (α -> E') (Function.hasSMul.{u1, u4, u3} α 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c f') g)
but is expected to have type
- forall {α : Type.{u4}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u1} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u4} α} [_inst_14 : NormedSpace.{u1, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsBigO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsBigO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l (HSMul.hSMul.{u1, max u4 u3, max u4 u3} 𝕜 (α -> E') (α -> E') (instHSMul.{u1, max u4 u3} 𝕜 (α -> E') (Pi.instSMul.{u4, u3, u1} α 𝕜 (fun (a._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.45605 : α) => E') (fun (i : α) => SMulZeroClass.toSMul.{u1, u3} 𝕜 E' (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u1, u3} 𝕜 E' (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (Module.toMulActionWithZero.{u1, u3} 𝕜 E' (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u1, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))))) c f') g)
+ forall {α : Type.{u4}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u1} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u4} α} [_inst_14 : NormedSpace.{u1, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsBigO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsBigO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l (HSMul.hSMul.{u1, max u4 u3, max u4 u3} 𝕜 (α -> E') (α -> E') (instHSMul.{u1, max u4 u3} 𝕜 (α -> E') (Pi.instSMul.{u4, u3, u1} α 𝕜 (fun (a._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.45080 : α) => E') (fun (i : α) => SMulZeroClass.toSMul.{u1, u3} 𝕜 E' (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u1, u3} 𝕜 E' (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (Module.toMulActionWithZero.{u1, u3} 𝕜 E' (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u1, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))))) c f') g)
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.const_smul_left Asymptotics.IsBigO.const_smul_leftₓ'. -/
theorem IsBigO.const_smul_left (h : f' =O[l] g) (c : 𝕜) : (c • f') =O[l] g :=
let ⟨b, hb⟩ := h.IsBigOWith
@@ -3521,7 +3521,7 @@ theorem IsBigO.const_smul_left (h : f' =O[l] g) (c : 𝕜) : (c • f') =O[l] g
lean 3 declaration is
forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (SMul.smul.{u4, max u1 u3} 𝕜 (α -> E') (Function.hasSMul.{u1, u4, u3} α 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c f') g)
but is expected to have type
- forall {α : Type.{u4}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u1} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u4} α} [_inst_14 : NormedSpace.{u1, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsLittleO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsLittleO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l (HSMul.hSMul.{u1, max u4 u3, max u4 u3} 𝕜 (α -> E') (α -> E') (instHSMul.{u1, max u4 u3} 𝕜 (α -> E') (Pi.instSMul.{u4, u3, u1} α 𝕜 (fun (a._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.45751 : α) => E') (fun (i : α) => SMulZeroClass.toSMul.{u1, u3} 𝕜 E' (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u1, u3} 𝕜 E' (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (Module.toMulActionWithZero.{u1, u3} 𝕜 E' (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u1, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))))) c f') g)
+ forall {α : Type.{u4}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u1} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u4} α} [_inst_14 : NormedSpace.{u1, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsLittleO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsLittleO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l (HSMul.hSMul.{u1, max u4 u3, max u4 u3} 𝕜 (α -> E') (α -> E') (instHSMul.{u1, max u4 u3} 𝕜 (α -> E') (Pi.instSMul.{u4, u3, u1} α 𝕜 (fun (a._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.45226 : α) => E') (fun (i : α) => SMulZeroClass.toSMul.{u1, u3} 𝕜 E' (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u1, u3} 𝕜 E' (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (Module.toMulActionWithZero.{u1, u3} 𝕜 E' (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u1, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))))) c f') g)
Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.const_smul_left Asymptotics.IsLittleO.const_smul_leftₓ'. -/
theorem IsLittleO.const_smul_left (h : f' =o[l] g) (c : 𝕜) : (c • f') =o[l] g :=
IsLittleO.of_norm_left <| by simpa only [← norm_smul] using h.norm_left.const_mul_left ‖c‖
@@ -3968,7 +3968,7 @@ theorem IsBigOWith.exists_eq_mul (h : IsBigOWith c l u v) (hc : 0 ≤ c) :
lean 3 declaration is
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, Iff (Asymptotics.IsBigO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v))))
but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_exists_eq_mul Asymptotics.isBigO_iff_exists_eq_mulₓ'. -/
theorem isBigO_iff_exists_eq_mul :
u =O[l] v ↔ ∃ (φ : α → 𝕜)(hφ : l.IsBoundedUnder (· ≤ ·) (norm ∘ φ)), u =ᶠ[l] φ * v :=
@@ -3986,7 +3986,7 @@ theorem isBigO_iff_exists_eq_mul :
lean 3 declaration is
forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) -> (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v))))
but is expected to have type
- forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) -> (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) -> (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51064 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51066) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.exists_eq_mul Asymptotics.IsBigO.exists_eq_mulₓ'. -/
alias is_O_iff_exists_eq_mul ↔ is_O.exists_eq_mul _
#align asymptotics.is_O.exists_eq_mul Asymptotics.IsBigO.exists_eq_mul
@@ -4026,7 +4026,7 @@ end ExistsMulEq
lean 3 declaration is
forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (NormedField.toHasNorm.{u1} 𝕜 _inst_12) l f g) -> (Filter.IsBoundedUnder.{0, u2} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (DivInvMonoid.toHasDiv.{u1} 𝕜 (DivisionRing.toDivInvMonoid.{u1} 𝕜 (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_12))))) (f x) (g x))))
but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) -> (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52010 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52012 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52010 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52012) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x))))
+ forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) -> (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51485 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51487 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51485 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51487) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x))))
Case conversion may be inaccurate. Consider using '#align asymptotics.div_is_bounded_under_of_is_O Asymptotics.div_isBoundedUnder_of_isBigOₓ'. -/
theorem div_isBoundedUnder_of_isBigO {α : Type _} {l : Filter α} {f g : α → 𝕜} (h : f =O[l] g) :
IsBoundedUnder (· ≤ ·) l fun x => ‖f x / g x‖ :=
@@ -4041,7 +4041,7 @@ theorem div_isBoundedUnder_of_isBigO {α : Type _} {l : Filter α} {f g : α →
lean 3 declaration is
forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))))))))) l) -> (Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (NormedField.toHasNorm.{u1} 𝕜 _inst_12) l f g) (Filter.IsBoundedUnder.{0, u2} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (DivInvMonoid.toHasDiv.{u1} 𝕜 (DivisionRing.toDivInvMonoid.{u1} 𝕜 (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_12))))) (f x) (g x)))))
but is expected to have type
- forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) l) -> (Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52244 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52246 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52244 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52246) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x)))))
+ forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) l) -> (Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51719 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51721 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51719 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51721) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x)))))
Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_div_is_bounded_under Asymptotics.isBigO_iff_div_isBoundedUnderₓ'. -/
theorem isBigO_iff_div_isBoundedUnder {α : Type _} {l : Filter α} {f g : α → 𝕜}
(hgf : ∀ᶠ x in l, g x = 0 → f x = 0) :
mathlib commit https://github.com/leanprover-community/mathlib/commit/7ebf83ed9c262adbf983ef64d5e8c2ae94b625f4
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jeremy Avigad, Yury Kudryashov
! This file was ported from Lean 3 source module analysis.asymptotics.asymptotics
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! leanprover-community/mathlib commit 9a48a083b390d9b84a71efbdc4e8dfa26a687104
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -16,6 +16,9 @@ import Mathbin.Topology.LocalHomeomorph
/-!
# Asymptotics
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
We introduce these relations:
* `is_O_with c l f g` : "f is big O of g along l with constant c";
mathlib commit https://github.com/leanprover-community/mathlib/commit/039ef89bef6e58b32b62898dd48e9d1a4312bb65
@@ -81,167 +81,356 @@ section Defs
/-! ### Definitions -/
+#print Asymptotics.IsBigOWith /-
/-- This version of the Landau notation `is_O_with C l f g` where `f` and `g` are two functions on
a type `α` and `l` is a filter on `α`, means that eventually for `l`, `‖f‖` is bounded by `C * ‖g‖`.
In other words, `‖f‖ / ‖g‖` is eventually bounded by `C`, modulo division by zero issues that are
avoided by this definition. Probably you want to use `is_O` instead of this relation. -/
-irreducible_def IsOWith (c : ℝ) (l : Filter α) (f : α → E) (g : α → F) : Prop :=
+irreducible_def IsBigOWith (c : ℝ) (l : Filter α) (f : α → E) (g : α → F) : Prop :=
∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖
-#align asymptotics.is_O_with Asymptotics.IsOWith
+#align asymptotics.is_O_with Asymptotics.IsBigOWith
+-/
+/- warning: asymptotics.is_O_with_iff -> Asymptotics.isBigOWith_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g) (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g) (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_iff Asymptotics.isBigOWith_iffₓ'. -/
/-- Definition of `is_O_with`. We record it in a lemma as `is_O_with` is irreducible. -/
-theorem isOWith_iff : IsOWith c l f g ↔ ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ := by rw [is_O_with]
-#align asymptotics.is_O_with_iff Asymptotics.isOWith_iff
-
+theorem isBigOWith_iff : IsBigOWith c l f g ↔ ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ := by rw [is_O_with]
+#align asymptotics.is_O_with_iff Asymptotics.isBigOWith_iff
+
+/- warning: asymptotics.is_O_with.bound -> Asymptotics.IsBigOWith.bound is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g) -> (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g) -> (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.bound Asymptotics.IsBigOWith.boundₓ'. -/
+/- warning: asymptotics.is_O_with.of_bound -> Asymptotics.IsBigOWith.of_bound is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_bound Asymptotics.IsBigOWith.of_boundₓ'. -/
alias is_O_with_iff ↔ is_O_with.bound is_O_with.of_bound
-#align asymptotics.is_O_with.bound Asymptotics.IsOWith.bound
-#align asymptotics.is_O_with.of_bound Asymptotics.IsOWith.of_bound
+#align asymptotics.is_O_with.bound Asymptotics.IsBigOWith.bound
+#align asymptotics.is_O_with.of_bound Asymptotics.IsBigOWith.of_bound
+#print Asymptotics.IsBigO /-
/-- The Landau notation `f =O[l] g` where `f` and `g` are two functions on a type `α` and `l` is
a filter on `α`, means that eventually for `l`, `‖f‖` is bounded by a constant multiple of `‖g‖`.
In other words, `‖f‖ / ‖g‖` is eventually bounded, modulo division by zero issues that are avoided
by this definition. -/
-irreducible_def IsO (l : Filter α) (f : α → E) (g : α → F) : Prop :=
- ∃ c : ℝ, IsOWith c l f g
-#align asymptotics.is_O Asymptotics.IsO
+irreducible_def IsBigO (l : Filter α) (f : α → E) (g : α → F) : Prop :=
+ ∃ c : ℝ, IsBigOWith c l f g
+#align asymptotics.is_O Asymptotics.IsBigO
+-/
-- mathport name: «expr =O[ ] »
-notation:100 f " =O[" l "] " g:100 => IsO l f g
-
+notation:100 f " =O[" l "] " g:100 => IsBigO l f g
+
+/- warning: asymptotics.is_O_iff_is_O_with -> Asymptotics.isBigO_iff_isBigOWith is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) (Exists.{1} Real (fun (c : Real) => Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) (Exists.{1} Real (fun (c : Real) => Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_is_O_with Asymptotics.isBigO_iff_isBigOWithₓ'. -/
/-- Definition of `is_O` in terms of `is_O_with`. We record it in a lemma as `is_O` is
irreducible. -/
-theorem isO_iff_isOWith : f =O[l] g ↔ ∃ c : ℝ, IsOWith c l f g := by rw [is_O]
-#align asymptotics.is_O_iff_is_O_with Asymptotics.isO_iff_isOWith
-
+theorem isBigO_iff_isBigOWith : f =O[l] g ↔ ∃ c : ℝ, IsBigOWith c l f g := by rw [is_O]
+#align asymptotics.is_O_iff_is_O_with Asymptotics.isBigO_iff_isBigOWith
+
+/- warning: asymptotics.is_O_iff -> Asymptotics.isBigO_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) (Exists.{1} Real (fun (c : Real) => Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) (Exists.{1} Real (fun (c : Real) => Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff Asymptotics.isBigO_iffₓ'. -/
/-- Definition of `is_O` in terms of filters. We record it in a lemma as we will set
`is_O` to be irreducible at the end of this file. -/
-theorem isO_iff : f =O[l] g ↔ ∃ c : ℝ, ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ := by
+theorem isBigO_iff : f =O[l] g ↔ ∃ c : ℝ, ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ := by
simp only [is_O, is_O_with]
-#align asymptotics.is_O_iff Asymptotics.isO_iff
-
-theorem IsO.of_bound (c : ℝ) (h : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖) : f =O[l] g :=
- isO_iff.2 ⟨c, h⟩
-#align asymptotics.is_O.of_bound Asymptotics.IsO.of_bound
-
-theorem IsO.of_bound' (h : ∀ᶠ x in l, ‖f x‖ ≤ ‖g x‖) : f =O[l] g :=
- IsO.of_bound 1 <| by
+#align asymptotics.is_O_iff Asymptotics.isBigO_iff
+
+/- warning: asymptotics.is_O.of_bound -> Asymptotics.IsBigO.of_bound is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α} (c : Real), (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α} (c : Real), (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_bound Asymptotics.IsBigO.of_boundₓ'. -/
+theorem IsBigO.of_bound (c : ℝ) (h : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖) : f =O[l] g :=
+ isBigO_iff.2 ⟨c, h⟩
+#align asymptotics.is_O.of_bound Asymptotics.IsBigO.of_bound
+
+/- warning: asymptotics.is_O.of_bound' -> Asymptotics.IsBigO.of_bound' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (Norm.norm.{u3} F _inst_2 (g x))) l) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (Norm.norm.{u1} F _inst_2 (g x))) l) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_bound' Asymptotics.IsBigO.of_bound'ₓ'. -/
+theorem IsBigO.of_bound' (h : ∀ᶠ x in l, ‖f x‖ ≤ ‖g x‖) : f =O[l] g :=
+ IsBigO.of_bound 1 <| by
simp_rw [one_mul]
exact h
-#align asymptotics.is_O.of_bound' Asymptotics.IsO.of_bound'
-
-theorem IsO.bound : f =O[l] g → ∃ c : ℝ, ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
- isO_iff.1
-#align asymptotics.is_O.bound Asymptotics.IsO.bound
-
+#align asymptotics.is_O.of_bound' Asymptotics.IsBigO.of_bound'
+
+/- warning: asymptotics.is_O.bound -> Asymptotics.IsBigO.bound is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Exists.{1} Real (fun (c : Real) => Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (Exists.{1} Real (fun (c : Real) => Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.bound Asymptotics.IsBigO.boundₓ'. -/
+theorem IsBigO.bound : f =O[l] g → ∃ c : ℝ, ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
+ isBigO_iff.1
+#align asymptotics.is_O.bound Asymptotics.IsBigO.bound
+
+#print Asymptotics.IsLittleO /-
/-- The Landau notation `f =o[l] g` where `f` and `g` are two functions on a type `α` and `l` is
a filter on `α`, means that eventually for `l`, `‖f‖` is bounded by an arbitrarily small constant
multiple of `‖g‖`. In other words, `‖f‖ / ‖g‖` tends to `0` along `l`, modulo division by zero
issues that are avoided by this definition. -/
-irreducible_def IsOCat (l : Filter α) (f : α → E) (g : α → F) : Prop :=
- ∀ ⦃c : ℝ⦄, 0 < c → IsOWith c l f g
-#align asymptotics.is_o Asymptotics.IsOCat
+irreducible_def IsLittleO (l : Filter α) (f : α → E) (g : α → F) : Prop :=
+ ∀ ⦃c : ℝ⦄, 0 < c → IsBigOWith c l f g
+#align asymptotics.is_o Asymptotics.IsLittleO
+-/
-- mathport name: «expr =o[ ] »
-notation:100 f " =o[" l "] " g:100 => IsOCat l f g
-
+notation:100 f " =o[" l "] " g:100 => IsLittleO l f g
+
+/- warning: asymptotics.is_o_iff_forall_is_O_with -> Asymptotics.isLittleO_iff_forall_isBigOWith is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) (forall {{c : Real}}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) (forall {{c : Real}}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff_forall_is_O_with Asymptotics.isLittleO_iff_forall_isBigOWithₓ'. -/
/-- Definition of `is_o` in terms of `is_O_with`. We record it in a lemma as we will set
`is_o` to be irreducible at the end of this file. -/
-theorem isOCat_iff_forall_isOWith : f =o[l] g ↔ ∀ ⦃c : ℝ⦄, 0 < c → IsOWith c l f g := by rw [is_o]
-#align asymptotics.is_o_iff_forall_is_O_with Asymptotics.isOCat_iff_forall_isOWith
-
+theorem isLittleO_iff_forall_isBigOWith : f =o[l] g ↔ ∀ ⦃c : ℝ⦄, 0 < c → IsBigOWith c l f g := by
+ rw [is_o]
+#align asymptotics.is_o_iff_forall_is_O_with Asymptotics.isLittleO_iff_forall_isBigOWith
+
+/- warning: asymptotics.is_o.forall_is_O_with -> Asymptotics.IsLittleO.forall_isBigOWith is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (forall {{c : Real}}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (forall {{c : Real}}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.forall_is_O_with Asymptotics.IsLittleO.forall_isBigOWithₓ'. -/
+/- warning: asymptotics.is_o.of_is_O_with -> Asymptotics.IsLittleO.of_isBigOWith is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (forall {{c : Real}}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g)) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (forall {{c : Real}}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g)) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_is_O_with Asymptotics.IsLittleO.of_isBigOWithₓ'. -/
alias is_o_iff_forall_is_O_with ↔ is_o.forall_is_O_with is_o.of_is_O_with
-#align asymptotics.is_o.forall_is_O_with Asymptotics.IsOCat.forall_isOWith
-#align asymptotics.is_o.of_is_O_with Asymptotics.IsOCat.of_isOWith
-
+#align asymptotics.is_o.forall_is_O_with Asymptotics.IsLittleO.forall_isBigOWith
+#align asymptotics.is_o.of_is_O_with Asymptotics.IsLittleO.of_isBigOWith
+
+/- warning: asymptotics.is_o_iff -> Asymptotics.isLittleO_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) (forall {{c : Real}}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) (forall {{c : Real}}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff Asymptotics.isLittleO_iffₓ'. -/
/-- Definition of `is_o` in terms of filters. We record it in a lemma as we will set
`is_o` to be irreducible at the end of this file. -/
-theorem isOCat_iff : f =o[l] g ↔ ∀ ⦃c : ℝ⦄, 0 < c → ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ := by
+theorem isLittleO_iff : f =o[l] g ↔ ∀ ⦃c : ℝ⦄, 0 < c → ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ := by
simp only [is_o, is_O_with]
-#align asymptotics.is_o_iff Asymptotics.isOCat_iff
-
+#align asymptotics.is_o_iff Asymptotics.isLittleO_iff
+
+/- warning: asymptotics.is_o.bound -> Asymptotics.IsLittleO.bound is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (forall {{c : Real}}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (forall {{c : Real}}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.bound Asymptotics.IsLittleO.boundₓ'. -/
+/- warning: asymptotics.is_o.of_bound -> Asymptotics.IsLittleO.of_bound is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (forall {{c : Real}}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l)) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (forall {{c : Real}}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l)) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_bound Asymptotics.IsLittleO.of_boundₓ'. -/
alias is_o_iff ↔ is_o.bound is_o.of_bound
-#align asymptotics.is_o.bound Asymptotics.IsOCat.bound
-#align asymptotics.is_o.of_bound Asymptotics.IsOCat.of_bound
-
-theorem IsOCat.def (h : f =o[l] g) (hc : 0 < c) : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
- isOCat_iff.1 h hc
-#align asymptotics.is_o.def Asymptotics.IsOCat.def
-
-theorem IsOCat.def' (h : f =o[l] g) (hc : 0 < c) : IsOWith c l f g :=
- isOWith_iff.2 <| isOCat_iff.1 h hc
-#align asymptotics.is_o.def' Asymptotics.IsOCat.def'
+#align asymptotics.is_o.bound Asymptotics.IsLittleO.bound
+#align asymptotics.is_o.of_bound Asymptotics.IsLittleO.of_bound
+
+/- warning: asymptotics.is_o.def -> Asymptotics.IsLittleO.def is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) l)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))) l)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.def Asymptotics.IsLittleO.defₓ'. -/
+theorem IsLittleO.def (h : f =o[l] g) (hc : 0 < c) : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
+ isLittleO_iff.1 h hc
+#align asymptotics.is_o.def Asymptotics.IsLittleO.def
+
+/- warning: asymptotics.is_o.def' -> Asymptotics.IsLittleO.def' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.def' Asymptotics.IsLittleO.def'ₓ'. -/
+theorem IsLittleO.def' (h : f =o[l] g) (hc : 0 < c) : IsBigOWith c l f g :=
+ isBigOWith_iff.2 <| isLittleO_iff.1 h hc
+#align asymptotics.is_o.def' Asymptotics.IsLittleO.def'
end Defs
/-! ### Conversions -/
-theorem IsOWith.isO (h : IsOWith c l f g) : f =O[l] g := by rw [is_O] <;> exact ⟨c, h⟩
-#align asymptotics.is_O_with.is_O Asymptotics.IsOWith.isO
-
-theorem IsOCat.isOWith (hgf : f =o[l] g) : IsOWith 1 l f g :=
+/- warning: asymptotics.is_O_with.is_O -> Asymptotics.IsBigOWith.isBigO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.is_O Asymptotics.IsBigOWith.isBigOₓ'. -/
+theorem IsBigOWith.isBigO (h : IsBigOWith c l f g) : f =O[l] g := by rw [is_O] <;> exact ⟨c, h⟩
+#align asymptotics.is_O_with.is_O Asymptotics.IsBigOWith.isBigO
+
+/- warning: asymptotics.is_o.is_O_with -> Asymptotics.IsLittleO.isBigOWith is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.is_O_with Asymptotics.IsLittleO.isBigOWithₓ'. -/
+theorem IsLittleO.isBigOWith (hgf : f =o[l] g) : IsBigOWith 1 l f g :=
hgf.def' zero_lt_one
-#align asymptotics.is_o.is_O_with Asymptotics.IsOCat.isOWith
-
-theorem IsOCat.isO (hgf : f =o[l] g) : f =O[l] g :=
- hgf.IsOWith.IsO
-#align asymptotics.is_o.is_O Asymptotics.IsOCat.isO
-
-theorem IsO.isOWith : f =O[l] g → ∃ c : ℝ, IsOWith c l f g :=
- isO_iff_isOWith.1
-#align asymptotics.is_O.is_O_with Asymptotics.IsO.isOWith
-
-theorem IsOWith.weaken (h : IsOWith c l f g') (hc : c ≤ c') : IsOWith c' l f g' :=
- IsOWith.of_bound <|
+#align asymptotics.is_o.is_O_with Asymptotics.IsLittleO.isBigOWith
+
+/- warning: asymptotics.is_o.is_O -> Asymptotics.IsLittleO.isBigO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.is_O Asymptotics.IsLittleO.isBigOₓ'. -/
+theorem IsLittleO.isBigO (hgf : f =o[l] g) : f =O[l] g :=
+ hgf.IsBigOWith.IsBigO
+#align asymptotics.is_o.is_O Asymptotics.IsLittleO.isBigO
+
+/- warning: asymptotics.is_O.is_O_with -> Asymptotics.IsBigO.isBigOWith is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Exists.{1} Real (fun (c : Real) => Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (Exists.{1} Real (fun (c : Real) => Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.is_O_with Asymptotics.IsBigO.isBigOWithₓ'. -/
+theorem IsBigO.isBigOWith : f =O[l] g → ∃ c : ℝ, IsBigOWith c l f g :=
+ isBigO_iff_isBigOWith.1
+#align asymptotics.is_O.is_O_with Asymptotics.IsBigO.isBigOWith
+
+/- warning: asymptotics.is_O_with.weaken -> Asymptotics.IsBigOWith.weaken is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {c' : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') -> (LE.le.{0} Real Real.hasLe c c') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c' l f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {c' : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g') -> (LE.le.{0} Real Real.instLEReal c c') -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c' l f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.weaken Asymptotics.IsBigOWith.weakenₓ'. -/
+theorem IsBigOWith.weaken (h : IsBigOWith c l f g') (hc : c ≤ c') : IsBigOWith c' l f g' :=
+ IsBigOWith.of_bound <|
mem_of_superset h.bound fun x hx =>
calc
‖f x‖ ≤ c * ‖g' x‖ := hx
_ ≤ _ := mul_le_mul_of_nonneg_right hc (norm_nonneg _)
-#align asymptotics.is_O_with.weaken Asymptotics.IsOWith.weaken
-
-theorem IsOWith.exists_pos (h : IsOWith c l f g') : ∃ (c' : _)(H : 0 < c'), IsOWith c' l f g' :=
+#align asymptotics.is_O_with.weaken Asymptotics.IsBigOWith.weaken
+
+/- warning: asymptotics.is_O_with.exists_pos -> Asymptotics.IsBigOWith.exists_pos is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') -> (Exists.{1} Real (fun (c' : Real) => Exists.{0} (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') (fun (H : LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') => Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c' l f g')))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g') -> (Exists.{1} Real (fun (c' : Real) => Exists.{0} (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') (fun (H : LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') => Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c' l f g')))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.exists_pos Asymptotics.IsBigOWith.exists_posₓ'. -/
+theorem IsBigOWith.exists_pos (h : IsBigOWith c l f g') :
+ ∃ (c' : _)(H : 0 < c'), IsBigOWith c' l f g' :=
⟨max c 1, lt_of_lt_of_le zero_lt_one (le_max_right c 1), h.weaken <| le_max_left c 1⟩
-#align asymptotics.is_O_with.exists_pos Asymptotics.IsOWith.exists_pos
-
-theorem IsO.exists_pos (h : f =O[l] g') : ∃ (c : _)(H : 0 < c), IsOWith c l f g' :=
- let ⟨c, hc⟩ := h.IsOWith
+#align asymptotics.is_O_with.exists_pos Asymptotics.IsBigOWith.exists_pos
+
+/- warning: asymptotics.is_O.exists_pos -> Asymptotics.IsBigO.exists_pos is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Exists.{1} Real (fun (c : Real) => Exists.{0} (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) (fun (H : LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) => Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g')))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Exists.{1} Real (fun (c : Real) => Exists.{0} (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) (fun (H : LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) => Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g')))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.exists_pos Asymptotics.IsBigO.exists_posₓ'. -/
+theorem IsBigO.exists_pos (h : f =O[l] g') : ∃ (c : _)(H : 0 < c), IsBigOWith c l f g' :=
+ let ⟨c, hc⟩ := h.IsBigOWith
hc.exists_pos
-#align asymptotics.is_O.exists_pos Asymptotics.IsO.exists_pos
-
-theorem IsOWith.exists_nonneg (h : IsOWith c l f g') : ∃ (c' : _)(H : 0 ≤ c'), IsOWith c' l f g' :=
+#align asymptotics.is_O.exists_pos Asymptotics.IsBigO.exists_pos
+
+/- warning: asymptotics.is_O_with.exists_nonneg -> Asymptotics.IsBigOWith.exists_nonneg is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') -> (Exists.{1} Real (fun (c' : Real) => Exists.{0} (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') (fun (H : LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') => Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c' l f g')))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g') -> (Exists.{1} Real (fun (c' : Real) => Exists.{0} (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') (fun (H : LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') => Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c' l f g')))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.exists_nonneg Asymptotics.IsBigOWith.exists_nonnegₓ'. -/
+theorem IsBigOWith.exists_nonneg (h : IsBigOWith c l f g') :
+ ∃ (c' : _)(H : 0 ≤ c'), IsBigOWith c' l f g' :=
let ⟨c, cpos, hc⟩ := h.exists_pos
⟨c, le_of_lt cpos, hc⟩
-#align asymptotics.is_O_with.exists_nonneg Asymptotics.IsOWith.exists_nonneg
-
-theorem IsO.exists_nonneg (h : f =O[l] g') : ∃ (c : _)(H : 0 ≤ c), IsOWith c l f g' :=
- let ⟨c, hc⟩ := h.IsOWith
+#align asymptotics.is_O_with.exists_nonneg Asymptotics.IsBigOWith.exists_nonneg
+
+/- warning: asymptotics.is_O.exists_nonneg -> Asymptotics.IsBigO.exists_nonneg is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Exists.{1} Real (fun (c : Real) => Exists.{0} (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) (fun (H : LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) => Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g')))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Exists.{1} Real (fun (c : Real) => Exists.{0} (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) (fun (H : LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) => Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g')))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.exists_nonneg Asymptotics.IsBigO.exists_nonnegₓ'. -/
+theorem IsBigO.exists_nonneg (h : f =O[l] g') : ∃ (c : _)(H : 0 ≤ c), IsBigOWith c l f g' :=
+ let ⟨c, hc⟩ := h.IsBigOWith
hc.exists_nonneg
-#align asymptotics.is_O.exists_nonneg Asymptotics.IsO.exists_nonneg
-
+#align asymptotics.is_O.exists_nonneg Asymptotics.IsBigO.exists_nonneg
+
+/- warning: asymptotics.is_O_iff_eventually_is_O_with -> Asymptotics.isBigO_iff_eventually_isBigOWith is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') (Filter.Eventually.{0} Real (fun (c : Real) => Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') (Filter.atTop.{0} Real Real.preorder))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') (Filter.Eventually.{0} Real (fun (c : Real) => Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g') (Filter.atTop.{0} Real Real.instPreorderReal))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_eventually_is_O_with Asymptotics.isBigO_iff_eventually_isBigOWithₓ'. -/
/-- `f = O(g)` if and only if `is_O_with c f g` for all sufficiently large `c`. -/
-theorem isO_iff_eventually_isOWith : f =O[l] g' ↔ ∀ᶠ c in atTop, IsOWith c l f g' :=
- isO_iff_isOWith.trans
+theorem isBigO_iff_eventually_isBigOWith : f =O[l] g' ↔ ∀ᶠ c in atTop, IsBigOWith c l f g' :=
+ isBigO_iff_isBigOWith.trans
⟨fun ⟨c, hc⟩ => mem_atTop_sets.2 ⟨c, fun c' hc' => hc.weaken hc'⟩, fun h => h.exists⟩
-#align asymptotics.is_O_iff_eventually_is_O_with Asymptotics.isO_iff_eventually_isOWith
-
+#align asymptotics.is_O_iff_eventually_is_O_with Asymptotics.isBigO_iff_eventually_isBigOWith
+
+/- warning: asymptotics.is_O_iff_eventually -> Asymptotics.isBigO_iff_eventually is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') (Filter.Eventually.{0} Real (fun (c : Real) => Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))) l) (Filter.atTop.{0} Real Real.preorder))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') (Filter.Eventually.{0} Real (fun (c : Real) => Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))) l) (Filter.atTop.{0} Real Real.instPreorderReal))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_eventually Asymptotics.isBigO_iff_eventuallyₓ'. -/
/-- `f = O(g)` if and only if `∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖` for all sufficiently large `c`. -/
-theorem isO_iff_eventually : f =O[l] g' ↔ ∀ᶠ c in atTop, ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g' x‖ :=
- isO_iff_eventually_isOWith.trans <| by simp only [is_O_with]
-#align asymptotics.is_O_iff_eventually Asymptotics.isO_iff_eventually
-
-theorem IsO.exists_mem_basis {ι} {p : ι → Prop} {s : ι → Set α} (h : f =O[l] g')
+theorem isBigO_iff_eventually : f =O[l] g' ↔ ∀ᶠ c in atTop, ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g' x‖ :=
+ isBigO_iff_eventually_isBigOWith.trans <| by simp only [is_O_with]
+#align asymptotics.is_O_iff_eventually Asymptotics.isBigO_iff_eventually
+
+/- warning: asymptotics.is_O.exists_mem_basis -> Asymptotics.IsBigO.exists_mem_basis is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α} {ι : Sort.{u4}} {p : ι -> Prop} {s : ι -> (Set.{u1} α)}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Filter.HasBasis.{u1, u4} α ι l p s) -> (Exists.{1} Real (fun (c : Real) => Exists.{0} (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) (fun (hc : LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) => Exists.{u4} ι (fun (i : ι) => Exists.{0} (p i) (fun (hi : p i) => forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x (s i)) -> (LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))))))))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α} {ι : Sort.{u4}} {p : ι -> Prop} {s : ι -> (Set.{u3} α)}, (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Filter.HasBasis.{u3, u4} α ι l p s) -> (Exists.{1} Real (fun (c : Real) => Exists.{0} (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) (fun (hc : LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) => Exists.{u4} ι (fun (i : ι) => Exists.{0} (p i) (fun (hi : p i) => forall (x : α), (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x (s i)) -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.exists_mem_basis Asymptotics.IsBigO.exists_mem_basisₓ'. -/
+theorem IsBigO.exists_mem_basis {ι} {p : ι → Prop} {s : ι → Set α} (h : f =O[l] g')
(hb : l.HasBasis p s) : ∃ (c : ℝ)(hc : 0 < c)(i : ι)(hi : p i), ∀ x ∈ s i, ‖f x‖ ≤ c * ‖g' x‖ :=
flip Exists₂.imp h.exists_pos fun c hc h => by
simpa only [is_O_with_iff, hb.eventually_iff, exists_prop] using h
-#align asymptotics.is_O.exists_mem_basis Asymptotics.IsO.exists_mem_basis
-
-theorem isOWith_inv (hc : 0 < c) : IsOWith c⁻¹ l f g ↔ ∀ᶠ x in l, c * ‖f x‖ ≤ ‖g x‖ := by
+#align asymptotics.is_O.exists_mem_basis Asymptotics.IsBigO.exists_mem_basis
+
+/- warning: asymptotics.is_O_with_inv -> Asymptotics.isBigOWith_inv is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 (Inv.inv.{0} Real Real.hasInv c) l f g) (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u2} E _inst_1 (f x))) (Norm.norm.{u3} F _inst_2 (g x))) l))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 (Inv.inv.{0} Real Real.instInvReal c) l f g) (Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u2} E _inst_1 (f x))) (Norm.norm.{u1} F _inst_2 (g x))) l))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_inv Asymptotics.isBigOWith_invₓ'. -/
+theorem isBigOWith_inv (hc : 0 < c) : IsBigOWith c⁻¹ l f g ↔ ∀ᶠ x in l, c * ‖f x‖ ≤ ‖g x‖ := by
simp only [is_O_with, ← div_eq_inv_mul, le_div_iff' hc]
-#align asymptotics.is_O_with_inv Asymptotics.isOWith_inv
-
+#align asymptotics.is_O_with_inv Asymptotics.isBigOWith_inv
+
+/- warning: asymptotics.is_o_iff_nat_mul_le_aux -> Asymptotics.isLittleO_iff_nat_mul_le_aux is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Or (forall (x : α), LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Norm.norm.{u2} E _inst_1 (f x))) (forall (x : α), LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) (Norm.norm.{u3} F _inst_2 (g x)))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) (forall (n : Nat), Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) n) (Norm.norm.{u2} E _inst_1 (f x))) (Norm.norm.{u3} F _inst_2 (g x))) l))
+but is expected to have type
+ forall {α : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Or (forall (x : α), LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Norm.norm.{u3} E _inst_1 (f x))) (forall (x : α), LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) (Norm.norm.{u2} F _inst_2 (g x)))) -> (Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E F _inst_1 _inst_2 l f g) (forall (n : Nat), Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (Nat.cast.{0} Real Real.natCast n) (Norm.norm.{u3} E _inst_1 (f x))) (Norm.norm.{u2} F _inst_2 (g x))) l))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff_nat_mul_le_aux Asymptotics.isLittleO_iff_nat_mul_le_auxₓ'. -/
-- We prove this lemma with strange assumptions to get two lemmas below automatically
-theorem isOCat_iff_nat_mul_le_aux (h₀ : (∀ x, 0 ≤ ‖f x‖) ∨ ∀ x, 0 ≤ ‖g x‖) :
+theorem isLittleO_iff_nat_mul_le_aux (h₀ : (∀ x, 0 ≤ ‖f x‖) ∨ ∀ x, 0 ≤ ‖g x‖) :
f =o[l] g ↔ ∀ n : ℕ, ∀ᶠ x in l, ↑n * ‖f x‖ ≤ ‖g x‖ :=
by
constructor
@@ -259,28 +448,52 @@ theorem isOCat_iff_nat_mul_le_aux (h₀ : (∀ x, 0 ≤ ‖f x‖) ∨ ∀ x, 0
refine' hfg.trans (mul_le_mul_of_nonneg_right (inv_le_of_inv_le ε0 hn.le) _)
refine' h₀.elim (fun hf => nonneg_of_mul_nonneg_right ((hf x).trans hfg) _) fun h => h x
exact inv_pos.2 hn₀
-#align asymptotics.is_o_iff_nat_mul_le_aux Asymptotics.isOCat_iff_nat_mul_le_aux
-
-theorem isOCat_iff_nat_mul_le : f =o[l] g' ↔ ∀ n : ℕ, ∀ᶠ x in l, ↑n * ‖f x‖ ≤ ‖g' x‖ :=
- isOCat_iff_nat_mul_le_aux (Or.inr fun x => norm_nonneg _)
-#align asymptotics.is_o_iff_nat_mul_le Asymptotics.isOCat_iff_nat_mul_le
-
-theorem isOCat_iff_nat_mul_le' : f' =o[l] g ↔ ∀ n : ℕ, ∀ᶠ x in l, ↑n * ‖f' x‖ ≤ ‖g x‖ :=
- isOCat_iff_nat_mul_le_aux (Or.inl fun x => norm_nonneg _)
-#align asymptotics.is_o_iff_nat_mul_le' Asymptotics.isOCat_iff_nat_mul_le'
+#align asymptotics.is_o_iff_nat_mul_le_aux Asymptotics.isLittleO_iff_nat_mul_le_aux
+
+/- warning: asymptotics.is_o_iff_nat_mul_le -> Asymptotics.isLittleO_iff_nat_mul_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') (forall (n : Nat), Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) n) (Norm.norm.{u2} E _inst_1 (f x))) (Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) l)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') (forall (n : Nat), Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (Nat.cast.{0} Real Real.natCast n) (Norm.norm.{u2} E _inst_1 (f x))) (Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) l)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff_nat_mul_le Asymptotics.isLittleO_iff_nat_mul_leₓ'. -/
+theorem isLittleO_iff_nat_mul_le : f =o[l] g' ↔ ∀ n : ℕ, ∀ᶠ x in l, ↑n * ‖f x‖ ≤ ‖g' x‖ :=
+ isLittleO_iff_nat_mul_le_aux (Or.inr fun x => norm_nonneg _)
+#align asymptotics.is_o_iff_nat_mul_le Asymptotics.isLittleO_iff_nat_mul_le
+
+/- warning: asymptotics.is_o_iff_nat_mul_le' -> Asymptotics.isLittleO_iff_nat_mul_le' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) (forall (n : Nat), Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) ((fun (a : Type) (b : Type) [self : HasLiftT.{1, 1} a b] => self.0) Nat Real (HasLiftT.mk.{1, 1} Nat Real (CoeTCₓ.coe.{1, 1} Nat Real (Nat.castCoe.{0} Real Real.hasNatCast))) n) (Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x))) (Norm.norm.{u2} F _inst_2 (g x))) l)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g) (forall (n : Nat), Filter.Eventually.{u3} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (Nat.cast.{0} Real Real.natCast n) (Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x))) (Norm.norm.{u1} F _inst_2 (g x))) l)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff_nat_mul_le' Asymptotics.isLittleO_iff_nat_mul_le'ₓ'. -/
+theorem isLittleO_iff_nat_mul_le' : f' =o[l] g ↔ ∀ n : ℕ, ∀ᶠ x in l, ↑n * ‖f' x‖ ≤ ‖g x‖ :=
+ isLittleO_iff_nat_mul_le_aux (Or.inl fun x => norm_nonneg _)
+#align asymptotics.is_o_iff_nat_mul_le' Asymptotics.isLittleO_iff_nat_mul_le'
/-! ### Subsingleton -/
+/- warning: asymptotics.is_o_of_subsingleton -> Asymptotics.isLittleO_of_subsingleton is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : Subsingleton.{succ u2} E'], Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g'
+but is expected to have type
+ forall {α : Type.{u2}} {E' : Type.{u3}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u2} α} [_inst_14 : Subsingleton.{succ u3} E'], Asymptotics.IsLittleO.{u2, u3, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g'
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_of_subsingleton Asymptotics.isLittleO_of_subsingletonₓ'. -/
@[nontriviality]
-theorem isOCat_of_subsingleton [Subsingleton E'] : f' =o[l] g' :=
- IsOCat.of_bound fun c hc => by simp [Subsingleton.elim (f' _) 0, mul_nonneg hc.le]
-#align asymptotics.is_o_of_subsingleton Asymptotics.isOCat_of_subsingleton
-
+theorem isLittleO_of_subsingleton [Subsingleton E'] : f' =o[l] g' :=
+ IsLittleO.of_bound fun c hc => by simp [Subsingleton.elim (f' _) 0, mul_nonneg hc.le]
+#align asymptotics.is_o_of_subsingleton Asymptotics.isLittleO_of_subsingleton
+
+/- warning: asymptotics.is_O_of_subsingleton -> Asymptotics.isBigO_of_subsingleton is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : Subsingleton.{succ u2} E'], Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g'
+but is expected to have type
+ forall {α : Type.{u2}} {E' : Type.{u3}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u2} α} [_inst_14 : Subsingleton.{succ u3} E'], Asymptotics.IsBigO.{u2, u3, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g'
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_of_subsingleton Asymptotics.isBigO_of_subsingletonₓ'. -/
@[nontriviality]
-theorem isO_of_subsingleton [Subsingleton E'] : f' =O[l] g' :=
- isOCat_of_subsingleton.IsO
-#align asymptotics.is_O_of_subsingleton Asymptotics.isO_of_subsingleton
+theorem isBigO_of_subsingleton [Subsingleton E'] : f' =O[l] g' :=
+ isLittleO_of_subsingleton.IsBigO
+#align asymptotics.is_O_of_subsingleton Asymptotics.isBigO_of_subsingleton
section congr
@@ -289,159 +502,342 @@ variable {f₁ f₂ : α → E} {g₁ g₂ : α → F}
/-! ### Congruence -/
-theorem isOWith_congr (hc : c₁ = c₂) (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) :
- IsOWith c₁ l f₁ g₁ ↔ IsOWith c₂ l f₂ g₂ :=
+/- warning: asymptotics.is_O_with_congr -> Asymptotics.isBigOWith_congr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c₁ : Real} {c₂ : Real} {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Eq.{1} Real c₁ c₂) -> (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₁ l f₁ g₁) (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₂ l f₂ g₂))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c₁ : Real} {c₂ : Real} {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Eq.{1} Real c₁ c₂) -> (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₁ l f₁ g₁) (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₂ l f₂ g₂))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_congr Asymptotics.isBigOWith_congrₓ'. -/
+theorem isBigOWith_congr (hc : c₁ = c₂) (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) :
+ IsBigOWith c₁ l f₁ g₁ ↔ IsBigOWith c₂ l f₂ g₂ :=
by
unfold is_O_with
subst c₂
apply Filter.eventually_congr
filter_upwards [hf, hg]with _ e₁ e₂
rw [e₁, e₂]
-#align asymptotics.is_O_with_congr Asymptotics.isOWith_congr
-
-theorem IsOWith.congr' (h : IsOWith c₁ l f₁ g₁) (hc : c₁ = c₂) (hf : f₁ =ᶠ[l] f₂)
- (hg : g₁ =ᶠ[l] g₂) : IsOWith c₂ l f₂ g₂ :=
- (isOWith_congr hc hf hg).mp h
-#align asymptotics.is_O_with.congr' Asymptotics.IsOWith.congr'
-
-theorem IsOWith.congr (h : IsOWith c₁ l f₁ g₁) (hc : c₁ = c₂) (hf : ∀ x, f₁ x = f₂ x)
- (hg : ∀ x, g₁ x = g₂ x) : IsOWith c₂ l f₂ g₂ :=
+#align asymptotics.is_O_with_congr Asymptotics.isBigOWith_congr
+
+/- warning: asymptotics.is_O_with.congr' -> Asymptotics.IsBigOWith.congr' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c₁ : Real} {c₂ : Real} {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₁ l f₁ g₁) -> (Eq.{1} Real c₁ c₂) -> (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₂ l f₂ g₂)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c₁ : Real} {c₂ : Real} {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₁ l f₁ g₁) -> (Eq.{1} Real c₁ c₂) -> (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₂ l f₂ g₂)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.congr' Asymptotics.IsBigOWith.congr'ₓ'. -/
+theorem IsBigOWith.congr' (h : IsBigOWith c₁ l f₁ g₁) (hc : c₁ = c₂) (hf : f₁ =ᶠ[l] f₂)
+ (hg : g₁ =ᶠ[l] g₂) : IsBigOWith c₂ l f₂ g₂ :=
+ (isBigOWith_congr hc hf hg).mp h
+#align asymptotics.is_O_with.congr' Asymptotics.IsBigOWith.congr'
+
+/- warning: asymptotics.is_O_with.congr -> Asymptotics.IsBigOWith.congr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c₁ : Real} {c₂ : Real} {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₁ l f₁ g₁) -> (Eq.{1} Real c₁ c₂) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (forall (x : α), Eq.{succ u3} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₂ l f₂ g₂)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c₁ : Real} {c₂ : Real} {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₁ l f₁ g₁) -> (Eq.{1} Real c₁ c₂) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (forall (x : α), Eq.{succ u1} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₂ l f₂ g₂)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.congr Asymptotics.IsBigOWith.congrₓ'. -/
+theorem IsBigOWith.congr (h : IsBigOWith c₁ l f₁ g₁) (hc : c₁ = c₂) (hf : ∀ x, f₁ x = f₂ x)
+ (hg : ∀ x, g₁ x = g₂ x) : IsBigOWith c₂ l f₂ g₂ :=
h.congr' hc (univ_mem' hf) (univ_mem' hg)
-#align asymptotics.is_O_with.congr Asymptotics.IsOWith.congr
-
-theorem IsOWith.congr_left (h : IsOWith c l f₁ g) (hf : ∀ x, f₁ x = f₂ x) : IsOWith c l f₂ g :=
+#align asymptotics.is_O_with.congr Asymptotics.IsBigOWith.congr
+
+/- warning: asymptotics.is_O_with.congr_left -> Asymptotics.IsBigOWith.congr_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f₁ g) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f₂ g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f₁ g) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f₂ g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.congr_left Asymptotics.IsBigOWith.congr_leftₓ'. -/
+theorem IsBigOWith.congr_left (h : IsBigOWith c l f₁ g) (hf : ∀ x, f₁ x = f₂ x) :
+ IsBigOWith c l f₂ g :=
h.congr rfl hf fun _ => rfl
-#align asymptotics.is_O_with.congr_left Asymptotics.IsOWith.congr_left
-
-theorem IsOWith.congr_right (h : IsOWith c l f g₁) (hg : ∀ x, g₁ x = g₂ x) : IsOWith c l f g₂ :=
+#align asymptotics.is_O_with.congr_left Asymptotics.IsBigOWith.congr_left
+
+/- warning: asymptotics.is_O_with.congr_right -> Asymptotics.IsBigOWith.congr_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {l : Filter.{u1} α} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g₁) -> (forall (x : α), Eq.{succ u3} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g₂)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {l : Filter.{u3} α} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g₁) -> (forall (x : α), Eq.{succ u1} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g₂)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.congr_right Asymptotics.IsBigOWith.congr_rightₓ'. -/
+theorem IsBigOWith.congr_right (h : IsBigOWith c l f g₁) (hg : ∀ x, g₁ x = g₂ x) :
+ IsBigOWith c l f g₂ :=
h.congr rfl (fun _ => rfl) hg
-#align asymptotics.is_O_with.congr_right Asymptotics.IsOWith.congr_right
-
-theorem IsOWith.congr_const (h : IsOWith c₁ l f g) (hc : c₁ = c₂) : IsOWith c₂ l f g :=
+#align asymptotics.is_O_with.congr_right Asymptotics.IsBigOWith.congr_right
+
+/- warning: asymptotics.is_O_with.congr_const -> Asymptotics.IsBigOWith.congr_const is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c₁ : Real} {c₂ : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₁ l f g) -> (Eq.{1} Real c₁ c₂) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c₂ l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c₁ : Real} {c₂ : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₁ l f g) -> (Eq.{1} Real c₁ c₂) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c₂ l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.congr_const Asymptotics.IsBigOWith.congr_constₓ'. -/
+theorem IsBigOWith.congr_const (h : IsBigOWith c₁ l f g) (hc : c₁ = c₂) : IsBigOWith c₂ l f g :=
h.congr hc (fun _ => rfl) fun _ => rfl
-#align asymptotics.is_O_with.congr_const Asymptotics.IsOWith.congr_const
-
-theorem isO_congr (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₁ =O[l] g₁ ↔ f₂ =O[l] g₂ :=
+#align asymptotics.is_O_with.congr_const Asymptotics.IsBigOWith.congr_const
+
+/- warning: asymptotics.is_O_congr -> Asymptotics.isBigO_congr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g₁) (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g₂))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g₁) (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g₂))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_congr Asymptotics.isBigO_congrₓ'. -/
+theorem isBigO_congr (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₁ =O[l] g₁ ↔ f₂ =O[l] g₂ :=
by
unfold is_O
exact exists_congr fun c => is_O_with_congr rfl hf hg
-#align asymptotics.is_O_congr Asymptotics.isO_congr
-
-theorem IsO.congr' (h : f₁ =O[l] g₁) (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₂ =O[l] g₂ :=
- (isO_congr hf hg).mp h
-#align asymptotics.is_O.congr' Asymptotics.IsO.congr'
-
-theorem IsO.congr (h : f₁ =O[l] g₁) (hf : ∀ x, f₁ x = f₂ x) (hg : ∀ x, g₁ x = g₂ x) : f₂ =O[l] g₂ :=
+#align asymptotics.is_O_congr Asymptotics.isBigO_congr
+
+/- warning: asymptotics.is_O.congr' -> Asymptotics.IsBigO.congr' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g₁) -> (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g₂)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g₁) -> (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g₂)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.congr' Asymptotics.IsBigO.congr'ₓ'. -/
+theorem IsBigO.congr' (h : f₁ =O[l] g₁) (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₂ =O[l] g₂ :=
+ (isBigO_congr hf hg).mp h
+#align asymptotics.is_O.congr' Asymptotics.IsBigO.congr'
+
+/- warning: asymptotics.is_O.congr -> Asymptotics.IsBigO.congr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g₁) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (forall (x : α), Eq.{succ u3} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g₂)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g₁) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (forall (x : α), Eq.{succ u1} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g₂)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.congr Asymptotics.IsBigO.congrₓ'. -/
+theorem IsBigO.congr (h : f₁ =O[l] g₁) (hf : ∀ x, f₁ x = f₂ x) (hg : ∀ x, g₁ x = g₂ x) :
+ f₂ =O[l] g₂ :=
h.congr' (univ_mem' hf) (univ_mem' hg)
-#align asymptotics.is_O.congr Asymptotics.IsO.congr
-
-theorem IsO.congr_left (h : f₁ =O[l] g) (hf : ∀ x, f₁ x = f₂ x) : f₂ =O[l] g :=
+#align asymptotics.is_O.congr Asymptotics.IsBigO.congr
+
+/- warning: asymptotics.is_O.congr_left -> Asymptotics.IsBigO.congr_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.congr_left Asymptotics.IsBigO.congr_leftₓ'. -/
+theorem IsBigO.congr_left (h : f₁ =O[l] g) (hf : ∀ x, f₁ x = f₂ x) : f₂ =O[l] g :=
h.congr hf fun _ => rfl
-#align asymptotics.is_O.congr_left Asymptotics.IsO.congr_left
-
-theorem IsO.congr_right (h : f =O[l] g₁) (hg : ∀ x, g₁ x = g₂ x) : f =O[l] g₂ :=
+#align asymptotics.is_O.congr_left Asymptotics.IsBigO.congr_left
+
+/- warning: asymptotics.is_O.congr_right -> Asymptotics.IsBigO.congr_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₁) -> (forall (x : α), Eq.{succ u3} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₂)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₁) -> (forall (x : α), Eq.{succ u1} F (g₁ x) (g₂ x)) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₂)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.congr_right Asymptotics.IsBigO.congr_rightₓ'. -/
+theorem IsBigO.congr_right (h : f =O[l] g₁) (hg : ∀ x, g₁ x = g₂ x) : f =O[l] g₂ :=
h.congr (fun _ => rfl) hg
-#align asymptotics.is_O.congr_right Asymptotics.IsO.congr_right
-
-theorem isOCat_congr (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₁ =o[l] g₁ ↔ f₂ =o[l] g₂ :=
+#align asymptotics.is_O.congr_right Asymptotics.IsBigO.congr_right
+
+/- warning: asymptotics.is_o_congr -> Asymptotics.isLittleO_congr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g₁) (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g₂))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g₁) (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g₂))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_congr Asymptotics.isLittleO_congrₓ'. -/
+theorem isLittleO_congr (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₁ =o[l] g₁ ↔ f₂ =o[l] g₂ :=
by
unfold is_o
exact forall₂_congr fun c hc => is_O_with_congr (Eq.refl c) hf hg
-#align asymptotics.is_o_congr Asymptotics.isOCat_congr
-
-theorem IsOCat.congr' (h : f₁ =o[l] g₁) (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₂ =o[l] g₂ :=
- (isOCat_congr hf hg).mp h
-#align asymptotics.is_o.congr' Asymptotics.IsOCat.congr'
-
-theorem IsOCat.congr (h : f₁ =o[l] g₁) (hf : ∀ x, f₁ x = f₂ x) (hg : ∀ x, g₁ x = g₂ x) :
+#align asymptotics.is_o_congr Asymptotics.isLittleO_congr
+
+/- warning: asymptotics.is_o.congr' -> Asymptotics.IsLittleO.congr' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g₁) -> (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g₂)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g₁) -> (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g₂)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.congr' Asymptotics.IsLittleO.congr'ₓ'. -/
+theorem IsLittleO.congr' (h : f₁ =o[l] g₁) (hf : f₁ =ᶠ[l] f₂) (hg : g₁ =ᶠ[l] g₂) : f₂ =o[l] g₂ :=
+ (isLittleO_congr hf hg).mp h
+#align asymptotics.is_o.congr' Asymptotics.IsLittleO.congr'
+
+/- warning: asymptotics.is_o.congr -> Asymptotics.IsLittleO.congr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g₁) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (forall (x : α), Eq.{succ u3} F (g₁ x) (g₂ x)) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g₂)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g₁) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (forall (x : α), Eq.{succ u1} F (g₁ x) (g₂ x)) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g₂)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.congr Asymptotics.IsLittleO.congrₓ'. -/
+theorem IsLittleO.congr (h : f₁ =o[l] g₁) (hf : ∀ x, f₁ x = f₂ x) (hg : ∀ x, g₁ x = g₂ x) :
f₂ =o[l] g₂ :=
h.congr' (univ_mem' hf) (univ_mem' hg)
-#align asymptotics.is_o.congr Asymptotics.IsOCat.congr
-
-theorem IsOCat.congr_left (h : f₁ =o[l] g) (hf : ∀ x, f₁ x = f₂ x) : f₂ =o[l] g :=
+#align asymptotics.is_o.congr Asymptotics.IsLittleO.congr
+
+/- warning: asymptotics.is_o.congr_left -> Asymptotics.IsLittleO.congr_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g) -> (forall (x : α), Eq.{succ u2} E (f₁ x) (f₂ x)) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.congr_left Asymptotics.IsLittleO.congr_leftₓ'. -/
+theorem IsLittleO.congr_left (h : f₁ =o[l] g) (hf : ∀ x, f₁ x = f₂ x) : f₂ =o[l] g :=
h.congr hf fun _ => rfl
-#align asymptotics.is_o.congr_left Asymptotics.IsOCat.congr_left
-
-theorem IsOCat.congr_right (h : f =o[l] g₁) (hg : ∀ x, g₁ x = g₂ x) : f =o[l] g₂ :=
+#align asymptotics.is_o.congr_left Asymptotics.IsLittleO.congr_left
+
+/- warning: asymptotics.is_o.congr_right -> Asymptotics.IsLittleO.congr_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₁) -> (forall (x : α), Eq.{succ u3} F (g₁ x) (g₂ x)) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₂)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₁) -> (forall (x : α), Eq.{succ u1} F (g₁ x) (g₂ x)) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₂)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.congr_right Asymptotics.IsLittleO.congr_rightₓ'. -/
+theorem IsLittleO.congr_right (h : f =o[l] g₁) (hg : ∀ x, g₁ x = g₂ x) : f =o[l] g₂ :=
h.congr (fun _ => rfl) hg
-#align asymptotics.is_o.congr_right Asymptotics.IsOCat.congr_right
-
+#align asymptotics.is_o.congr_right Asymptotics.IsLittleO.congr_right
+
+/- warning: filter.eventually_eq.trans_is_O -> Filter.EventuallyEq.trans_isBigO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g : α -> F}, (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g : α -> F}, (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g)
+Case conversion may be inaccurate. Consider using '#align filter.eventually_eq.trans_is_O Filter.EventuallyEq.trans_isBigOₓ'. -/
@[trans]
-theorem Filter.EventuallyEq.trans_isO {f₁ f₂ : α → E} {g : α → F} (hf : f₁ =ᶠ[l] f₂)
+theorem Filter.EventuallyEq.trans_isBigO {f₁ f₂ : α → E} {g : α → F} (hf : f₁ =ᶠ[l] f₂)
(h : f₂ =O[l] g) : f₁ =O[l] g :=
h.congr' hf.symm EventuallyEq.rfl
-#align filter.eventually_eq.trans_is_O Filter.EventuallyEq.trans_isO
-
+#align filter.eventually_eq.trans_is_O Filter.EventuallyEq.trans_isBigO
+
+/- warning: filter.eventually_eq.trans_is_o -> Filter.EventuallyEq.trans_isLittleO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f₁ : α -> E} {f₂ : α -> E} {g : α -> F}, (Filter.EventuallyEq.{u1, u2} α E l f₁ f₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₂ g) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f₁ g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f₁ : α -> E} {f₂ : α -> E} {g : α -> F}, (Filter.EventuallyEq.{u3, u2} α E l f₁ f₂) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₂ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f₁ g)
+Case conversion may be inaccurate. Consider using '#align filter.eventually_eq.trans_is_o Filter.EventuallyEq.trans_isLittleOₓ'. -/
@[trans]
-theorem Filter.EventuallyEq.trans_isOCat {f₁ f₂ : α → E} {g : α → F} (hf : f₁ =ᶠ[l] f₂)
+theorem Filter.EventuallyEq.trans_isLittleO {f₁ f₂ : α → E} {g : α → F} (hf : f₁ =ᶠ[l] f₂)
(h : f₂ =o[l] g) : f₁ =o[l] g :=
h.congr' hf.symm EventuallyEq.rfl
-#align filter.eventually_eq.trans_is_o Filter.EventuallyEq.trans_isOCat
-
+#align filter.eventually_eq.trans_is_o Filter.EventuallyEq.trans_isLittleO
+
+/- warning: asymptotics.is_O.trans_eventually_eq -> Asymptotics.IsBigO.trans_eventuallyEq is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₁) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₂)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₁) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₂)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.trans_eventually_eq Asymptotics.IsBigO.trans_eventuallyEqₓ'. -/
@[trans]
-theorem IsO.trans_eventuallyEq {f : α → E} {g₁ g₂ : α → F} (h : f =O[l] g₁) (hg : g₁ =ᶠ[l] g₂) :
+theorem IsBigO.trans_eventuallyEq {f : α → E} {g₁ g₂ : α → F} (h : f =O[l] g₁) (hg : g₁ =ᶠ[l] g₂) :
f =O[l] g₂ :=
h.congr' EventuallyEq.rfl hg
-#align asymptotics.is_O.trans_eventually_eq Asymptotics.IsO.trans_eventuallyEq
-
+#align asymptotics.is_O.trans_eventually_eq Asymptotics.IsBigO.trans_eventuallyEq
+
+/- warning: asymptotics.is_o.trans_eventually_eq -> Asymptotics.IsLittleO.trans_eventuallyEq is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {l : Filter.{u1} α} {f : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₁) -> (Filter.EventuallyEq.{u1, u3} α F l g₁ g₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g₂)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {l : Filter.{u3} α} {f : α -> E} {g₁ : α -> F} {g₂ : α -> F}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₁) -> (Filter.EventuallyEq.{u3, u1} α F l g₁ g₂) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g₂)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.trans_eventually_eq Asymptotics.IsLittleO.trans_eventuallyEqₓ'. -/
@[trans]
-theorem IsOCat.trans_eventuallyEq {f : α → E} {g₁ g₂ : α → F} (h : f =o[l] g₁) (hg : g₁ =ᶠ[l] g₂) :
- f =o[l] g₂ :=
+theorem IsLittleO.trans_eventuallyEq {f : α → E} {g₁ g₂ : α → F} (h : f =o[l] g₁)
+ (hg : g₁ =ᶠ[l] g₂) : f =o[l] g₂ :=
h.congr' EventuallyEq.rfl hg
-#align asymptotics.is_o.trans_eventually_eq Asymptotics.IsOCat.trans_eventuallyEq
+#align asymptotics.is_o.trans_eventually_eq Asymptotics.IsLittleO.trans_eventuallyEq
end congr
/-! ### Filter operations and transitivity -/
-theorem IsOWith.comp_tendsto (hcfg : IsOWith c l f g) {k : β → α} {l' : Filter β}
- (hk : Tendsto k l' l) : IsOWith c l' (f ∘ k) (g ∘ k) :=
- IsOWith.of_bound <| hk hcfg.bound
-#align asymptotics.is_O_with.comp_tendsto Asymptotics.IsOWith.comp_tendsto
-
-theorem IsO.comp_tendsto (hfg : f =O[l] g) {k : β → α} {l' : Filter β} (hk : Tendsto k l' l) :
+/- warning: asymptotics.is_O_with.comp_tendsto -> Asymptotics.IsBigOWith.comp_tendsto is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} {E : Type.{u3}} {F : Type.{u4}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u4} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u3, u4} α E F _inst_1 _inst_2 c l f g) -> (forall {k : β -> α} {l' : Filter.{u2} β}, (Filter.Tendsto.{u2, u1} β α k l' l) -> (Asymptotics.IsBigOWith.{u2, u3, u4} β E F _inst_1 _inst_2 c l' (Function.comp.{succ u2, succ u1, succ u3} β α E f k) (Function.comp.{succ u2, succ u1, succ u4} β α F g k)))
+but is expected to have type
+ forall {α : Type.{u4}} {β : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E F _inst_1 _inst_2 c l f g) -> (forall {k : β -> α} {l' : Filter.{u1} β}, (Filter.Tendsto.{u1, u4} β α k l' l) -> (Asymptotics.IsBigOWith.{u1, u3, u2} β E F _inst_1 _inst_2 c l' (Function.comp.{succ u1, succ u4, succ u3} β α E f k) (Function.comp.{succ u1, succ u4, succ u2} β α F g k)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.comp_tendsto Asymptotics.IsBigOWith.comp_tendstoₓ'. -/
+theorem IsBigOWith.comp_tendsto (hcfg : IsBigOWith c l f g) {k : β → α} {l' : Filter β}
+ (hk : Tendsto k l' l) : IsBigOWith c l' (f ∘ k) (g ∘ k) :=
+ IsBigOWith.of_bound <| hk hcfg.bound
+#align asymptotics.is_O_with.comp_tendsto Asymptotics.IsBigOWith.comp_tendsto
+
+/- warning: asymptotics.is_O.comp_tendsto -> Asymptotics.IsBigO.comp_tendsto is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} {E : Type.{u3}} {F : Type.{u4}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u4} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u3, u4} α E F _inst_1 _inst_2 l f g) -> (forall {k : β -> α} {l' : Filter.{u2} β}, (Filter.Tendsto.{u2, u1} β α k l' l) -> (Asymptotics.IsBigO.{u2, u3, u4} β E F _inst_1 _inst_2 l' (Function.comp.{succ u2, succ u1, succ u3} β α E f k) (Function.comp.{succ u2, succ u1, succ u4} β α F g k)))
+but is expected to have type
+ forall {α : Type.{u4}} {β : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {f : α -> E} {g : α -> F} {l : Filter.{u4} α}, (Asymptotics.IsBigO.{u4, u3, u2} α E F _inst_1 _inst_2 l f g) -> (forall {k : β -> α} {l' : Filter.{u1} β}, (Filter.Tendsto.{u1, u4} β α k l' l) -> (Asymptotics.IsBigO.{u1, u3, u2} β E F _inst_1 _inst_2 l' (Function.comp.{succ u1, succ u4, succ u3} β α E f k) (Function.comp.{succ u1, succ u4, succ u2} β α F g k)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.comp_tendsto Asymptotics.IsBigO.comp_tendstoₓ'. -/
+theorem IsBigO.comp_tendsto (hfg : f =O[l] g) {k : β → α} {l' : Filter β} (hk : Tendsto k l' l) :
(f ∘ k) =O[l'] (g ∘ k) :=
- isO_iff_isOWith.2 <| hfg.IsOWith.imp fun c h => h.comp_tendsto hk
-#align asymptotics.is_O.comp_tendsto Asymptotics.IsO.comp_tendsto
-
-theorem IsOCat.comp_tendsto (hfg : f =o[l] g) {k : β → α} {l' : Filter β} (hk : Tendsto k l' l) :
+ isBigO_iff_isBigOWith.2 <| hfg.IsBigOWith.imp fun c h => h.comp_tendsto hk
+#align asymptotics.is_O.comp_tendsto Asymptotics.IsBigO.comp_tendsto
+
+/- warning: asymptotics.is_o.comp_tendsto -> Asymptotics.IsLittleO.comp_tendsto is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} {E : Type.{u3}} {F : Type.{u4}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u4} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u3, u4} α E F _inst_1 _inst_2 l f g) -> (forall {k : β -> α} {l' : Filter.{u2} β}, (Filter.Tendsto.{u2, u1} β α k l' l) -> (Asymptotics.IsLittleO.{u2, u3, u4} β E F _inst_1 _inst_2 l' (Function.comp.{succ u2, succ u1, succ u3} β α E f k) (Function.comp.{succ u2, succ u1, succ u4} β α F g k)))
+but is expected to have type
+ forall {α : Type.{u4}} {β : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {f : α -> E} {g : α -> F} {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, u3, u2} α E F _inst_1 _inst_2 l f g) -> (forall {k : β -> α} {l' : Filter.{u1} β}, (Filter.Tendsto.{u1, u4} β α k l' l) -> (Asymptotics.IsLittleO.{u1, u3, u2} β E F _inst_1 _inst_2 l' (Function.comp.{succ u1, succ u4, succ u3} β α E f k) (Function.comp.{succ u1, succ u4, succ u2} β α F g k)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.comp_tendsto Asymptotics.IsLittleO.comp_tendstoₓ'. -/
+theorem IsLittleO.comp_tendsto (hfg : f =o[l] g) {k : β → α} {l' : Filter β} (hk : Tendsto k l' l) :
(f ∘ k) =o[l'] (g ∘ k) :=
- IsOCat.of_isOWith fun c cpos => (hfg.forall_isOWith cpos).comp_tendsto hk
-#align asymptotics.is_o.comp_tendsto Asymptotics.IsOCat.comp_tendsto
-
+ IsLittleO.of_isBigOWith fun c cpos => (hfg.forall_isBigOWith cpos).comp_tendsto hk
+#align asymptotics.is_o.comp_tendsto Asymptotics.IsLittleO.comp_tendsto
+
+/- warning: asymptotics.is_O_with_map -> Asymptotics.isBigOWith_map is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} {E : Type.{u3}} {F : Type.{u4}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u4} F] {c : Real} {f : α -> E} {g : α -> F} {k : β -> α} {l : Filter.{u2} β}, Iff (Asymptotics.IsBigOWith.{u1, u3, u4} α E F _inst_1 _inst_2 c (Filter.map.{u2, u1} β α k l) f g) (Asymptotics.IsBigOWith.{u2, u3, u4} β E F _inst_1 _inst_2 c l (Function.comp.{succ u2, succ u1, succ u3} β α E f k) (Function.comp.{succ u2, succ u1, succ u4} β α F g k))
+but is expected to have type
+ forall {α : Type.{u3}} {β : Type.{u4}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {k : β -> α} {l : Filter.{u4} β}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c (Filter.map.{u4, u3} β α k l) f g) (Asymptotics.IsBigOWith.{u4, u2, u1} β E F _inst_1 _inst_2 c l (Function.comp.{succ u4, succ u3, succ u2} β α E f k) (Function.comp.{succ u4, succ u3, succ u1} β α F g k))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_map Asymptotics.isBigOWith_mapₓ'. -/
@[simp]
-theorem isOWith_map {k : β → α} {l : Filter β} :
- IsOWith c (map k l) f g ↔ IsOWith c l (f ∘ k) (g ∘ k) :=
+theorem isBigOWith_map {k : β → α} {l : Filter β} :
+ IsBigOWith c (map k l) f g ↔ IsBigOWith c l (f ∘ k) (g ∘ k) :=
by
unfold is_O_with
exact eventually_map
-#align asymptotics.is_O_with_map Asymptotics.isOWith_map
-
+#align asymptotics.is_O_with_map Asymptotics.isBigOWith_map
+
+/- warning: asymptotics.is_O_map -> Asymptotics.isBigO_map is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} {E : Type.{u3}} {F : Type.{u4}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u4} F] {f : α -> E} {g : α -> F} {k : β -> α} {l : Filter.{u2} β}, Iff (Asymptotics.IsBigO.{u1, u3, u4} α E F _inst_1 _inst_2 (Filter.map.{u2, u1} β α k l) f g) (Asymptotics.IsBigO.{u2, u3, u4} β E F _inst_1 _inst_2 l (Function.comp.{succ u2, succ u1, succ u3} β α E f k) (Function.comp.{succ u2, succ u1, succ u4} β α F g k))
+but is expected to have type
+ forall {α : Type.{u3}} {β : Type.{u4}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {k : β -> α} {l : Filter.{u4} β}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 (Filter.map.{u4, u3} β α k l) f g) (Asymptotics.IsBigO.{u4, u2, u1} β E F _inst_1 _inst_2 l (Function.comp.{succ u4, succ u3, succ u2} β α E f k) (Function.comp.{succ u4, succ u3, succ u1} β α F g k))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_map Asymptotics.isBigO_mapₓ'. -/
@[simp]
-theorem isO_map {k : β → α} {l : Filter β} : f =O[map k l] g ↔ (f ∘ k) =O[l] (g ∘ k) := by
+theorem isBigO_map {k : β → α} {l : Filter β} : f =O[map k l] g ↔ (f ∘ k) =O[l] (g ∘ k) := by
simp only [is_O, is_O_with_map]
-#align asymptotics.is_O_map Asymptotics.isO_map
-
+#align asymptotics.is_O_map Asymptotics.isBigO_map
+
+/- warning: asymptotics.is_o_map -> Asymptotics.isLittleO_map is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} {E : Type.{u3}} {F : Type.{u4}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u4} F] {f : α -> E} {g : α -> F} {k : β -> α} {l : Filter.{u2} β}, Iff (Asymptotics.IsLittleO.{u1, u3, u4} α E F _inst_1 _inst_2 (Filter.map.{u2, u1} β α k l) f g) (Asymptotics.IsLittleO.{u2, u3, u4} β E F _inst_1 _inst_2 l (Function.comp.{succ u2, succ u1, succ u3} β α E f k) (Function.comp.{succ u2, succ u1, succ u4} β α F g k))
+but is expected to have type
+ forall {α : Type.{u3}} {β : Type.{u4}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {k : β -> α} {l : Filter.{u4} β}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 (Filter.map.{u4, u3} β α k l) f g) (Asymptotics.IsLittleO.{u4, u2, u1} β E F _inst_1 _inst_2 l (Function.comp.{succ u4, succ u3, succ u2} β α E f k) (Function.comp.{succ u4, succ u3, succ u1} β α F g k))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_map Asymptotics.isLittleO_mapₓ'. -/
@[simp]
-theorem isOCat_map {k : β → α} {l : Filter β} : f =o[map k l] g ↔ (f ∘ k) =o[l] (g ∘ k) := by
+theorem isLittleO_map {k : β → α} {l : Filter β} : f =o[map k l] g ↔ (f ∘ k) =o[l] (g ∘ k) := by
simp only [is_o, is_O_with_map]
-#align asymptotics.is_o_map Asymptotics.isOCat_map
-
-theorem IsOWith.mono (h : IsOWith c l' f g) (hl : l ≤ l') : IsOWith c l f g :=
- IsOWith.of_bound <| hl h.bound
-#align asymptotics.is_O_with.mono Asymptotics.IsOWith.mono
-
-theorem IsO.mono (h : f =O[l'] g) (hl : l ≤ l') : f =O[l] g :=
- isO_iff_isOWith.2 <| h.IsOWith.imp fun c h => h.mono hl
-#align asymptotics.is_O.mono Asymptotics.IsO.mono
-
-theorem IsOCat.mono (h : f =o[l'] g) (hl : l ≤ l') : f =o[l] g :=
- IsOCat.of_isOWith fun c cpos => (h.forall_isOWith cpos).mono hl
-#align asymptotics.is_o.mono Asymptotics.IsOCat.mono
-
-theorem IsOWith.trans (hfg : IsOWith c l f g) (hgk : IsOWith c' l g k) (hc : 0 ≤ c) :
- IsOWith (c * c') l f k := by
+#align asymptotics.is_o_map Asymptotics.isLittleO_map
+
+/- warning: asymptotics.is_O_with.mono -> Asymptotics.IsBigOWith.mono is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l' f g) -> (LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) l l') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l' f g) -> (LE.le.{u3} (Filter.{u3} α) (Preorder.toLE.{u3} (Filter.{u3} α) (PartialOrder.toPreorder.{u3} (Filter.{u3} α) (Filter.instPartialOrderFilter.{u3} α))) l l') -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.mono Asymptotics.IsBigOWith.monoₓ'. -/
+theorem IsBigOWith.mono (h : IsBigOWith c l' f g) (hl : l ≤ l') : IsBigOWith c l f g :=
+ IsBigOWith.of_bound <| hl h.bound
+#align asymptotics.is_O_with.mono Asymptotics.IsBigOWith.mono
+
+/- warning: asymptotics.is_O.mono -> Asymptotics.IsBigO.mono is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l' f g) -> (LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) l l') -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l' f g) -> (LE.le.{u3} (Filter.{u3} α) (Preorder.toLE.{u3} (Filter.{u3} α) (PartialOrder.toPreorder.{u3} (Filter.{u3} α) (Filter.instPartialOrderFilter.{u3} α))) l l') -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.mono Asymptotics.IsBigO.monoₓ'. -/
+theorem IsBigO.mono (h : f =O[l'] g) (hl : l ≤ l') : f =O[l] g :=
+ isBigO_iff_isBigOWith.2 <| h.IsBigOWith.imp fun c h => h.mono hl
+#align asymptotics.is_O.mono Asymptotics.IsBigO.mono
+
+/- warning: asymptotics.is_o.mono -> Asymptotics.IsLittleO.mono is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l' f g) -> (LE.le.{u1} (Filter.{u1} α) (Preorder.toLE.{u1} (Filter.{u1} α) (PartialOrder.toPreorder.{u1} (Filter.{u1} α) (Filter.partialOrder.{u1} α))) l l') -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l' f g) -> (LE.le.{u3} (Filter.{u3} α) (Preorder.toLE.{u3} (Filter.{u3} α) (PartialOrder.toPreorder.{u3} (Filter.{u3} α) (Filter.instPartialOrderFilter.{u3} α))) l l') -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.mono Asymptotics.IsLittleO.monoₓ'. -/
+theorem IsLittleO.mono (h : f =o[l'] g) (hl : l ≤ l') : f =o[l] g :=
+ IsLittleO.of_isBigOWith fun c cpos => (h.forall_isBigOWith cpos).mono hl
+#align asymptotics.is_o.mono Asymptotics.IsLittleO.mono
+
+/- warning: asymptotics.is_O_with.trans -> Asymptotics.IsBigOWith.trans is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} {G : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_3 : Norm.{u4} G] {c : Real} {c' : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsBigOWith.{u1, u3, u4} α F G _inst_2 _inst_3 c' l g k) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, u4} α E G _inst_1 _inst_3 (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c c') l f k)
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {F : Type.{u2}} {G : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] [_inst_3 : Norm.{u1} G] {c : Real} {c' : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsBigOWith.{u4, u2, u1} α F G _inst_2 _inst_3 c' l g k) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u4, u3, u1} α E G _inst_1 _inst_3 (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c c') l f k)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.trans Asymptotics.IsBigOWith.transₓ'. -/
+theorem IsBigOWith.trans (hfg : IsBigOWith c l f g) (hgk : IsBigOWith c' l g k) (hc : 0 ≤ c) :
+ IsBigOWith (c * c') l f k := by
unfold is_O_with at *
filter_upwards [hfg, hgk]with x hx hx'
calc
@@ -449,194 +845,400 @@ theorem IsOWith.trans (hfg : IsOWith c l f g) (hgk : IsOWith c' l g k) (hc : 0
_ ≤ c * (c' * ‖k x‖) := (mul_le_mul_of_nonneg_left hx' hc)
_ = c * c' * ‖k x‖ := (mul_assoc _ _ _).symm
-#align asymptotics.is_O_with.trans Asymptotics.IsOWith.trans
-
+#align asymptotics.is_O_with.trans Asymptotics.IsBigOWith.trans
+
+/- warning: asymptotics.is_O.trans -> Asymptotics.IsBigO.trans is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {G : Type.{u3}} {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_3 : Norm.{u3} G] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {l : Filter.{u1} α} {f : α -> E} {g : α -> F'} {k : α -> G}, (Asymptotics.IsBigO.{u1, u2, u4} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) l f g) -> (Asymptotics.IsBigO.{u1, u4, u3} α F' G (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) _inst_3 l g k) -> (Asymptotics.IsBigO.{u1, u2, u3} α E G _inst_1 _inst_3 l f k)
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {G : Type.{u1}} {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_3 : Norm.{u1} G] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {l : Filter.{u4} α} {f : α -> E} {g : α -> F'} {k : α -> G}, (Asymptotics.IsBigO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g) -> (Asymptotics.IsBigO.{u4, u2, u1} α F' G (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) _inst_3 l g k) -> (Asymptotics.IsBigO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.trans Asymptotics.IsBigO.transₓ'. -/
@[trans]
-theorem IsO.trans {f : α → E} {g : α → F'} {k : α → G} (hfg : f =O[l] g) (hgk : g =O[l] k) :
+theorem IsBigO.trans {f : α → E} {g : α → F'} {k : α → G} (hfg : f =O[l] g) (hgk : g =O[l] k) :
f =O[l] k :=
let ⟨c, cnonneg, hc⟩ := hfg.exists_nonneg
- let ⟨c', hc'⟩ := hgk.IsOWith
- (hc.trans hc' cnonneg).IsO
-#align asymptotics.is_O.trans Asymptotics.IsO.trans
-
-theorem IsOCat.trans_isOWith (hfg : f =o[l] g) (hgk : IsOWith c l g k) (hc : 0 < c) : f =o[l] k :=
- by
+ let ⟨c', hc'⟩ := hgk.IsBigOWith
+ (hc.trans hc' cnonneg).IsBigO
+#align asymptotics.is_O.trans Asymptotics.IsBigO.trans
+
+/- warning: asymptotics.is_o.trans_is_O_with -> Asymptotics.IsLittleO.trans_isBigOWith is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} {G : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_3 : Norm.{u4} G] {c : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigOWith.{u1, u3, u4} α F G _inst_2 _inst_3 c l g k) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsLittleO.{u1, u2, u4} α E G _inst_1 _inst_3 l f k)
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {F : Type.{u2}} {G : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] [_inst_3 : Norm.{u1} G] {c : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, u3, u2} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigOWith.{u4, u2, u1} α F G _inst_2 _inst_3 c l g k) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsLittleO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.trans_is_O_with Asymptotics.IsLittleO.trans_isBigOWithₓ'. -/
+theorem IsLittleO.trans_isBigOWith (hfg : f =o[l] g) (hgk : IsBigOWith c l g k) (hc : 0 < c) :
+ f =o[l] k := by
unfold is_o at *
intro c' c'pos
have : 0 < c' / c := div_pos c'pos hc
exact ((hfg this).trans hgk this.le).congr_const (div_mul_cancel _ hc.ne')
-#align asymptotics.is_o.trans_is_O_with Asymptotics.IsOCat.trans_isOWith
-
+#align asymptotics.is_o.trans_is_O_with Asymptotics.IsLittleO.trans_isBigOWith
+
+/- warning: asymptotics.is_o.trans_is_O -> Asymptotics.IsLittleO.trans_isBigO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} {G' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {l : Filter.{u1} α} {f : α -> E} {g : α -> F} {k : α -> G'}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigO.{u1, u3, u4} α F G' _inst_2 (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l g k) -> (Asymptotics.IsLittleO.{u1, u2, u4} α E G' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l f k)
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {F : Type.{u2}} {G' : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {l : Filter.{u4} α} {f : α -> E} {g : α -> F} {k : α -> G'}, (Asymptotics.IsLittleO.{u4, u3, u2} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsBigO.{u4, u2, u1} α F G' _inst_2 (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l g k) -> (Asymptotics.IsLittleO.{u4, u3, u1} α E G' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l f k)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.trans_is_O Asymptotics.IsLittleO.trans_isBigOₓ'. -/
@[trans]
-theorem IsOCat.trans_isO {f : α → E} {g : α → F} {k : α → G'} (hfg : f =o[l] g) (hgk : g =O[l] k) :
- f =o[l] k :=
+theorem IsLittleO.trans_isBigO {f : α → E} {g : α → F} {k : α → G'} (hfg : f =o[l] g)
+ (hgk : g =O[l] k) : f =o[l] k :=
let ⟨c, cpos, hc⟩ := hgk.exists_pos
- hfg.trans_isOWith hc cpos
-#align asymptotics.is_o.trans_is_O Asymptotics.IsOCat.trans_isO
-
-theorem IsOWith.trans_isOCat (hfg : IsOWith c l f g) (hgk : g =o[l] k) (hc : 0 < c) : f =o[l] k :=
- by
+ hfg.trans_isBigOWith hc cpos
+#align asymptotics.is_o.trans_is_O Asymptotics.IsLittleO.trans_isBigO
+
+/- warning: asymptotics.is_O_with.trans_is_o -> Asymptotics.IsBigOWith.trans_isLittleO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} {G : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_3 : Norm.{u4} G] {c : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsLittleO.{u1, u3, u4} α F G _inst_2 _inst_3 l g k) -> (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsLittleO.{u1, u2, u4} α E G _inst_1 _inst_3 l f k)
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {F : Type.{u2}} {G : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] [_inst_3 : Norm.{u1} G] {c : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsLittleO.{u4, u2, u1} α F G _inst_2 _inst_3 l g k) -> (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsLittleO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.trans_is_o Asymptotics.IsBigOWith.trans_isLittleOₓ'. -/
+theorem IsBigOWith.trans_isLittleO (hfg : IsBigOWith c l f g) (hgk : g =o[l] k) (hc : 0 < c) :
+ f =o[l] k := by
unfold is_o at *
intro c' c'pos
have : 0 < c' / c := div_pos c'pos hc
exact (hfg.trans (hgk this) hc.le).congr_const (mul_div_cancel' _ hc.ne')
-#align asymptotics.is_O_with.trans_is_o Asymptotics.IsOWith.trans_isOCat
-
+#align asymptotics.is_O_with.trans_is_o Asymptotics.IsBigOWith.trans_isLittleO
+
+/- warning: asymptotics.is_O.trans_is_o -> Asymptotics.IsBigO.trans_isLittleO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {G : Type.{u3}} {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_3 : Norm.{u3} G] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {l : Filter.{u1} α} {f : α -> E} {g : α -> F'} {k : α -> G}, (Asymptotics.IsBigO.{u1, u2, u4} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) l f g) -> (Asymptotics.IsLittleO.{u1, u4, u3} α F' G (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) _inst_3 l g k) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E G _inst_1 _inst_3 l f k)
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {G : Type.{u1}} {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_3 : Norm.{u1} G] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {l : Filter.{u4} α} {f : α -> E} {g : α -> F'} {k : α -> G}, (Asymptotics.IsBigO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g) -> (Asymptotics.IsLittleO.{u4, u2, u1} α F' G (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) _inst_3 l g k) -> (Asymptotics.IsLittleO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.trans_is_o Asymptotics.IsBigO.trans_isLittleOₓ'. -/
@[trans]
-theorem IsO.trans_isOCat {f : α → E} {g : α → F'} {k : α → G} (hfg : f =O[l] g) (hgk : g =o[l] k) :
- f =o[l] k :=
+theorem IsBigO.trans_isLittleO {f : α → E} {g : α → F'} {k : α → G} (hfg : f =O[l] g)
+ (hgk : g =o[l] k) : f =o[l] k :=
let ⟨c, cpos, hc⟩ := hfg.exists_pos
- hc.trans_isOCat hgk cpos
-#align asymptotics.is_O.trans_is_o Asymptotics.IsO.trans_isOCat
-
+ hc.trans_isLittleO hgk cpos
+#align asymptotics.is_O.trans_is_o Asymptotics.IsBigO.trans_isLittleO
+
+/- warning: asymptotics.is_o.trans -> Asymptotics.IsLittleO.trans is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} {G : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_3 : Norm.{u4} G] {l : Filter.{u1} α} {f : α -> E} {g : α -> F} {k : α -> G}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsLittleO.{u1, u3, u4} α F G _inst_2 _inst_3 l g k) -> (Asymptotics.IsLittleO.{u1, u2, u4} α E G _inst_1 _inst_3 l f k)
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {F : Type.{u2}} {G : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] [_inst_3 : Norm.{u1} G] {l : Filter.{u4} α} {f : α -> E} {g : α -> F} {k : α -> G}, (Asymptotics.IsLittleO.{u4, u3, u2} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsLittleO.{u4, u2, u1} α F G _inst_2 _inst_3 l g k) -> (Asymptotics.IsLittleO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.trans Asymptotics.IsLittleO.transₓ'. -/
@[trans]
-theorem IsOCat.trans {f : α → E} {g : α → F} {k : α → G} (hfg : f =o[l] g) (hgk : g =o[l] k) :
+theorem IsLittleO.trans {f : α → E} {g : α → F} {k : α → G} (hfg : f =o[l] g) (hgk : g =o[l] k) :
f =o[l] k :=
- hfg.trans_isOWith hgk.IsOWith one_pos
-#align asymptotics.is_o.trans Asymptotics.IsOCat.trans
-
-theorem Filter.Eventually.trans_isO {f : α → E} {g : α → F'} {k : α → G}
+ hfg.trans_isBigOWith hgk.IsBigOWith one_pos
+#align asymptotics.is_o.trans Asymptotics.IsLittleO.trans
+
+/- warning: filter.eventually.trans_is_O -> Filter.Eventually.trans_isBigO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {G : Type.{u3}} {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_3 : Norm.{u3} G] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {l : Filter.{u1} α} {f : α -> E} {g : α -> F'} {k : α -> G}, (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (Norm.norm.{u4} F' (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) (g x))) l) -> (Asymptotics.IsBigO.{u1, u4, u3} α F' G (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) _inst_3 l g k) -> (Asymptotics.IsBigO.{u1, u2, u3} α E G _inst_1 _inst_3 l f k)
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {G : Type.{u1}} {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_3 : Norm.{u1} G] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {l : Filter.{u4} α} {f : α -> E} {g : α -> F'} {k : α -> G}, (Filter.Eventually.{u4} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u3} E _inst_1 (f x)) (Norm.norm.{u2} F' (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (g x))) l) -> (Asymptotics.IsBigO.{u4, u2, u1} α F' G (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) _inst_3 l g k) -> (Asymptotics.IsBigO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
+Case conversion may be inaccurate. Consider using '#align filter.eventually.trans_is_O Filter.Eventually.trans_isBigOₓ'. -/
+theorem Filter.Eventually.trans_isBigO {f : α → E} {g : α → F'} {k : α → G}
(hfg : ∀ᶠ x in l, ‖f x‖ ≤ ‖g x‖) (hgk : g =O[l] k) : f =O[l] k :=
- (IsO.of_bound' hfg).trans hgk
-#align filter.eventually.trans_is_O Filter.Eventually.trans_isO
-
-theorem Filter.Eventually.isO {f : α → E} {g : α → ℝ} {l : Filter α}
+ (IsBigO.of_bound' hfg).trans hgk
+#align filter.eventually.trans_is_O Filter.Eventually.trans_isBigO
+
+/- warning: filter.eventually.is_O -> Filter.Eventually.isBigO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {f : α -> E} {g : α -> Real} {l : Filter.{u1} α}, (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (g x)) l) -> (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f g)
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {f : α -> E} {g : α -> Real} {l : Filter.{u2} α}, (Filter.Eventually.{u2} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} E _inst_1 (f x)) (g x)) l) -> (Asymptotics.IsBigO.{u2, u1, 0} α E Real _inst_1 Real.norm l f g)
+Case conversion may be inaccurate. Consider using '#align filter.eventually.is_O Filter.Eventually.isBigOₓ'. -/
+theorem Filter.Eventually.isBigO {f : α → E} {g : α → ℝ} {l : Filter α}
(hfg : ∀ᶠ x in l, ‖f x‖ ≤ g x) : f =O[l] g :=
- IsO.of_bound' <| hfg.mono fun x hx => hx.trans <| Real.le_norm_self _
-#align filter.eventually.is_O Filter.Eventually.isO
+ IsBigO.of_bound' <| hfg.mono fun x hx => hx.trans <| Real.le_norm_self _
+#align filter.eventually.is_O Filter.Eventually.isBigO
section
variable (l)
-theorem isOWith_of_le' (hfg : ∀ x, ‖f x‖ ≤ c * ‖g x‖) : IsOWith c l f g :=
- IsOWith.of_bound <| univ_mem' hfg
-#align asymptotics.is_O_with_of_le' Asymptotics.isOWith_of_le'
-
-theorem isOWith_of_le (hfg : ∀ x, ‖f x‖ ≤ ‖g x‖) : IsOWith 1 l f g :=
- isOWith_of_le' l fun x => by
+/- warning: asymptotics.is_O_with_of_le' -> Asymptotics.isBigOWith_of_le' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g)
+but is expected to have type
+ forall {α : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {c : Real} {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u3} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u2} F _inst_2 (g x)))) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E F _inst_1 _inst_2 c l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_of_le' Asymptotics.isBigOWith_of_le'ₓ'. -/
+theorem isBigOWith_of_le' (hfg : ∀ x, ‖f x‖ ≤ c * ‖g x‖) : IsBigOWith c l f g :=
+ IsBigOWith.of_bound <| univ_mem' hfg
+#align asymptotics.is_O_with_of_le' Asymptotics.isBigOWith_of_le'
+
+/- warning: asymptotics.is_O_with_of_le -> Asymptotics.isBigOWith_of_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (Norm.norm.{u3} F _inst_2 (g x))) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) l f g)
+but is expected to have type
+ forall {α : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u3} E _inst_1 (f x)) (Norm.norm.{u2} F _inst_2 (g x))) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E F _inst_1 _inst_2 (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_of_le Asymptotics.isBigOWith_of_leₓ'. -/
+theorem isBigOWith_of_le (hfg : ∀ x, ‖f x‖ ≤ ‖g x‖) : IsBigOWith 1 l f g :=
+ isBigOWith_of_le' l fun x => by
rw [one_mul]
exact hfg x
-#align asymptotics.is_O_with_of_le Asymptotics.isOWith_of_le
-
-theorem isO_of_le' (hfg : ∀ x, ‖f x‖ ≤ c * ‖g x‖) : f =O[l] g :=
- (isOWith_of_le' l hfg).IsO
-#align asymptotics.is_O_of_le' Asymptotics.isO_of_le'
-
-theorem isO_of_le (hfg : ∀ x, ‖f x‖ ≤ ‖g x‖) : f =O[l] g :=
- (isOWith_of_le l hfg).IsO
-#align asymptotics.is_O_of_le Asymptotics.isO_of_le
+#align asymptotics.is_O_with_of_le Asymptotics.isBigOWith_of_le
+
+/- warning: asymptotics.is_O_of_le' -> Asymptotics.isBigO_of_le' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
+but is expected to have type
+ forall {α : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {c : Real} {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u3} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u2} F _inst_2 (g x)))) -> (Asymptotics.IsBigO.{u1, u3, u2} α E F _inst_1 _inst_2 l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_of_le' Asymptotics.isBigO_of_le'ₓ'. -/
+theorem isBigO_of_le' (hfg : ∀ x, ‖f x‖ ≤ c * ‖g x‖) : f =O[l] g :=
+ (isBigOWith_of_le' l hfg).IsBigO
+#align asymptotics.is_O_of_le' Asymptotics.isBigO_of_le'
+
+/- warning: asymptotics.is_O_of_le -> Asymptotics.isBigO_of_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (Norm.norm.{u3} F _inst_2 (g x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g)
+but is expected to have type
+ forall {α : Type.{u1}} {E : Type.{u3}} {F : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] {f : α -> E} {g : α -> F} (l : Filter.{u1} α), (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u3} E _inst_1 (f x)) (Norm.norm.{u2} F _inst_2 (g x))) -> (Asymptotics.IsBigO.{u1, u3, u2} α E F _inst_1 _inst_2 l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_of_le Asymptotics.isBigO_of_leₓ'. -/
+theorem isBigO_of_le (hfg : ∀ x, ‖f x‖ ≤ ‖g x‖) : f =O[l] g :=
+ (isBigOWith_of_le l hfg).IsBigO
+#align asymptotics.is_O_of_le Asymptotics.isBigO_of_le
end
-theorem isOWith_refl (f : α → E) (l : Filter α) : IsOWith 1 l f f :=
- isOWith_of_le l fun _ => le_rfl
-#align asymptotics.is_O_with_refl Asymptotics.isOWith_refl
-
-theorem isO_refl (f : α → E) (l : Filter α) : f =O[l] f :=
- (isOWith_refl f l).IsO
-#align asymptotics.is_O_refl Asymptotics.isO_refl
-
-theorem IsOWith.trans_le (hfg : IsOWith c l f g) (hgk : ∀ x, ‖g x‖ ≤ ‖k x‖) (hc : 0 ≤ c) :
- IsOWith c l f k :=
- (hfg.trans (isOWith_of_le l hgk) hc).congr_const <| mul_one c
-#align asymptotics.is_O_with.trans_le Asymptotics.IsOWith.trans_le
-
-theorem IsO.trans_le (hfg : f =O[l] g') (hgk : ∀ x, ‖g' x‖ ≤ ‖k x‖) : f =O[l] k :=
- hfg.trans (isO_of_le l hgk)
-#align asymptotics.is_O.trans_le Asymptotics.IsO.trans_le
-
-theorem IsOCat.trans_le (hfg : f =o[l] g) (hgk : ∀ x, ‖g x‖ ≤ ‖k x‖) : f =o[l] k :=
- hfg.trans_isOWith (isOWith_of_le _ hgk) zero_lt_one
-#align asymptotics.is_o.trans_le Asymptotics.IsOCat.trans_le
-
-theorem isOCat_irrefl' (h : ∃ᶠ x in l, ‖f' x‖ ≠ 0) : ¬f' =o[l] f' :=
+/- warning: asymptotics.is_O_with_refl -> Asymptotics.isBigOWith_refl is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] (f : α -> E) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u2} α E E _inst_1 _inst_1 (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) l f f
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] (f : α -> E) (l : Filter.{u2} α), Asymptotics.IsBigOWith.{u2, u1, u1} α E E _inst_1 _inst_1 (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) l f f
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_refl Asymptotics.isBigOWith_reflₓ'. -/
+theorem isBigOWith_refl (f : α → E) (l : Filter α) : IsBigOWith 1 l f f :=
+ isBigOWith_of_le l fun _ => le_rfl
+#align asymptotics.is_O_with_refl Asymptotics.isBigOWith_refl
+
+/- warning: asymptotics.is_O_refl -> Asymptotics.isBigO_refl is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] (f : α -> E) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u2} α E E _inst_1 _inst_1 l f f
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] (f : α -> E) (l : Filter.{u2} α), Asymptotics.IsBigO.{u2, u1, u1} α E E _inst_1 _inst_1 l f f
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_refl Asymptotics.isBigO_reflₓ'. -/
+theorem isBigO_refl (f : α → E) (l : Filter α) : f =O[l] f :=
+ (isBigOWith_refl f l).IsBigO
+#align asymptotics.is_O_refl Asymptotics.isBigO_refl
+
+/- warning: asymptotics.is_O_with.trans_le -> Asymptotics.IsBigOWith.trans_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} {G : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_3 : Norm.{u4} G] {c : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g) -> (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u3} F _inst_2 (g x)) (Norm.norm.{u4} G _inst_3 (k x))) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, u4} α E G _inst_1 _inst_3 c l f k)
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {F : Type.{u2}} {G : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] [_inst_3 : Norm.{u1} G] {c : Real} {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E F _inst_1 _inst_2 c l f g) -> (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} F _inst_2 (g x)) (Norm.norm.{u1} G _inst_3 (k x))) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u4, u3, u1} α E G _inst_1 _inst_3 c l f k)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.trans_le Asymptotics.IsBigOWith.trans_leₓ'. -/
+theorem IsBigOWith.trans_le (hfg : IsBigOWith c l f g) (hgk : ∀ x, ‖g x‖ ≤ ‖k x‖) (hc : 0 ≤ c) :
+ IsBigOWith c l f k :=
+ (hfg.trans (isBigOWith_of_le l hgk) hc).congr_const <| mul_one c
+#align asymptotics.is_O_with.trans_le Asymptotics.IsBigOWith.trans_le
+
+/- warning: asymptotics.is_O.trans_le -> Asymptotics.IsBigO.trans_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {G : Type.{u3}} {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_3 : Norm.{u3} G] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {f : α -> E} {k : α -> G} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u4} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) l f g') -> (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u4} F' (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) (g' x)) (Norm.norm.{u3} G _inst_3 (k x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E G _inst_1 _inst_3 l f k)
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {G : Type.{u1}} {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_3 : Norm.{u1} G] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {f : α -> E} {k : α -> G} {g' : α -> F'} {l : Filter.{u4} α}, (Asymptotics.IsBigO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g') -> (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} F' (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (g' x)) (Norm.norm.{u1} G _inst_3 (k x))) -> (Asymptotics.IsBigO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.trans_le Asymptotics.IsBigO.trans_leₓ'. -/
+theorem IsBigO.trans_le (hfg : f =O[l] g') (hgk : ∀ x, ‖g' x‖ ≤ ‖k x‖) : f =O[l] k :=
+ hfg.trans (isBigO_of_le l hgk)
+#align asymptotics.is_O.trans_le Asymptotics.IsBigO.trans_le
+
+/- warning: asymptotics.is_o.trans_le -> Asymptotics.IsLittleO.trans_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} {G : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_3 : Norm.{u4} G] {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u3} F _inst_2 (g x)) (Norm.norm.{u4} G _inst_3 (k x))) -> (Asymptotics.IsLittleO.{u1, u2, u4} α E G _inst_1 _inst_3 l f k)
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {F : Type.{u2}} {G : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u2} F] [_inst_3 : Norm.{u1} G] {f : α -> E} {g : α -> F} {k : α -> G} {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, u3, u2} α E F _inst_1 _inst_2 l f g) -> (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} F _inst_2 (g x)) (Norm.norm.{u1} G _inst_3 (k x))) -> (Asymptotics.IsLittleO.{u4, u3, u1} α E G _inst_1 _inst_3 l f k)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.trans_le Asymptotics.IsLittleO.trans_leₓ'. -/
+theorem IsLittleO.trans_le (hfg : f =o[l] g) (hgk : ∀ x, ‖g x‖ ≤ ‖k x‖) : f =o[l] k :=
+ hfg.trans_isBigOWith (isBigOWith_of_le _ hgk) zero_lt_one
+#align asymptotics.is_o.trans_le Asymptotics.IsLittleO.trans_le
+
+/- warning: asymptotics.is_o_irrefl' -> Asymptotics.isLittleO_irrefl' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] {f' : α -> E'} {l : Filter.{u1} α}, (Filter.Frequently.{u1} α (fun (x : α) => Ne.{1} Real (Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) l) -> (Not (Asymptotics.IsLittleO.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) l f' f'))
+but is expected to have type
+ forall {α : Type.{u2}} {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {f' : α -> E'} {l : Filter.{u2} α}, (Filter.Frequently.{u2} α (fun (x : α) => Ne.{1} Real (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) l) -> (Not (Asymptotics.IsLittleO.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f' f'))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_irrefl' Asymptotics.isLittleO_irrefl'ₓ'. -/
+theorem isLittleO_irrefl' (h : ∃ᶠ x in l, ‖f' x‖ ≠ 0) : ¬f' =o[l] f' :=
by
intro ho
rcases((ho.bound one_half_pos).and_frequently h).exists with ⟨x, hle, hne⟩
rw [one_div, ← div_eq_inv_mul] at hle
exact (half_lt_self (lt_of_le_of_ne (norm_nonneg _) hne.symm)).not_le hle
-#align asymptotics.is_o_irrefl' Asymptotics.isOCat_irrefl'
-
-theorem isOCat_irrefl (h : ∃ᶠ x in l, f'' x ≠ 0) : ¬f'' =o[l] f'' :=
- isOCat_irrefl' <| h.mono fun x => norm_ne_zero_iff.mpr
-#align asymptotics.is_o_irrefl Asymptotics.isOCat_irrefl
-
-theorem IsO.not_isOCat (h : f'' =O[l] g') (hf : ∃ᶠ x in l, f'' x ≠ 0) : ¬g' =o[l] f'' := fun h' =>
- isOCat_irrefl hf (h.trans_isOCat h')
-#align asymptotics.is_O.not_is_o Asymptotics.IsO.not_isOCat
-
-theorem IsOCat.not_isO (h : f'' =o[l] g') (hf : ∃ᶠ x in l, f'' x ≠ 0) : ¬g' =O[l] f'' := fun h' =>
- isOCat_irrefl hf (h.trans_isO h')
-#align asymptotics.is_o.not_is_O Asymptotics.IsOCat.not_isO
+#align asymptotics.is_o_irrefl' Asymptotics.isLittleO_irrefl'
+
+/- warning: asymptotics.is_o_irrefl -> Asymptotics.isLittleO_irrefl is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u2} E''] {f'' : α -> E''} {l : Filter.{u1} α}, (Filter.Frequently.{u1} α (fun (x : α) => Ne.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))) l) -> (Not (Asymptotics.IsLittleO.{u1, u2, u2} α E'' E'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) l f'' f''))
+but is expected to have type
+ forall {α : Type.{u2}} {E'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u1} E''] {f'' : α -> E''} {l : Filter.{u2} α}, (Filter.Frequently.{u2} α (fun (x : α) => Ne.{succ u1} E'' (f'' x) (OfNat.ofNat.{u1} E'' 0 (Zero.toOfNat0.{u1} E'' (NegZeroClass.toZero.{u1} E'' (SubNegZeroMonoid.toNegZeroClass.{u1} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E'' (AddCommGroup.toDivisionAddCommMonoid.{u1} E'' (NormedAddCommGroup.toAddCommGroup.{u1} E'' _inst_7))))))))) l) -> (Not (Asymptotics.IsLittleO.{u2, u1, u1} α E'' E'' (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) l f'' f''))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_irrefl Asymptotics.isLittleO_irreflₓ'. -/
+theorem isLittleO_irrefl (h : ∃ᶠ x in l, f'' x ≠ 0) : ¬f'' =o[l] f'' :=
+ isLittleO_irrefl' <| h.mono fun x => norm_ne_zero_iff.mpr
+#align asymptotics.is_o_irrefl Asymptotics.isLittleO_irrefl
+
+/- warning: asymptotics.is_O.not_is_o -> Asymptotics.IsBigO.not_isLittleO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {g' : α -> F'} {f'' : α -> E''} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f'' g') -> (Filter.Frequently.{u1} α (fun (x : α) => Ne.{succ u3} E'' (f'' x) (OfNat.ofNat.{u3} E'' 0 (OfNat.mk.{u3} E'' 0 (Zero.zero.{u3} E'' (AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))) l) -> (Not (Asymptotics.IsLittleO.{u1, u2, u3} α F' E'' (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) l g' f''))
+but is expected to have type
+ forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {g' : α -> F'} {f'' : α -> E''} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' g') -> (Filter.Frequently.{u3} α (fun (x : α) => Ne.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))) l) -> (Not (Asymptotics.IsLittleO.{u3, u1, u2} α F' E'' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) l g' f''))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.not_is_o Asymptotics.IsBigO.not_isLittleOₓ'. -/
+theorem IsBigO.not_isLittleO (h : f'' =O[l] g') (hf : ∃ᶠ x in l, f'' x ≠ 0) : ¬g' =o[l] f'' :=
+ fun h' => isLittleO_irrefl hf (h.trans_isLittleO h')
+#align asymptotics.is_O.not_is_o Asymptotics.IsBigO.not_isLittleO
+
+/- warning: asymptotics.is_o.not_is_O -> Asymptotics.IsLittleO.not_isBigO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {g' : α -> F'} {f'' : α -> E''} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f'' g') -> (Filter.Frequently.{u1} α (fun (x : α) => Ne.{succ u3} E'' (f'' x) (OfNat.ofNat.{u3} E'' 0 (OfNat.mk.{u3} E'' 0 (Zero.zero.{u3} E'' (AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))) l) -> (Not (Asymptotics.IsBigO.{u1, u2, u3} α F' E'' (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) l g' f''))
+but is expected to have type
+ forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {g' : α -> F'} {f'' : α -> E''} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' g') -> (Filter.Frequently.{u3} α (fun (x : α) => Ne.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))) l) -> (Not (Asymptotics.IsBigO.{u3, u1, u2} α F' E'' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) l g' f''))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.not_is_O Asymptotics.IsLittleO.not_isBigOₓ'. -/
+theorem IsLittleO.not_isBigO (h : f'' =o[l] g') (hf : ∃ᶠ x in l, f'' x ≠ 0) : ¬g' =O[l] f'' :=
+ fun h' => isLittleO_irrefl hf (h.trans_isBigO h')
+#align asymptotics.is_o.not_is_O Asymptotics.IsLittleO.not_isBigO
section Bot
variable (c f g)
+/- warning: asymptotics.is_O_with_bot -> Asymptotics.isBigOWith_bot is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] (c : Real) (f : α -> E) (g : α -> F), Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) f g
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] (c : Real) (f : α -> E) (g : α -> F), Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c (Bot.bot.{u3} (Filter.{u3} α) (CompleteLattice.toBot.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))) f g
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_bot Asymptotics.isBigOWith_botₓ'. -/
@[simp]
-theorem isOWith_bot : IsOWith c ⊥ f g :=
- IsOWith.of_bound <| trivial
-#align asymptotics.is_O_with_bot Asymptotics.isOWith_bot
-
+theorem isBigOWith_bot : IsBigOWith c ⊥ f g :=
+ IsBigOWith.of_bound <| trivial
+#align asymptotics.is_O_with_bot Asymptotics.isBigOWith_bot
+
+/- warning: asymptotics.is_O_bot -> Asymptotics.isBigO_bot is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] (f : α -> E) (g : α -> F), Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) f g
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] (f : α -> E) (g : α -> F), Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 (Bot.bot.{u3} (Filter.{u3} α) (CompleteLattice.toBot.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))) f g
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_bot Asymptotics.isBigO_botₓ'. -/
@[simp]
-theorem isO_bot : f =O[⊥] g :=
- (isOWith_bot 1 f g).IsO
-#align asymptotics.is_O_bot Asymptotics.isO_bot
-
+theorem isBigO_bot : f =O[⊥] g :=
+ (isBigOWith_bot 1 f g).IsBigO
+#align asymptotics.is_O_bot Asymptotics.isBigO_bot
+
+/- warning: asymptotics.is_o_bot -> Asymptotics.isLittleO_bot is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] (f : α -> E) (g : α -> F), Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 (Bot.bot.{u1} (Filter.{u1} α) (CompleteLattice.toHasBot.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))) f g
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] (f : α -> E) (g : α -> F), Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 (Bot.bot.{u3} (Filter.{u3} α) (CompleteLattice.toBot.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))) f g
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_bot Asymptotics.isLittleO_botₓ'. -/
@[simp]
-theorem isOCat_bot : f =o[⊥] g :=
- IsOCat.of_isOWith fun c _ => isOWith_bot c f g
-#align asymptotics.is_o_bot Asymptotics.isOCat_bot
+theorem isLittleO_bot : f =o[⊥] g :=
+ IsLittleO.of_isBigOWith fun c _ => isBigOWith_bot c f g
+#align asymptotics.is_o_bot Asymptotics.isLittleO_bot
end Bot
+/- warning: asymptotics.is_O_with_pure -> Asymptotics.isBigOWith_pure is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {x : α}, Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} α x) f g) (LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x))))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {x : α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c (Pure.pure.{u3, u3} Filter.{u3} Filter.instPureFilter.{u3} α x) f g) (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_pure Asymptotics.isBigOWith_pureₓ'. -/
@[simp]
-theorem isOWith_pure {x} : IsOWith c (pure x) f g ↔ ‖f x‖ ≤ c * ‖g x‖ :=
- isOWith_iff
-#align asymptotics.is_O_with_pure Asymptotics.isOWith_pure
-
-theorem IsOWith.sup (h : IsOWith c l f g) (h' : IsOWith c l' f g) : IsOWith c (l ⊔ l') f g :=
- IsOWith.of_bound <| mem_sup.2 ⟨h.bound, h'.bound⟩
-#align asymptotics.is_O_with.sup Asymptotics.IsOWith.sup
-
-theorem IsOWith.sup' (h : IsOWith c l f g') (h' : IsOWith c' l' f g') :
- IsOWith (max c c') (l ⊔ l') f g' :=
- IsOWith.of_bound <|
+theorem isBigOWith_pure {x} : IsBigOWith c (pure x) f g ↔ ‖f x‖ ≤ c * ‖g x‖ :=
+ isBigOWith_iff
+#align asymptotics.is_O_with_pure Asymptotics.isBigOWith_pure
+
+/- warning: asymptotics.is_O_with.sup -> Asymptotics.IsBigOWith.sup is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c l' f g) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l f g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c l' f g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c (Sup.sup.{u3} (Filter.{u3} α) (SemilatticeSup.toSup.{u3} (Filter.{u3} α) (Lattice.toSemilatticeSup.{u3} (Filter.{u3} α) (ConditionallyCompleteLattice.toLattice.{u3} (Filter.{u3} α) (CompleteLattice.toConditionallyCompleteLattice.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))))) l l') f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.sup Asymptotics.IsBigOWith.supₓ'. -/
+theorem IsBigOWith.sup (h : IsBigOWith c l f g) (h' : IsBigOWith c l' f g) :
+ IsBigOWith c (l ⊔ l') f g :=
+ IsBigOWith.of_bound <| mem_sup.2 ⟨h.bound, h'.bound⟩
+#align asymptotics.is_O_with.sup Asymptotics.IsBigOWith.sup
+
+/- warning: asymptotics.is_O_with.sup' -> Asymptotics.IsBigOWith.sup' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {c' : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c' l' f g') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (LinearOrder.max.{0} Real Real.linearOrder c c') (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {c' : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g') -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c' l' f g') -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) c c') (Sup.sup.{u3} (Filter.{u3} α) (SemilatticeSup.toSup.{u3} (Filter.{u3} α) (Lattice.toSemilatticeSup.{u3} (Filter.{u3} α) (ConditionallyCompleteLattice.toLattice.{u3} (Filter.{u3} α) (CompleteLattice.toConditionallyCompleteLattice.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))))) l l') f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.sup' Asymptotics.IsBigOWith.sup'ₓ'. -/
+theorem IsBigOWith.sup' (h : IsBigOWith c l f g') (h' : IsBigOWith c' l' f g') :
+ IsBigOWith (max c c') (l ⊔ l') f g' :=
+ IsBigOWith.of_bound <|
mem_sup.2 ⟨(h.weaken <| le_max_left c c').bound, (h'.weaken <| le_max_right c c').bound⟩
-#align asymptotics.is_O_with.sup' Asymptotics.IsOWith.sup'
-
-theorem IsO.sup (h : f =O[l] g') (h' : f =O[l'] g') : f =O[l ⊔ l'] g' :=
- let ⟨c, hc⟩ := h.IsOWith
- let ⟨c', hc'⟩ := h'.IsOWith
- (hc.sup' hc').IsO
-#align asymptotics.is_O.sup Asymptotics.IsO.sup
-
-theorem IsOCat.sup (h : f =o[l] g) (h' : f =o[l'] g) : f =o[l ⊔ l'] g :=
- IsOCat.of_isOWith fun c cpos => (h.forall_isOWith cpos).sup (h'.forall_isOWith cpos)
-#align asymptotics.is_o.sup Asymptotics.IsOCat.sup
-
+#align asymptotics.is_O_with.sup' Asymptotics.IsBigOWith.sup'
+
+/- warning: asymptotics.is_O.sup -> Asymptotics.IsBigO.sup is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l' f g') -> (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l' f g') -> (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (Sup.sup.{u3} (Filter.{u3} α) (SemilatticeSup.toSup.{u3} (Filter.{u3} α) (Lattice.toSemilatticeSup.{u3} (Filter.{u3} α) (ConditionallyCompleteLattice.toLattice.{u3} (Filter.{u3} α) (CompleteLattice.toConditionallyCompleteLattice.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))))) l l') f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.sup Asymptotics.IsBigO.supₓ'. -/
+theorem IsBigO.sup (h : f =O[l] g') (h' : f =O[l'] g') : f =O[l ⊔ l'] g' :=
+ let ⟨c, hc⟩ := h.IsBigOWith
+ let ⟨c', hc'⟩ := h'.IsBigOWith
+ (hc.sup' hc').IsBigO
+#align asymptotics.is_O.sup Asymptotics.IsBigO.sup
+
+/- warning: asymptotics.is_o.sup -> Asymptotics.IsLittleO.sup is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l' f g) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α} {l' : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l' f g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 (Sup.sup.{u3} (Filter.{u3} α) (SemilatticeSup.toSup.{u3} (Filter.{u3} α) (Lattice.toSemilatticeSup.{u3} (Filter.{u3} α) (ConditionallyCompleteLattice.toLattice.{u3} (Filter.{u3} α) (CompleteLattice.toConditionallyCompleteLattice.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))))) l l') f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.sup Asymptotics.IsLittleO.supₓ'. -/
+theorem IsLittleO.sup (h : f =o[l] g) (h' : f =o[l'] g) : f =o[l ⊔ l'] g :=
+ IsLittleO.of_isBigOWith fun c cpos => (h.forall_isBigOWith cpos).sup (h'.forall_isBigOWith cpos)
+#align asymptotics.is_o.sup Asymptotics.IsLittleO.sup
+
+/- warning: asymptotics.is_O_sup -> Asymptotics.isBigO_sup is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α} {l' : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') f g') (And (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l' f g'))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α} {l' : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (Sup.sup.{u3} (Filter.{u3} α) (SemilatticeSup.toSup.{u3} (Filter.{u3} α) (Lattice.toSemilatticeSup.{u3} (Filter.{u3} α) (ConditionallyCompleteLattice.toLattice.{u3} (Filter.{u3} α) (CompleteLattice.toConditionallyCompleteLattice.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))))) l l') f g') (And (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l' f g'))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_sup Asymptotics.isBigO_supₓ'. -/
@[simp]
-theorem isO_sup : f =O[l ⊔ l'] g' ↔ f =O[l] g' ∧ f =O[l'] g' :=
+theorem isBigO_sup : f =O[l ⊔ l'] g' ↔ f =O[l] g' ∧ f =O[l'] g' :=
⟨fun h => ⟨h.mono le_sup_left, h.mono le_sup_right⟩, fun h => h.1.sup h.2⟩
-#align asymptotics.is_O_sup Asymptotics.isO_sup
-
+#align asymptotics.is_O_sup Asymptotics.isBigO_sup
+
+/- warning: asymptotics.is_o_sup -> Asymptotics.isLittleO_sup is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {l : Filter.{u1} α} {l' : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 (Sup.sup.{u1} (Filter.{u1} α) (SemilatticeSup.toHasSup.{u1} (Filter.{u1} α) (Lattice.toSemilatticeSup.{u1} (Filter.{u1} α) (ConditionallyCompleteLattice.toLattice.{u1} (Filter.{u1} α) (CompleteLattice.toConditionallyCompleteLattice.{u1} (Filter.{u1} α) (Filter.completeLattice.{u1} α))))) l l') f g) (And (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f g) (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l' f g))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {l : Filter.{u3} α} {l' : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 (Sup.sup.{u3} (Filter.{u3} α) (SemilatticeSup.toSup.{u3} (Filter.{u3} α) (Lattice.toSemilatticeSup.{u3} (Filter.{u3} α) (ConditionallyCompleteLattice.toLattice.{u3} (Filter.{u3} α) (CompleteLattice.toConditionallyCompleteLattice.{u3} (Filter.{u3} α) (Filter.instCompleteLatticeFilter.{u3} α))))) l l') f g) (And (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f g) (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l' f g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_sup Asymptotics.isLittleO_supₓ'. -/
@[simp]
-theorem isOCat_sup : f =o[l ⊔ l'] g ↔ f =o[l] g ∧ f =o[l'] g :=
+theorem isLittleO_sup : f =o[l ⊔ l'] g ↔ f =o[l] g ∧ f =o[l'] g :=
⟨fun h => ⟨h.mono le_sup_left, h.mono le_sup_right⟩, fun h => h.1.sup h.2⟩
-#align asymptotics.is_o_sup Asymptotics.isOCat_sup
-
-theorem isOWith_insert [TopologicalSpace α] {x : α} {s : Set α} {C : ℝ} {g : α → E} {g' : α → F}
- (h : ‖g x‖ ≤ C * ‖g' x‖) : IsOWith C (𝓝[insert x s] x) g g' ↔ IsOWith C (𝓝[s] x) g g' := by
- simp_rw [is_O_with, nhdsWithin_insert, eventually_sup, eventually_pure, h, true_and_iff]
-#align asymptotics.is_O_with_insert Asymptotics.isOWith_insert
-
-theorem IsOWith.insert [TopologicalSpace α] {x : α} {s : Set α} {C : ℝ} {g : α → E} {g' : α → F}
- (h1 : IsOWith C (𝓝[s] x) g g') (h2 : ‖g x‖ ≤ C * ‖g' x‖) : IsOWith C (𝓝[insert x s] x) g g' :=
- (isOWith_insert h2).mpr h1
-#align asymptotics.is_O_with.insert Asymptotics.IsOWith.insert
-
-theorem isOCat_insert [TopologicalSpace α] {x : α} {s : Set α} {g : α → E'} {g' : α → F'}
+#align asymptotics.is_o_sup Asymptotics.isLittleO_sup
+
+/- warning: asymptotics.is_O_with_insert -> Asymptotics.isBigOWith_insert is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_14 : TopologicalSpace.{u1} α] {x : α} {s : Set.{u1} α} {C : Real} {g : α -> E} {g' : α -> F}, (LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (g x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u3} F _inst_2 (g' x)))) -> (Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 C (nhdsWithin.{u1} α _inst_14 x (Insert.insert.{u1, u1} α (Set.{u1} α) (Set.hasInsert.{u1} α) x s)) g g') (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 C (nhdsWithin.{u1} α _inst_14 x s) g g'))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] [_inst_14 : TopologicalSpace.{u3} α] {x : α} {s : Set.{u3} α} {C : Real} {g : α -> E} {g' : α -> F}, (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (g x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u1} F _inst_2 (g' x)))) -> (Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 C (nhdsWithin.{u3} α _inst_14 x (Insert.insert.{u3, u3} α (Set.{u3} α) (Set.instInsertSet.{u3} α) x s)) g g') (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 C (nhdsWithin.{u3} α _inst_14 x s) g g'))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_insert Asymptotics.isBigOWith_insertₓ'. -/
+theorem isBigOWith_insert [TopologicalSpace α] {x : α} {s : Set α} {C : ℝ} {g : α → E} {g' : α → F}
+ (h : ‖g x‖ ≤ C * ‖g' x‖) : IsBigOWith C (𝓝[insert x s] x) g g' ↔ IsBigOWith C (𝓝[s] x) g g' :=
+ by simp_rw [is_O_with, nhdsWithin_insert, eventually_sup, eventually_pure, h, true_and_iff]
+#align asymptotics.is_O_with_insert Asymptotics.isBigOWith_insert
+
+/- warning: asymptotics.is_O_with.insert -> Asymptotics.IsBigOWith.insert is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_14 : TopologicalSpace.{u1} α] {x : α} {s : Set.{u1} α} {C : Real} {g : α -> E} {g' : α -> F}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 C (nhdsWithin.{u1} α _inst_14 x s) g g') -> (LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (g x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u3} F _inst_2 (g' x)))) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 C (nhdsWithin.{u1} α _inst_14 x (Insert.insert.{u1, u1} α (Set.{u1} α) (Set.hasInsert.{u1} α) x s)) g g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] [_inst_14 : TopologicalSpace.{u3} α] {x : α} {s : Set.{u3} α} {C : Real} {g : α -> E} {g' : α -> F}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 C (nhdsWithin.{u3} α _inst_14 x s) g g') -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (g x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u1} F _inst_2 (g' x)))) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 C (nhdsWithin.{u3} α _inst_14 x (Insert.insert.{u3, u3} α (Set.{u3} α) (Set.instInsertSet.{u3} α) x s)) g g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.insert Asymptotics.IsBigOWith.insertₓ'. -/
+theorem IsBigOWith.insert [TopologicalSpace α] {x : α} {s : Set α} {C : ℝ} {g : α → E} {g' : α → F}
+ (h1 : IsBigOWith C (𝓝[s] x) g g') (h2 : ‖g x‖ ≤ C * ‖g' x‖) :
+ IsBigOWith C (𝓝[insert x s] x) g g' :=
+ (isBigOWith_insert h2).mpr h1
+#align asymptotics.is_O_with.insert Asymptotics.IsBigOWith.insert
+
+/- warning: asymptotics.is_o_insert -> Asymptotics.isLittleO_insert is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_14 : TopologicalSpace.{u1} α] {x : α} {s : Set.{u1} α} {g : α -> E'} {g' : α -> F'}, (Eq.{succ u2} E' (g x) (OfNat.ofNat.{u2} E' 0 (OfNat.mk.{u2} E' 0 (Zero.zero.{u2} E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4)))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (nhdsWithin.{u1} α _inst_14 x (Insert.insert.{u1, u1} α (Set.{u1} α) (Set.hasInsert.{u1} α) x s)) g g') (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (nhdsWithin.{u1} α _inst_14 x s) g g'))
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_14 : TopologicalSpace.{u3} α] {x : α} {s : Set.{u3} α} {g : α -> E'} {g' : α -> F'}, (Eq.{succ u2} E' (g x) (OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))))))) -> (Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (nhdsWithin.{u3} α _inst_14 x (Insert.insert.{u3, u3} α (Set.{u3} α) (Set.instInsertSet.{u3} α) x s)) g g') (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (nhdsWithin.{u3} α _inst_14 x s) g g'))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_insert Asymptotics.isLittleO_insertₓ'. -/
+theorem isLittleO_insert [TopologicalSpace α] {x : α} {s : Set α} {g : α → E'} {g' : α → F'}
(h : g x = 0) : g =o[𝓝[insert x s] x] g' ↔ g =o[𝓝[s] x] g' :=
by
simp_rw [is_o]
@@ -644,12 +1246,18 @@ theorem isOCat_insert [TopologicalSpace α] {x : α} {s : Set α} {g : α → E'
rw [is_O_with_insert]
rw [h, norm_zero]
exact mul_nonneg hc.le (norm_nonneg _)
-#align asymptotics.is_o_insert Asymptotics.isOCat_insert
-
-theorem IsOCat.insert [TopologicalSpace α] {x : α} {s : Set α} {g : α → E'} {g' : α → F'}
+#align asymptotics.is_o_insert Asymptotics.isLittleO_insert
+
+/- warning: asymptotics.is_o.insert -> Asymptotics.IsLittleO.insert is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_14 : TopologicalSpace.{u1} α] {x : α} {s : Set.{u1} α} {g : α -> E'} {g' : α -> F'}, (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (nhdsWithin.{u1} α _inst_14 x s) g g') -> (Eq.{succ u2} E' (g x) (OfNat.ofNat.{u2} E' 0 (OfNat.mk.{u2} E' 0 (Zero.zero.{u2} E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4)))))))))) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (nhdsWithin.{u1} α _inst_14 x (Insert.insert.{u1, u1} α (Set.{u1} α) (Set.hasInsert.{u1} α) x s)) g g')
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_14 : TopologicalSpace.{u3} α] {x : α} {s : Set.{u3} α} {g : α -> E'} {g' : α -> F'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (nhdsWithin.{u3} α _inst_14 x s) g g') -> (Eq.{succ u2} E' (g x) (OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))))))) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (nhdsWithin.{u3} α _inst_14 x (Insert.insert.{u3, u3} α (Set.{u3} α) (Set.instInsertSet.{u3} α) x s)) g g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.insert Asymptotics.IsLittleO.insertₓ'. -/
+theorem IsLittleO.insert [TopologicalSpace α] {x : α} {s : Set α} {g : α → E'} {g' : α → F'}
(h1 : g =o[𝓝[s] x] g') (h2 : g x = 0) : g =o[𝓝[insert x s] x] g' :=
- (isOCat_insert h2).mpr h1
-#align asymptotics.is_o.insert Asymptotics.IsOCat.insert
+ (isLittleO_insert h2).mpr h1
+#align asymptotics.is_o.insert Asymptotics.IsLittleO.insert
/-! ### Simplification : norm, abs -/
@@ -658,365 +1266,965 @@ section NormAbs
variable {u v : α → ℝ}
+/- warning: asymptotics.is_O_with_norm_right -> Asymptotics.isBigOWith_norm_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, 0} α E Real _inst_1 Real.norm c l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_norm_right Asymptotics.isBigOWith_norm_rightₓ'. -/
@[simp]
-theorem isOWith_norm_right : (IsOWith c l f fun x => ‖g' x‖) ↔ IsOWith c l f g' := by
+theorem isBigOWith_norm_right : (IsBigOWith c l f fun x => ‖g' x‖) ↔ IsBigOWith c l f g' := by
simp only [is_O_with, norm_norm]
-#align asymptotics.is_O_with_norm_right Asymptotics.isOWith_norm_right
-
+#align asymptotics.is_O_with_norm_right Asymptotics.isBigOWith_norm_right
+
+/- warning: asymptotics.is_O_with_abs_right -> Asymptotics.isBigOWith_abs_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {c : Real} {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, Iff (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x))) (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f u)
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {c : Real} {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, Iff (Asymptotics.IsBigOWith.{u2, u1, 0} α E Real _inst_1 Real.norm c l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x))) (Asymptotics.IsBigOWith.{u2, u1, 0} α E Real _inst_1 Real.norm c l f u)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_abs_right Asymptotics.isBigOWith_abs_rightₓ'. -/
@[simp]
-theorem isOWith_abs_right : (IsOWith c l f fun x => |u x|) ↔ IsOWith c l f u :=
- @isOWith_norm_right _ _ _ _ _ _ f u l
-#align asymptotics.is_O_with_abs_right Asymptotics.isOWith_abs_right
-
+theorem isBigOWith_abs_right : (IsBigOWith c l f fun x => |u x|) ↔ IsBigOWith c l f u :=
+ @isBigOWith_norm_right _ _ _ _ _ _ f u l
+#align asymptotics.is_O_with_abs_right Asymptotics.isBigOWith_abs_right
+
+/- warning: asymptotics.is_O_with.of_norm_right -> Asymptotics.IsBigOWith.of_norm_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, 0} α E Real _inst_1 Real.norm c l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_norm_right Asymptotics.IsBigOWith.of_norm_rightₓ'. -/
+/- warning: asymptotics.is_O_with.norm_right -> Asymptotics.IsBigOWith.norm_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') -> (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g') -> (Asymptotics.IsBigOWith.{u3, u2, 0} α E Real _inst_1 Real.norm c l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.norm_right Asymptotics.IsBigOWith.norm_rightₓ'. -/
alias is_O_with_norm_right ↔ is_O_with.of_norm_right is_O_with.norm_right
-#align asymptotics.is_O_with.of_norm_right Asymptotics.IsOWith.of_norm_right
-#align asymptotics.is_O_with.norm_right Asymptotics.IsOWith.norm_right
-
+#align asymptotics.is_O_with.of_norm_right Asymptotics.IsBigOWith.of_norm_right
+#align asymptotics.is_O_with.norm_right Asymptotics.IsBigOWith.norm_right
+
+/- warning: asymptotics.is_O_with.of_abs_right -> Asymptotics.IsBigOWith.of_abs_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {c : Real} {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x))) -> (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f u)
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {c : Real} {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u2, u1, 0} α E Real _inst_1 Real.norm c l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x))) -> (Asymptotics.IsBigOWith.{u2, u1, 0} α E Real _inst_1 Real.norm c l f u)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_abs_right Asymptotics.IsBigOWith.of_abs_rightₓ'. -/
+/- warning: asymptotics.is_O_with.abs_right -> Asymptotics.IsBigOWith.abs_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {c : Real} {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f u) -> (Asymptotics.IsBigOWith.{u1, u2, 0} α E Real _inst_1 Real.hasNorm c l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {c : Real} {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u2, u1, 0} α E Real _inst_1 Real.norm c l f u) -> (Asymptotics.IsBigOWith.{u2, u1, 0} α E Real _inst_1 Real.norm c l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.abs_right Asymptotics.IsBigOWith.abs_rightₓ'. -/
alias is_O_with_abs_right ↔ is_O_with.of_abs_right is_O_with.abs_right
-#align asymptotics.is_O_with.of_abs_right Asymptotics.IsOWith.of_abs_right
-#align asymptotics.is_O_with.abs_right Asymptotics.IsOWith.abs_right
-
+#align asymptotics.is_O_with.of_abs_right Asymptotics.IsBigOWith.of_abs_right
+#align asymptotics.is_O_with.abs_right Asymptotics.IsBigOWith.abs_right
+
+/- warning: asymptotics.is_O_norm_right -> Asymptotics.isBigO_norm_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_norm_right Asymptotics.isBigO_norm_rightₓ'. -/
@[simp]
-theorem isO_norm_right : (f =O[l] fun x => ‖g' x‖) ↔ f =O[l] g' :=
+theorem isBigO_norm_right : (f =O[l] fun x => ‖g' x‖) ↔ f =O[l] g' :=
by
unfold is_O
exact exists_congr fun _ => is_O_with_norm_right
-#align asymptotics.is_O_norm_right Asymptotics.isO_norm_right
-
+#align asymptotics.is_O_norm_right Asymptotics.isBigO_norm_right
+
+/- warning: asymptotics.is_O_abs_right -> Asymptotics.isBigO_abs_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, Iff (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x))) (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f u)
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, Iff (Asymptotics.IsBigO.{u2, u1, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x))) (Asymptotics.IsBigO.{u2, u1, 0} α E Real _inst_1 Real.norm l f u)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_abs_right Asymptotics.isBigO_abs_rightₓ'. -/
@[simp]
-theorem isO_abs_right : (f =O[l] fun x => |u x|) ↔ f =O[l] u :=
- @isO_norm_right _ _ ℝ _ _ _ _ _
-#align asymptotics.is_O_abs_right Asymptotics.isO_abs_right
-
+theorem isBigO_abs_right : (f =O[l] fun x => |u x|) ↔ f =O[l] u :=
+ @isBigO_norm_right _ _ ℝ _ _ _ _ _
+#align asymptotics.is_O_abs_right Asymptotics.isBigO_abs_right
+
+/- warning: asymptotics.is_O.of_norm_right -> Asymptotics.IsBigO.of_norm_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_norm_right Asymptotics.IsBigO.of_norm_rightₓ'. -/
+/- warning: asymptotics.is_O.norm_right -> Asymptotics.IsBigO.norm_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u3, u2, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.norm_right Asymptotics.IsBigO.norm_rightₓ'. -/
alias is_O_norm_right ↔ is_O.of_norm_right is_O.norm_right
-#align asymptotics.is_O.of_norm_right Asymptotics.IsO.of_norm_right
-#align asymptotics.is_O.norm_right Asymptotics.IsO.norm_right
-
+#align asymptotics.is_O.of_norm_right Asymptotics.IsBigO.of_norm_right
+#align asymptotics.is_O.norm_right Asymptotics.IsBigO.norm_right
+
+/- warning: asymptotics.is_O.of_abs_right -> Asymptotics.IsBigO.of_abs_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x))) -> (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f u)
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigO.{u2, u1, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x))) -> (Asymptotics.IsBigO.{u2, u1, 0} α E Real _inst_1 Real.norm l f u)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_abs_right Asymptotics.IsBigO.of_abs_rightₓ'. -/
+/- warning: asymptotics.is_O.abs_right -> Asymptotics.IsBigO.abs_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f u) -> (Asymptotics.IsBigO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigO.{u2, u1, 0} α E Real _inst_1 Real.norm l f u) -> (Asymptotics.IsBigO.{u2, u1, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.abs_right Asymptotics.IsBigO.abs_rightₓ'. -/
alias is_O_abs_right ↔ is_O.of_abs_right is_O.abs_right
-#align asymptotics.is_O.of_abs_right Asymptotics.IsO.of_abs_right
-#align asymptotics.is_O.abs_right Asymptotics.IsO.abs_right
-
+#align asymptotics.is_O.of_abs_right Asymptotics.IsBigO.of_abs_right
+#align asymptotics.is_O.abs_right Asymptotics.IsBigO.abs_right
+
+/- warning: asymptotics.is_o_norm_right -> Asymptotics.isLittleO_norm_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_norm_right Asymptotics.isLittleO_norm_rightₓ'. -/
@[simp]
-theorem isOCat_norm_right : (f =o[l] fun x => ‖g' x‖) ↔ f =o[l] g' :=
+theorem isLittleO_norm_right : (f =o[l] fun x => ‖g' x‖) ↔ f =o[l] g' :=
by
unfold is_o
exact forall₂_congr fun _ _ => is_O_with_norm_right
-#align asymptotics.is_o_norm_right Asymptotics.isOCat_norm_right
-
+#align asymptotics.is_o_norm_right Asymptotics.isLittleO_norm_right
+
+/- warning: asymptotics.is_o_abs_right -> Asymptotics.isLittleO_abs_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, Iff (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x))) (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f u)
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, Iff (Asymptotics.IsLittleO.{u2, u1, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x))) (Asymptotics.IsLittleO.{u2, u1, 0} α E Real _inst_1 Real.norm l f u)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_abs_right Asymptotics.isLittleO_abs_rightₓ'. -/
@[simp]
-theorem isOCat_abs_right : (f =o[l] fun x => |u x|) ↔ f =o[l] u :=
- @isOCat_norm_right _ _ ℝ _ _ _ _ _
-#align asymptotics.is_o_abs_right Asymptotics.isOCat_abs_right
-
+theorem isLittleO_abs_right : (f =o[l] fun x => |u x|) ↔ f =o[l] u :=
+ @isLittleO_norm_right _ _ ℝ _ _ _ _ _
+#align asymptotics.is_o_abs_right Asymptotics.isLittleO_abs_right
+
+/- warning: asymptotics.is_o.of_norm_right -> Asymptotics.IsLittleO.of_norm_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_norm_right Asymptotics.IsLittleO.of_norm_rightₓ'. -/
+/- warning: asymptotics.is_o.norm_right -> Asymptotics.IsLittleO.norm_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u3, u2, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.norm_right Asymptotics.IsLittleO.norm_rightₓ'. -/
alias is_o_norm_right ↔ is_o.of_norm_right is_o.norm_right
-#align asymptotics.is_o.of_norm_right Asymptotics.IsOCat.of_norm_right
-#align asymptotics.is_o.norm_right Asymptotics.IsOCat.norm_right
-
+#align asymptotics.is_o.of_norm_right Asymptotics.IsLittleO.of_norm_right
+#align asymptotics.is_o.norm_right Asymptotics.IsLittleO.norm_right
+
+/- warning: asymptotics.is_o.of_abs_right -> Asymptotics.IsLittleO.of_abs_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x))) -> (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f u)
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u2, u1, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x))) -> (Asymptotics.IsLittleO.{u2, u1, 0} α E Real _inst_1 Real.norm l f u)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_abs_right Asymptotics.IsLittleO.of_abs_rightₓ'. -/
+/- warning: asymptotics.is_o.abs_right -> Asymptotics.IsLittleO.abs_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} [_inst_1 : Norm.{u2} E] {f : α -> E} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f u) -> (Asymptotics.IsLittleO.{u1, u2, 0} α E Real _inst_1 Real.hasNorm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} [_inst_1 : Norm.{u1} E] {f : α -> E} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u2, u1, 0} α E Real _inst_1 Real.norm l f u) -> (Asymptotics.IsLittleO.{u2, u1, 0} α E Real _inst_1 Real.norm l f (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.abs_right Asymptotics.IsLittleO.abs_rightₓ'. -/
alias is_o_abs_right ↔ is_o.of_abs_right is_o.abs_right
-#align asymptotics.is_o.of_abs_right Asymptotics.IsOCat.of_abs_right
-#align asymptotics.is_o.abs_right Asymptotics.IsOCat.abs_right
-
+#align asymptotics.is_o.of_abs_right Asymptotics.IsLittleO.of_abs_right
+#align asymptotics.is_o.abs_right Asymptotics.IsLittleO.abs_right
+
+/- warning: asymptotics.is_O_with_norm_left -> Asymptotics.isBigOWith_norm_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g) (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l f' g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, 0, u2} α Real F Real.norm _inst_2 c l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g) (Asymptotics.IsBigOWith.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 c l f' g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_norm_left Asymptotics.isBigOWith_norm_leftₓ'. -/
@[simp]
-theorem isOWith_norm_left : IsOWith c l (fun x => ‖f' x‖) g ↔ IsOWith c l f' g := by
+theorem isBigOWith_norm_left : IsBigOWith c l (fun x => ‖f' x‖) g ↔ IsBigOWith c l f' g := by
simp only [is_O_with, norm_norm]
-#align asymptotics.is_O_with_norm_left Asymptotics.isOWith_norm_left
-
+#align asymptotics.is_O_with_norm_left Asymptotics.isBigOWith_norm_left
+
+/- warning: asymptotics.is_O_with_abs_left -> Asymptotics.isBigOWith_abs_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {c : Real} {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, Iff (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g) (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l u g)
+but is expected to have type
+ forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {c : Real} {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, Iff (Asymptotics.IsBigOWith.{u2, 0, u1} α Real F Real.norm _inst_2 c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g) (Asymptotics.IsBigOWith.{u2, 0, u1} α Real F Real.norm _inst_2 c l u g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_abs_left Asymptotics.isBigOWith_abs_leftₓ'. -/
@[simp]
-theorem isOWith_abs_left : IsOWith c l (fun x => |u x|) g ↔ IsOWith c l u g :=
- @isOWith_norm_left _ _ _ _ _ _ g u l
-#align asymptotics.is_O_with_abs_left Asymptotics.isOWith_abs_left
-
+theorem isBigOWith_abs_left : IsBigOWith c l (fun x => |u x|) g ↔ IsBigOWith c l u g :=
+ @isBigOWith_norm_left _ _ _ _ _ _ g u l
+#align asymptotics.is_O_with_abs_left Asymptotics.isBigOWith_abs_left
+
+/- warning: asymptotics.is_O_with.of_norm_left -> Asymptotics.IsBigOWith.of_norm_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l f' g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, 0, u2} α Real F Real.norm _inst_2 c l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g) -> (Asymptotics.IsBigOWith.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 c l f' g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_norm_left Asymptotics.IsBigOWith.of_norm_leftₓ'. -/
+/- warning: asymptotics.is_O_with.norm_left -> Asymptotics.IsBigOWith.norm_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l f' g) -> (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 c l f' g) -> (Asymptotics.IsBigOWith.{u3, 0, u2} α Real F Real.norm _inst_2 c l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.norm_left Asymptotics.IsBigOWith.norm_leftₓ'. -/
alias is_O_with_norm_left ↔ is_O_with.of_norm_left is_O_with.norm_left
-#align asymptotics.is_O_with.of_norm_left Asymptotics.IsOWith.of_norm_left
-#align asymptotics.is_O_with.norm_left Asymptotics.IsOWith.norm_left
-
+#align asymptotics.is_O_with.of_norm_left Asymptotics.IsBigOWith.of_norm_left
+#align asymptotics.is_O_with.norm_left Asymptotics.IsBigOWith.norm_left
+
+/- warning: asymptotics.is_O_with.of_abs_left -> Asymptotics.IsBigOWith.of_abs_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {c : Real} {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g) -> (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l u g)
+but is expected to have type
+ forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {c : Real} {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u2, 0, u1} α Real F Real.norm _inst_2 c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g) -> (Asymptotics.IsBigOWith.{u2, 0, u1} α Real F Real.norm _inst_2 c l u g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_abs_left Asymptotics.IsBigOWith.of_abs_leftₓ'. -/
+/- warning: asymptotics.is_O_with.abs_left -> Asymptotics.IsBigOWith.abs_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {c : Real} {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l u g) -> (Asymptotics.IsBigOWith.{u1, 0, u2} α Real F Real.hasNorm _inst_2 c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g)
+but is expected to have type
+ forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {c : Real} {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigOWith.{u2, 0, u1} α Real F Real.norm _inst_2 c l u g) -> (Asymptotics.IsBigOWith.{u2, 0, u1} α Real F Real.norm _inst_2 c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.abs_left Asymptotics.IsBigOWith.abs_leftₓ'. -/
alias is_O_with_abs_left ↔ is_O_with.of_abs_left is_O_with.abs_left
-#align asymptotics.is_O_with.of_abs_left Asymptotics.IsOWith.of_abs_left
-#align asymptotics.is_O_with.abs_left Asymptotics.IsOWith.abs_left
-
+#align asymptotics.is_O_with.of_abs_left Asymptotics.IsBigOWith.of_abs_left
+#align asymptotics.is_O_with.abs_left Asymptotics.IsBigOWith.abs_left
+
+/- warning: asymptotics.is_O_norm_left -> Asymptotics.isBigO_norm_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g) (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, 0, u2} α Real F Real.norm _inst_2 l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g) (Asymptotics.IsBigO.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 l f' g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_norm_left Asymptotics.isBigO_norm_leftₓ'. -/
@[simp]
-theorem isO_norm_left : (fun x => ‖f' x‖) =O[l] g ↔ f' =O[l] g :=
+theorem isBigO_norm_left : (fun x => ‖f' x‖) =O[l] g ↔ f' =O[l] g :=
by
unfold is_O
exact exists_congr fun _ => is_O_with_norm_left
-#align asymptotics.is_O_norm_left Asymptotics.isO_norm_left
-
+#align asymptotics.is_O_norm_left Asymptotics.isBigO_norm_left
+
+/- warning: asymptotics.is_O_abs_left -> Asymptotics.isBigO_abs_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g) (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l u g)
+but is expected to have type
+ forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, Iff (Asymptotics.IsBigO.{u2, 0, u1} α Real F Real.norm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g) (Asymptotics.IsBigO.{u2, 0, u1} α Real F Real.norm _inst_2 l u g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_abs_left Asymptotics.isBigO_abs_leftₓ'. -/
@[simp]
-theorem isO_abs_left : (fun x => |u x|) =O[l] g ↔ u =O[l] g :=
- @isO_norm_left _ _ _ _ _ g u l
-#align asymptotics.is_O_abs_left Asymptotics.isO_abs_left
-
+theorem isBigO_abs_left : (fun x => |u x|) =O[l] g ↔ u =O[l] g :=
+ @isBigO_norm_left _ _ _ _ _ g u l
+#align asymptotics.is_O_abs_left Asymptotics.isBigO_abs_left
+
+/- warning: asymptotics.is_O.of_norm_left -> Asymptotics.IsBigO.of_norm_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, 0, u2} α Real F Real.norm _inst_2 l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g) -> (Asymptotics.IsBigO.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 l f' g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_norm_left Asymptotics.IsBigO.of_norm_leftₓ'. -/
+/- warning: asymptotics.is_O.norm_left -> Asymptotics.IsBigO.norm_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsBigO.{u3, 0, u2} α Real F Real.norm _inst_2 l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.norm_left Asymptotics.IsBigO.norm_leftₓ'. -/
alias is_O_norm_left ↔ is_O.of_norm_left is_O.norm_left
-#align asymptotics.is_O.of_norm_left Asymptotics.IsO.of_norm_left
-#align asymptotics.is_O.norm_left Asymptotics.IsO.norm_left
-
+#align asymptotics.is_O.of_norm_left Asymptotics.IsBigO.of_norm_left
+#align asymptotics.is_O.norm_left Asymptotics.IsBigO.norm_left
+
+/- warning: asymptotics.is_O.of_abs_left -> Asymptotics.IsBigO.of_abs_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g) -> (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l u g)
+but is expected to have type
+ forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigO.{u2, 0, u1} α Real F Real.norm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g) -> (Asymptotics.IsBigO.{u2, 0, u1} α Real F Real.norm _inst_2 l u g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_abs_left Asymptotics.IsBigO.of_abs_leftₓ'. -/
+/- warning: asymptotics.is_O.abs_left -> Asymptotics.IsBigO.abs_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l u g) -> (Asymptotics.IsBigO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g)
+but is expected to have type
+ forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsBigO.{u2, 0, u1} α Real F Real.norm _inst_2 l u g) -> (Asymptotics.IsBigO.{u2, 0, u1} α Real F Real.norm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.abs_left Asymptotics.IsBigO.abs_leftₓ'. -/
alias is_O_abs_left ↔ is_O.of_abs_left is_O.abs_left
-#align asymptotics.is_O.of_abs_left Asymptotics.IsO.of_abs_left
-#align asymptotics.is_O.abs_left Asymptotics.IsO.abs_left
-
+#align asymptotics.is_O.of_abs_left Asymptotics.IsBigO.of_abs_left
+#align asymptotics.is_O.abs_left Asymptotics.IsBigO.abs_left
+
+/- warning: asymptotics.is_o_norm_left -> Asymptotics.isLittleO_norm_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g) (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, 0, u2} α Real F Real.norm _inst_2 l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g) (Asymptotics.IsLittleO.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 l f' g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_norm_left Asymptotics.isLittleO_norm_leftₓ'. -/
@[simp]
-theorem isOCat_norm_left : (fun x => ‖f' x‖) =o[l] g ↔ f' =o[l] g :=
+theorem isLittleO_norm_left : (fun x => ‖f' x‖) =o[l] g ↔ f' =o[l] g :=
by
unfold is_o
exact forall₂_congr fun _ _ => is_O_with_norm_left
-#align asymptotics.is_o_norm_left Asymptotics.isOCat_norm_left
-
+#align asymptotics.is_o_norm_left Asymptotics.isLittleO_norm_left
+
+/- warning: asymptotics.is_o_abs_left -> Asymptotics.isLittleO_abs_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, Iff (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g) (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l u g)
+but is expected to have type
+ forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, Iff (Asymptotics.IsLittleO.{u2, 0, u1} α Real F Real.norm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g) (Asymptotics.IsLittleO.{u2, 0, u1} α Real F Real.norm _inst_2 l u g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_abs_left Asymptotics.isLittleO_abs_leftₓ'. -/
@[simp]
-theorem isOCat_abs_left : (fun x => |u x|) =o[l] g ↔ u =o[l] g :=
- @isOCat_norm_left _ _ _ _ _ g u l
-#align asymptotics.is_o_abs_left Asymptotics.isOCat_abs_left
-
+theorem isLittleO_abs_left : (fun x => |u x|) =o[l] g ↔ u =o[l] g :=
+ @isLittleO_norm_left _ _ _ _ _ g u l
+#align asymptotics.is_o_abs_left Asymptotics.isLittleO_abs_left
+
+/- warning: asymptotics.is_o.of_norm_left -> Asymptotics.IsLittleO.of_norm_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, 0, u2} α Real F Real.norm _inst_2 l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g) -> (Asymptotics.IsLittleO.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 l f' g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_norm_left Asymptotics.IsLittleO.of_norm_leftₓ'. -/
+/- warning: asymptotics.is_o.norm_left -> Asymptotics.IsLittleO.norm_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Norm.norm.{u3} E' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (f' x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u2}} {E' : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u1} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u1, u2} α E' F (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsLittleO.{u3, 0, u2} α Real F Real.norm _inst_2 l (fun (x : α) => Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.norm_left Asymptotics.IsLittleO.norm_leftₓ'. -/
alias is_o_norm_left ↔ is_o.of_norm_left is_o.norm_left
-#align asymptotics.is_o.of_norm_left Asymptotics.IsOCat.of_norm_left
-#align asymptotics.is_o.norm_left Asymptotics.IsOCat.norm_left
-
+#align asymptotics.is_o.of_norm_left Asymptotics.IsLittleO.of_norm_left
+#align asymptotics.is_o.norm_left Asymptotics.IsLittleO.norm_left
+
+/- warning: asymptotics.is_o.of_abs_left -> Asymptotics.IsLittleO.of_abs_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g) -> (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l u g)
+but is expected to have type
+ forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u2, 0, u1} α Real F Real.norm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g) -> (Asymptotics.IsLittleO.{u2, 0, u1} α Real F Real.norm _inst_2 l u g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_abs_left Asymptotics.IsLittleO.of_abs_leftₓ'. -/
+/- warning: asymptotics.is_o.abs_left -> Asymptotics.IsLittleO.abs_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} [_inst_2 : Norm.{u2} F] {g : α -> F} {l : Filter.{u1} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l u g) -> (Asymptotics.IsLittleO.{u1, 0, u2} α Real F Real.hasNorm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) g)
+but is expected to have type
+ forall {α : Type.{u2}} {F : Type.{u1}} [_inst_2 : Norm.{u1} F] {g : α -> F} {l : Filter.{u2} α} {u : α -> Real}, (Asymptotics.IsLittleO.{u2, 0, u1} α Real F Real.norm _inst_2 l u g) -> (Asymptotics.IsLittleO.{u2, 0, u1} α Real F Real.norm _inst_2 l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.abs_left Asymptotics.IsLittleO.abs_leftₓ'. -/
alias is_o_abs_left ↔ is_o.of_abs_left is_o.abs_left
-#align asymptotics.is_o.of_abs_left Asymptotics.IsOCat.of_abs_left
-#align asymptotics.is_o.abs_left Asymptotics.IsOCat.abs_left
-
-theorem isOWith_norm_norm : (IsOWith c l (fun x => ‖f' x‖) fun x => ‖g' x‖) ↔ IsOWith c l f' g' :=
- isOWith_norm_left.trans isOWith_norm_right
-#align asymptotics.is_O_with_norm_norm Asymptotics.isOWith_norm_norm
-
-theorem isOWith_abs_abs : (IsOWith c l (fun x => |u x|) fun x => |v x|) ↔ IsOWith c l u v :=
- isOWith_abs_left.trans isOWith_abs_right
-#align asymptotics.is_O_with_abs_abs Asymptotics.isOWith_abs_abs
-
+#align asymptotics.is_o.of_abs_left Asymptotics.IsLittleO.of_abs_left
+#align asymptotics.is_o.abs_left Asymptotics.IsLittleO.abs_left
+
+/- warning: asymptotics.is_O_with_norm_norm -> Asymptotics.isBigOWith_norm_norm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) (Asymptotics.IsBigOWith.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f' g')
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, 0, 0} α Real Real Real.norm Real.norm c l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f' g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_norm_norm Asymptotics.isBigOWith_norm_normₓ'. -/
+theorem isBigOWith_norm_norm :
+ (IsBigOWith c l (fun x => ‖f' x‖) fun x => ‖g' x‖) ↔ IsBigOWith c l f' g' :=
+ isBigOWith_norm_left.trans isBigOWith_norm_right
+#align asymptotics.is_O_with_norm_norm Asymptotics.isBigOWith_norm_norm
+
+/- warning: asymptotics.is_O_with_abs_abs -> Asymptotics.isBigOWith_abs_abs is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {c : Real} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, Iff (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x))) (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l u v)
+but is expected to have type
+ forall {α : Type.{u1}} {c : Real} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, Iff (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.norm Real.norm c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x))) (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.norm Real.norm c l u v)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_abs_abs Asymptotics.isBigOWith_abs_absₓ'. -/
+theorem isBigOWith_abs_abs :
+ (IsBigOWith c l (fun x => |u x|) fun x => |v x|) ↔ IsBigOWith c l u v :=
+ isBigOWith_abs_left.trans isBigOWith_abs_right
+#align asymptotics.is_O_with_abs_abs Asymptotics.isBigOWith_abs_abs
+
+/- warning: asymptotics.is_O_with.of_norm_norm -> Asymptotics.IsBigOWith.of_norm_norm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f' g')
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, 0, 0} α Real Real Real.norm Real.norm c l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f' g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_norm_norm Asymptotics.IsBigOWith.of_norm_normₓ'. -/
+/- warning: asymptotics.is_O_with.norm_norm -> Asymptotics.IsBigOWith.norm_norm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f' g') -> (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f' g') -> (Asymptotics.IsBigOWith.{u3, 0, 0} α Real Real Real.norm Real.norm c l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.norm_norm Asymptotics.IsBigOWith.norm_normₓ'. -/
alias is_O_with_norm_norm ↔ is_O_with.of_norm_norm is_O_with.norm_norm
-#align asymptotics.is_O_with.of_norm_norm Asymptotics.IsOWith.of_norm_norm
-#align asymptotics.is_O_with.norm_norm Asymptotics.IsOWith.norm_norm
-
+#align asymptotics.is_O_with.of_norm_norm Asymptotics.IsBigOWith.of_norm_norm
+#align asymptotics.is_O_with.norm_norm Asymptotics.IsBigOWith.norm_norm
+
+/- warning: asymptotics.is_O_with.of_abs_abs -> Asymptotics.IsBigOWith.of_abs_abs is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {c : Real} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x))) -> (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l u v)
+but is expected to have type
+ forall {α : Type.{u1}} {c : Real} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.norm Real.norm c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x))) -> (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.norm Real.norm c l u v)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_abs_abs Asymptotics.IsBigOWith.of_abs_absₓ'. -/
+/- warning: asymptotics.is_O_with.abs_abs -> Asymptotics.IsBigOWith.abs_abs is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {c : Real} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l u v) -> (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x)))
+but is expected to have type
+ forall {α : Type.{u1}} {c : Real} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.norm Real.norm c l u v) -> (Asymptotics.IsBigOWith.{u1, 0, 0} α Real Real Real.norm Real.norm c l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.abs_abs Asymptotics.IsBigOWith.abs_absₓ'. -/
alias is_O_with_abs_abs ↔ is_O_with.of_abs_abs is_O_with.abs_abs
-#align asymptotics.is_O_with.of_abs_abs Asymptotics.IsOWith.of_abs_abs
-#align asymptotics.is_O_with.abs_abs Asymptotics.IsOWith.abs_abs
-
-theorem isO_norm_norm : ((fun x => ‖f' x‖) =O[l] fun x => ‖g' x‖) ↔ f' =O[l] g' :=
- isO_norm_left.trans isO_norm_right
-#align asymptotics.is_O_norm_norm Asymptotics.isO_norm_norm
-
-theorem isO_abs_abs : ((fun x => |u x|) =O[l] fun x => |v x|) ↔ u =O[l] v :=
- isO_abs_left.trans isO_abs_right
-#align asymptotics.is_O_abs_abs Asymptotics.isO_abs_abs
-
+#align asymptotics.is_O_with.of_abs_abs Asymptotics.IsBigOWith.of_abs_abs
+#align asymptotics.is_O_with.abs_abs Asymptotics.IsBigOWith.abs_abs
+
+/- warning: asymptotics.is_O_norm_norm -> Asymptotics.isBigO_norm_norm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) (Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g')
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) (Asymptotics.IsBigO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_norm_norm Asymptotics.isBigO_norm_normₓ'. -/
+theorem isBigO_norm_norm : ((fun x => ‖f' x‖) =O[l] fun x => ‖g' x‖) ↔ f' =O[l] g' :=
+ isBigO_norm_left.trans isBigO_norm_right
+#align asymptotics.is_O_norm_norm Asymptotics.isBigO_norm_norm
+
+/- warning: asymptotics.is_O_abs_abs -> Asymptotics.isBigO_abs_abs is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x))) (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l u v)
+but is expected to have type
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, Iff (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x))) (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.norm Real.norm l u v)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_abs_abs Asymptotics.isBigO_abs_absₓ'. -/
+theorem isBigO_abs_abs : ((fun x => |u x|) =O[l] fun x => |v x|) ↔ u =O[l] v :=
+ isBigO_abs_left.trans isBigO_abs_right
+#align asymptotics.is_O_abs_abs Asymptotics.isBigO_abs_abs
+
+/- warning: asymptotics.is_O.of_norm_norm -> Asymptotics.IsBigO.of_norm_norm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g')
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_norm_norm Asymptotics.IsBigO.of_norm_normₓ'. -/
+/- warning: asymptotics.is_O.norm_norm -> Asymptotics.IsBigO.norm_norm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g') -> (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g') -> (Asymptotics.IsBigO.{u3, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.norm_norm Asymptotics.IsBigO.norm_normₓ'. -/
alias is_O_norm_norm ↔ is_O.of_norm_norm is_O.norm_norm
-#align asymptotics.is_O.of_norm_norm Asymptotics.IsO.of_norm_norm
-#align asymptotics.is_O.norm_norm Asymptotics.IsO.norm_norm
-
+#align asymptotics.is_O.of_norm_norm Asymptotics.IsBigO.of_norm_norm
+#align asymptotics.is_O.norm_norm Asymptotics.IsBigO.norm_norm
+
+/- warning: asymptotics.is_O.of_abs_abs -> Asymptotics.IsBigO.of_abs_abs is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x))) -> (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l u v)
+but is expected to have type
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x))) -> (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.norm Real.norm l u v)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_abs_abs Asymptotics.IsBigO.of_abs_absₓ'. -/
+/- warning: asymptotics.is_O.abs_abs -> Asymptotics.IsBigO.abs_abs is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l u v) -> (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x)))
+but is expected to have type
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.norm Real.norm l u v) -> (Asymptotics.IsBigO.{u1, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.abs_abs Asymptotics.IsBigO.abs_absₓ'. -/
alias is_O_abs_abs ↔ is_O.of_abs_abs is_O.abs_abs
-#align asymptotics.is_O.of_abs_abs Asymptotics.IsO.of_abs_abs
-#align asymptotics.is_O.abs_abs Asymptotics.IsO.abs_abs
-
-theorem isOCat_norm_norm : ((fun x => ‖f' x‖) =o[l] fun x => ‖g' x‖) ↔ f' =o[l] g' :=
- isOCat_norm_left.trans isOCat_norm_right
-#align asymptotics.is_o_norm_norm Asymptotics.isOCat_norm_norm
-
-theorem isOCat_abs_abs : ((fun x => |u x|) =o[l] fun x => |v x|) ↔ u =o[l] v :=
- isOCat_abs_left.trans isOCat_abs_right
-#align asymptotics.is_o_abs_abs Asymptotics.isOCat_abs_abs
-
+#align asymptotics.is_O.of_abs_abs Asymptotics.IsBigO.of_abs_abs
+#align asymptotics.is_O.abs_abs Asymptotics.IsBigO.abs_abs
+
+/- warning: asymptotics.is_o_norm_norm -> Asymptotics.isLittleO_norm_norm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g')
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_norm_norm Asymptotics.isLittleO_norm_normₓ'. -/
+theorem isLittleO_norm_norm : ((fun x => ‖f' x‖) =o[l] fun x => ‖g' x‖) ↔ f' =o[l] g' :=
+ isLittleO_norm_left.trans isLittleO_norm_right
+#align asymptotics.is_o_norm_norm Asymptotics.isLittleO_norm_norm
+
+/- warning: asymptotics.is_o_abs_abs -> Asymptotics.isLittleO_abs_abs is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, Iff (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x))) (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l u v)
+but is expected to have type
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, Iff (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x))) (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.norm Real.norm l u v)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_abs_abs Asymptotics.isLittleO_abs_absₓ'. -/
+theorem isLittleO_abs_abs : ((fun x => |u x|) =o[l] fun x => |v x|) ↔ u =o[l] v :=
+ isLittleO_abs_left.trans isLittleO_abs_right
+#align asymptotics.is_o_abs_abs Asymptotics.isLittleO_abs_abs
+
+/- warning: asymptotics.is_o.of_norm_norm -> Asymptotics.IsLittleO.of_norm_norm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x))) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g')
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x))) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_norm_norm Asymptotics.IsLittleO.of_norm_normₓ'. -/
+/- warning: asymptotics.is_o.norm_norm -> Asymptotics.IsLittleO.norm_norm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g' x)))
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u3, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Norm.norm.{u2} E' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (f' x)) (fun (x : α) => Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.norm_norm Asymptotics.IsLittleO.norm_normₓ'. -/
alias is_o_norm_norm ↔ is_o.of_norm_norm is_o.norm_norm
-#align asymptotics.is_o.of_norm_norm Asymptotics.IsOCat.of_norm_norm
-#align asymptotics.is_o.norm_norm Asymptotics.IsOCat.norm_norm
-
+#align asymptotics.is_o.of_norm_norm Asymptotics.IsLittleO.of_norm_norm
+#align asymptotics.is_o.norm_norm Asymptotics.IsLittleO.norm_norm
+
+/- warning: asymptotics.is_o.of_abs_abs -> Asymptotics.IsLittleO.of_abs_abs is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x))) -> (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l u v)
+but is expected to have type
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x))) -> (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.norm Real.norm l u v)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_abs_abs Asymptotics.IsLittleO.of_abs_absₓ'. -/
+/- warning: asymptotics.is_o.abs_abs -> Asymptotics.IsLittleO.abs_abs is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l u v) -> (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.hasNorm Real.hasNorm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.hasNeg Real.hasSup) (v x)))
+but is expected to have type
+ forall {α : Type.{u1}} {l : Filter.{u1} α} {u : α -> Real} {v : α -> Real}, (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.norm Real.norm l u v) -> (Asymptotics.IsLittleO.{u1, 0, 0} α Real Real Real.norm Real.norm l (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (u x)) (fun (x : α) => Abs.abs.{0} Real (Neg.toHasAbs.{0} Real Real.instNegReal Real.instSupReal) (v x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.abs_abs Asymptotics.IsLittleO.abs_absₓ'. -/
alias is_o_abs_abs ↔ is_o.of_abs_abs is_o.abs_abs
-#align asymptotics.is_o.of_abs_abs Asymptotics.IsOCat.of_abs_abs
-#align asymptotics.is_o.abs_abs Asymptotics.IsOCat.abs_abs
+#align asymptotics.is_o.of_abs_abs Asymptotics.IsLittleO.of_abs_abs
+#align asymptotics.is_o.abs_abs Asymptotics.IsLittleO.abs_abs
end NormAbs
/-! ### Simplification: negate -/
+/- warning: asymptotics.is_O_with_neg_right -> Asymptotics.isBigOWith_neg_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x))) (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_neg_right Asymptotics.isBigOWith_neg_rightₓ'. -/
@[simp]
-theorem isOWith_neg_right : (IsOWith c l f fun x => -g' x) ↔ IsOWith c l f g' := by
+theorem isBigOWith_neg_right : (IsBigOWith c l f fun x => -g' x) ↔ IsBigOWith c l f g' := by
simp only [is_O_with, norm_neg]
-#align asymptotics.is_O_with_neg_right Asymptotics.isOWith_neg_right
-
+#align asymptotics.is_O_with_neg_right Asymptotics.isBigOWith_neg_right
+
+/- warning: asymptotics.is_O_with.of_neg_right -> Asymptotics.IsBigOWith.of_neg_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x))) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_neg_right Asymptotics.IsBigOWith.of_neg_rightₓ'. -/
+/- warning: asymptotics.is_O_with.neg_right -> Asymptotics.IsBigOWith.neg_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x)))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f g') -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.neg_right Asymptotics.IsBigOWith.neg_rightₓ'. -/
alias is_O_with_neg_right ↔ is_O_with.of_neg_right is_O_with.neg_right
-#align asymptotics.is_O_with.of_neg_right Asymptotics.IsOWith.of_neg_right
-#align asymptotics.is_O_with.neg_right Asymptotics.IsOWith.neg_right
-
+#align asymptotics.is_O_with.of_neg_right Asymptotics.IsBigOWith.of_neg_right
+#align asymptotics.is_O_with.neg_right Asymptotics.IsBigOWith.neg_right
+
+/- warning: asymptotics.is_O_neg_right -> Asymptotics.isBigO_neg_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x))) (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_neg_right Asymptotics.isBigO_neg_rightₓ'. -/
@[simp]
-theorem isO_neg_right : (f =O[l] fun x => -g' x) ↔ f =O[l] g' :=
+theorem isBigO_neg_right : (f =O[l] fun x => -g' x) ↔ f =O[l] g' :=
by
unfold is_O
exact exists_congr fun _ => is_O_with_neg_right
-#align asymptotics.is_O_neg_right Asymptotics.isO_neg_right
-
+#align asymptotics.is_O_neg_right Asymptotics.isBigO_neg_right
+
+/- warning: asymptotics.is_O.of_neg_right -> Asymptotics.IsBigO.of_neg_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_neg_right Asymptotics.IsBigO.of_neg_rightₓ'. -/
+/- warning: asymptotics.is_O.neg_right -> Asymptotics.IsBigO.neg_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x)))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.neg_right Asymptotics.IsBigO.neg_rightₓ'. -/
alias is_O_neg_right ↔ is_O.of_neg_right is_O.neg_right
-#align asymptotics.is_O.of_neg_right Asymptotics.IsO.of_neg_right
-#align asymptotics.is_O.neg_right Asymptotics.IsO.neg_right
-
+#align asymptotics.is_O.of_neg_right Asymptotics.IsBigO.of_neg_right
+#align asymptotics.is_O.neg_right Asymptotics.IsBigO.neg_right
+
+/- warning: asymptotics.is_o_neg_right -> Asymptotics.isLittleO_neg_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x))) (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_neg_right Asymptotics.isLittleO_neg_rightₓ'. -/
@[simp]
-theorem isOCat_neg_right : (f =o[l] fun x => -g' x) ↔ f =o[l] g' :=
+theorem isLittleO_neg_right : (f =o[l] fun x => -g' x) ↔ f =o[l] g' :=
by
unfold is_o
exact forall₂_congr fun _ _ => is_O_with_neg_right
-#align asymptotics.is_o_neg_right Asymptotics.isOCat_neg_right
-
+#align asymptotics.is_o_neg_right Asymptotics.isLittleO_neg_right
+
+/- warning: asymptotics.is_o.of_neg_right -> Asymptotics.IsLittleO.of_neg_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x))) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_neg_right Asymptotics.IsLittleO.of_neg_rightₓ'. -/
+/- warning: asymptotics.is_o.neg_right -> Asymptotics.IsLittleO.neg_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x)))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.neg_right Asymptotics.IsLittleO.neg_rightₓ'. -/
alias is_o_neg_right ↔ is_o.of_neg_right is_o.neg_right
-#align asymptotics.is_o.of_neg_right Asymptotics.IsOCat.of_neg_right
-#align asymptotics.is_o.neg_right Asymptotics.IsOCat.neg_right
-
+#align asymptotics.is_o.of_neg_right Asymptotics.IsLittleO.of_neg_right
+#align asymptotics.is_o.neg_right Asymptotics.IsLittleO.neg_right
+
+/- warning: asymptotics.is_O_with_neg_left -> Asymptotics.isBigOWith_neg_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g) (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l f' g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g) (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l f' g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_neg_left Asymptotics.isBigOWith_neg_leftₓ'. -/
@[simp]
-theorem isOWith_neg_left : IsOWith c l (fun x => -f' x) g ↔ IsOWith c l f' g := by
+theorem isBigOWith_neg_left : IsBigOWith c l (fun x => -f' x) g ↔ IsBigOWith c l f' g := by
simp only [is_O_with, norm_neg]
-#align asymptotics.is_O_with_neg_left Asymptotics.isOWith_neg_left
-
+#align asymptotics.is_O_with_neg_left Asymptotics.isBigOWith_neg_left
+
+/- warning: asymptotics.is_O_with.of_neg_left -> Asymptotics.IsBigOWith.of_neg_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l f' g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l f' g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_neg_left Asymptotics.IsBigOWith.of_neg_leftₓ'. -/
+/- warning: asymptotics.is_O_with.neg_left -> Asymptotics.IsBigOWith.neg_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l f' g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l f' g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.neg_left Asymptotics.IsBigOWith.neg_leftₓ'. -/
alias is_O_with_neg_left ↔ is_O_with.of_neg_left is_O_with.neg_left
-#align asymptotics.is_O_with.of_neg_left Asymptotics.IsOWith.of_neg_left
-#align asymptotics.is_O_with.neg_left Asymptotics.IsOWith.neg_left
-
+#align asymptotics.is_O_with.of_neg_left Asymptotics.IsBigOWith.of_neg_left
+#align asymptotics.is_O_with.neg_left Asymptotics.IsBigOWith.neg_left
+
+/- warning: asymptotics.is_O_neg_left -> Asymptotics.isBigO_neg_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g) (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g) (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_neg_left Asymptotics.isBigO_neg_leftₓ'. -/
@[simp]
-theorem isO_neg_left : (fun x => -f' x) =O[l] g ↔ f' =O[l] g :=
+theorem isBigO_neg_left : (fun x => -f' x) =O[l] g ↔ f' =O[l] g :=
by
unfold is_O
exact exists_congr fun _ => is_O_with_neg_left
-#align asymptotics.is_O_neg_left Asymptotics.isO_neg_left
-
+#align asymptotics.is_O_neg_left Asymptotics.isBigO_neg_left
+
+/- warning: asymptotics.is_O.of_neg_left -> Asymptotics.IsBigO.of_neg_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_neg_left Asymptotics.IsBigO.of_neg_leftₓ'. -/
+/- warning: asymptotics.is_O.neg_left -> Asymptotics.IsBigO.neg_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.neg_left Asymptotics.IsBigO.neg_leftₓ'. -/
alias is_O_neg_left ↔ is_O.of_neg_left is_O.neg_left
-#align asymptotics.is_O.of_neg_left Asymptotics.IsO.of_neg_left
-#align asymptotics.is_O.neg_left Asymptotics.IsO.neg_left
-
+#align asymptotics.is_O.of_neg_left Asymptotics.IsBigO.of_neg_left
+#align asymptotics.is_O.neg_left Asymptotics.IsBigO.neg_left
+
+/- warning: asymptotics.is_o_neg_left -> Asymptotics.isLittleO_neg_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g) (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g) (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_neg_left Asymptotics.isLittleO_neg_leftₓ'. -/
@[simp]
-theorem isOCat_neg_left : (fun x => -f' x) =o[l] g ↔ f' =o[l] g :=
+theorem isLittleO_neg_left : (fun x => -f' x) =o[l] g ↔ f' =o[l] g :=
by
unfold is_o
exact forall₂_congr fun _ _ => is_O_with_neg_left
-#align asymptotics.is_o_neg_left Asymptotics.isOCat_neg_left
-
+#align asymptotics.is_o_neg_left Asymptotics.isLittleO_neg_left
+
+/- warning: asymptotics.is_o.of_neg_right -> Asymptotics.IsLittleO.of_neg_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f (fun (x : α) => Neg.neg.{u3} F' (SubNegMonoid.toHasNeg.{u3} F' (AddGroup.toSubNegMonoid.{u3} F' (SeminormedAddGroup.toAddGroup.{u3} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} F' _inst_5)))) (g' x))) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g')
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f (fun (x : α) => Neg.neg.{u1} F' (NegZeroClass.toNeg.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (g' x))) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_neg_right Asymptotics.IsLittleO.of_neg_rightₓ'. -/
+/- warning: asymptotics.is_o.neg_left -> Asymptotics.IsLittleO.neg_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u3} E' (SubNegMonoid.toHasNeg.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))) (f' x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => Neg.neg.{u2} E' (NegZeroClass.toNeg.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (f' x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.neg_left Asymptotics.IsLittleO.neg_leftₓ'. -/
alias is_o_neg_left ↔ is_o.of_neg_right is_o.neg_left
-#align asymptotics.is_o.of_neg_right Asymptotics.IsOCat.of_neg_right
-#align asymptotics.is_o.neg_left Asymptotics.IsOCat.neg_left
+#align asymptotics.is_o.of_neg_right Asymptotics.IsLittleO.of_neg_right
+#align asymptotics.is_o.neg_left Asymptotics.IsLittleO.neg_left
/-! ### Product of functions (right) -/
-theorem isOWith_fst_prod : IsOWith 1 l f' fun x => (f' x, g' x) :=
- isOWith_of_le l fun x => le_max_left _ _
-#align asymptotics.is_O_with_fst_prod Asymptotics.isOWith_fst_prod
-
-theorem isOWith_snd_prod : IsOWith 1 l g' fun x => (f' x, g' x) :=
- isOWith_of_le l fun x => le_max_right _ _
-#align asymptotics.is_O_with_snd_prod Asymptotics.isOWith_snd_prod
-
-theorem isO_fst_prod : f' =O[l] fun x => (f' x, g' x) :=
- isOWith_fst_prod.IsO
-#align asymptotics.is_O_fst_prod Asymptotics.isO_fst_prod
-
-theorem isO_snd_prod : g' =O[l] fun x => (f' x, g' x) :=
- isOWith_snd_prod.IsO
-#align asymptotics.is_O_snd_prod Asymptotics.isO_snd_prod
-
-theorem isO_fst_prod' {f' : α → E' × F'} : (fun x => (f' x).1) =O[l] f' := by
+/- warning: asymptotics.is_O_with_fst_prod -> Asymptotics.isBigOWith_fst_prod is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, Asymptotics.IsBigOWith.{u1, u2, max u2 u3} α E' (Prod.{u2, u3} E' F') (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) l f' (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x))
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, Asymptotics.IsBigOWith.{u3, u2, max u1 u2} α E' (Prod.{u2, u1} E' F') (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (Prod.toNorm.{u2, u1} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) l f' (fun (x : α) => Prod.mk.{u2, u1} E' F' (f' x) (g' x))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_fst_prod Asymptotics.isBigOWith_fst_prodₓ'. -/
+theorem isBigOWith_fst_prod : IsBigOWith 1 l f' fun x => (f' x, g' x) :=
+ isBigOWith_of_le l fun x => le_max_left _ _
+#align asymptotics.is_O_with_fst_prod Asymptotics.isBigOWith_fst_prod
+
+/- warning: asymptotics.is_O_with_snd_prod -> Asymptotics.isBigOWith_snd_prod is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, Asymptotics.IsBigOWith.{u1, u3, max u2 u3} α F' (Prod.{u2, u3} E' F') (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) l g' (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x))
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u1}} {F' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, Asymptotics.IsBigOWith.{u3, u2, max u2 u1} α F' (Prod.{u1, u2} E' F') (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (Prod.toNorm.{u1, u2} E' F' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) l g' (fun (x : α) => Prod.mk.{u1, u2} E' F' (f' x) (g' x))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_snd_prod Asymptotics.isBigOWith_snd_prodₓ'. -/
+theorem isBigOWith_snd_prod : IsBigOWith 1 l g' fun x => (f' x, g' x) :=
+ isBigOWith_of_le l fun x => le_max_right _ _
+#align asymptotics.is_O_with_snd_prod Asymptotics.isBigOWith_snd_prod
+
+/- warning: asymptotics.is_O_fst_prod -> Asymptotics.isBigO_fst_prod is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, Asymptotics.IsBigO.{u1, u2, max u2 u3} α E' (Prod.{u2, u3} E' F') (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) l f' (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x))
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, Asymptotics.IsBigO.{u3, u2, max u1 u2} α E' (Prod.{u2, u1} E' F') (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (Prod.toNorm.{u2, u1} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5)) l f' (fun (x : α) => Prod.mk.{u2, u1} E' F' (f' x) (g' x))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_fst_prod Asymptotics.isBigO_fst_prodₓ'. -/
+theorem isBigO_fst_prod : f' =O[l] fun x => (f' x, g' x) :=
+ isBigOWith_fst_prod.IsBigO
+#align asymptotics.is_O_fst_prod Asymptotics.isBigO_fst_prod
+
+/- warning: asymptotics.is_O_snd_prod -> Asymptotics.isBigO_snd_prod is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α}, Asymptotics.IsBigO.{u1, u3, max u2 u3} α F' (Prod.{u2, u3} E' F') (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) l g' (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x))
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u1}} {F' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u3} α}, Asymptotics.IsBigO.{u3, u2, max u2 u1} α F' (Prod.{u1, u2} E' F') (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (Prod.toNorm.{u1, u2} E' F' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5)) l g' (fun (x : α) => Prod.mk.{u1, u2} E' F' (f' x) (g' x))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_snd_prod Asymptotics.isBigO_snd_prodₓ'. -/
+theorem isBigO_snd_prod : g' =O[l] fun x => (f' x, g' x) :=
+ isBigOWith_snd_prod.IsBigO
+#align asymptotics.is_O_snd_prod Asymptotics.isBigO_snd_prod
+
+/- warning: asymptotics.is_O_fst_prod' -> Asymptotics.isBigO_fst_prod' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {l : Filter.{u1} α} {f' : α -> (Prod.{u2, u3} E' F')}, Asymptotics.IsBigO.{u1, u2, max u2 u3} α E' (Prod.{u2, u3} E' F') (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) l (fun (x : α) => Prod.fst.{u2, u3} E' F' (f' x)) f'
+but is expected to have type
+ forall {α : Type.{u1}} {E' : Type.{u3}} {F' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {l : Filter.{u1} α} {f' : α -> (Prod.{u3, u2} E' F')}, Asymptotics.IsBigO.{u1, u3, max u3 u2} α E' (Prod.{u3, u2} E' F') (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (Prod.toNorm.{u3, u2} E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5)) l (fun (x : α) => Prod.fst.{u3, u2} E' F' (f' x)) f'
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_fst_prod' Asymptotics.isBigO_fst_prod'ₓ'. -/
+theorem isBigO_fst_prod' {f' : α → E' × F'} : (fun x => (f' x).1) =O[l] f' := by
simpa [is_O, is_O_with] using is_O_fst_prod
-#align asymptotics.is_O_fst_prod' Asymptotics.isO_fst_prod'
-
-theorem isO_snd_prod' {f' : α → E' × F'} : (fun x => (f' x).2) =O[l] f' := by
+#align asymptotics.is_O_fst_prod' Asymptotics.isBigO_fst_prod'
+
+/- warning: asymptotics.is_O_snd_prod' -> Asymptotics.isBigO_snd_prod' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {l : Filter.{u1} α} {f' : α -> (Prod.{u2, u3} E' F')}, Asymptotics.IsBigO.{u1, u3, max u2 u3} α F' (Prod.{u2, u3} E' F') (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) l (fun (x : α) => Prod.snd.{u2, u3} E' F' (f' x)) f'
+but is expected to have type
+ forall {α : Type.{u1}} {E' : Type.{u3}} {F' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {l : Filter.{u1} α} {f' : α -> (Prod.{u3, u2} E' F')}, Asymptotics.IsBigO.{u1, u2, max u3 u2} α F' (Prod.{u3, u2} E' F') (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (Prod.toNorm.{u3, u2} E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5)) l (fun (x : α) => Prod.snd.{u3, u2} E' F' (f' x)) f'
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_snd_prod' Asymptotics.isBigO_snd_prod'ₓ'. -/
+theorem isBigO_snd_prod' {f' : α → E' × F'} : (fun x => (f' x).2) =O[l] f' := by
simpa [is_O, is_O_with] using is_O_snd_prod
-#align asymptotics.is_O_snd_prod' Asymptotics.isO_snd_prod'
+#align asymptotics.is_O_snd_prod' Asymptotics.isBigO_snd_prod'
section
variable (f' k')
-theorem IsOWith.prod_rightl (h : IsOWith c l f g') (hc : 0 ≤ c) :
- IsOWith c l f fun x => (g' x, k' x) :=
- (h.trans isOWith_fst_prod hc).congr_const (mul_one c)
-#align asymptotics.is_O_with.prod_rightl Asymptotics.IsOWith.prod_rightl
-
-theorem IsO.prod_rightl (h : f =O[l] g') : f =O[l] fun x => (g' x, k' x) :=
+/- warning: asymptotics.is_O_with.prod_rightl -> Asymptotics.IsBigOWith.prod_rightl is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {c : Real} {f : α -> E} {g' : α -> F'} (k' : α -> G') {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l f g') -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, max u3 u4} α E (Prod.{u3, u4} F' G') _inst_1 (Prod.hasNorm.{u3, u4} F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6)) c l f (fun (x : α) => Prod.mk.{u3, u4} F' G' (g' x) (k' x)))
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {F' : Type.{u2}} {G' : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {c : Real} {f : α -> E} {g' : α -> F'} (k' : α -> G') {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) c l f g') -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u4, u3, max u1 u2} α E (Prod.{u2, u1} F' G') _inst_1 (Prod.toNorm.{u2, u1} F' G' (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6)) c l f (fun (x : α) => Prod.mk.{u2, u1} F' G' (g' x) (k' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.prod_rightl Asymptotics.IsBigOWith.prod_rightlₓ'. -/
+theorem IsBigOWith.prod_rightl (h : IsBigOWith c l f g') (hc : 0 ≤ c) :
+ IsBigOWith c l f fun x => (g' x, k' x) :=
+ (h.trans isBigOWith_fst_prod hc).congr_const (mul_one c)
+#align asymptotics.is_O_with.prod_rightl Asymptotics.IsBigOWith.prod_rightl
+
+/- warning: asymptotics.is_O.prod_rightl -> Asymptotics.IsBigO.prod_rightl is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f : α -> E} {g' : α -> F'} (k' : α -> G') {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u1, u2, max u3 u4} α E (Prod.{u3, u4} F' G') _inst_1 (Prod.hasNorm.{u3, u4} F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6)) l f (fun (x : α) => Prod.mk.{u3, u4} F' G' (g' x) (k' x)))
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {F' : Type.{u2}} {G' : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f : α -> E} {g' : α -> F'} (k' : α -> G') {l : Filter.{u4} α}, (Asymptotics.IsBigO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u4, u3, max u1 u2} α E (Prod.{u2, u1} F' G') _inst_1 (Prod.toNorm.{u2, u1} F' G' (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6)) l f (fun (x : α) => Prod.mk.{u2, u1} F' G' (g' x) (k' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.prod_rightl Asymptotics.IsBigO.prod_rightlₓ'. -/
+theorem IsBigO.prod_rightl (h : f =O[l] g') : f =O[l] fun x => (g' x, k' x) :=
let ⟨c, cnonneg, hc⟩ := h.exists_nonneg
- (hc.prod_rightl k' cnonneg).IsO
-#align asymptotics.is_O.prod_rightl Asymptotics.IsO.prod_rightl
-
-theorem IsOCat.prod_rightl (h : f =o[l] g') : f =o[l] fun x => (g' x, k' x) :=
- IsOCat.of_isOWith fun c cpos => (h.forall_isOWith cpos).prod_rightl k' cpos.le
-#align asymptotics.is_o.prod_rightl Asymptotics.IsOCat.prod_rightl
-
-theorem IsOWith.prod_rightr (h : IsOWith c l f g') (hc : 0 ≤ c) :
- IsOWith c l f fun x => (f' x, g' x) :=
- (h.trans isOWith_snd_prod hc).congr_const (mul_one c)
-#align asymptotics.is_O_with.prod_rightr Asymptotics.IsOWith.prod_rightr
-
-theorem IsO.prod_rightr (h : f =O[l] g') : f =O[l] fun x => (f' x, g' x) :=
+ (hc.prod_rightl k' cnonneg).IsBigO
+#align asymptotics.is_O.prod_rightl Asymptotics.IsBigO.prod_rightl
+
+/- warning: asymptotics.is_o.prod_rightl -> Asymptotics.IsLittleO.prod_rightl is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f : α -> E} {g' : α -> F'} (k' : α -> G') {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u1, u2, max u3 u4} α E (Prod.{u3, u4} F' G') _inst_1 (Prod.hasNorm.{u3, u4} F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6)) l f (fun (x : α) => Prod.mk.{u3, u4} F' G' (g' x) (k' x)))
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {F' : Type.{u2}} {G' : Type.{u1}} [_inst_1 : Norm.{u3} E] [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f : α -> E} {g' : α -> F'} (k' : α -> G') {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u4, u3, max u1 u2} α E (Prod.{u2, u1} F' G') _inst_1 (Prod.toNorm.{u2, u1} F' G' (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6)) l f (fun (x : α) => Prod.mk.{u2, u1} F' G' (g' x) (k' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.prod_rightl Asymptotics.IsLittleO.prod_rightlₓ'. -/
+theorem IsLittleO.prod_rightl (h : f =o[l] g') : f =o[l] fun x => (g' x, k' x) :=
+ IsLittleO.of_isBigOWith fun c cpos => (h.forall_isBigOWith cpos).prod_rightl k' cpos.le
+#align asymptotics.is_o.prod_rightl Asymptotics.IsLittleO.prod_rightl
+
+/- warning: asymptotics.is_O_with.prod_rightr -> Asymptotics.IsBigOWith.prod_rightr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {E' : Type.{u3}} {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {c : Real} {f : α -> E} (f' : α -> E') {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u4} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) c l f g') -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, max u3 u4} α E (Prod.{u3, u4} E' F') _inst_1 (Prod.hasNorm.{u3, u4} E' F' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5)) c l f (fun (x : α) => Prod.mk.{u3, u4} E' F' (f' x) (g' x)))
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {E' : Type.{u1}} {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {c : Real} {f : α -> E} (f' : α -> E') {g' : α -> F'} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) c l f g') -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u4, u3, max u2 u1} α E (Prod.{u1, u2} E' F') _inst_1 (Prod.toNorm.{u1, u2} E' F' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5)) c l f (fun (x : α) => Prod.mk.{u1, u2} E' F' (f' x) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.prod_rightr Asymptotics.IsBigOWith.prod_rightrₓ'. -/
+theorem IsBigOWith.prod_rightr (h : IsBigOWith c l f g') (hc : 0 ≤ c) :
+ IsBigOWith c l f fun x => (f' x, g' x) :=
+ (h.trans isBigOWith_snd_prod hc).congr_const (mul_one c)
+#align asymptotics.is_O_with.prod_rightr Asymptotics.IsBigOWith.prod_rightr
+
+/- warning: asymptotics.is_O.prod_rightr -> Asymptotics.IsBigO.prod_rightr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {E' : Type.{u3}} {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {f : α -> E} (f' : α -> E') {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u4} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u1, u2, max u3 u4} α E (Prod.{u3, u4} E' F') _inst_1 (Prod.hasNorm.{u3, u4} E' F' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5)) l f (fun (x : α) => Prod.mk.{u3, u4} E' F' (f' x) (g' x)))
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {E' : Type.{u1}} {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {f : α -> E} (f' : α -> E') {g' : α -> F'} {l : Filter.{u4} α}, (Asymptotics.IsBigO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g') -> (Asymptotics.IsBigO.{u4, u3, max u2 u1} α E (Prod.{u1, u2} E' F') _inst_1 (Prod.toNorm.{u1, u2} E' F' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5)) l f (fun (x : α) => Prod.mk.{u1, u2} E' F' (f' x) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.prod_rightr Asymptotics.IsBigO.prod_rightrₓ'. -/
+theorem IsBigO.prod_rightr (h : f =O[l] g') : f =O[l] fun x => (f' x, g' x) :=
let ⟨c, cnonneg, hc⟩ := h.exists_nonneg
- (hc.prod_rightr f' cnonneg).IsO
-#align asymptotics.is_O.prod_rightr Asymptotics.IsO.prod_rightr
-
-theorem IsOCat.prod_rightr (h : f =o[l] g') : f =o[l] fun x => (f' x, g' x) :=
- IsOCat.of_isOWith fun c cpos => (h.forall_isOWith cpos).prod_rightr f' cpos.le
-#align asymptotics.is_o.prod_rightr Asymptotics.IsOCat.prod_rightr
+ (hc.prod_rightr f' cnonneg).IsBigO
+#align asymptotics.is_O.prod_rightr Asymptotics.IsBigO.prod_rightr
+
+/- warning: asymptotics.is_o.prod_rightr -> Asymptotics.IsLittleO.prod_rightr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {E' : Type.{u3}} {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {f : α -> E} (f' : α -> E') {g' : α -> F'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u4} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u1, u2, max u3 u4} α E (Prod.{u3, u4} E' F') _inst_1 (Prod.hasNorm.{u3, u4} E' F' (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5)) l f (fun (x : α) => Prod.mk.{u3, u4} E' F' (f' x) (g' x)))
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} {E' : Type.{u1}} {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {f : α -> E} (f' : α -> E') {g' : α -> F'} {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g') -> (Asymptotics.IsLittleO.{u4, u3, max u2 u1} α E (Prod.{u1, u2} E' F') _inst_1 (Prod.toNorm.{u1, u2} E' F' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5)) l f (fun (x : α) => Prod.mk.{u1, u2} E' F' (f' x) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.prod_rightr Asymptotics.IsLittleO.prod_rightrₓ'. -/
+theorem IsLittleO.prod_rightr (h : f =o[l] g') : f =o[l] fun x => (f' x, g' x) :=
+ IsLittleO.of_isBigOWith fun c cpos => (h.forall_isBigOWith cpos).prod_rightr f' cpos.le
+#align asymptotics.is_o.prod_rightr Asymptotics.IsLittleO.prod_rightr
end
-theorem IsOWith.prod_left_same (hf : IsOWith c l f' k') (hg : IsOWith c l g' k') :
- IsOWith c l (fun x => (f' x, g' x)) k' := by
+/- warning: asymptotics.is_O_with.prod_left_same -> Asymptotics.IsBigOWith.prod_left_same is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l f' k') -> (Asymptotics.IsBigOWith.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l g' k') -> (Asymptotics.IsBigOWith.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k')
+but is expected to have type
+ forall {α : Type.{u4}} {E' : Type.{u3}} {F' : Type.{u1}} {G' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_6 : SeminormedAddCommGroup.{u2} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E' G' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) c l f' k') -> (Asymptotics.IsBigOWith.{u4, u1, u2} α F' G' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) c l g' k') -> (Asymptotics.IsBigOWith.{u4, max u1 u3, u2} α (Prod.{u3, u1} E' F') G' (Prod.toNorm.{u3, u1} E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) c l (fun (x : α) => Prod.mk.{u3, u1} E' F' (f' x) (g' x)) k')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.prod_left_same Asymptotics.IsBigOWith.prod_left_sameₓ'. -/
+theorem IsBigOWith.prod_left_same (hf : IsBigOWith c l f' k') (hg : IsBigOWith c l g' k') :
+ IsBigOWith c l (fun x => (f' x, g' x)) k' := by
rw [is_O_with_iff] at * <;> filter_upwards [hf, hg]with x using max_le
-#align asymptotics.is_O_with.prod_left_same Asymptotics.IsOWith.prod_left_same
-
-theorem IsOWith.prod_left (hf : IsOWith c l f' k') (hg : IsOWith c' l g' k') :
- IsOWith (max c c') l (fun x => (f' x, g' x)) k' :=
+#align asymptotics.is_O_with.prod_left_same Asymptotics.IsBigOWith.prod_left_same
+
+/- warning: asymptotics.is_O_with.prod_left -> Asymptotics.IsBigOWith.prod_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {c : Real} {c' : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l f' k') -> (Asymptotics.IsBigOWith.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c' l g' k') -> (Asymptotics.IsBigOWith.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) (LinearOrder.max.{0} Real Real.linearOrder c c') l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k')
+but is expected to have type
+ forall {α : Type.{u4}} {E' : Type.{u3}} {F' : Type.{u1}} {G' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_6 : SeminormedAddCommGroup.{u2} G'] {c : Real} {c' : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, u3, u2} α E' G' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) c l f' k') -> (Asymptotics.IsBigOWith.{u4, u1, u2} α F' G' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) c' l g' k') -> (Asymptotics.IsBigOWith.{u4, max u1 u3, u2} α (Prod.{u3, u1} E' F') G' (Prod.toNorm.{u3, u1} E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) (Max.max.{0} Real (LinearOrderedRing.toMax.{0} Real Real.instLinearOrderedRingReal) c c') l (fun (x : α) => Prod.mk.{u3, u1} E' F' (f' x) (g' x)) k')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.prod_left Asymptotics.IsBigOWith.prod_leftₓ'. -/
+theorem IsBigOWith.prod_left (hf : IsBigOWith c l f' k') (hg : IsBigOWith c' l g' k') :
+ IsBigOWith (max c c') l (fun x => (f' x, g' x)) k' :=
(hf.weaken <| le_max_left c c').prod_left_same (hg.weaken <| le_max_right c c')
-#align asymptotics.is_O_with.prod_left Asymptotics.IsOWith.prod_left
-
-theorem IsOWith.prod_left_fst (h : IsOWith c l (fun x => (f' x, g' x)) k') : IsOWith c l f' k' :=
- (isOWith_fst_prod.trans h zero_le_one).congr_const <| one_mul c
-#align asymptotics.is_O_with.prod_left_fst Asymptotics.IsOWith.prod_left_fst
-
-theorem IsOWith.prod_left_snd (h : IsOWith c l (fun x => (f' x, g' x)) k') : IsOWith c l g' k' :=
- (isOWith_snd_prod.trans h zero_le_one).congr_const <| one_mul c
-#align asymptotics.is_O_with.prod_left_snd Asymptotics.IsOWith.prod_left_snd
-
-theorem isOWith_prod_left :
- IsOWith c l (fun x => (f' x, g' x)) k' ↔ IsOWith c l f' k' ∧ IsOWith c l g' k' :=
+#align asymptotics.is_O_with.prod_left Asymptotics.IsBigOWith.prod_left
+
+/- warning: asymptotics.is_O_with.prod_left_fst -> Asymptotics.IsBigOWith.prod_left_fst is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigOWith.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l f' k')
+but is expected to have type
+ forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) c l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigOWith.{u4, u2, u1} α E' G' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) c l f' k')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.prod_left_fst Asymptotics.IsBigOWith.prod_left_fstₓ'. -/
+theorem IsBigOWith.prod_left_fst (h : IsBigOWith c l (fun x => (f' x, g' x)) k') :
+ IsBigOWith c l f' k' :=
+ (isBigOWith_fst_prod.trans h zero_le_one).congr_const <| one_mul c
+#align asymptotics.is_O_with.prod_left_fst Asymptotics.IsBigOWith.prod_left_fst
+
+/- warning: asymptotics.is_O_with.prod_left_snd -> Asymptotics.IsBigOWith.prod_left_snd is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigOWith.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l g' k')
+but is expected to have type
+ forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsBigOWith.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) c l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigOWith.{u4, u3, u1} α F' G' (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) c l g' k')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.prod_left_snd Asymptotics.IsBigOWith.prod_left_sndₓ'. -/
+theorem IsBigOWith.prod_left_snd (h : IsBigOWith c l (fun x => (f' x, g' x)) k') :
+ IsBigOWith c l g' k' :=
+ (isBigOWith_snd_prod.trans h zero_le_one).congr_const <| one_mul c
+#align asymptotics.is_O_with.prod_left_snd Asymptotics.IsBigOWith.prod_left_snd
+
+/- warning: asymptotics.is_O_with_prod_left -> Asymptotics.isBigOWith_prod_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') (And (Asymptotics.IsBigOWith.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l f' k') (Asymptotics.IsBigOWith.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) c l g' k'))
+but is expected to have type
+ forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {c : Real} {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, Iff (Asymptotics.IsBigOWith.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) c l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') (And (Asymptotics.IsBigOWith.{u4, u2, u1} α E' G' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) c l f' k') (Asymptotics.IsBigOWith.{u4, u3, u1} α F' G' (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) c l g' k'))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_prod_left Asymptotics.isBigOWith_prod_leftₓ'. -/
+theorem isBigOWith_prod_left :
+ IsBigOWith c l (fun x => (f' x, g' x)) k' ↔ IsBigOWith c l f' k' ∧ IsBigOWith c l g' k' :=
⟨fun h => ⟨h.prod_left_fst, h.prod_left_snd⟩, fun h => h.1.prod_left_same h.2⟩
-#align asymptotics.is_O_with_prod_left Asymptotics.isOWith_prod_left
-
-theorem IsO.prod_left (hf : f' =O[l] k') (hg : g' =O[l] k') : (fun x => (f' x, g' x)) =O[l] k' :=
- let ⟨c, hf⟩ := hf.IsOWith
- let ⟨c', hg⟩ := hg.IsOWith
- (hf.prodLeft hg).IsO
-#align asymptotics.is_O.prod_left Asymptotics.IsO.prod_left
-
-theorem IsO.prod_left_fst : (fun x => (f' x, g' x)) =O[l] k' → f' =O[l] k' :=
- IsO.trans isO_fst_prod
-#align asymptotics.is_O.prod_left_fst Asymptotics.IsO.prod_left_fst
-
-theorem IsO.prod_left_snd : (fun x => (f' x, g' x)) =O[l] k' → g' =O[l] k' :=
- IsO.trans isO_snd_prod
-#align asymptotics.is_O.prod_left_snd Asymptotics.IsO.prod_left_snd
-
+#align asymptotics.is_O_with_prod_left Asymptotics.isBigOWith_prod_left
+
+/- warning: asymptotics.is_O.prod_left -> Asymptotics.IsBigO.prod_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l f' k') -> (Asymptotics.IsBigO.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l g' k') -> (Asymptotics.IsBigO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k')
+but is expected to have type
+ forall {α : Type.{u4}} {E' : Type.{u3}} {F' : Type.{u1}} {G' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_6 : SeminormedAddCommGroup.{u2} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsBigO.{u4, u3, u2} α E' G' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) l f' k') -> (Asymptotics.IsBigO.{u4, u1, u2} α F' G' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) l g' k') -> (Asymptotics.IsBigO.{u4, max u1 u3, u2} α (Prod.{u3, u1} E' F') G' (Prod.toNorm.{u3, u1} E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) l (fun (x : α) => Prod.mk.{u3, u1} E' F' (f' x) (g' x)) k')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.prod_left Asymptotics.IsBigO.prod_leftₓ'. -/
+theorem IsBigO.prod_left (hf : f' =O[l] k') (hg : g' =O[l] k') : (fun x => (f' x, g' x)) =O[l] k' :=
+ let ⟨c, hf⟩ := hf.IsBigOWith
+ let ⟨c', hg⟩ := hg.IsBigOWith
+ (hf.prodLeft hg).IsBigO
+#align asymptotics.is_O.prod_left Asymptotics.IsBigO.prod_left
+
+/- warning: asymptotics.is_O.prod_left_fst -> Asymptotics.IsBigO.prod_left_fst is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigO.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l f' k')
+but is expected to have type
+ forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsBigO.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigO.{u4, u2, u1} α E' G' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l f' k')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.prod_left_fst Asymptotics.IsBigO.prod_left_fstₓ'. -/
+theorem IsBigO.prod_left_fst : (fun x => (f' x, g' x)) =O[l] k' → f' =O[l] k' :=
+ IsBigO.trans isBigO_fst_prod
+#align asymptotics.is_O.prod_left_fst Asymptotics.IsBigO.prod_left_fst
+
+/- warning: asymptotics.is_O.prod_left_snd -> Asymptotics.IsBigO.prod_left_snd is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigO.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l g' k')
+but is expected to have type
+ forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsBigO.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsBigO.{u4, u3, u1} α F' G' (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l g' k')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.prod_left_snd Asymptotics.IsBigO.prod_left_sndₓ'. -/
+theorem IsBigO.prod_left_snd : (fun x => (f' x, g' x)) =O[l] k' → g' =O[l] k' :=
+ IsBigO.trans isBigO_snd_prod
+#align asymptotics.is_O.prod_left_snd Asymptotics.IsBigO.prod_left_snd
+
+/- warning: asymptotics.is_O_prod_left -> Asymptotics.isBigO_prod_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') (And (Asymptotics.IsBigO.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l f' k') (Asymptotics.IsBigO.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l g' k'))
+but is expected to have type
+ forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, Iff (Asymptotics.IsBigO.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') (And (Asymptotics.IsBigO.{u4, u2, u1} α E' G' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l f' k') (Asymptotics.IsBigO.{u4, u3, u1} α F' G' (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l g' k'))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_prod_left Asymptotics.isBigO_prod_leftₓ'. -/
@[simp]
-theorem isO_prod_left : (fun x => (f' x, g' x)) =O[l] k' ↔ f' =O[l] k' ∧ g' =O[l] k' :=
+theorem isBigO_prod_left : (fun x => (f' x, g' x)) =O[l] k' ↔ f' =O[l] k' ∧ g' =O[l] k' :=
⟨fun h => ⟨h.prod_left_fst, h.prod_left_snd⟩, fun h => h.1.prodLeft h.2⟩
-#align asymptotics.is_O_prod_left Asymptotics.isO_prod_left
-
-theorem IsOCat.prod_left (hf : f' =o[l] k') (hg : g' =o[l] k') : (fun x => (f' x, g' x)) =o[l] k' :=
- IsOCat.of_isOWith fun c hc => (hf.forall_isOWith hc).prod_left_same (hg.forall_isOWith hc)
-#align asymptotics.is_o.prod_left Asymptotics.IsOCat.prod_left
-
-theorem IsOCat.prod_left_fst : (fun x => (f' x, g' x)) =o[l] k' → f' =o[l] k' :=
- IsO.trans_isOCat isO_fst_prod
-#align asymptotics.is_o.prod_left_fst Asymptotics.IsOCat.prod_left_fst
-
-theorem IsOCat.prod_left_snd : (fun x => (f' x, g' x)) =o[l] k' → g' =o[l] k' :=
- IsO.trans_isOCat isO_snd_prod
-#align asymptotics.is_o.prod_left_snd Asymptotics.IsOCat.prod_left_snd
-
+#align asymptotics.is_O_prod_left Asymptotics.isBigO_prod_left
+
+/- warning: asymptotics.is_o.prod_left -> Asymptotics.IsLittleO.prod_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l f' k') -> (Asymptotics.IsLittleO.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l g' k') -> (Asymptotics.IsLittleO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k')
+but is expected to have type
+ forall {α : Type.{u4}} {E' : Type.{u3}} {F' : Type.{u1}} {G' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_6 : SeminormedAddCommGroup.{u2} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, u3, u2} α E' G' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) l f' k') -> (Asymptotics.IsLittleO.{u4, u1, u2} α F' G' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) l g' k') -> (Asymptotics.IsLittleO.{u4, max u1 u3, u2} α (Prod.{u3, u1} E' F') G' (Prod.toNorm.{u3, u1} E' F' (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u2} G' _inst_6) l (fun (x : α) => Prod.mk.{u3, u1} E' F' (f' x) (g' x)) k')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.prod_left Asymptotics.IsLittleO.prod_leftₓ'. -/
+theorem IsLittleO.prod_left (hf : f' =o[l] k') (hg : g' =o[l] k') :
+ (fun x => (f' x, g' x)) =o[l] k' :=
+ IsLittleO.of_isBigOWith fun c hc =>
+ (hf.forall_isBigOWith hc).prod_left_same (hg.forall_isBigOWith hc)
+#align asymptotics.is_o.prod_left Asymptotics.IsLittleO.prod_left
+
+/- warning: asymptotics.is_o.prod_left_fst -> Asymptotics.IsLittleO.prod_left_fst is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsLittleO.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l f' k')
+but is expected to have type
+ forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsLittleO.{u4, u2, u1} α E' G' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l f' k')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.prod_left_fst Asymptotics.IsLittleO.prod_left_fstₓ'. -/
+theorem IsLittleO.prod_left_fst : (fun x => (f' x, g' x)) =o[l] k' → f' =o[l] k' :=
+ IsBigO.trans_isLittleO isBigO_fst_prod
+#align asymptotics.is_o.prod_left_fst Asymptotics.IsLittleO.prod_left_fst
+
+/- warning: asymptotics.is_o.prod_left_snd -> Asymptotics.IsLittleO.prod_left_snd is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsLittleO.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l g' k')
+but is expected to have type
+ forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, (Asymptotics.IsLittleO.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') -> (Asymptotics.IsLittleO.{u4, u3, u1} α F' G' (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l g' k')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.prod_left_snd Asymptotics.IsLittleO.prod_left_sndₓ'. -/
+theorem IsLittleO.prod_left_snd : (fun x => (f' x, g' x)) =o[l] k' → g' =o[l] k' :=
+ IsBigO.trans_isLittleO isBigO_snd_prod
+#align asymptotics.is_o.prod_left_snd Asymptotics.IsLittleO.prod_left_snd
+
+/- warning: asymptotics.is_o_prod_left -> Asymptotics.isLittleO_prod_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u4}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u4} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, max u2 u3, u4} α (Prod.{u2, u3} E' F') G' (Prod.hasNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') (And (Asymptotics.IsLittleO.{u1, u2, u4} α E' G' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l f' k') (Asymptotics.IsLittleO.{u1, u3, u4} α F' G' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toHasNorm.{u4} G' _inst_6) l g' k'))
+but is expected to have type
+ forall {α : Type.{u4}} {E' : Type.{u2}} {F' : Type.{u3}} {G' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_6 : SeminormedAddCommGroup.{u1} G'] {f' : α -> E'} {g' : α -> F'} {k' : α -> G'} {l : Filter.{u4} α}, Iff (Asymptotics.IsLittleO.{u4, max u3 u2, u1} α (Prod.{u2, u3} E' F') G' (Prod.toNorm.{u2, u3} E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5)) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l (fun (x : α) => Prod.mk.{u2, u3} E' F' (f' x) (g' x)) k') (And (Asymptotics.IsLittleO.{u4, u2, u1} α E' G' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l f' k') (Asymptotics.IsLittleO.{u4, u3, u1} α F' G' (SeminormedAddCommGroup.toNorm.{u3} F' _inst_5) (SeminormedAddCommGroup.toNorm.{u1} G' _inst_6) l g' k'))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_prod_left Asymptotics.isLittleO_prod_leftₓ'. -/
@[simp]
-theorem isOCat_prod_left : (fun x => (f' x, g' x)) =o[l] k' ↔ f' =o[l] k' ∧ g' =o[l] k' :=
+theorem isLittleO_prod_left : (fun x => (f' x, g' x)) =o[l] k' ↔ f' =o[l] k' ∧ g' =o[l] k' :=
⟨fun h => ⟨h.prod_left_fst, h.prod_left_snd⟩, fun h => h.1.prodLeft h.2⟩
-#align asymptotics.is_o_prod_left Asymptotics.isOCat_prod_left
-
-theorem IsOWith.eq_zero_imp (h : IsOWith c l f'' g'') : ∀ᶠ x in l, g'' x = 0 → f'' x = 0 :=
+#align asymptotics.is_o_prod_left Asymptotics.isLittleO_prod_left
+
+/- warning: asymptotics.is_O_with.eq_zero_imp -> Asymptotics.IsBigOWith.eq_zero_imp is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {c : Real} {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u1} α}, (Asymptotics.IsBigOWith.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) c l f'' g'') -> (Filter.Eventually.{u1} α (fun (x : α) => (Eq.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))))))))) l)
+but is expected to have type
+ forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {c : Real} {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u3} α}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) c l f'' g'') -> (Filter.Eventually.{u3} α (fun (x : α) => (Eq.{succ u1} F'' (g'' x) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7)))))))))) l)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.eq_zero_imp Asymptotics.IsBigOWith.eq_zero_impₓ'. -/
+theorem IsBigOWith.eq_zero_imp (h : IsBigOWith c l f'' g'') : ∀ᶠ x in l, g'' x = 0 → f'' x = 0 :=
Eventually.mono h.bound fun x hx hg => norm_le_zero_iff.1 <| by simpa [hg] using hx
-#align asymptotics.is_O_with.eq_zero_imp Asymptotics.IsOWith.eq_zero_imp
-
-theorem IsO.eq_zero_imp (h : f'' =O[l] g'') : ∀ᶠ x in l, g'' x = 0 → f'' x = 0 :=
- let ⟨C, hC⟩ := h.IsOWith
+#align asymptotics.is_O_with.eq_zero_imp Asymptotics.IsBigOWith.eq_zero_imp
+
+/- warning: asymptotics.is_O.eq_zero_imp -> Asymptotics.IsBigO.eq_zero_imp is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f'' g'') -> (Filter.Eventually.{u1} α (fun (x : α) => (Eq.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))))))))) l)
+but is expected to have type
+ forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' g'') -> (Filter.Eventually.{u3} α (fun (x : α) => (Eq.{succ u1} F'' (g'' x) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7)))))))))) l)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.eq_zero_imp Asymptotics.IsBigO.eq_zero_impₓ'. -/
+theorem IsBigO.eq_zero_imp (h : f'' =O[l] g'') : ∀ᶠ x in l, g'' x = 0 → f'' x = 0 :=
+ let ⟨C, hC⟩ := h.IsBigOWith
hC.eq_zero_imp
-#align asymptotics.is_O.eq_zero_imp Asymptotics.IsO.eq_zero_imp
+#align asymptotics.is_O.eq_zero_imp Asymptotics.IsBigO.eq_zero_imp
/-! ### Addition and subtraction -/
@@ -1025,68 +2233,141 @@ section add_sub
variable {f₁ f₂ : α → E'} {g₁ g₂ : α → F'}
-theorem IsOWith.add (h₁ : IsOWith c₁ l f₁ g) (h₂ : IsOWith c₂ l f₂ g) :
- IsOWith (c₁ + c₂) l (fun x => f₁ x + f₂ x) g := by
+/- warning: asymptotics.is_O_with.add -> Asymptotics.IsBigOWith.add is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₂ l f₂ g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) c₁ c₂) l (fun (x : α) => HAdd.hAdd.{u3, u3, u3} E' E' E' (instHAdd.{u3} E' (AddZeroClass.toHasAdd.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₂ l f₂ g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) c₁ c₂) l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.add Asymptotics.IsBigOWith.addₓ'. -/
+theorem IsBigOWith.add (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : IsBigOWith c₂ l f₂ g) :
+ IsBigOWith (c₁ + c₂) l (fun x => f₁ x + f₂ x) g := by
rw [is_O_with] at * <;>
filter_upwards [h₁,
h₂]with x hx₁ hx₂ using calc
‖f₁ x + f₂ x‖ ≤ c₁ * ‖g x‖ + c₂ * ‖g x‖ := norm_add_le_of_le hx₁ hx₂
_ = (c₁ + c₂) * ‖g x‖ := (add_mul _ _ _).symm
-#align asymptotics.is_O_with.add Asymptotics.IsOWith.add
-
-theorem IsO.add (h₁ : f₁ =O[l] g) (h₂ : f₂ =O[l] g) : (fun x => f₁ x + f₂ x) =O[l] g :=
- let ⟨c₁, hc₁⟩ := h₁.IsOWith
- let ⟨c₂, hc₂⟩ := h₂.IsOWith
- (hc₁.add hc₂).IsO
-#align asymptotics.is_O.add Asymptotics.IsO.add
-
-theorem IsOCat.add (h₁ : f₁ =o[l] g) (h₂ : f₂ =o[l] g) : (fun x => f₁ x + f₂ x) =o[l] g :=
- IsOCat.of_isOWith fun c cpos =>
- ((h₁.forall_isOWith <| half_pos cpos).add (h₂.forall_isOWith <| half_pos cpos)).congr_const
+#align asymptotics.is_O_with.add Asymptotics.IsBigOWith.add
+
+/- warning: asymptotics.is_O.add -> Asymptotics.IsBigO.add is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u3, u3, u3} E' E' E' (instHAdd.{u3} E' (AddZeroClass.toHasAdd.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.add Asymptotics.IsBigO.addₓ'. -/
+theorem IsBigO.add (h₁ : f₁ =O[l] g) (h₂ : f₂ =O[l] g) : (fun x => f₁ x + f₂ x) =O[l] g :=
+ let ⟨c₁, hc₁⟩ := h₁.IsBigOWith
+ let ⟨c₂, hc₂⟩ := h₂.IsBigOWith
+ (hc₁.add hc₂).IsBigO
+#align asymptotics.is_O.add Asymptotics.IsBigO.add
+
+/- warning: asymptotics.is_o.add -> Asymptotics.IsLittleO.add is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u3, u3, u3} E' E' E' (instHAdd.{u3} E' (AddZeroClass.toHasAdd.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.add Asymptotics.IsLittleO.addₓ'. -/
+theorem IsLittleO.add (h₁ : f₁ =o[l] g) (h₂ : f₂ =o[l] g) : (fun x => f₁ x + f₂ x) =o[l] g :=
+ IsLittleO.of_isBigOWith fun c cpos =>
+ ((h₁.forall_isBigOWith <| half_pos cpos).add
+ (h₂.forall_isBigOWith <| half_pos cpos)).congr_const
(add_halves c)
-#align asymptotics.is_o.add Asymptotics.IsOCat.add
-
-theorem IsOCat.add_add (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =o[l] g₂) :
+#align asymptotics.is_o.add Asymptotics.IsLittleO.add
+
+/- warning: asymptotics.is_o.add_add -> Asymptotics.IsLittleO.add_add is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'} {g₁ : α -> F'} {g₂ : α -> F'}, (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f₁ g₁) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f₂ g₂) -> (Asymptotics.IsLittleO.{u1, u2, 0} α E' Real (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) Real.hasNorm l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toHasAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) (fun (x : α) => HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) (Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g₁ x)) (Norm.norm.{u3} F' (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (g₂ x))))
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'} {g₁ : α -> F'} {g₂ : α -> F'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f₁ g₁) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f₂ g₂) -> (Asymptotics.IsLittleO.{u3, u2, 0} α E' Real (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) Real.norm l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) (fun (x : α) => HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) (Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g₁ x)) (Norm.norm.{u1} F' (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (g₂ x))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.add_add Asymptotics.IsLittleO.add_addₓ'. -/
+theorem IsLittleO.add_add (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =o[l] g₂) :
(fun x => f₁ x + f₂ x) =o[l] fun x => ‖g₁ x‖ + ‖g₂ x‖ := by
refine' (h₁.trans_le fun x => _).add (h₂.trans_le _) <;> simp [abs_of_nonneg, add_nonneg]
-#align asymptotics.is_o.add_add Asymptotics.IsOCat.add_add
-
-theorem IsO.add_isOCat (h₁ : f₁ =O[l] g) (h₂ : f₂ =o[l] g) : (fun x => f₁ x + f₂ x) =O[l] g :=
- h₁.add h₂.IsO
-#align asymptotics.is_O.add_is_o Asymptotics.IsO.add_isOCat
-
-theorem IsOCat.add_isO (h₁ : f₁ =o[l] g) (h₂ : f₂ =O[l] g) : (fun x => f₁ x + f₂ x) =O[l] g :=
- h₁.IsO.add h₂
-#align asymptotics.is_o.add_is_O Asymptotics.IsOCat.add_isO
-
-theorem IsOWith.add_isOCat (h₁ : IsOWith c₁ l f₁ g) (h₂ : f₂ =o[l] g) (hc : c₁ < c₂) :
- IsOWith c₂ l (fun x => f₁ x + f₂ x) g :=
- (h₁.add (h₂.forall_isOWith (sub_pos.2 hc))).congr_const (add_sub_cancel'_right _ _)
-#align asymptotics.is_O_with.add_is_o Asymptotics.IsOWith.add_isOCat
-
-theorem IsOCat.add_isOWith (h₁ : f₁ =o[l] g) (h₂ : IsOWith c₁ l f₂ g) (hc : c₁ < c₂) :
- IsOWith c₂ l (fun x => f₁ x + f₂ x) g :=
- (h₂.add_isOCat h₁ hc).congr_left fun _ => add_comm _ _
-#align asymptotics.is_o.add_is_O_with Asymptotics.IsOCat.add_isOWith
-
-theorem IsOWith.sub (h₁ : IsOWith c₁ l f₁ g) (h₂ : IsOWith c₂ l f₂ g) :
- IsOWith (c₁ + c₂) l (fun x => f₁ x - f₂ x) g := by
+#align asymptotics.is_o.add_add Asymptotics.IsLittleO.add_add
+
+/- warning: asymptotics.is_O.add_is_o -> Asymptotics.IsBigO.add_isLittleO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u3, u3, u3} E' E' E' (instHAdd.{u3} E' (AddZeroClass.toHasAdd.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.add_is_o Asymptotics.IsBigO.add_isLittleOₓ'. -/
+theorem IsBigO.add_isLittleO (h₁ : f₁ =O[l] g) (h₂ : f₂ =o[l] g) : (fun x => f₁ x + f₂ x) =O[l] g :=
+ h₁.add h₂.IsBigO
+#align asymptotics.is_O.add_is_o Asymptotics.IsBigO.add_isLittleO
+
+/- warning: asymptotics.is_o.add_is_O -> Asymptotics.IsLittleO.add_isBigO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u3, u3, u3} E' E' E' (instHAdd.{u3} E' (AddZeroClass.toHasAdd.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.add_is_O Asymptotics.IsLittleO.add_isBigOₓ'. -/
+theorem IsLittleO.add_isBigO (h₁ : f₁ =o[l] g) (h₂ : f₂ =O[l] g) : (fun x => f₁ x + f₂ x) =O[l] g :=
+ h₁.IsBigO.add h₂
+#align asymptotics.is_o.add_is_O Asymptotics.IsLittleO.add_isBigO
+
+/- warning: asymptotics.is_O_with.add_is_o -> Asymptotics.IsBigOWith.add_isLittleO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (LT.lt.{0} Real Real.hasLt c₁ c₂) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₂ l (fun (x : α) => HAdd.hAdd.{u3, u3, u3} E' E' E' (instHAdd.{u3} E' (AddZeroClass.toHasAdd.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (LT.lt.{0} Real Real.instLTReal c₁ c₂) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₂ l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.add_is_o Asymptotics.IsBigOWith.add_isLittleOₓ'. -/
+theorem IsBigOWith.add_isLittleO (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : f₂ =o[l] g) (hc : c₁ < c₂) :
+ IsBigOWith c₂ l (fun x => f₁ x + f₂ x) g :=
+ (h₁.add (h₂.forall_isBigOWith (sub_pos.2 hc))).congr_const (add_sub_cancel'_right _ _)
+#align asymptotics.is_O_with.add_is_o Asymptotics.IsBigOWith.add_isLittleO
+
+/- warning: asymptotics.is_o.add_is_O_with -> Asymptotics.IsLittleO.add_isBigOWith is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₁ l f₂ g) -> (LT.lt.{0} Real Real.hasLt c₁ c₂) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₂ l (fun (x : α) => HAdd.hAdd.{u3, u3, u3} E' E' E' (instHAdd.{u3} E' (AddZeroClass.toHasAdd.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₁ l f₂ g) -> (LT.lt.{0} Real Real.instLTReal c₁ c₂) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₂ l (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.add_is_O_with Asymptotics.IsLittleO.add_isBigOWithₓ'. -/
+theorem IsLittleO.add_isBigOWith (h₁ : f₁ =o[l] g) (h₂ : IsBigOWith c₁ l f₂ g) (hc : c₁ < c₂) :
+ IsBigOWith c₂ l (fun x => f₁ x + f₂ x) g :=
+ (h₂.add_isLittleO h₁ hc).congr_left fun _ => add_comm _ _
+#align asymptotics.is_o.add_is_O_with Asymptotics.IsLittleO.add_isBigOWith
+
+/- warning: asymptotics.is_O_with.sub -> Asymptotics.IsBigOWith.sub is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₂ l f₂ g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) c₁ c₂) l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₂ l f₂ g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) c₁ c₂) l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.sub Asymptotics.IsBigOWith.subₓ'. -/
+theorem IsBigOWith.sub (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : IsBigOWith c₂ l f₂ g) :
+ IsBigOWith (c₁ + c₂) l (fun x => f₁ x - f₂ x) g := by
simpa only [sub_eq_add_neg] using h₁.add h₂.neg_left
-#align asymptotics.is_O_with.sub Asymptotics.IsOWith.sub
-
-theorem IsOWith.sub_isOCat (h₁ : IsOWith c₁ l f₁ g) (h₂ : f₂ =o[l] g) (hc : c₁ < c₂) :
- IsOWith c₂ l (fun x => f₁ x - f₂ x) g := by
+#align asymptotics.is_O_with.sub Asymptotics.IsBigOWith.sub
+
+/- warning: asymptotics.is_O_with.sub_is_o -> Asymptotics.IsBigOWith.sub_isLittleO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (LT.lt.{0} Real Real.hasLt c₁ c₂) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c₂ l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c₁ : Real} {c₂ : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₁ l f₁ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (LT.lt.{0} Real Real.instLTReal c₁ c₂) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c₂ l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.sub_is_o Asymptotics.IsBigOWith.sub_isLittleOₓ'. -/
+theorem IsBigOWith.sub_isLittleO (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : f₂ =o[l] g) (hc : c₁ < c₂) :
+ IsBigOWith c₂ l (fun x => f₁ x - f₂ x) g := by
simpa only [sub_eq_add_neg] using h₁.add_is_o h₂.neg_left hc
-#align asymptotics.is_O_with.sub_is_o Asymptotics.IsOWith.sub_isOCat
-
-theorem IsO.sub (h₁ : f₁ =O[l] g) (h₂ : f₂ =O[l] g) : (fun x => f₁ x - f₂ x) =O[l] g := by
+#align asymptotics.is_O_with.sub_is_o Asymptotics.IsBigOWith.sub_isLittleO
+
+/- warning: asymptotics.is_O.sub -> Asymptotics.IsBigO.sub is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.sub Asymptotics.IsBigO.subₓ'. -/
+theorem IsBigO.sub (h₁ : f₁ =O[l] g) (h₂ : f₂ =O[l] g) : (fun x => f₁ x - f₂ x) =O[l] g := by
simpa only [sub_eq_add_neg] using h₁.add h₂.neg_left
-#align asymptotics.is_O.sub Asymptotics.IsO.sub
-
-theorem IsOCat.sub (h₁ : f₁ =o[l] g) (h₂ : f₂ =o[l] g) : (fun x => f₁ x - f₂ x) =o[l] g := by
+#align asymptotics.is_O.sub Asymptotics.IsBigO.sub
+
+/- warning: asymptotics.is_o.sub -> Asymptotics.IsLittleO.sub is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.sub Asymptotics.IsLittleO.subₓ'. -/
+theorem IsLittleO.sub (h₁ : f₁ =o[l] g) (h₂ : f₂ =o[l] g) : (fun x => f₁ x - f₂ x) =o[l] g := by
simpa only [sub_eq_add_neg] using h₁.add h₂.neg_left
-#align asymptotics.is_o.sub Asymptotics.IsOCat.sub
+#align asymptotics.is_o.sub Asymptotics.IsLittleO.sub
end add_sub
@@ -1097,56 +2378,123 @@ section IsOOAsRel
variable {f₁ f₂ f₃ : α → E'}
-theorem IsOWith.symm (h : IsOWith c l (fun x => f₁ x - f₂ x) g) :
- IsOWith c l (fun x => f₂ x - f₁ x) g :=
+/- warning: asymptotics.is_O_with.symm -> Asymptotics.IsBigOWith.symm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₁ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.symm Asymptotics.IsBigOWith.symmₓ'. -/
+theorem IsBigOWith.symm (h : IsBigOWith c l (fun x => f₁ x - f₂ x) g) :
+ IsBigOWith c l (fun x => f₂ x - f₁ x) g :=
h.neg_left.congr_left fun x => neg_sub _ _
-#align asymptotics.is_O_with.symm Asymptotics.IsOWith.symm
-
-theorem isOWith_comm :
- IsOWith c l (fun x => f₁ x - f₂ x) g ↔ IsOWith c l (fun x => f₂ x - f₁ x) g :=
- ⟨IsOWith.symm, IsOWith.symm⟩
-#align asymptotics.is_O_with_comm Asymptotics.isOWith_comm
-
-theorem IsO.symm (h : (fun x => f₁ x - f₂ x) =O[l] g) : (fun x => f₂ x - f₁ x) =O[l] g :=
+#align asymptotics.is_O_with.symm Asymptotics.IsBigOWith.symm
+
+/- warning: asymptotics.is_O_with_comm -> Asymptotics.isBigOWith_comm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, Iff (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₁ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_comm Asymptotics.isBigOWith_commₓ'. -/
+theorem isBigOWith_comm :
+ IsBigOWith c l (fun x => f₁ x - f₂ x) g ↔ IsBigOWith c l (fun x => f₂ x - f₁ x) g :=
+ ⟨IsBigOWith.symm, IsBigOWith.symm⟩
+#align asymptotics.is_O_with_comm Asymptotics.isBigOWith_comm
+
+/- warning: asymptotics.is_O.symm -> Asymptotics.IsBigO.symm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₁ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.symm Asymptotics.IsBigO.symmₓ'. -/
+theorem IsBigO.symm (h : (fun x => f₁ x - f₂ x) =O[l] g) : (fun x => f₂ x - f₁ x) =O[l] g :=
h.neg_left.congr_left fun x => neg_sub _ _
-#align asymptotics.is_O.symm Asymptotics.IsO.symm
-
-theorem isO_comm : (fun x => f₁ x - f₂ x) =O[l] g ↔ (fun x => f₂ x - f₁ x) =O[l] g :=
- ⟨IsO.symm, IsO.symm⟩
-#align asymptotics.is_O_comm Asymptotics.isO_comm
-
-theorem IsOCat.symm (h : (fun x => f₁ x - f₂ x) =o[l] g) : (fun x => f₂ x - f₁ x) =o[l] g := by
+#align asymptotics.is_O.symm Asymptotics.IsBigO.symm
+
+/- warning: asymptotics.is_O_comm -> Asymptotics.isBigO_comm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, Iff (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₁ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_comm Asymptotics.isBigO_commₓ'. -/
+theorem isBigO_comm : (fun x => f₁ x - f₂ x) =O[l] g ↔ (fun x => f₂ x - f₁ x) =O[l] g :=
+ ⟨IsBigO.symm, IsBigO.symm⟩
+#align asymptotics.is_O_comm Asymptotics.isBigO_comm
+
+/- warning: asymptotics.is_o.symm -> Asymptotics.IsLittleO.symm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₁ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.symm Asymptotics.IsLittleO.symmₓ'. -/
+theorem IsLittleO.symm (h : (fun x => f₁ x - f₂ x) =o[l] g) : (fun x => f₂ x - f₁ x) =o[l] g := by
simpa only [neg_sub] using h.neg_left
-#align asymptotics.is_o.symm Asymptotics.IsOCat.symm
-
-theorem isOCat_comm : (fun x => f₁ x - f₂ x) =o[l] g ↔ (fun x => f₂ x - f₁ x) =o[l] g :=
- ⟨IsOCat.symm, IsOCat.symm⟩
-#align asymptotics.is_o_comm Asymptotics.isOCat_comm
-
-theorem IsOWith.triangle (h₁ : IsOWith c l (fun x => f₁ x - f₂ x) g)
- (h₂ : IsOWith c' l (fun x => f₂ x - f₃ x) g) : IsOWith (c + c') l (fun x => f₁ x - f₃ x) g :=
+#align asymptotics.is_o.symm Asymptotics.IsLittleO.symm
+
+/- warning: asymptotics.is_o_comm -> Asymptotics.isLittleO_comm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₁ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_comm Asymptotics.isLittleO_commₓ'. -/
+theorem isLittleO_comm : (fun x => f₁ x - f₂ x) =o[l] g ↔ (fun x => f₂ x - f₁ x) =o[l] g :=
+ ⟨IsLittleO.symm, IsLittleO.symm⟩
+#align asymptotics.is_o_comm Asymptotics.isLittleO_comm
+
+/- warning: asymptotics.is_O_with.triangle -> Asymptotics.IsBigOWith.triangle is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {c : Real} {c' : Real} {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'} {f₃ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c' l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₃ x)) g) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.hasAdd) c c') l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₃ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {c' : Real} {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'} {f₃ : α -> E'}, (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 c' l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₃ x)) g) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 (HAdd.hAdd.{0, 0, 0} Real Real Real (instHAdd.{0} Real Real.instAddReal) c c') l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₃ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.triangle Asymptotics.IsBigOWith.triangleₓ'. -/
+theorem IsBigOWith.triangle (h₁ : IsBigOWith c l (fun x => f₁ x - f₂ x) g)
+ (h₂ : IsBigOWith c' l (fun x => f₂ x - f₃ x) g) :
+ IsBigOWith (c + c') l (fun x => f₁ x - f₃ x) g :=
(h₁.add h₂).congr_left fun x => sub_add_sub_cancel _ _ _
-#align asymptotics.is_O_with.triangle Asymptotics.IsOWith.triangle
-
-theorem IsO.triangle (h₁ : (fun x => f₁ x - f₂ x) =O[l] g) (h₂ : (fun x => f₂ x - f₃ x) =O[l] g) :
- (fun x => f₁ x - f₃ x) =O[l] g :=
+#align asymptotics.is_O_with.triangle Asymptotics.IsBigOWith.triangle
+
+/- warning: asymptotics.is_O.triangle -> Asymptotics.IsBigO.triangle is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'} {f₃ : α -> E'}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₃ x)) g) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₃ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'} {f₃ : α -> E'}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₃ x)) g) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₃ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.triangle Asymptotics.IsBigO.triangleₓ'. -/
+theorem IsBigO.triangle (h₁ : (fun x => f₁ x - f₂ x) =O[l] g)
+ (h₂ : (fun x => f₂ x - f₃ x) =O[l] g) : (fun x => f₁ x - f₃ x) =O[l] g :=
(h₁.add h₂).congr_left fun x => sub_add_sub_cancel _ _ _
-#align asymptotics.is_O.triangle Asymptotics.IsO.triangle
-
-theorem IsOCat.triangle (h₁ : (fun x => f₁ x - f₂ x) =o[l] g)
+#align asymptotics.is_O.triangle Asymptotics.IsBigO.triangle
+
+/- warning: asymptotics.is_o.triangle -> Asymptotics.IsLittleO.triangle is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'} {f₃ : α -> E'}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₂ x) (f₃ x)) g) -> (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₃ x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'} {f₃ : α -> E'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₃ x)) g) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₃ x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.triangle Asymptotics.IsLittleO.triangleₓ'. -/
+theorem IsLittleO.triangle (h₁ : (fun x => f₁ x - f₂ x) =o[l] g)
(h₂ : (fun x => f₂ x - f₃ x) =o[l] g) : (fun x => f₁ x - f₃ x) =o[l] g :=
(h₁.add h₂).congr_left fun x => sub_add_sub_cancel _ _ _
-#align asymptotics.is_o.triangle Asymptotics.IsOCat.triangle
-
-theorem IsO.congr_of_sub (h : (fun x => f₁ x - f₂ x) =O[l] g) : f₁ =O[l] g ↔ f₂ =O[l] g :=
+#align asymptotics.is_o.triangle Asymptotics.IsLittleO.triangle
+
+/- warning: asymptotics.is_O.congr_of_sub -> Asymptotics.IsBigO.congr_of_sub is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Iff (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g))
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Iff (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.congr_of_sub Asymptotics.IsBigO.congr_of_subₓ'. -/
+theorem IsBigO.congr_of_sub (h : (fun x => f₁ x - f₂ x) =O[l] g) : f₁ =O[l] g ↔ f₂ =O[l] g :=
⟨fun h' => (h'.sub h).congr_left fun x => sub_sub_cancel _ _, fun h' =>
(h.add h').congr_left fun x => sub_add_cancel _ _⟩
-#align asymptotics.is_O.congr_of_sub Asymptotics.IsO.congr_of_sub
-
-theorem IsOCat.congr_of_sub (h : (fun x => f₁ x - f₂ x) =o[l] g) : f₁ =o[l] g ↔ f₂ =o[l] g :=
+#align asymptotics.is_O.congr_of_sub Asymptotics.IsBigO.congr_of_sub
+
+/- warning: asymptotics.is_o.congr_of_sub -> Asymptotics.IsLittleO.congr_of_sub is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u3, u3, u3} E' E' E' (instHSub.{u3} E' (SubNegMonoid.toHasSub.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₁ g) (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f₂ g))
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₁ x) (f₂ x)) g) -> (Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₁ g) (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f₂ g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.congr_of_sub Asymptotics.IsLittleO.congr_of_subₓ'. -/
+theorem IsLittleO.congr_of_sub (h : (fun x => f₁ x - f₂ x) =o[l] g) : f₁ =o[l] g ↔ f₂ =o[l] g :=
⟨fun h' => (h'.sub h).congr_left fun x => sub_sub_cancel _ _, fun h' =>
(h.add h').congr_left fun x => sub_add_cancel _ _⟩
-#align asymptotics.is_o.congr_of_sub Asymptotics.IsOCat.congr_of_sub
+#align asymptotics.is_o.congr_of_sub Asymptotics.IsLittleO.congr_of_sub
end IsOOAsRel
@@ -1157,97 +2505,193 @@ section ZeroConst
variable (g g' l)
-theorem isOCat_zero : (fun x => (0 : E')) =o[l] g' :=
- IsOCat.of_bound fun c hc =>
+/- warning: asymptotics.is_o_zero -> Asymptotics.isLittleO_zero is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] (g' : α -> F') (l : Filter.{u1} α), Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => OfNat.ofNat.{u2} E' 0 (OfNat.mk.{u2} E' 0 (Zero.zero.{u2} E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))))) g'
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] (g' : α -> F') (l : Filter.{u3} α), Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))))) g'
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_zero Asymptotics.isLittleO_zeroₓ'. -/
+theorem isLittleO_zero : (fun x => (0 : E')) =o[l] g' :=
+ IsLittleO.of_bound fun c hc =>
univ_mem' fun x => by simpa using mul_nonneg hc.le (norm_nonneg <| g' x)
-#align asymptotics.is_o_zero Asymptotics.isOCat_zero
-
-theorem isOWith_zero (hc : 0 ≤ c) : IsOWith c l (fun x => (0 : E')) g' :=
- IsOWith.of_bound <| univ_mem' fun x => by simpa using mul_nonneg hc (norm_nonneg <| g' x)
-#align asymptotics.is_O_with_zero Asymptotics.isOWith_zero
-
-theorem isOWith_zero' : IsOWith 0 l (fun x => (0 : E')) g :=
- IsOWith.of_bound <| univ_mem' fun x => by simp
-#align asymptotics.is_O_with_zero' Asymptotics.isOWith_zero'
-
-theorem isO_zero : (fun x => (0 : E')) =O[l] g :=
- isO_iff_isOWith.2 ⟨0, isOWith_zero' _ _⟩
-#align asymptotics.is_O_zero Asymptotics.isO_zero
-
-theorem isO_refl_left : (fun x => f' x - f' x) =O[l] g' :=
- (isO_zero g' l).congr_left fun x => (sub_self _).symm
-#align asymptotics.is_O_refl_left Asymptotics.isO_refl_left
-
-theorem isOCat_refl_left : (fun x => f' x - f' x) =o[l] g' :=
- (isOCat_zero g' l).congr_left fun x => (sub_self _).symm
-#align asymptotics.is_o_refl_left Asymptotics.isOCat_refl_left
+#align asymptotics.is_o_zero Asymptotics.isLittleO_zero
+
+/- warning: asymptotics.is_O_with_zero -> Asymptotics.isBigOWith_zero is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {c : Real} (g' : α -> F') (l : Filter.{u1} α), (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c l (fun (x : α) => OfNat.ofNat.{u2} E' 0 (OfNat.mk.{u2} E' 0 (Zero.zero.{u2} E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))))) g')
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {c : Real} (g' : α -> F') (l : Filter.{u3} α), (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l (fun (x : α) => OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))))) g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_zero Asymptotics.isBigOWith_zeroₓ'. -/
+theorem isBigOWith_zero (hc : 0 ≤ c) : IsBigOWith c l (fun x => (0 : E')) g' :=
+ IsBigOWith.of_bound <| univ_mem' fun x => by simpa using mul_nonneg hc (norm_nonneg <| g' x)
+#align asymptotics.is_O_with_zero Asymptotics.isBigOWith_zero
+
+/- warning: asymptotics.is_O_with_zero' -> Asymptotics.isBigOWith_zero' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] (g : α -> F) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) l (fun (x : α) => OfNat.ofNat.{u3} E' 0 (OfNat.mk.{u3} E' 0 (Zero.zero.{u3} E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))))) g
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] (g : α -> F) (l : Filter.{u3} α), Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) l (fun (x : α) => OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))))) g
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_zero' Asymptotics.isBigOWith_zero'ₓ'. -/
+theorem isBigOWith_zero' : IsBigOWith 0 l (fun x => (0 : E')) g :=
+ IsBigOWith.of_bound <| univ_mem' fun x => by simp
+#align asymptotics.is_O_with_zero' Asymptotics.isBigOWith_zero'
+
+/- warning: asymptotics.is_O_zero -> Asymptotics.isBigO_zero is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] (g : α -> F) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => OfNat.ofNat.{u3} E' 0 (OfNat.mk.{u3} E' 0 (Zero.zero.{u3} E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4))))))))) g
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] (g : α -> F) (l : Filter.{u3} α), Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))))) g
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_zero Asymptotics.isBigO_zeroₓ'. -/
+theorem isBigO_zero : (fun x => (0 : E')) =O[l] g :=
+ isBigO_iff_isBigOWith.2 ⟨0, isBigOWith_zero' _ _⟩
+#align asymptotics.is_O_zero Asymptotics.isBigO_zero
+
+/- warning: asymptotics.is_O_refl_left -> Asymptotics.isBigO_refl_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} (g' : α -> F') (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toHasSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f' x) (f' x)) g'
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} (g' : α -> F') (l : Filter.{u3} α), Asymptotics.IsBigO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f' x) (f' x)) g'
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_refl_left Asymptotics.isBigO_refl_leftₓ'. -/
+theorem isBigO_refl_left : (fun x => f' x - f' x) =O[l] g' :=
+ (isBigO_zero g' l).congr_left fun x => (sub_self _).symm
+#align asymptotics.is_O_refl_left Asymptotics.isBigO_refl_left
+
+/- warning: asymptotics.is_o_refl_left -> Asymptotics.isLittleO_refl_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {f' : α -> E'} (g' : α -> F') (l : Filter.{u1} α), Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toHasSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f' x) (f' x)) g'
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {f' : α -> E'} (g' : α -> F') (l : Filter.{u3} α), Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f' x) (f' x)) g'
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_refl_left Asymptotics.isLittleO_refl_leftₓ'. -/
+theorem isLittleO_refl_left : (fun x => f' x - f' x) =o[l] g' :=
+ (isLittleO_zero g' l).congr_left fun x => (sub_self _).symm
+#align asymptotics.is_o_refl_left Asymptotics.isLittleO_refl_left
variable {g g' l}
+/- warning: asymptotics.is_O_with_zero_right_iff -> Asymptotics.isBigOWith_zero_right_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {c : Real} {f'' : α -> E''} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) c l f'' (fun (x : α) => OfNat.ofNat.{u2} F' 0 (OfNat.mk.{u2} F' 0 (Zero.zero.{u2} F' (AddZeroClass.toHasZero.{u2} F' (AddMonoid.toAddZeroClass.{u2} F' (SubNegMonoid.toAddMonoid.{u2} F' (AddGroup.toSubNegMonoid.{u2} F' (SeminormedAddGroup.toAddGroup.{u2} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} F' _inst_5)))))))))) (Filter.EventuallyEq.{u1, u3} α E'' l f'' (OfNat.ofNat.{max u1 u3} (α -> E'') 0 (OfNat.mk.{max u1 u3} (α -> E'') 0 (Zero.zero.{max u1 u3} (α -> E'') (Pi.instZero.{u1, u3} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))))
+but is expected to have type
+ forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {c : Real} {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19139 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_zero_right_iff Asymptotics.isBigOWith_zero_right_iffₓ'. -/
@[simp]
-theorem isOWith_zero_right_iff : (IsOWith c l f'' fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 := by
+theorem isBigOWith_zero_right_iff : (IsBigOWith c l f'' fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 := by
simp only [is_O_with, exists_prop, true_and_iff, norm_zero, MulZeroClass.mul_zero,
norm_le_zero_iff, eventually_eq, Pi.zero_apply]
-#align asymptotics.is_O_with_zero_right_iff Asymptotics.isOWith_zero_right_iff
-
+#align asymptotics.is_O_with_zero_right_iff Asymptotics.isBigOWith_zero_right_iff
+
+/- warning: asymptotics.is_O_zero_right_iff -> Asymptotics.isBigO_zero_right_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {f'' : α -> E''} {l : Filter.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u2} F' 0 (OfNat.mk.{u2} F' 0 (Zero.zero.{u2} F' (AddZeroClass.toHasZero.{u2} F' (AddMonoid.toAddZeroClass.{u2} F' (SubNegMonoid.toAddMonoid.{u2} F' (AddGroup.toSubNegMonoid.{u2} F' (SeminormedAddGroup.toAddGroup.{u2} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} F' _inst_5)))))))))) (Filter.EventuallyEq.{u1, u3} α E'' l f'' (OfNat.ofNat.{max u1 u3} (α -> E'') 0 (OfNat.mk.{max u1 u3} (α -> E'') 0 (Zero.zero.{max u1 u3} (α -> E'') (Pi.instZero.{u1, u3} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))))
+but is expected to have type
+ forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19139 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_zero_right_iff Asymptotics.isBigO_zero_right_iffₓ'. -/
@[simp]
-theorem isO_zero_right_iff : (f'' =O[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 :=
+theorem isBigO_zero_right_iff : (f'' =O[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 :=
⟨fun h =>
- let ⟨c, hc⟩ := h.IsOWith
- isOWith_zero_right_iff.1 hc,
- fun h => (isOWith_zero_right_iff.2 h : IsOWith 1 _ _ _).IsO⟩
-#align asymptotics.is_O_zero_right_iff Asymptotics.isO_zero_right_iff
-
+ let ⟨c, hc⟩ := h.IsBigOWith
+ isBigOWith_zero_right_iff.1 hc,
+ fun h => (isBigOWith_zero_right_iff.2 h : IsBigOWith 1 _ _ _).IsBigO⟩
+#align asymptotics.is_O_zero_right_iff Asymptotics.isBigO_zero_right_iff
+
+/- warning: asymptotics.is_o_zero_right_iff -> Asymptotics.isLittleO_zero_right_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F' : Type.{u2}} {E'' : Type.{u3}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] [_inst_7 : NormedAddCommGroup.{u3} E''] {f'' : α -> E''} {l : Filter.{u1} α}, Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E'' F' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u2} F' 0 (OfNat.mk.{u2} F' 0 (Zero.zero.{u2} F' (AddZeroClass.toHasZero.{u2} F' (AddMonoid.toAddZeroClass.{u2} F' (SubNegMonoid.toAddMonoid.{u2} F' (AddGroup.toSubNegMonoid.{u2} F' (SeminormedAddGroup.toAddGroup.{u2} F' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} F' _inst_5)))))))))) (Filter.EventuallyEq.{u1, u3} α E'' l f'' (OfNat.ofNat.{max u1 u3} (α -> E'') 0 (OfNat.mk.{max u1 u3} (α -> E'') 0 (Zero.zero.{max u1 u3} (α -> E'') (Pi.instZero.{u1, u3} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))))
+but is expected to have type
+ forall {α : Type.{u3}} {F' : Type.{u1}} {E'' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_7 : NormedAddCommGroup.{u2} E''] {f'' : α -> E''} {l : Filter.{u3} α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f'' (fun (x : α) => OfNat.ofNat.{u1} F' 0 (Zero.toOfNat0.{u1} F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5))))))))) (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19139 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_zero_right_iff Asymptotics.isLittleO_zero_right_iffₓ'. -/
@[simp]
-theorem isOCat_zero_right_iff : (f'' =o[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 :=
- ⟨fun h => isO_zero_right_iff.1 h.IsO, fun h =>
- IsOCat.of_isOWith fun c hc => isOWith_zero_right_iff.2 h⟩
-#align asymptotics.is_o_zero_right_iff Asymptotics.isOCat_zero_right_iff
-
-theorem isOWith_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter α) :
- IsOWith (‖c‖ / ‖c'‖) l (fun x : α => c) fun x => c' :=
+theorem isLittleO_zero_right_iff : (f'' =o[l] fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 :=
+ ⟨fun h => isBigO_zero_right_iff.1 h.IsBigO, fun h =>
+ IsLittleO.of_isBigOWith fun c hc => isBigOWith_zero_right_iff.2 h⟩
+#align asymptotics.is_o_zero_right_iff Asymptotics.isLittleO_zero_right_iff
+
+/- warning: asymptotics.is_O_with_const_const -> Asymptotics.isBigOWith_const_const is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] (c : E) {c' : F''}, (Ne.{succ u3} F'' c' (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (forall (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (Norm.norm.{u2} E _inst_1 c) (Norm.norm.{u3} F'' (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) c')) l (fun (x : α) => c) (fun (x : α) => c'))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} {F'' : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u3} F''] (c : E) {c' : F''}, (Ne.{succ u3} F'' c' (OfNat.ofNat.{u3} F'' 0 (Zero.toOfNat0.{u3} F'' (NegZeroClass.toZero.{u3} F'' (SubNegZeroMonoid.toNegZeroClass.{u3} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} F'' (AddCommGroup.toDivisionAddCommMonoid.{u3} F'' (NormedAddCommGroup.toAddCommGroup.{u3} F'' _inst_8))))))))) -> (forall (l : Filter.{u2} α), Asymptotics.IsBigOWith.{u2, u1, u3} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (Norm.norm.{u1} E _inst_1 c) (Norm.norm.{u3} F'' (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) c')) l (fun (x : α) => c) (fun (x : α) => c'))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_const_const Asymptotics.isBigOWith_const_constₓ'. -/
+theorem isBigOWith_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter α) :
+ IsBigOWith (‖c‖ / ‖c'‖) l (fun x : α => c) fun x => c' :=
by
unfold is_O_with
apply univ_mem'
intro x
rw [mem_set_of_eq, div_mul_cancel]
rwa [Ne.def, norm_eq_zero]
-#align asymptotics.is_O_with_const_const Asymptotics.isOWith_const_const
-
-theorem isO_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter α) :
+#align asymptotics.is_O_with_const_const Asymptotics.isBigOWith_const_const
+
+/- warning: asymptotics.is_O_const_const -> Asymptotics.isBigO_const_const is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] (c : E) {c' : F''}, (Ne.{succ u3} F'' c' (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (forall (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l (fun (x : α) => c) (fun (x : α) => c'))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} {F'' : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u3} F''] (c : E) {c' : F''}, (Ne.{succ u3} F'' c' (OfNat.ofNat.{u3} F'' 0 (Zero.toOfNat0.{u3} F'' (NegZeroClass.toZero.{u3} F'' (SubNegZeroMonoid.toNegZeroClass.{u3} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} F'' (AddCommGroup.toDivisionAddCommMonoid.{u3} F'' (NormedAddCommGroup.toAddCommGroup.{u3} F'' _inst_8))))))))) -> (forall (l : Filter.{u2} α), Asymptotics.IsBigO.{u2, u1, u3} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) l (fun (x : α) => c) (fun (x : α) => c'))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_const Asymptotics.isBigO_const_constₓ'. -/
+theorem isBigO_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter α) :
(fun x : α => c) =O[l] fun x => c' :=
- (isOWith_const_const c hc' l).IsO
-#align asymptotics.is_O_const_const Asymptotics.isO_const_const
-
+ (isBigOWith_const_const c hc' l).IsBigO
+#align asymptotics.is_O_const_const Asymptotics.isBigO_const_const
+
+/- warning: asymptotics.is_O_const_const_iff -> Asymptotics.isBigO_const_const_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {c : E''} {c' : F''} (l : Filter.{u1} α) [_inst_14 : Filter.NeBot.{u1} α l], Iff (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l (fun (x : α) => c) (fun (x : α) => c')) ((Eq.{succ u3} F'' c' (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Eq.{succ u2} E'' c (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))))
+but is expected to have type
+ forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {c : E''} {c' : F''} (l : Filter.{u3} α) [_inst_14 : Filter.NeBot.{u3} α l], Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l (fun (x : α) => c) (fun (x : α) => c')) ((Eq.{succ u1} F'' c' (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Eq.{succ u2} E'' c (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_const_iff Asymptotics.isBigO_const_const_iffₓ'. -/
@[simp]
-theorem isO_const_const_iff {c : E''} {c' : F''} (l : Filter α) [l.ne_bot] :
+theorem isBigO_const_const_iff {c : E''} {c' : F''} (l : Filter α) [l.ne_bot] :
((fun x : α => c) =O[l] fun x => c') ↔ c' = 0 → c = 0 :=
by
rcases eq_or_ne c' 0 with (rfl | hc')
· simp [eventually_eq]
· simp [hc', is_O_const_const _ hc']
-#align asymptotics.is_O_const_const_iff Asymptotics.isO_const_const_iff
-
+#align asymptotics.is_O_const_const_iff Asymptotics.isBigO_const_const_iff
+
+/- warning: asymptotics.is_O_pure -> Asymptotics.isBigO_pure is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''} {x : α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} α x) f'' g'') ((Eq.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))))
+but is expected to have type
+ forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {g'' : α -> F''} {x : α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) (Pure.pure.{u3, u3} Filter.{u3} Filter.instPureFilter.{u3} α x) f'' g'') ((Eq.{succ u1} F'' (g'' x) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_pure Asymptotics.isBigO_pureₓ'. -/
@[simp]
-theorem isO_pure {x} : f'' =O[pure x] g'' ↔ g'' x = 0 → f'' x = 0 :=
+theorem isBigO_pure {x} : f'' =O[pure x] g'' ↔ g'' x = 0 → f'' x = 0 :=
calc
- f'' =O[pure x] g'' ↔ (fun y : α => f'' x) =O[pure x] fun _ => g'' x := isO_congr rfl rfl
- _ ↔ g'' x = 0 → f'' x = 0 := isO_const_const_iff _
+ f'' =O[pure x] g'' ↔ (fun y : α => f'' x) =O[pure x] fun _ => g'' x := isBigO_congr rfl rfl
+ _ ↔ g'' x = 0 → f'' x = 0 := isBigO_const_const_iff _
-#align asymptotics.is_O_pure Asymptotics.isO_pure
+#align asymptotics.is_O_pure Asymptotics.isBigO_pure
end ZeroConst
+/- warning: asymptotics.is_O_with_top -> Asymptotics.isBigOWith_top is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F}, Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c (Top.top.{u1} (Filter.{u1} α) (Filter.hasTop.{u1} α)) f g) (forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x))))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c (Top.top.{u3} (Filter.{u3} α) (Filter.instTopFilter.{u3} α)) f g) (forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_top Asymptotics.isBigOWith_topₓ'. -/
@[simp]
-theorem isOWith_top : IsOWith c ⊤ f g ↔ ∀ x, ‖f x‖ ≤ c * ‖g x‖ := by rw [is_O_with] <;> rfl
-#align asymptotics.is_O_with_top Asymptotics.isOWith_top
-
+theorem isBigOWith_top : IsBigOWith c ⊤ f g ↔ ∀ x, ‖f x‖ ≤ c * ‖g x‖ := by rw [is_O_with] <;> rfl
+#align asymptotics.is_O_with_top Asymptotics.isBigOWith_top
+
+/- warning: asymptotics.is_O_top -> Asymptotics.isBigO_top is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 (Top.top.{u1} (Filter.{u1} α) (Filter.hasTop.{u1} α)) f g) (Exists.{1} Real (fun (C : Real) => forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u3} F _inst_2 (g x)))))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 (Top.top.{u3} (Filter.{u3} α) (Filter.instTopFilter.{u3} α)) f g) (Exists.{1} Real (fun (C : Real) => forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u1} F _inst_2 (g x)))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_top Asymptotics.isBigO_topₓ'. -/
@[simp]
-theorem isO_top : f =O[⊤] g ↔ ∃ C, ∀ x, ‖f x‖ ≤ C * ‖g x‖ := by rw [is_O_iff] <;> rfl
-#align asymptotics.is_O_top Asymptotics.isO_top
-
+theorem isBigO_top : f =O[⊤] g ↔ ∃ C, ∀ x, ‖f x‖ ≤ C * ‖g x‖ := by rw [is_O_iff] <;> rfl
+#align asymptotics.is_O_top Asymptotics.isBigO_top
+
+/- warning: asymptotics.is_o_top -> Asymptotics.isLittleO_top is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (Top.top.{u1} (Filter.{u1} α) (Filter.hasTop.{u1} α)) f'' g'') (forall (x : α), Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))))))))
+but is expected to have type
+ forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {g'' : α -> F''}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) (Top.top.{u3} (Filter.{u3} α) (Filter.instTopFilter.{u3} α)) f'' g'') (forall (x : α), Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7)))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_top Asymptotics.isLittleO_topₓ'. -/
@[simp]
-theorem isOCat_top : f'' =o[⊤] g'' ↔ ∀ x, f'' x = 0 :=
+theorem isLittleO_top : f'' =o[⊤] g'' ↔ ∀ x, f'' x = 0 :=
by
refine' ⟨_, fun h => (is_o_zero g'' ⊤).congr (fun x => (h x).symm) fun x => rfl⟩
simp only [is_o_iff, eventually_top]
@@ -1258,123 +2702,244 @@ theorem isOCat_top : f'' =o[⊤] g'' ↔ ∀ x, f'' x = 0 :=
exact
le_of_tendsto_of_tendsto tendsto_const_nhds this
(eventually_nhdsWithin_iff.2 <| eventually_of_forall fun c hc => h hc x)
-#align asymptotics.is_o_top Asymptotics.isOCat_top
-
+#align asymptotics.is_o_top Asymptotics.isLittleO_top
+
+/- warning: asymptotics.is_O_with_principal -> Asymptotics.isBigOWith_principal is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {c : Real} {f : α -> E} {g : α -> F} {s : Set.{u1} α}, Iff (Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 c (Filter.principal.{u1} α s) f g) (forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x)))))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {c : Real} {f : α -> E} {g : α -> F} {s : Set.{u3} α}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 c (Filter.principal.{u3} α s) f g) (forall (x : α), (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x s) -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x)))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_principal Asymptotics.isBigOWith_principalₓ'. -/
@[simp]
-theorem isOWith_principal {s : Set α} : IsOWith c (𝓟 s) f g ↔ ∀ x ∈ s, ‖f x‖ ≤ c * ‖g x‖ := by
+theorem isBigOWith_principal {s : Set α} : IsBigOWith c (𝓟 s) f g ↔ ∀ x ∈ s, ‖f x‖ ≤ c * ‖g x‖ := by
rw [is_O_with] <;> rfl
-#align asymptotics.is_O_with_principal Asymptotics.isOWith_principal
-
-theorem isO_principal {s : Set α} : f =O[𝓟 s] g ↔ ∃ c, ∀ x ∈ s, ‖f x‖ ≤ c * ‖g x‖ := by
+#align asymptotics.is_O_with_principal Asymptotics.isBigOWith_principal
+
+/- warning: asymptotics.is_O_principal -> Asymptotics.isBigO_principal is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {g : α -> F} {s : Set.{u1} α}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 (Filter.principal.{u1} α s) f g) (Exists.{1} Real (fun (c : Real) => forall (x : α), (Membership.Mem.{u1, u1} α (Set.{u1} α) (Set.hasMem.{u1} α) x s) -> (LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c (Norm.norm.{u3} F _inst_2 (g x))))))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {g : α -> F} {s : Set.{u3} α}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 (Filter.principal.{u3} α s) f g) (Exists.{1} Real (fun (c : Real) => forall (x : α), (Membership.mem.{u3, u3} α (Set.{u3} α) (Set.instMembershipSet.{u3} α) x s) -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c (Norm.norm.{u1} F _inst_2 (g x))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_principal Asymptotics.isBigO_principalₓ'. -/
+theorem isBigO_principal {s : Set α} : f =O[𝓟 s] g ↔ ∃ c, ∀ x ∈ s, ‖f x‖ ≤ c * ‖g x‖ := by
rw [is_O_iff] <;> rfl
-#align asymptotics.is_O_principal Asymptotics.isO_principal
+#align asymptotics.is_O_principal Asymptotics.isBigO_principal
section
variable (F) [One F] [NormOneClass F]
-theorem isOWith_const_one (c : E) (l : Filter α) :
- IsOWith ‖c‖ l (fun x : α => c) fun x => (1 : F) := by simp [is_O_with_iff]
-#align asymptotics.is_O_with_const_one Asymptotics.isOWith_const_one
-
-theorem isO_const_one (c : E) (l : Filter α) : (fun x : α => c) =O[l] fun x => (1 : F) :=
- (isOWith_const_one F c l).IsO
-#align asymptotics.is_O_const_one Asymptotics.isO_const_one
-
-theorem isOCat_const_iff_isOCat_one {c : F''} (hc : c ≠ 0) :
+/- warning: asymptotics.is_O_with_const_one -> Asymptotics.isBigOWith_const_one is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14] (c : E) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u3} α E F _inst_1 _inst_2 (Norm.norm.{u2} E _inst_1 c) l (fun (x : α) => c) (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14)))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14] (c : E) (l : Filter.{u3} α), Asymptotics.IsBigOWith.{u3, u2, u1} α E F _inst_1 _inst_2 (Norm.norm.{u2} E _inst_1 c) l (fun (x : α) => c) (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_const_one Asymptotics.isBigOWith_const_oneₓ'. -/
+theorem isBigOWith_const_one (c : E) (l : Filter α) :
+ IsBigOWith ‖c‖ l (fun x : α => c) fun x => (1 : F) := by simp [is_O_with_iff]
+#align asymptotics.is_O_with_const_one Asymptotics.isBigOWith_const_one
+
+/- warning: asymptotics.is_O_const_one -> Asymptotics.isBigO_const_one is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14] (c : E) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l (fun (x : α) => c) (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14)))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14] (c : E) (l : Filter.{u3} α), Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l (fun (x : α) => c) (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_one Asymptotics.isBigO_const_oneₓ'. -/
+theorem isBigO_const_one (c : E) (l : Filter α) : (fun x : α => c) =O[l] fun x => (1 : F) :=
+ (isBigOWith_const_one F c l).IsBigO
+#align asymptotics.is_O_const_one Asymptotics.isBigO_const_one
+
+/- warning: asymptotics.is_o_const_iff_is_o_one -> Asymptotics.isLittleO_const_iff_isLittleO_one is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) {F'' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_8 : NormedAddCommGroup.{u4} F''] {f : α -> E} {l : Filter.{u1} α} [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14] {c : F''}, (Ne.{succ u4} F'' c (OfNat.ofNat.{u4} F'' 0 (OfNat.mk.{u4} F'' 0 (Zero.zero.{u4} F'' (AddZeroClass.toHasZero.{u4} F'' (AddMonoid.toAddZeroClass.{u4} F'' (SubNegMonoid.toAddMonoid.{u4} F'' (AddGroup.toSubNegMonoid.{u4} F'' (NormedAddGroup.toAddGroup.{u4} F'' (NormedAddCommGroup.toNormedAddGroup.{u4} F'' _inst_8)))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u4} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u4} F'' _inst_8) l f (fun (x : α) => c)) (Asymptotics.IsLittleO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14)))))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) {F'' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] [_inst_8 : NormedAddCommGroup.{u4} F''] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14] {c : F''}, (Ne.{succ u4} F'' c (OfNat.ofNat.{u4} F'' 0 (Zero.toOfNat0.{u4} F'' (NegZeroClass.toZero.{u4} F'' (SubNegZeroMonoid.toNegZeroClass.{u4} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u4} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u4} F'' (AddCommGroup.toDivisionAddCommMonoid.{u4} F'' (NormedAddCommGroup.toAddCommGroup.{u4} F'' _inst_8))))))))) -> (Iff (Asymptotics.IsLittleO.{u3, u2, u4} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u4} F'' _inst_8) l f (fun (x : α) => c)) (Asymptotics.IsLittleO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_iff_is_o_one Asymptotics.isLittleO_const_iff_isLittleO_oneₓ'. -/
+theorem isLittleO_const_iff_isLittleO_one {c : F''} (hc : c ≠ 0) :
(f =o[l] fun x => c) ↔ f =o[l] fun x => (1 : F) :=
- ⟨fun h => h.trans_isOWith (isOWith_const_one _ _ _) (norm_pos_iff.2 hc), fun h =>
- h.trans_isO <| isO_const_const _ hc _⟩
-#align asymptotics.is_o_const_iff_is_o_one Asymptotics.isOCat_const_iff_isOCat_one
-
+ ⟨fun h => h.trans_isBigOWith (isBigOWith_const_one _ _ _) (norm_pos_iff.2 hc), fun h =>
+ h.trans_isBigO <| isBigO_const_const _ hc _⟩
+#align asymptotics.is_o_const_iff_is_o_one Asymptotics.isLittleO_const_iff_isLittleO_one
+
+/- warning: asymptotics.is_o_one_iff -> Asymptotics.isLittleO_one_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} (F : Type.{u2}) {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : One.{u2} F] [_inst_15 : NormOneClass.{u2} F _inst_2 _inst_14], Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' (fun (x : α) => OfNat.ofNat.{u2} F 1 (OfNat.mk.{u2} F 1 (One.one.{u2} F _inst_14)))) (Filter.Tendsto.{u1, u3} α E' f' l (nhds.{u3} E' (UniformSpace.toTopologicalSpace.{u3} E' (PseudoMetricSpace.toUniformSpace.{u3} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} E' _inst_4))) (OfNat.ofNat.{u3} E' 0 (OfNat.mk.{u3} E' 0 (Zero.zero.{u3} E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (SubNegMonoid.toAddMonoid.{u3} E' (AddGroup.toSubNegMonoid.{u3} E' (SeminormedAddGroup.toAddGroup.{u3} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u3} E' _inst_4)))))))))))
+but is expected to have type
+ forall {α : Type.{u3}} (F : Type.{u1}) {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {f' : α -> E'} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))) (Filter.Tendsto.{u3, u2} α E' f' l (nhds.{u2} E' (UniformSpace.toTopologicalSpace.{u2} E' (PseudoMetricSpace.toUniformSpace.{u2} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E' _inst_4))) (OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_one_iff Asymptotics.isLittleO_one_iffₓ'. -/
@[simp]
-theorem isOCat_one_iff : f' =o[l] (fun x => 1 : α → F) ↔ Tendsto f' l (𝓝 0) := by
+theorem isLittleO_one_iff : f' =o[l] (fun x => 1 : α → F) ↔ Tendsto f' l (𝓝 0) := by
simp only [is_o_iff, norm_one, mul_one, metric.nhds_basis_closed_ball.tendsto_right_iff,
Metric.mem_closedBall, dist_zero_right]
-#align asymptotics.is_o_one_iff Asymptotics.isOCat_one_iff
-
+#align asymptotics.is_o_one_iff Asymptotics.isLittleO_one_iff
+
+/- warning: asymptotics.is_O_one_iff -> Asymptotics.isBigO_one_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14], Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14)))) (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x)))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], Iff (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))) (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35877 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35879 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35877 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35879) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_one_iff Asymptotics.isBigO_one_iffₓ'. -/
@[simp]
-theorem isO_one_iff : f =O[l] (fun x => 1 : α → F) ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x‖ :=
+theorem isBigO_one_iff : f =O[l] (fun x => 1 : α → F) ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x‖ :=
by
simp only [is_O_iff, norm_one, mul_one]
rfl
-#align asymptotics.is_O_one_iff Asymptotics.isO_one_iff
-
+#align asymptotics.is_O_one_iff Asymptotics.isBigO_one_iff
+
+/- warning: filter.is_bounded_under.is_O_one -> Filter.IsBoundedUnder.isBigO_one is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14], (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14))))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} (F : Type.{u1}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35877 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35879 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35877 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.35879) l (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14)))
+Case conversion may be inaccurate. Consider using '#align filter.is_bounded_under.is_O_one Filter.IsBoundedUnder.isBigO_oneₓ'. -/
alias is_O_one_iff ↔ _ _root_.filter.is_bounded_under.is_O_one
-#align filter.is_bounded_under.is_O_one Filter.IsBoundedUnder.isO_one
-
+#align filter.is_bounded_under.is_O_one Filter.IsBoundedUnder.isBigO_one
+
+/- warning: asymptotics.is_o_one_left_iff -> Asymptotics.isLittleO_one_left_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14], Iff (Asymptotics.IsLittleO.{u1, u3, u2} α F E _inst_2 _inst_1 l (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14))) f) (Filter.Tendsto.{u1, 0} α Real (fun (x : α) => Norm.norm.{u2} E _inst_1 (f x)) l (Filter.atTop.{0} Real Real.preorder))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u1}} (F : Type.{u2}) [_inst_1 : Norm.{u1} E] [_inst_2 : Norm.{u2} F] {f : α -> E} {l : Filter.{u3} α} [_inst_14 : One.{u2} F] [_inst_15 : NormOneClass.{u2} F _inst_2 _inst_14], Iff (Asymptotics.IsLittleO.{u3, u2, u1} α F E _inst_2 _inst_1 l (fun (x : α) => OfNat.ofNat.{u2} F 1 (One.toOfNat1.{u2} F _inst_14)) f) (Filter.Tendsto.{u3, 0} α Real (fun (x : α) => Norm.norm.{u1} E _inst_1 (f x)) l (Filter.atTop.{0} Real Real.instPreorderReal))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_one_left_iff Asymptotics.isLittleO_one_left_iffₓ'. -/
@[simp]
-theorem isOCat_one_left_iff : (fun x => 1 : α → F) =o[l] f ↔ Tendsto (fun x => ‖f x‖) l atTop :=
+theorem isLittleO_one_left_iff : (fun x => 1 : α → F) =o[l] f ↔ Tendsto (fun x => ‖f x‖) l atTop :=
calc
(fun x => 1 : α → F) =o[l] f ↔ ∀ n : ℕ, ∀ᶠ x in l, ↑n * ‖(1 : F)‖ ≤ ‖f x‖ :=
- isOCat_iff_nat_mul_le_aux <| Or.inl fun x => by simp only [norm_one, zero_le_one]
+ isLittleO_iff_nat_mul_le_aux <| Or.inl fun x => by simp only [norm_one, zero_le_one]
_ ↔ ∀ n : ℕ, True → ∀ᶠ x in l, ‖f x‖ ∈ Ici (n : ℝ) := by
simp only [norm_one, mul_one, true_imp_iff, mem_Ici]
_ ↔ Tendsto (fun x => ‖f x‖) l atTop :=
atTop_hasCountableBasis_of_archimedean.1.tendsto_right_iff.symm
-#align asymptotics.is_o_one_left_iff Asymptotics.isOCat_one_left_iff
-
-theorem Filter.Tendsto.isO_one {c : E'} (h : Tendsto f' l (𝓝 c)) : f' =O[l] (fun x => 1 : α → F) :=
- h.norm.isBoundedUnder_le.isO_one F
-#align filter.tendsto.is_O_one Filter.Tendsto.isO_one
-
-theorem IsO.trans_tendsto_nhds (hfg : f =O[l] g') {y : F'} (hg : Tendsto g' l (𝓝 y)) :
+#align asymptotics.is_o_one_left_iff Asymptotics.isLittleO_one_left_iff
+
+/- warning: filter.tendsto.is_O_one -> Filter.Tendsto.isBigO_one is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} (F : Type.{u2}) {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : One.{u2} F] [_inst_15 : NormOneClass.{u2} F _inst_2 _inst_14] {c : E'}, (Filter.Tendsto.{u1, u3} α E' f' l (nhds.{u3} E' (UniformSpace.toTopologicalSpace.{u3} E' (PseudoMetricSpace.toUniformSpace.{u3} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} E' _inst_4))) c)) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' (fun (x : α) => OfNat.ofNat.{u2} F 1 (OfNat.mk.{u2} F 1 (One.one.{u2} F _inst_14))))
+but is expected to have type
+ forall {α : Type.{u3}} (F : Type.{u1}) {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {f' : α -> E'} {l : Filter.{u3} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14] {c : E'}, (Filter.Tendsto.{u3, u2} α E' f' l (nhds.{u2} E' (UniformSpace.toTopologicalSpace.{u2} E' (PseudoMetricSpace.toUniformSpace.{u2} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E' _inst_4))) c)) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14)))
+Case conversion may be inaccurate. Consider using '#align filter.tendsto.is_O_one Filter.Tendsto.isBigO_oneₓ'. -/
+theorem Filter.Tendsto.isBigO_one {c : E'} (h : Tendsto f' l (𝓝 c)) :
+ f' =O[l] (fun x => 1 : α → F) :=
+ h.norm.isBoundedUnder_le.isBigO_one F
+#align filter.tendsto.is_O_one Filter.Tendsto.isBigO_one
+
+/- warning: asymptotics.is_O.trans_tendsto_nhds -> Asymptotics.IsBigO.trans_tendsto_nhds is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} (F : Type.{u3}) {F' : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] [_inst_5 : SeminormedAddCommGroup.{u4} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : One.{u3} F] [_inst_15 : NormOneClass.{u3} F _inst_2 _inst_14], (Asymptotics.IsBigO.{u1, u2, u4} α E F' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u4} F' _inst_5) l f g') -> (forall {y : F'}, (Filter.Tendsto.{u1, u4} α F' g' l (nhds.{u4} F' (UniformSpace.toTopologicalSpace.{u4} F' (PseudoMetricSpace.toUniformSpace.{u4} F' (SeminormedAddCommGroup.toPseudoMetricSpace.{u4} F' _inst_5))) y)) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u3} F 1 (OfNat.mk.{u3} F 1 (One.one.{u3} F _inst_14)))))
+but is expected to have type
+ forall {α : Type.{u4}} {E : Type.{u3}} (F : Type.{u1}) {F' : Type.{u2}} [_inst_1 : Norm.{u3} E] [_inst_2 : Norm.{u1} F] [_inst_5 : SeminormedAddCommGroup.{u2} F'] {f : α -> E} {g' : α -> F'} {l : Filter.{u4} α} [_inst_14 : One.{u1} F] [_inst_15 : NormOneClass.{u1} F _inst_2 _inst_14], (Asymptotics.IsBigO.{u4, u3, u2} α E F' _inst_1 (SeminormedAddCommGroup.toNorm.{u2} F' _inst_5) l f g') -> (forall {y : F'}, (Filter.Tendsto.{u4, u2} α F' g' l (nhds.{u2} F' (UniformSpace.toTopologicalSpace.{u2} F' (PseudoMetricSpace.toUniformSpace.{u2} F' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} F' _inst_5))) y)) -> (Asymptotics.IsBigO.{u4, u3, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => OfNat.ofNat.{u1} F 1 (One.toOfNat1.{u1} F _inst_14))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.trans_tendsto_nhds Asymptotics.IsBigO.trans_tendsto_nhdsₓ'. -/
+theorem IsBigO.trans_tendsto_nhds (hfg : f =O[l] g') {y : F'} (hg : Tendsto g' l (𝓝 y)) :
f =O[l] (fun x => 1 : α → F) :=
- hfg.trans <| hg.isO_one F
-#align asymptotics.is_O.trans_tendsto_nhds Asymptotics.IsO.trans_tendsto_nhds
+ hfg.trans <| hg.isBigO_one F
+#align asymptotics.is_O.trans_tendsto_nhds Asymptotics.IsBigO.trans_tendsto_nhds
end
-theorem isOCat_const_iff {c : F''} (hc : c ≠ 0) : (f'' =o[l] fun x => c) ↔ Tendsto f'' l (𝓝 0) :=
- (isOCat_const_iff_isOCat_one ℝ hc).trans (isOCat_one_iff _)
-#align asymptotics.is_o_const_iff Asymptotics.isOCat_const_iff
-
-theorem isOCat_id_const {c : F''} (hc : c ≠ 0) : (fun x : E'' => x) =o[𝓝 0] fun x => c :=
- (isOCat_const_iff hc).mpr (continuous_id.Tendsto 0)
-#align asymptotics.is_o_id_const Asymptotics.isOCat_id_const
-
-theorem Filter.IsBoundedUnder.isO_const (h : IsBoundedUnder (· ≤ ·) l (norm ∘ f)) {c : F''}
+/- warning: asymptotics.is_o_const_iff -> Asymptotics.isLittleO_const_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {l : Filter.{u1} α} {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f'' (fun (x : α) => c)) (Filter.Tendsto.{u1, u2} α E'' f'' l (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))))))))))
+but is expected to have type
+ forall {α : Type.{u2}} {E'' : Type.{u1}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {l : Filter.{u2} α} {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (Zero.toOfNat0.{u3} F'' (NegZeroClass.toZero.{u3} F'' (SubNegZeroMonoid.toNegZeroClass.{u3} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} F'' (AddCommGroup.toDivisionAddCommMonoid.{u3} F'' (NormedAddCommGroup.toAddCommGroup.{u3} F'' _inst_8))))))))) -> (Iff (Asymptotics.IsLittleO.{u2, u1, u3} α E'' F'' (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) l f'' (fun (x : α) => c)) (Filter.Tendsto.{u2, u1} α E'' f'' l (nhds.{u1} E'' (UniformSpace.toTopologicalSpace.{u1} E'' (PseudoMetricSpace.toUniformSpace.{u1} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E'' _inst_7)))) (OfNat.ofNat.{u1} E'' 0 (Zero.toOfNat0.{u1} E'' (NegZeroClass.toZero.{u1} E'' (SubNegZeroMonoid.toNegZeroClass.{u1} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E'' (AddCommGroup.toDivisionAddCommMonoid.{u1} E'' (NormedAddCommGroup.toAddCommGroup.{u1} E'' _inst_7)))))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_iff Asymptotics.isLittleO_const_iffₓ'. -/
+theorem isLittleO_const_iff {c : F''} (hc : c ≠ 0) : (f'' =o[l] fun x => c) ↔ Tendsto f'' l (𝓝 0) :=
+ (isLittleO_const_iff_isLittleO_one ℝ hc).trans (isLittleO_one_iff _)
+#align asymptotics.is_o_const_iff Asymptotics.isLittleO_const_iff
+
+/- warning: asymptotics.is_o_id_const -> Asymptotics.isLittleO_id_const is a dubious translation:
+lean 3 declaration is
+ forall {E'' : Type.{u1}} {F'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u2} F''] {c : F''}, (Ne.{succ u2} F'' c (OfNat.ofNat.{u2} F'' 0 (OfNat.mk.{u2} F'' 0 (Zero.zero.{u2} F'' (AddZeroClass.toHasZero.{u2} F'' (AddMonoid.toAddZeroClass.{u2} F'' (SubNegMonoid.toAddMonoid.{u2} F'' (AddGroup.toSubNegMonoid.{u2} F'' (NormedAddGroup.toAddGroup.{u2} F'' (NormedAddCommGroup.toNormedAddGroup.{u2} F'' _inst_8)))))))))) -> (Asymptotics.IsLittleO.{u1, u1, u2} E'' E'' F'' (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u2} F'' _inst_8) (nhds.{u1} E'' (UniformSpace.toTopologicalSpace.{u1} E'' (PseudoMetricSpace.toUniformSpace.{u1} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E'' _inst_7)))) (OfNat.ofNat.{u1} E'' 0 (OfNat.mk.{u1} E'' 0 (Zero.zero.{u1} E'' (AddZeroClass.toHasZero.{u1} E'' (AddMonoid.toAddZeroClass.{u1} E'' (SubNegMonoid.toAddMonoid.{u1} E'' (AddGroup.toSubNegMonoid.{u1} E'' (NormedAddGroup.toAddGroup.{u1} E'' (NormedAddCommGroup.toNormedAddGroup.{u1} E'' _inst_7)))))))))) (fun (x : E'') => x) (fun (x : E'') => c))
+but is expected to have type
+ forall {E'' : Type.{u1}} {F'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u2} F''] {c : F''}, (Ne.{succ u2} F'' c (OfNat.ofNat.{u2} F'' 0 (Zero.toOfNat0.{u2} F'' (NegZeroClass.toZero.{u2} F'' (SubNegZeroMonoid.toNegZeroClass.{u2} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} F'' (AddCommGroup.toDivisionAddCommMonoid.{u2} F'' (NormedAddCommGroup.toAddCommGroup.{u2} F'' _inst_8))))))))) -> (Asymptotics.IsLittleO.{u1, u1, u2} E'' E'' F'' (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) (nhds.{u1} E'' (UniformSpace.toTopologicalSpace.{u1} E'' (PseudoMetricSpace.toUniformSpace.{u1} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E'' _inst_7)))) (OfNat.ofNat.{u1} E'' 0 (Zero.toOfNat0.{u1} E'' (NegZeroClass.toZero.{u1} E'' (SubNegZeroMonoid.toNegZeroClass.{u1} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E'' (AddCommGroup.toDivisionAddCommMonoid.{u1} E'' (NormedAddCommGroup.toAddCommGroup.{u1} E'' _inst_7))))))))) (fun (x : E'') => x) (fun (x : E'') => c))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_id_const Asymptotics.isLittleO_id_constₓ'. -/
+theorem isLittleO_id_const {c : F''} (hc : c ≠ 0) : (fun x : E'' => x) =o[𝓝 0] fun x => c :=
+ (isLittleO_const_iff hc).mpr (continuous_id.Tendsto 0)
+#align asymptotics.is_o_id_const Asymptotics.isLittleO_id_const
+
+/- warning: filter.is_bounded_under.is_O_const -> Filter.IsBoundedUnder.isBigO_const is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {l : Filter.{u1} α}, (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f)) -> (forall {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f (fun (x : α) => c)))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F'' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u1} F''] {f : α -> E} {l : Filter.{u3} α}, (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36856 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36858 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36856 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.36858) l (Function.comp.{succ u3, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f)) -> (forall {c : F''}, (Ne.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f (fun (x : α) => c)))
+Case conversion may be inaccurate. Consider using '#align filter.is_bounded_under.is_O_const Filter.IsBoundedUnder.isBigO_constₓ'. -/
+theorem Filter.IsBoundedUnder.isBigO_const (h : IsBoundedUnder (· ≤ ·) l (norm ∘ f)) {c : F''}
(hc : c ≠ 0) : f =O[l] fun x => c :=
- (h.isO_one ℝ).trans (isO_const_const _ hc _)
-#align filter.is_bounded_under.is_O_const Filter.IsBoundedUnder.isO_const
-
-theorem isO_const_of_tendsto {y : E''} (h : Tendsto f'' l (𝓝 y)) {c : F''} (hc : c ≠ 0) :
+ (h.isBigO_one ℝ).trans (isBigO_const_const _ hc _)
+#align filter.is_bounded_under.is_O_const Filter.IsBoundedUnder.isBigO_const
+
+/- warning: asymptotics.is_O_const_of_tendsto -> Asymptotics.isBigO_const_of_tendsto is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {l : Filter.{u1} α} {y : E''}, (Filter.Tendsto.{u1, u2} α E'' f'' l (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) y)) -> (forall {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f'' (fun (x : α) => c)))
+but is expected to have type
+ forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {l : Filter.{u3} α} {y : E''}, (Filter.Tendsto.{u3, u2} α E'' f'' l (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) y)) -> (forall {c : F''}, (Ne.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' (fun (x : α) => c)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_of_tendsto Asymptotics.isBigO_const_of_tendstoₓ'. -/
+theorem isBigO_const_of_tendsto {y : E''} (h : Tendsto f'' l (𝓝 y)) {c : F''} (hc : c ≠ 0) :
f'' =O[l] fun x => c :=
- h.norm.isBoundedUnder_le.isO_const hc
-#align asymptotics.is_O_const_of_tendsto Asymptotics.isO_const_of_tendsto
-
-theorem IsO.isBoundedUnder_le {c : F} (h : f =O[l] fun x => c) :
+ h.norm.isBoundedUnder_le.isBigO_const hc
+#align asymptotics.is_O_const_of_tendsto Asymptotics.isBigO_const_of_tendsto
+
+/- warning: asymptotics.is_O.is_bounded_under_le -> Asymptotics.IsBigO.isBoundedUnder_le is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u3} F] {f : α -> E} {l : Filter.{u1} α} {c : F}, (Asymptotics.IsBigO.{u1, u2, u3} α E F _inst_1 _inst_2 l f (fun (x : α) => c)) -> (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_2 : Norm.{u1} F] {f : α -> E} {l : Filter.{u3} α} {c : F}, (Asymptotics.IsBigO.{u3, u2, u1} α E F _inst_1 _inst_2 l f (fun (x : α) => c)) -> (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37147 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37149 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37147 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37149) l (Function.comp.{succ u3, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.is_bounded_under_le Asymptotics.IsBigO.isBoundedUnder_leₓ'. -/
+theorem IsBigO.isBoundedUnder_le {c : F} (h : f =O[l] fun x => c) :
IsBoundedUnder (· ≤ ·) l (norm ∘ f) :=
let ⟨c', hc'⟩ := h.bound
⟨c' * ‖c‖, eventually_map.2 hc'⟩
-#align asymptotics.is_O.is_bounded_under_le Asymptotics.IsO.isBoundedUnder_le
-
-theorem isO_const_of_ne {c : F''} (hc : c ≠ 0) :
+#align asymptotics.is_O.is_bounded_under_le Asymptotics.IsBigO.isBoundedUnder_le
+
+/- warning: asymptotics.is_O_const_of_ne -> Asymptotics.isBigO_const_of_ne is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {l : Filter.{u1} α} {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f (fun (x : α) => c)) (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α E Real (Norm.norm.{u2} E _inst_1) f)))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} {F'' : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {l : Filter.{u2} α} {c : F''}, (Ne.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (Zero.toOfNat0.{u3} F'' (NegZeroClass.toZero.{u3} F'' (SubNegZeroMonoid.toNegZeroClass.{u3} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} F'' (AddCommGroup.toDivisionAddCommMonoid.{u3} F'' (NormedAddCommGroup.toAddCommGroup.{u3} F'' _inst_8))))))))) -> (Iff (Asymptotics.IsBigO.{u2, u1, u3} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) l f (fun (x : α) => c)) (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37317 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37319 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37317 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37319) l (Function.comp.{succ u2, succ u1, 1} α E Real (Norm.norm.{u1} E _inst_1) f)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_of_ne Asymptotics.isBigO_const_of_neₓ'. -/
+theorem isBigO_const_of_ne {c : F''} (hc : c ≠ 0) :
(f =O[l] fun x => c) ↔ IsBoundedUnder (· ≤ ·) l (norm ∘ f) :=
- ⟨fun h => h.isBoundedUnder_le, fun h => h.isO_const hc⟩
-#align asymptotics.is_O_const_of_ne Asymptotics.isO_const_of_ne
-
-theorem isO_const_iff {c : F''} :
+ ⟨fun h => h.isBoundedUnder_le, fun h => h.isBigO_const hc⟩
+#align asymptotics.is_O_const_of_ne Asymptotics.isBigO_const_of_ne
+
+/- warning: asymptotics.is_O_const_iff -> Asymptotics.isBigO_const_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {l : Filter.{u1} α} {c : F''}, Iff (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f'' (fun (x : α) => c)) (And ((Eq.{succ u3} F'' c (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Filter.EventuallyEq.{u1, u2} α E'' l f'' (OfNat.ofNat.{max u1 u2} (α -> E'') 0 (OfNat.mk.{max u1 u2} (α -> E'') 0 (Zero.zero.{max u1 u2} (α -> E'') (Pi.instZero.{u1, u2} α (fun (ᾰ : α) => E'') (fun (i : α) => AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))))) (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u2} E'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (f'' x))))
+but is expected to have type
+ forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {l : Filter.{u3} α} {c : F''}, Iff (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' (fun (x : α) => c)) (And ((Eq.{succ u1} F'' c (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (Filter.EventuallyEq.{u3, u2} α E'' l f'' (OfNat.ofNat.{max u3 u2} (α -> E'') 0 (Zero.toOfNat0.{max u3 u2} (α -> E'') (Pi.instZero.{u3, u2} α (fun (a._@.Mathlib.Order.Filter.Basic._hyg.19139 : α) => E'') (fun (i : α) => NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))) (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37483 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37485 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37483 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37485) l (fun (x : α) => Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (f'' x))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_iff Asymptotics.isBigO_const_iffₓ'. -/
+theorem isBigO_const_iff {c : F''} :
(f'' =O[l] fun x => c) ↔ (c = 0 → f'' =ᶠ[l] 0) ∧ IsBoundedUnder (· ≤ ·) l fun x => ‖f'' x‖ :=
by
refine' ⟨fun h => ⟨fun hc => is_O_zero_right_iff.1 (by rwa [← hc]), h.isBoundedUnder_le⟩, _⟩
rintro ⟨hcf, hf⟩
rcases eq_or_ne c 0 with (hc | hc)
- exacts[(hcf hc).trans_isO (is_O_zero _ _), hf.is_O_const hc]
-#align asymptotics.is_O_const_iff Asymptotics.isO_const_iff
-
-theorem isO_iff_isBoundedUnder_le_div (h : ∀ᶠ x in l, g'' x ≠ 0) :
+ exacts[(hcf hc).trans_isBigO (is_O_zero _ _), hf.is_O_const hc]
+#align asymptotics.is_O_const_iff Asymptotics.isBigO_const_iff
+
+/- warning: asymptotics.is_O_iff_is_bounded_under_le_div -> Asymptotics.isBigO_iff_isBoundedUnder_le_div is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {g'' : α -> F''} {l : Filter.{u1} α}, (Filter.Eventually.{u1} α (fun (x : α) => Ne.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) l) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f g'') (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (Norm.norm.{u2} E _inst_1 (f x)) (Norm.norm.{u3} F'' (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (g'' x)))))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u1}} {F'' : Type.{u2}} [_inst_1 : Norm.{u1} E] [_inst_8 : NormedAddCommGroup.{u2} F''] {f : α -> E} {g'' : α -> F''} {l : Filter.{u3} α}, (Filter.Eventually.{u3} α (fun (x : α) => Ne.{succ u2} F'' (g'' x) (OfNat.ofNat.{u2} F'' 0 (Zero.toOfNat0.{u2} F'' (NegZeroClass.toZero.{u2} F'' (SubNegZeroMonoid.toNegZeroClass.{u2} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} F'' (AddCommGroup.toDivisionAddCommMonoid.{u2} F'' (NormedAddCommGroup.toAddCommGroup.{u2} F'' _inst_8))))))))) l) -> (Iff (Asymptotics.IsBigO.{u3, u1, u2} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) l f g'') (Filter.IsBoundedUnder.{0, u3} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37718 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37720 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37718 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.37720) l (fun (x : α) => HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (Norm.norm.{u1} E _inst_1 (f x)) (Norm.norm.{u2} F'' (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) (g'' x)))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_is_bounded_under_le_div Asymptotics.isBigO_iff_isBoundedUnder_le_divₓ'. -/
+theorem isBigO_iff_isBoundedUnder_le_div (h : ∀ᶠ x in l, g'' x ≠ 0) :
f =O[l] g'' ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x‖ / ‖g'' x‖ :=
by
simp only [is_O_iff, is_bounded_under, is_bounded, eventually_map]
exact
exists_congr fun c =>
eventually_congr <| h.mono fun x hx => (div_le_iff <| norm_pos_iff.2 hx).symm
-#align asymptotics.is_O_iff_is_bounded_under_le_div Asymptotics.isO_iff_isBoundedUnder_le_div
-
+#align asymptotics.is_O_iff_is_bounded_under_le_div Asymptotics.isBigO_iff_isBoundedUnder_le_div
+
+/- warning: asymptotics.is_O_const_left_iff_pos_le_norm -> Asymptotics.isBigO_const_left_iff_pos_le_norm is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {E'' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_7 : NormedAddCommGroup.{u3} E''] {f' : α -> E'} {l : Filter.{u1} α} {c : E''}, (Ne.{succ u3} E'' c (OfNat.ofNat.{u3} E'' 0 (OfNat.mk.{u3} E'' 0 (Zero.zero.{u3} E'' (AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u3, u2} α E'' E' (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) l (fun (x : α) => c) f') (Exists.{1} Real (fun (b : Real) => And (LT.lt.{0} Real Real.hasLt (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) b) (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe b (Norm.norm.{u2} E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (f' x))) l))))
+but is expected to have type
+ forall {α : Type.{u2}} {E' : Type.{u1}} {E'' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_7 : NormedAddCommGroup.{u3} E''] {f' : α -> E'} {l : Filter.{u2} α} {c : E''}, (Ne.{succ u3} E'' c (OfNat.ofNat.{u3} E'' 0 (Zero.toOfNat0.{u3} E'' (NegZeroClass.toZero.{u3} E'' (SubNegZeroMonoid.toNegZeroClass.{u3} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E'' (AddCommGroup.toDivisionAddCommMonoid.{u3} E'' (NormedAddCommGroup.toAddCommGroup.{u3} E'' _inst_7))))))))) -> (Iff (Asymptotics.IsBigO.{u2, u3, u1} α E'' E' (NormedAddCommGroup.toNorm.{u3} E'' _inst_7) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l (fun (x : α) => c) f') (Exists.{1} Real (fun (b : Real) => And (LT.lt.{0} Real Real.instLTReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) b) (Filter.Eventually.{u2} α (fun (x : α) => LE.le.{0} Real Real.instLEReal b (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (f' x))) l))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_left_iff_pos_le_norm Asymptotics.isBigO_const_left_iff_pos_le_normₓ'. -/
/-- `(λ x, c) =O[l] f` if and only if `f` is bounded away from zero. -/
-theorem isO_const_left_iff_pos_le_norm {c : E''} (hc : c ≠ 0) :
+theorem isBigO_const_left_iff_pos_le_norm {c : E''} (hc : c ≠ 0) :
(fun x => c) =O[l] f' ↔ ∃ b, 0 < b ∧ ∀ᶠ x in l, b ≤ ‖f' x‖ :=
by
constructor
@@ -1386,7 +2951,7 @@ theorem isO_const_left_iff_pos_le_norm {c : E''} (hc : c ≠ 0) :
refine' is_O.of_bound (‖c‖ / b) (hb.mono fun x hx => _)
rw [div_mul_eq_mul_div, mul_div_assoc]
exact le_mul_of_one_le_right (norm_nonneg _) ((one_le_div hb₀).2 hx)
-#align asymptotics.is_O_const_left_iff_pos_le_norm Asymptotics.isO_const_left_iff_pos_le_norm
+#align asymptotics.is_O_const_left_iff_pos_le_norm Asymptotics.isBigO_const_left_iff_pos_le_norm
section
@@ -1394,206 +2959,426 @@ variable (𝕜)
end
-theorem IsO.trans_tendsto (hfg : f'' =O[l] g'') (hg : Tendsto g'' l (𝓝 0)) : Tendsto f'' l (𝓝 0) :=
- (isOCat_one_iff ℝ).1 <| hfg.trans_isOCat <| (isOCat_one_iff ℝ).2 hg
-#align asymptotics.is_O.trans_tendsto Asymptotics.IsO.trans_tendsto
-
-theorem IsOCat.trans_tendsto (hfg : f'' =o[l] g'') (hg : Tendsto g'' l (𝓝 0)) :
+/- warning: asymptotics.is_O.trans_tendsto -> Asymptotics.IsBigO.trans_tendsto is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u1} α}, (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f'' g'') -> (Filter.Tendsto.{u1, u3} α F'' g'' l (nhds.{u3} F'' (UniformSpace.toTopologicalSpace.{u3} F'' (PseudoMetricSpace.toUniformSpace.{u3} F'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F'' _inst_8)))) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8))))))))))) -> (Filter.Tendsto.{u1, u2} α E'' f'' l (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))))
+but is expected to have type
+ forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u3} α}, (Asymptotics.IsBigO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' g'') -> (Filter.Tendsto.{u3, u1} α F'' g'' l (nhds.{u1} F'' (UniformSpace.toTopologicalSpace.{u1} F'' (PseudoMetricSpace.toUniformSpace.{u1} F'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} F'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} F'' _inst_8)))) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8)))))))))) -> (Filter.Tendsto.{u3, u2} α E'' f'' l (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.trans_tendsto Asymptotics.IsBigO.trans_tendstoₓ'. -/
+theorem IsBigO.trans_tendsto (hfg : f'' =O[l] g'') (hg : Tendsto g'' l (𝓝 0)) :
Tendsto f'' l (𝓝 0) :=
- hfg.IsO.trans_tendsto hg
-#align asymptotics.is_o.trans_tendsto Asymptotics.IsOCat.trans_tendsto
+ (isLittleO_one_iff ℝ).1 <| hfg.trans_isLittleO <| (isLittleO_one_iff ℝ).2 hg
+#align asymptotics.is_O.trans_tendsto Asymptotics.IsBigO.trans_tendsto
+
+/- warning: asymptotics.is_o.trans_tendsto -> Asymptotics.IsLittleO.trans_tendsto is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l f'' g'') -> (Filter.Tendsto.{u1, u3} α F'' g'' l (nhds.{u3} F'' (UniformSpace.toTopologicalSpace.{u3} F'' (PseudoMetricSpace.toUniformSpace.{u3} F'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u3} F'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} F'' _inst_8)))) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8))))))))))) -> (Filter.Tendsto.{u1, u2} α E'' f'' l (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))))
+but is expected to have type
+ forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {g'' : α -> F''} {l : Filter.{u3} α}, (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l f'' g'') -> (Filter.Tendsto.{u3, u1} α F'' g'' l (nhds.{u1} F'' (UniformSpace.toTopologicalSpace.{u1} F'' (PseudoMetricSpace.toUniformSpace.{u1} F'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} F'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} F'' _inst_8)))) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8)))))))))) -> (Filter.Tendsto.{u3, u2} α E'' f'' l (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.trans_tendsto Asymptotics.IsLittleO.trans_tendstoₓ'. -/
+theorem IsLittleO.trans_tendsto (hfg : f'' =o[l] g'') (hg : Tendsto g'' l (𝓝 0)) :
+ Tendsto f'' l (𝓝 0) :=
+ hfg.IsBigO.trans_tendsto hg
+#align asymptotics.is_o.trans_tendsto Asymptotics.IsLittleO.trans_tendsto
/-! ### Multiplication by a constant -/
-theorem isOWith_const_mul_self (c : R) (f : α → R) (l : Filter α) :
- IsOWith ‖c‖ l (fun x => c * f x) f :=
- isOWith_of_le' _ fun x => norm_mul_le _ _
-#align asymptotics.is_O_with_const_mul_self Asymptotics.isOWith_const_mul_self
-
-theorem isO_const_mul_self (c : R) (f : α → R) (l : Filter α) : (fun x => c * f x) =O[l] f :=
- (isOWith_const_mul_self c f l).IsO
-#align asymptotics.is_O_const_mul_self Asymptotics.isO_const_mul_self
-
-theorem IsOWith.const_mul_left {f : α → R} (h : IsOWith c l f g) (c' : R) :
- IsOWith (‖c'‖ * c) l (fun x => c' * f x) g :=
- (isOWith_const_mul_self c' f l).trans h (norm_nonneg c')
-#align asymptotics.is_O_with.const_mul_left Asymptotics.IsOWith.const_mul_left
-
-theorem IsO.const_mul_left {f : α → R} (h : f =O[l] g) (c' : R) : (fun x => c' * f x) =O[l] g :=
- let ⟨c, hc⟩ := h.IsOWith
- (hc.const_mul_left c').IsO
-#align asymptotics.is_O.const_mul_left Asymptotics.IsO.const_mul_left
-
-theorem isOWith_self_const_mul' (u : Rˣ) (f : α → R) (l : Filter α) :
- IsOWith ‖(↑u⁻¹ : R)‖ l f fun x => ↑u * f x :=
- (isOWith_const_mul_self ↑u⁻¹ _ l).congr_left fun x => u.inv_mul_cancel_left (f x)
-#align asymptotics.is_O_with_self_const_mul' Asymptotics.isOWith_self_const_mul'
-
-theorem isOWith_self_const_mul (c : 𝕜) (hc : c ≠ 0) (f : α → 𝕜) (l : Filter α) :
- IsOWith ‖c‖⁻¹ l f fun x => c * f x :=
- (isOWith_self_const_mul' (Units.mk0 c hc) f l).congr_const <| norm_inv c
-#align asymptotics.is_O_with_self_const_mul Asymptotics.isOWith_self_const_mul
-
-theorem isO_self_const_mul' {c : R} (hc : IsUnit c) (f : α → R) (l : Filter α) :
+/- warning: asymptotics.is_O_with_const_mul_self -> Asymptotics.isBigOWith_const_mul_self is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} [_inst_10 : SeminormedRing.{u2} R] (c : R) (f : α -> R) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u2} α R R (SeminormedRing.toHasNorm.{u2} R _inst_10) (SeminormedRing.toHasNorm.{u2} R _inst_10) (Norm.norm.{u2} R (SeminormedRing.toHasNorm.{u2} R _inst_10) c) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) c (f x)) f
+but is expected to have type
+ forall {α : Type.{u2}} {R : Type.{u1}} [_inst_10 : SeminormedRing.{u1} R] (c : R) (f : α -> R) (l : Filter.{u2} α), Asymptotics.IsBigOWith.{u2, u1, u1} α R R (SeminormedRing.toNorm.{u1} R _inst_10) (SeminormedRing.toNorm.{u1} R _inst_10) (Norm.norm.{u1} R (SeminormedRing.toNorm.{u1} R _inst_10) c) l (fun (x : α) => HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))) c (f x)) f
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_const_mul_self Asymptotics.isBigOWith_const_mul_selfₓ'. -/
+theorem isBigOWith_const_mul_self (c : R) (f : α → R) (l : Filter α) :
+ IsBigOWith ‖c‖ l (fun x => c * f x) f :=
+ isBigOWith_of_le' _ fun x => norm_mul_le _ _
+#align asymptotics.is_O_with_const_mul_self Asymptotics.isBigOWith_const_mul_self
+
+/- warning: asymptotics.is_O_const_mul_self -> Asymptotics.isBigO_const_mul_self is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} [_inst_10 : SeminormedRing.{u2} R] (c : R) (f : α -> R) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u2} α R R (SeminormedRing.toHasNorm.{u2} R _inst_10) (SeminormedRing.toHasNorm.{u2} R _inst_10) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) c (f x)) f
+but is expected to have type
+ forall {α : Type.{u2}} {R : Type.{u1}} [_inst_10 : SeminormedRing.{u1} R] (c : R) (f : α -> R) (l : Filter.{u2} α), Asymptotics.IsBigO.{u2, u1, u1} α R R (SeminormedRing.toNorm.{u1} R _inst_10) (SeminormedRing.toNorm.{u1} R _inst_10) l (fun (x : α) => HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))) c (f x)) f
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_mul_self Asymptotics.isBigO_const_mul_selfₓ'. -/
+theorem isBigO_const_mul_self (c : R) (f : α → R) (l : Filter α) : (fun x => c * f x) =O[l] f :=
+ (isBigOWith_const_mul_self c f l).IsBigO
+#align asymptotics.is_O_const_mul_self Asymptotics.isBigO_const_mul_self
+
+/- warning: asymptotics.is_O_with.const_mul_left -> Asymptotics.IsBigOWith.const_mul_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {R : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_10 : SeminormedRing.{u3} R] {c : Real} {g : α -> F} {l : Filter.{u1} α} {f : α -> R}, (Asymptotics.IsBigOWith.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 c l f g) -> (forall (c' : R), Asymptotics.IsBigOWith.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (Norm.norm.{u3} R (SeminormedRing.toHasNorm.{u3} R _inst_10) c') c) l (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c' (f x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {R : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_10 : SeminormedRing.{u2} R] {c : Real} {g : α -> F} {l : Filter.{u3} α} {f : α -> R}, (Asymptotics.IsBigOWith.{u3, u2, u1} α R F (SeminormedRing.toNorm.{u2} R _inst_10) _inst_2 c l f g) -> (forall (c' : R), Asymptotics.IsBigOWith.{u3, u2, u1} α R F (SeminormedRing.toNorm.{u2} R _inst_10) _inst_2 (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (Norm.norm.{u2} R (SeminormedRing.toNorm.{u2} R _inst_10) c') c) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) c' (f x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.const_mul_left Asymptotics.IsBigOWith.const_mul_leftₓ'. -/
+theorem IsBigOWith.const_mul_left {f : α → R} (h : IsBigOWith c l f g) (c' : R) :
+ IsBigOWith (‖c'‖ * c) l (fun x => c' * f x) g :=
+ (isBigOWith_const_mul_self c' f l).trans h (norm_nonneg c')
+#align asymptotics.is_O_with.const_mul_left Asymptotics.IsBigOWith.const_mul_left
+
+/- warning: asymptotics.is_O.const_mul_left -> Asymptotics.IsBigO.const_mul_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {R : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_10 : SeminormedRing.{u3} R] {g : α -> F} {l : Filter.{u1} α} {f : α -> R}, (Asymptotics.IsBigO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l f g) -> (forall (c' : R), Asymptotics.IsBigO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c' (f x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {R : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_10 : SeminormedRing.{u2} R] {g : α -> F} {l : Filter.{u3} α} {f : α -> R}, (Asymptotics.IsBigO.{u3, u2, u1} α R F (SeminormedRing.toNorm.{u2} R _inst_10) _inst_2 l f g) -> (forall (c' : R), Asymptotics.IsBigO.{u3, u2, u1} α R F (SeminormedRing.toNorm.{u2} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) c' (f x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.const_mul_left Asymptotics.IsBigO.const_mul_leftₓ'. -/
+theorem IsBigO.const_mul_left {f : α → R} (h : f =O[l] g) (c' : R) : (fun x => c' * f x) =O[l] g :=
+ let ⟨c, hc⟩ := h.IsBigOWith
+ (hc.const_mul_left c').IsBigO
+#align asymptotics.is_O.const_mul_left Asymptotics.IsBigO.const_mul_left
+
+/- warning: asymptotics.is_O_with_self_const_mul' -> Asymptotics.isBigOWith_self_const_mul' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} [_inst_10 : SeminormedRing.{u2} R] (u : Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) (f : α -> R) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u2} α R R (SeminormedRing.toHasNorm.{u2} R _inst_10) (SeminormedRing.toHasNorm.{u2} R _inst_10) (Norm.norm.{u2} R (SeminormedRing.toHasNorm.{u2} R _inst_10) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (coeBase.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (Units.hasCoe.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) (Inv.inv.{u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) (Units.hasInv.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) u))) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) ((fun (a : Type.{u2}) (b : Type.{u2}) [self : HasLiftT.{succ u2, succ u2} a b] => self.0) (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (HasLiftT.mk.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (CoeTCₓ.coe.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (coeBase.{succ u2, succ u2} (Units.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))) R (Units.hasCoe.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) u) (f x))
+but is expected to have type
+ forall {α : Type.{u1}} {R : Type.{u2}} [_inst_10 : SeminormedRing.{u2} R] (u : Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (f : α -> R) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u2} α R R (SeminormedRing.toNorm.{u2} R _inst_10) (SeminormedRing.toNorm.{u2} R _inst_10) (Norm.norm.{u2} R (SeminormedRing.toNorm.{u2} R _inst_10) (Units.val.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (Inv.inv.{u2} (Units.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (Units.instInvUnits.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) u))) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (Units.val.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) u) (f x))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_self_const_mul' Asymptotics.isBigOWith_self_const_mul'ₓ'. -/
+theorem isBigOWith_self_const_mul' (u : Rˣ) (f : α → R) (l : Filter α) :
+ IsBigOWith ‖(↑u⁻¹ : R)‖ l f fun x => ↑u * f x :=
+ (isBigOWith_const_mul_self ↑u⁻¹ _ l).congr_left fun x => u.inv_mul_cancel_left (f x)
+#align asymptotics.is_O_with_self_const_mul' Asymptotics.isBigOWith_self_const_mul'
+
+/- warning: asymptotics.is_O_with_self_const_mul -> Asymptotics.isBigOWith_self_const_mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] (c : 𝕜), (Ne.{succ u2} 𝕜 c (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (forall (f : α -> 𝕜) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (Inv.inv.{0} Real Real.hasInv (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) c)) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) c (f x)))
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] (c : 𝕜), (Ne.{succ u2} 𝕜 c (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)))))))) -> (forall (f : α -> 𝕜) (l : Filter.{u1} α), Asymptotics.IsBigOWith.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toNorm.{u2} 𝕜 _inst_12) (NormedField.toNorm.{u2} 𝕜 _inst_12) (Inv.inv.{0} Real Real.instInvReal (Norm.norm.{u2} 𝕜 (NormedField.toNorm.{u2} 𝕜 _inst_12) c)) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) c (f x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_self_const_mul Asymptotics.isBigOWith_self_const_mulₓ'. -/
+theorem isBigOWith_self_const_mul (c : 𝕜) (hc : c ≠ 0) (f : α → 𝕜) (l : Filter α) :
+ IsBigOWith ‖c‖⁻¹ l f fun x => c * f x :=
+ (isBigOWith_self_const_mul' (Units.mk0 c hc) f l).congr_const <| norm_inv c
+#align asymptotics.is_O_with_self_const_mul Asymptotics.isBigOWith_self_const_mul
+
+/- warning: asymptotics.is_O_self_const_mul' -> Asymptotics.isBigO_self_const_mul' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} [_inst_10 : SeminormedRing.{u2} R] {c : R}, (IsUnit.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)) c) -> (forall (f : α -> R) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u2} α R R (SeminormedRing.toHasNorm.{u2} R _inst_10) (SeminormedRing.toHasNorm.{u2} R _inst_10) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) c (f x)))
+but is expected to have type
+ forall {α : Type.{u1}} {R : Type.{u2}} [_inst_10 : SeminormedRing.{u2} R] {c : R}, (IsUnit.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) c) -> (forall (f : α -> R) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u2} α R R (SeminormedRing.toNorm.{u2} R _inst_10) (SeminormedRing.toNorm.{u2} R _inst_10) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) c (f x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_self_const_mul' Asymptotics.isBigO_self_const_mul'ₓ'. -/
+theorem isBigO_self_const_mul' {c : R} (hc : IsUnit c) (f : α → R) (l : Filter α) :
f =O[l] fun x => c * f x :=
let ⟨u, hu⟩ := hc
- hu ▸ (isOWith_self_const_mul' u f l).IsO
-#align asymptotics.is_O_self_const_mul' Asymptotics.isO_self_const_mul'
-
-theorem isO_self_const_mul (c : 𝕜) (hc : c ≠ 0) (f : α → 𝕜) (l : Filter α) :
+ hu ▸ (isBigOWith_self_const_mul' u f l).IsBigO
+#align asymptotics.is_O_self_const_mul' Asymptotics.isBigO_self_const_mul'
+
+/- warning: asymptotics.is_O_self_const_mul -> Asymptotics.isBigO_self_const_mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] (c : 𝕜), (Ne.{succ u2} 𝕜 c (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (forall (f : α -> 𝕜) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) c (f x)))
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] (c : 𝕜), (Ne.{succ u2} 𝕜 c (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)))))))) -> (forall (f : α -> 𝕜) (l : Filter.{u1} α), Asymptotics.IsBigO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toNorm.{u2} 𝕜 _inst_12) (NormedField.toNorm.{u2} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHMul.{u2} 𝕜 (NonUnitalNonAssocRing.toMul.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) c (f x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_self_const_mul Asymptotics.isBigO_self_const_mulₓ'. -/
+theorem isBigO_self_const_mul (c : 𝕜) (hc : c ≠ 0) (f : α → 𝕜) (l : Filter α) :
f =O[l] fun x => c * f x :=
- isO_self_const_mul' (IsUnit.mk0 c hc) f l
-#align asymptotics.is_O_self_const_mul Asymptotics.isO_self_const_mul
-
-theorem isO_const_mul_left_iff' {f : α → R} {c : R} (hc : IsUnit c) :
+ isBigO_self_const_mul' (IsUnit.mk0 c hc) f l
+#align asymptotics.is_O_self_const_mul Asymptotics.isBigO_self_const_mul
+
+/- warning: asymptotics.is_O_const_mul_left_iff' -> Asymptotics.isBigO_const_mul_left_iff' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {R : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_10 : SeminormedRing.{u3} R] {g : α -> F} {l : Filter.{u1} α} {f : α -> R} {c : R}, (IsUnit.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)) c) -> (Iff (Asymptotics.IsBigO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (f x)) g) (Asymptotics.IsBigO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l f g))
+but is expected to have type
+ forall {α : Type.{u2}} {F : Type.{u1}} {R : Type.{u3}} [_inst_2 : Norm.{u1} F] [_inst_10 : SeminormedRing.{u3} R] {g : α -> F} {l : Filter.{u2} α} {f : α -> R} {c : R}, (IsUnit.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c) -> (Iff (Asymptotics.IsBigO.{u2, u3, u1} α R F (SeminormedRing.toNorm.{u3} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) c (f x)) g) (Asymptotics.IsBigO.{u2, u3, u1} α R F (SeminormedRing.toNorm.{u3} R _inst_10) _inst_2 l f g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_mul_left_iff' Asymptotics.isBigO_const_mul_left_iff'ₓ'. -/
+theorem isBigO_const_mul_left_iff' {f : α → R} {c : R} (hc : IsUnit c) :
(fun x => c * f x) =O[l] g ↔ f =O[l] g :=
- ⟨(isO_self_const_mul' hc f l).trans, fun h => h.const_mul_left c⟩
-#align asymptotics.is_O_const_mul_left_iff' Asymptotics.isO_const_mul_left_iff'
-
-theorem isO_const_mul_left_iff {f : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
+ ⟨(isBigO_self_const_mul' hc f l).trans, fun h => h.const_mul_left c⟩
+#align asymptotics.is_O_const_mul_left_iff' Asymptotics.isBigO_const_mul_left_iff'
+
+/- warning: asymptotics.is_O_const_mul_left_iff -> Asymptotics.isBigO_const_mul_left_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {𝕜 : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_12 : NormedField.{u3} 𝕜] {g : α -> F} {l : Filter.{u1} α} {f : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (OfNat.mk.{u3} 𝕜 0 (Zero.zero.{u3} 𝕜 (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u3, u2} α 𝕜 F (NormedField.toHasNorm.{u3} 𝕜 _inst_12) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) c (f x)) g) (Asymptotics.IsBigO.{u1, u3, u2} α 𝕜 F (NormedField.toHasNorm.{u3} 𝕜 _inst_12) _inst_2 l f g))
+but is expected to have type
+ forall {α : Type.{u2}} {F : Type.{u1}} {𝕜 : Type.{u3}} [_inst_2 : Norm.{u1} F] [_inst_12 : NormedField.{u3} 𝕜] {g : α -> F} {l : Filter.{u2} α} {f : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (Zero.toOfNat0.{u3} 𝕜 (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsBigO.{u2, u3, u1} α 𝕜 F (NormedField.toNorm.{u3} 𝕜 _inst_12) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (NonUnitalNonAssocRing.toMul.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) c (f x)) g) (Asymptotics.IsBigO.{u2, u3, u1} α 𝕜 F (NormedField.toNorm.{u3} 𝕜 _inst_12) _inst_2 l f g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_mul_left_iff Asymptotics.isBigO_const_mul_left_iffₓ'. -/
+theorem isBigO_const_mul_left_iff {f : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
(fun x => c * f x) =O[l] g ↔ f =O[l] g :=
- isO_const_mul_left_iff' <| IsUnit.mk0 c hc
-#align asymptotics.is_O_const_mul_left_iff Asymptotics.isO_const_mul_left_iff
-
-theorem IsOCat.const_mul_left {f : α → R} (h : f =o[l] g) (c : R) : (fun x => c * f x) =o[l] g :=
- (isO_const_mul_self c f l).trans_isOCat h
-#align asymptotics.is_o.const_mul_left Asymptotics.IsOCat.const_mul_left
-
-theorem isOCat_const_mul_left_iff' {f : α → R} {c : R} (hc : IsUnit c) :
+ isBigO_const_mul_left_iff' <| IsUnit.mk0 c hc
+#align asymptotics.is_O_const_mul_left_iff Asymptotics.isBigO_const_mul_left_iff
+
+/- warning: asymptotics.is_o.const_mul_left -> Asymptotics.IsLittleO.const_mul_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {R : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_10 : SeminormedRing.{u3} R] {g : α -> F} {l : Filter.{u1} α} {f : α -> R}, (Asymptotics.IsLittleO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l f g) -> (forall (c : R), Asymptotics.IsLittleO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (f x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {R : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_10 : SeminormedRing.{u2} R] {g : α -> F} {l : Filter.{u3} α} {f : α -> R}, (Asymptotics.IsLittleO.{u3, u2, u1} α R F (SeminormedRing.toNorm.{u2} R _inst_10) _inst_2 l f g) -> (forall (c : R), Asymptotics.IsLittleO.{u3, u2, u1} α R F (SeminormedRing.toNorm.{u2} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) c (f x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.const_mul_left Asymptotics.IsLittleO.const_mul_leftₓ'. -/
+theorem IsLittleO.const_mul_left {f : α → R} (h : f =o[l] g) (c : R) : (fun x => c * f x) =o[l] g :=
+ (isBigO_const_mul_self c f l).trans_isLittleO h
+#align asymptotics.is_o.const_mul_left Asymptotics.IsLittleO.const_mul_left
+
+/- warning: asymptotics.is_o_const_mul_left_iff' -> Asymptotics.isLittleO_const_mul_left_iff' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {R : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_10 : SeminormedRing.{u3} R] {g : α -> F} {l : Filter.{u1} α} {f : α -> R} {c : R}, (IsUnit.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)) c) -> (Iff (Asymptotics.IsLittleO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (f x)) g) (Asymptotics.IsLittleO.{u1, u3, u2} α R F (SeminormedRing.toHasNorm.{u3} R _inst_10) _inst_2 l f g))
+but is expected to have type
+ forall {α : Type.{u2}} {F : Type.{u1}} {R : Type.{u3}} [_inst_2 : Norm.{u1} F] [_inst_10 : SeminormedRing.{u3} R] {g : α -> F} {l : Filter.{u2} α} {f : α -> R} {c : R}, (IsUnit.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c) -> (Iff (Asymptotics.IsLittleO.{u2, u3, u1} α R F (SeminormedRing.toNorm.{u3} R _inst_10) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) c (f x)) g) (Asymptotics.IsLittleO.{u2, u3, u1} α R F (SeminormedRing.toNorm.{u3} R _inst_10) _inst_2 l f g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_mul_left_iff' Asymptotics.isLittleO_const_mul_left_iff'ₓ'. -/
+theorem isLittleO_const_mul_left_iff' {f : α → R} {c : R} (hc : IsUnit c) :
(fun x => c * f x) =o[l] g ↔ f =o[l] g :=
- ⟨(isO_self_const_mul' hc f l).trans_isOCat, fun h => h.const_mul_left c⟩
-#align asymptotics.is_o_const_mul_left_iff' Asymptotics.isOCat_const_mul_left_iff'
-
-theorem isOCat_const_mul_left_iff {f : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
+ ⟨(isBigO_self_const_mul' hc f l).trans_isLittleO, fun h => h.const_mul_left c⟩
+#align asymptotics.is_o_const_mul_left_iff' Asymptotics.isLittleO_const_mul_left_iff'
+
+/- warning: asymptotics.is_o_const_mul_left_iff -> Asymptotics.isLittleO_const_mul_left_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {𝕜 : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_12 : NormedField.{u3} 𝕜] {g : α -> F} {l : Filter.{u1} α} {f : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (OfNat.mk.{u3} 𝕜 0 (Zero.zero.{u3} 𝕜 (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u3, u2} α 𝕜 F (NormedField.toHasNorm.{u3} 𝕜 _inst_12) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) c (f x)) g) (Asymptotics.IsLittleO.{u1, u3, u2} α 𝕜 F (NormedField.toHasNorm.{u3} 𝕜 _inst_12) _inst_2 l f g))
+but is expected to have type
+ forall {α : Type.{u2}} {F : Type.{u1}} {𝕜 : Type.{u3}} [_inst_2 : Norm.{u1} F] [_inst_12 : NormedField.{u3} 𝕜] {g : α -> F} {l : Filter.{u2} α} {f : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (Zero.toOfNat0.{u3} 𝕜 (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsLittleO.{u2, u3, u1} α 𝕜 F (NormedField.toNorm.{u3} 𝕜 _inst_12) _inst_2 l (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (NonUnitalNonAssocRing.toMul.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) c (f x)) g) (Asymptotics.IsLittleO.{u2, u3, u1} α 𝕜 F (NormedField.toNorm.{u3} 𝕜 _inst_12) _inst_2 l f g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_mul_left_iff Asymptotics.isLittleO_const_mul_left_iffₓ'. -/
+theorem isLittleO_const_mul_left_iff {f : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
(fun x => c * f x) =o[l] g ↔ f =o[l] g :=
- isOCat_const_mul_left_iff' <| IsUnit.mk0 c hc
-#align asymptotics.is_o_const_mul_left_iff Asymptotics.isOCat_const_mul_left_iff
-
-theorem IsOWith.of_const_mul_right {g : α → R} {c : R} (hc' : 0 ≤ c')
- (h : IsOWith c' l f fun x => c * g x) : IsOWith (c' * ‖c‖) l f g :=
- h.trans (isOWith_const_mul_self c g l) hc'
-#align asymptotics.is_O_with.of_const_mul_right Asymptotics.IsOWith.of_const_mul_right
-
-theorem IsO.of_const_mul_right {g : α → R} {c : R} (h : f =O[l] fun x => c * g x) : f =O[l] g :=
+ isLittleO_const_mul_left_iff' <| IsUnit.mk0 c hc
+#align asymptotics.is_o_const_mul_left_iff Asymptotics.isLittleO_const_mul_left_iff
+
+/- warning: asymptotics.is_O_with.of_const_mul_right -> Asymptotics.IsBigOWith.of_const_mul_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {c' : Real} {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {c : R}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) c' l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (g x))) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c' (Norm.norm.{u3} R (SeminormedRing.toHasNorm.{u3} R _inst_10) c)) l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {R : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u1} R] {c' : Real} {f : α -> E} {l : Filter.{u3} α} {g : α -> R} {c : R}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E R _inst_1 (SeminormedRing.toNorm.{u1} R _inst_10) c' l f (fun (x : α) => HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))) c (g x))) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E R _inst_1 (SeminormedRing.toNorm.{u1} R _inst_10) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c' (Norm.norm.{u1} R (SeminormedRing.toNorm.{u1} R _inst_10) c)) l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_const_mul_right Asymptotics.IsBigOWith.of_const_mul_rightₓ'. -/
+theorem IsBigOWith.of_const_mul_right {g : α → R} {c : R} (hc' : 0 ≤ c')
+ (h : IsBigOWith c' l f fun x => c * g x) : IsBigOWith (c' * ‖c‖) l f g :=
+ h.trans (isBigOWith_const_mul_self c g l) hc'
+#align asymptotics.is_O_with.of_const_mul_right Asymptotics.IsBigOWith.of_const_mul_right
+
+/- warning: asymptotics.is_O.of_const_mul_right -> Asymptotics.IsBigO.of_const_mul_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {c : R}, (Asymptotics.IsBigO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (g x))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {R : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u1} R] {f : α -> E} {l : Filter.{u3} α} {g : α -> R} {c : R}, (Asymptotics.IsBigO.{u3, u2, u1} α E R _inst_1 (SeminormedRing.toNorm.{u1} R _inst_10) l f (fun (x : α) => HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))) c (g x))) -> (Asymptotics.IsBigO.{u3, u2, u1} α E R _inst_1 (SeminormedRing.toNorm.{u1} R _inst_10) l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_const_mul_right Asymptotics.IsBigO.of_const_mul_rightₓ'. -/
+theorem IsBigO.of_const_mul_right {g : α → R} {c : R} (h : f =O[l] fun x => c * g x) : f =O[l] g :=
let ⟨c, cnonneg, hc⟩ := h.exists_nonneg
- (hc.of_const_mul_right cnonneg).IsO
-#align asymptotics.is_O.of_const_mul_right Asymptotics.IsO.of_const_mul_right
-
-theorem IsOWith.const_mul_right' {g : α → R} {u : Rˣ} {c' : ℝ} (hc' : 0 ≤ c')
- (h : IsOWith c' l f g) : IsOWith (c' * ‖(↑u⁻¹ : R)‖) l f fun x => ↑u * g x :=
- h.trans (isOWith_self_const_mul' _ _ _) hc'
-#align asymptotics.is_O_with.const_mul_right' Asymptotics.IsOWith.const_mul_right'
-
-theorem IsOWith.const_mul_right {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) {c' : ℝ} (hc' : 0 ≤ c')
- (h : IsOWith c' l f g) : IsOWith (c' * ‖c‖⁻¹) l f fun x => c * g x :=
- h.trans (isOWith_self_const_mul c hc g l) hc'
-#align asymptotics.is_O_with.const_mul_right Asymptotics.IsOWith.const_mul_right
-
-theorem IsO.const_mul_right' {g : α → R} {c : R} (hc : IsUnit c) (h : f =O[l] g) :
+ (hc.of_const_mul_right cnonneg).IsBigO
+#align asymptotics.is_O.of_const_mul_right Asymptotics.IsBigO.of_const_mul_right
+
+/- warning: asymptotics.is_O_with.const_mul_right' -> Asymptotics.IsBigOWith.const_mul_right' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {u : Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))} {c' : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) c' l f g) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c' (Norm.norm.{u3} R (SeminormedRing.toHasNorm.{u3} R _inst_10) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (HasLiftT.mk.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (CoeTCₓ.coe.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (coeBase.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (Units.hasCoe.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))))) (Inv.inv.{u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) (Units.hasInv.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) u)))) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) ((fun (a : Type.{u3}) (b : Type.{u3}) [self : HasLiftT.{succ u3, succ u3} a b] => self.0) (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (HasLiftT.mk.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (CoeTCₓ.coe.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (coeBase.{succ u3, succ u3} (Units.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))) R (Units.hasCoe.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))))) u) (g x)))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} {R : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u2} α} {g : α -> R} {u : Units.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))} {c' : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') -> (Asymptotics.IsBigOWith.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) c' l f g) -> (Asymptotics.IsBigOWith.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c' (Norm.norm.{u3} R (SeminormedRing.toNorm.{u3} R _inst_10) (Units.val.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) (Inv.inv.{u3} (Units.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) (Units.instInvUnits.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) u)))) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) (Units.val.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) u) (g x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.const_mul_right' Asymptotics.IsBigOWith.const_mul_right'ₓ'. -/
+theorem IsBigOWith.const_mul_right' {g : α → R} {u : Rˣ} {c' : ℝ} (hc' : 0 ≤ c')
+ (h : IsBigOWith c' l f g) : IsBigOWith (c' * ‖(↑u⁻¹ : R)‖) l f fun x => ↑u * g x :=
+ h.trans (isBigOWith_self_const_mul' _ _ _) hc'
+#align asymptotics.is_O_with.const_mul_right' Asymptotics.IsBigOWith.const_mul_right'
+
+/- warning: asymptotics.is_O_with.const_mul_right -> Asymptotics.IsBigOWith.const_mul_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u1} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (OfNat.mk.{u3} 𝕜 0 (Zero.zero.{u3} 𝕜 (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))))))) -> (forall {c' : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) c' l f g) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c' (Inv.inv.{0} Real Real.hasInv (Norm.norm.{u3} 𝕜 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) c))) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) c (g x))))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u2} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (Zero.toOfNat0.{u3} 𝕜 (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))))))) -> (forall {c' : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') -> (Asymptotics.IsBigOWith.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) c' l f g) -> (Asymptotics.IsBigOWith.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c' (Inv.inv.{0} Real Real.instInvReal (Norm.norm.{u3} 𝕜 (NormedField.toNorm.{u3} 𝕜 _inst_12) c))) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (NonUnitalNonAssocRing.toMul.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) c (g x))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.const_mul_right Asymptotics.IsBigOWith.const_mul_rightₓ'. -/
+theorem IsBigOWith.const_mul_right {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) {c' : ℝ} (hc' : 0 ≤ c')
+ (h : IsBigOWith c' l f g) : IsBigOWith (c' * ‖c‖⁻¹) l f fun x => c * g x :=
+ h.trans (isBigOWith_self_const_mul c hc g l) hc'
+#align asymptotics.is_O_with.const_mul_right Asymptotics.IsBigOWith.const_mul_right
+
+/- warning: asymptotics.is_O.const_mul_right' -> Asymptotics.IsBigO.const_mul_right' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)) c) -> (Asymptotics.IsBigO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f g) -> (Asymptotics.IsBigO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (g x)))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} {R : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u2} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c) -> (Asymptotics.IsBigO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f g) -> (Asymptotics.IsBigO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) c (g x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.const_mul_right' Asymptotics.IsBigO.const_mul_right'ₓ'. -/
+theorem IsBigO.const_mul_right' {g : α → R} {c : R} (hc : IsUnit c) (h : f =O[l] g) :
f =O[l] fun x => c * g x :=
- h.trans (isO_self_const_mul' hc g l)
-#align asymptotics.is_O.const_mul_right' Asymptotics.IsO.const_mul_right'
-
-theorem IsO.const_mul_right {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) (h : f =O[l] g) :
+ h.trans (isBigO_self_const_mul' hc g l)
+#align asymptotics.is_O.const_mul_right' Asymptotics.IsBigO.const_mul_right'
+
+/- warning: asymptotics.is_O.const_mul_right -> Asymptotics.IsBigO.const_mul_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u1} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (OfNat.mk.{u3} 𝕜 0 (Zero.zero.{u3} 𝕜 (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))))))) -> (Asymptotics.IsBigO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f g) -> (Asymptotics.IsBigO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) c (g x)))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u2} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (Zero.toOfNat0.{u3} 𝕜 (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))))))) -> (Asymptotics.IsBigO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f g) -> (Asymptotics.IsBigO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (NonUnitalNonAssocRing.toMul.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) c (g x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.const_mul_right Asymptotics.IsBigO.const_mul_rightₓ'. -/
+theorem IsBigO.const_mul_right {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) (h : f =O[l] g) :
f =O[l] fun x => c * g x :=
h.const_mul_right' <| IsUnit.mk0 c hc
-#align asymptotics.is_O.const_mul_right Asymptotics.IsO.const_mul_right
-
-theorem isO_const_mul_right_iff' {g : α → R} {c : R} (hc : IsUnit c) :
+#align asymptotics.is_O.const_mul_right Asymptotics.IsBigO.const_mul_right
+
+/- warning: asymptotics.is_O_const_mul_right_iff' -> Asymptotics.isBigO_const_mul_right_iff' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)) c) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (g x))) (Asymptotics.IsBigO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f g))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} {R : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u2} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c) -> (Iff (Asymptotics.IsBigO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) c (g x))) (Asymptotics.IsBigO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_mul_right_iff' Asymptotics.isBigO_const_mul_right_iff'ₓ'. -/
+theorem isBigO_const_mul_right_iff' {g : α → R} {c : R} (hc : IsUnit c) :
(f =O[l] fun x => c * g x) ↔ f =O[l] g :=
⟨fun h => h.of_const_mul_right, fun h => h.const_mul_right' hc⟩
-#align asymptotics.is_O_const_mul_right_iff' Asymptotics.isO_const_mul_right_iff'
-
-theorem isO_const_mul_right_iff {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
+#align asymptotics.is_O_const_mul_right_iff' Asymptotics.isBigO_const_mul_right_iff'
+
+/- warning: asymptotics.is_O_const_mul_right_iff -> Asymptotics.isBigO_const_mul_right_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u1} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (OfNat.mk.{u3} 𝕜 0 (Zero.zero.{u3} 𝕜 (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) c (g x))) (Asymptotics.IsBigO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f g))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u2} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (Zero.toOfNat0.{u3} 𝕜 (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsBigO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (NonUnitalNonAssocRing.toMul.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) c (g x))) (Asymptotics.IsBigO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_mul_right_iff Asymptotics.isBigO_const_mul_right_iffₓ'. -/
+theorem isBigO_const_mul_right_iff {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
(f =O[l] fun x => c * g x) ↔ f =O[l] g :=
- isO_const_mul_right_iff' <| IsUnit.mk0 c hc
-#align asymptotics.is_O_const_mul_right_iff Asymptotics.isO_const_mul_right_iff
-
-theorem IsOCat.of_const_mul_right {g : α → R} {c : R} (h : f =o[l] fun x => c * g x) : f =o[l] g :=
- h.trans_isO (isO_const_mul_self c g l)
-#align asymptotics.is_o.of_const_mul_right Asymptotics.IsOCat.of_const_mul_right
-
-theorem IsOCat.const_mul_right' {g : α → R} {c : R} (hc : IsUnit c) (h : f =o[l] g) :
+ isBigO_const_mul_right_iff' <| IsUnit.mk0 c hc
+#align asymptotics.is_O_const_mul_right_iff Asymptotics.isBigO_const_mul_right_iff
+
+/- warning: asymptotics.is_o.of_const_mul_right -> Asymptotics.IsLittleO.of_const_mul_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {c : R}, (Asymptotics.IsLittleO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (g x))) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {R : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u1} R] {f : α -> E} {l : Filter.{u3} α} {g : α -> R} {c : R}, (Asymptotics.IsLittleO.{u3, u2, u1} α E R _inst_1 (SeminormedRing.toNorm.{u1} R _inst_10) l f (fun (x : α) => HMul.hMul.{u1, u1, u1} R R R (instHMul.{u1} R (NonUnitalNonAssocRing.toMul.{u1} R (NonAssocRing.toNonUnitalNonAssocRing.{u1} R (Ring.toNonAssocRing.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))) c (g x))) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E R _inst_1 (SeminormedRing.toNorm.{u1} R _inst_10) l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_const_mul_right Asymptotics.IsLittleO.of_const_mul_rightₓ'. -/
+theorem IsLittleO.of_const_mul_right {g : α → R} {c : R} (h : f =o[l] fun x => c * g x) :
+ f =o[l] g :=
+ h.trans_isBigO (isBigO_const_mul_self c g l)
+#align asymptotics.is_o.of_const_mul_right Asymptotics.IsLittleO.of_const_mul_right
+
+/- warning: asymptotics.is_o.const_mul_right' -> Asymptotics.IsLittleO.const_mul_right' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)) c) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f g) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (g x)))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} {R : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u2} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c) -> (Asymptotics.IsLittleO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f g) -> (Asymptotics.IsLittleO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) c (g x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.const_mul_right' Asymptotics.IsLittleO.const_mul_right'ₓ'. -/
+theorem IsLittleO.const_mul_right' {g : α → R} {c : R} (hc : IsUnit c) (h : f =o[l] g) :
f =o[l] fun x => c * g x :=
- h.trans_isO (isO_self_const_mul' hc g l)
-#align asymptotics.is_o.const_mul_right' Asymptotics.IsOCat.const_mul_right'
-
-theorem IsOCat.const_mul_right {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) (h : f =o[l] g) :
+ h.trans_isBigO (isBigO_self_const_mul' hc g l)
+#align asymptotics.is_o.const_mul_right' Asymptotics.IsLittleO.const_mul_right'
+
+/- warning: asymptotics.is_o.const_mul_right -> Asymptotics.IsLittleO.const_mul_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u1} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (OfNat.mk.{u3} 𝕜 0 (Zero.zero.{u3} 𝕜 (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))))))) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f g) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) c (g x)))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u2} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (Zero.toOfNat0.{u3} 𝕜 (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))))))) -> (Asymptotics.IsLittleO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f g) -> (Asymptotics.IsLittleO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (NonUnitalNonAssocRing.toMul.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) c (g x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.const_mul_right Asymptotics.IsLittleO.const_mul_rightₓ'. -/
+theorem IsLittleO.const_mul_right {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) (h : f =o[l] g) :
f =o[l] fun x => c * g x :=
h.const_mul_right' <| IsUnit.mk0 c hc
-#align asymptotics.is_o.const_mul_right Asymptotics.IsOCat.const_mul_right
-
-theorem isOCat_const_mul_right_iff' {g : α → R} {c : R} (hc : IsUnit c) :
+#align asymptotics.is_o.const_mul_right Asymptotics.IsLittleO.const_mul_right
+
+/- warning: asymptotics.is_o_const_mul_right_iff' -> Asymptotics.isLittleO_const_mul_right_iff' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {R : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u1} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (Ring.toMonoid.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)) c) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (Distrib.toHasMul.{u3} R (Ring.toDistrib.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c (g x))) (Asymptotics.IsLittleO.{u1, u2, u3} α E R _inst_1 (SeminormedRing.toHasNorm.{u3} R _inst_10) l f g))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} {R : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_10 : SeminormedRing.{u3} R] {f : α -> E} {l : Filter.{u2} α} {g : α -> R} {c : R}, (IsUnit.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))) c) -> (Iff (Asymptotics.IsLittleO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} R R R (instHMul.{u3} R (NonUnitalNonAssocRing.toMul.{u3} R (NonAssocRing.toNonUnitalNonAssocRing.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10))))) c (g x))) (Asymptotics.IsLittleO.{u2, u1, u3} α E R _inst_1 (SeminormedRing.toNorm.{u3} R _inst_10) l f g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_mul_right_iff' Asymptotics.isLittleO_const_mul_right_iff'ₓ'. -/
+theorem isLittleO_const_mul_right_iff' {g : α → R} {c : R} (hc : IsUnit c) :
(f =o[l] fun x => c * g x) ↔ f =o[l] g :=
⟨fun h => h.of_const_mul_right, fun h => h.const_mul_right' hc⟩
-#align asymptotics.is_o_const_mul_right_iff' Asymptotics.isOCat_const_mul_right_iff'
-
-theorem isOCat_const_mul_right_iff {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
+#align asymptotics.is_o_const_mul_right_iff' Asymptotics.isLittleO_const_mul_right_iff'
+
+/- warning: asymptotics.is_o_const_mul_right_iff -> Asymptotics.isLittleO_const_mul_right_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u1} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (OfNat.mk.{u3} 𝕜 0 (Zero.zero.{u3} 𝕜 (MulZeroClass.toHasZero.{u3} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) c (g x))) (Asymptotics.IsLittleO.{u1, u2, u3} α E 𝕜 _inst_1 (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f g))
+but is expected to have type
+ forall {α : Type.{u2}} {E : Type.{u1}} {𝕜 : Type.{u3}} [_inst_1 : Norm.{u1} E] [_inst_12 : NormedField.{u3} 𝕜] {f : α -> E} {l : Filter.{u2} α} {g : α -> 𝕜} {c : 𝕜}, (Ne.{succ u3} 𝕜 c (OfNat.ofNat.{u3} 𝕜 0 (Zero.toOfNat0.{u3} 𝕜 (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsLittleO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (NonUnitalNonAssocRing.toMul.{u3} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜 (Ring.toNonAssocRing.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) c (g x))) (Asymptotics.IsLittleO.{u2, u1, u3} α E 𝕜 _inst_1 (NormedField.toNorm.{u3} 𝕜 _inst_12) l f g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_mul_right_iff Asymptotics.isLittleO_const_mul_right_iffₓ'. -/
+theorem isLittleO_const_mul_right_iff {g : α → 𝕜} {c : 𝕜} (hc : c ≠ 0) :
(f =o[l] fun x => c * g x) ↔ f =o[l] g :=
- isOCat_const_mul_right_iff' <| IsUnit.mk0 c hc
-#align asymptotics.is_o_const_mul_right_iff Asymptotics.isOCat_const_mul_right_iff
+ isLittleO_const_mul_right_iff' <| IsUnit.mk0 c hc
+#align asymptotics.is_o_const_mul_right_iff Asymptotics.isLittleO_const_mul_right_iff
/-! ### Multiplication -/
-theorem IsOWith.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} {c₁ c₂ : ℝ} (h₁ : IsOWith c₁ l f₁ g₁)
- (h₂ : IsOWith c₂ l f₂ g₂) : IsOWith (c₁ * c₂) l (fun x => f₁ x * f₂ x) fun x => g₁ x * g₂ x :=
+/- warning: asymptotics.is_O_with.mul -> Asymptotics.IsBigOWith.mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜} {c₁ : Real} {c₂ : Real}, (Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) c₁ l f₁ g₁) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) c₂ l f₂ g₂) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c₁ c₂) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g₁ x) (g₂ x)))
+but is expected to have type
+ forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u3} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜} {c₁ : Real} {c₂ : Real}, (Asymptotics.IsBigOWith.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) c₁ l f₁ g₁) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) c₂ l f₂ g₂) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c₁ c₂) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))) (g₁ x) (g₂ x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.mul Asymptotics.IsBigOWith.mulₓ'. -/
+theorem IsBigOWith.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} {c₁ c₂ : ℝ} (h₁ : IsBigOWith c₁ l f₁ g₁)
+ (h₂ : IsBigOWith c₂ l f₂ g₂) :
+ IsBigOWith (c₁ * c₂) l (fun x => f₁ x * f₂ x) fun x => g₁ x * g₂ x :=
by
unfold is_O_with at *
filter_upwards [h₁, h₂]with _ hx₁ hx₂
apply le_trans (norm_mul_le _ _)
convert mul_le_mul hx₁ hx₂ (norm_nonneg _) (le_trans (norm_nonneg _) hx₁) using 1
rw [norm_mul, mul_mul_mul_comm]
-#align asymptotics.is_O_with.mul Asymptotics.IsOWith.mul
-
-theorem IsO.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =O[l] g₁) (h₂ : f₂ =O[l] g₂) :
+#align asymptotics.is_O_with.mul Asymptotics.IsBigOWith.mul
+
+/- warning: asymptotics.is_O.mul -> Asymptotics.IsBigO.mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsBigO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsBigO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsBigO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g₁ x) (g₂ x)))
+but is expected to have type
+ forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u3} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsBigO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsBigO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsBigO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))) (g₁ x) (g₂ x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.mul Asymptotics.IsBigO.mulₓ'. -/
+theorem IsBigO.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =O[l] g₁) (h₂ : f₂ =O[l] g₂) :
(fun x => f₁ x * f₂ x) =O[l] fun x => g₁ x * g₂ x :=
- let ⟨c, hc⟩ := h₁.IsOWith
- let ⟨c', hc'⟩ := h₂.IsOWith
- (hc.mul hc').IsO
-#align asymptotics.is_O.mul Asymptotics.IsO.mul
-
-theorem IsO.mul_isOCat {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =O[l] g₁) (h₂ : f₂ =o[l] g₂) :
+ let ⟨c, hc⟩ := h₁.IsBigOWith
+ let ⟨c', hc'⟩ := h₂.IsBigOWith
+ (hc.mul hc').IsBigO
+#align asymptotics.is_O.mul Asymptotics.IsBigO.mul
+
+/- warning: asymptotics.is_O.mul_is_o -> Asymptotics.IsBigO.mul_isLittleO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsBigO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g₁ x) (g₂ x)))
+but is expected to have type
+ forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u3} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsBigO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))) (g₁ x) (g₂ x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.mul_is_o Asymptotics.IsBigO.mul_isLittleOₓ'. -/
+theorem IsBigO.mul_isLittleO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =O[l] g₁) (h₂ : f₂ =o[l] g₂) :
(fun x => f₁ x * f₂ x) =o[l] fun x => g₁ x * g₂ x :=
by
unfold is_o at *
intro c cpos
rcases h₁.exists_pos with ⟨c', c'pos, hc'⟩
exact (hc'.mul (h₂ (div_pos cpos c'pos))).congr_const (mul_div_cancel' _ (ne_of_gt c'pos))
-#align asymptotics.is_O.mul_is_o Asymptotics.IsO.mul_isOCat
-
-theorem IsOCat.mul_isO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =O[l] g₂) :
+#align asymptotics.is_O.mul_is_o Asymptotics.IsBigO.mul_isLittleO
+
+/- warning: asymptotics.is_o.mul_is_O -> Asymptotics.IsLittleO.mul_isBigO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsBigO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g₁ x) (g₂ x)))
+but is expected to have type
+ forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u3} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsBigO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))) (g₁ x) (g₂ x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.mul_is_O Asymptotics.IsLittleO.mul_isBigOₓ'. -/
+theorem IsLittleO.mul_isBigO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =O[l] g₂) :
(fun x => f₁ x * f₂ x) =o[l] fun x => g₁ x * g₂ x :=
by
unfold is_o at *
intro c cpos
rcases h₂.exists_pos with ⟨c', c'pos, hc'⟩
exact ((h₁ (div_pos cpos c'pos)).mul hc').congr_const (div_mul_cancel _ (ne_of_gt c'pos))
-#align asymptotics.is_o.mul_is_O Asymptotics.IsOCat.mul_isO
-
-theorem IsOCat.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =o[l] g₂) :
+#align asymptotics.is_o.mul_is_O Asymptotics.IsLittleO.mul_isBigO
+
+/- warning: asymptotics.is_o.mul -> Asymptotics.IsLittleO.mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (Distrib.toHasMul.{u2} R (Ring.toDistrib.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u3, u3, u3} 𝕜 𝕜 𝕜 (instHMul.{u3} 𝕜 (Distrib.toHasMul.{u3} 𝕜 (Ring.toDistrib.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g₁ x) (g₂ x)))
+but is expected to have type
+ forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u3} α} {f₁ : α -> R} {f₂ : α -> R} {g₁ : α -> 𝕜} {g₂ : α -> 𝕜}, (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₁ g₁) -> (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f₂ g₂) -> (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l (fun (x : α) => HMul.hMul.{u2, u2, u2} R R R (instHMul.{u2} R (NonUnitalNonAssocRing.toMul.{u2} R (NonAssocRing.toNonUnitalNonAssocRing.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) (f₁ x) (f₂ x)) (fun (x : α) => HMul.hMul.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHMul.{u1} 𝕜 (NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))) (g₁ x) (g₂ x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.mul Asymptotics.IsLittleO.mulₓ'. -/
+theorem IsLittleO.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =o[l] g₂) :
(fun x => f₁ x * f₂ x) =o[l] fun x => g₁ x * g₂ x :=
- h₁.mul_isO h₂.IsO
-#align asymptotics.is_o.mul Asymptotics.IsOCat.mul
-
-theorem IsOWith.pow' {f : α → R} {g : α → 𝕜} (h : IsOWith c l f g) :
+ h₁.mul_isBigO h₂.IsBigO
+#align asymptotics.is_o.mul Asymptotics.IsLittleO.mul
+
+/- warning: asymptotics.is_O_with.pow' -> Asymptotics.IsBigOWith.pow' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {c : Real} {l : Filter.{u1} α} {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) c l f g) -> (forall (n : Nat), Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (Nat.casesOn.{1} (fun (_x : Nat) => Real) n (Norm.norm.{u2} R (SeminormedRing.toHasNorm.{u2} R _inst_10) (OfNat.ofNat.{u2} R 1 (OfNat.mk.{u2} R 1 (One.one.{u2} R (AddMonoidWithOne.toOne.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (AddCommGroupWithOne.toAddGroupWithOne.{u2} R (Ring.toAddCommGroupWithOne.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))))))) (fun (n : Nat) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) c (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat Nat.hasAdd) n (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne)))))) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f x) n) (fun (x : α) => HPow.hPow.{u3, 0, u3} 𝕜 Nat 𝕜 (instHPow.{u3, 0} 𝕜 Nat (Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g x) n))
+but is expected to have type
+ forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u3} α} {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigOWith.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l f g) -> (forall (n : Nat), Asymptotics.IsBigOWith.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) (Nat.casesOn.{1} (fun (_x : Nat) => Real) n (Norm.norm.{u2} R (SeminormedRing.toNorm.{u2} R _inst_10) (OfNat.ofNat.{u2} R 1 (One.toOfNat1.{u2} R (NonAssocRing.toOne.{u2} R (Ring.toNonAssocRing.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) (fun (n : Nat) => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) c (HAdd.hAdd.{0, 0, 0} Nat Nat Nat (instHAdd.{0} Nat instAddNat) n (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1))))) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) (f x) n) (fun (x : α) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (g x) n))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.pow' Asymptotics.IsBigOWith.pow'ₓ'. -/
+theorem IsBigOWith.pow' {f : α → R} {g : α → 𝕜} (h : IsBigOWith c l f g) :
∀ n : ℕ,
- IsOWith (Nat.casesOn n ‖(1 : R)‖ fun n => c ^ (n + 1)) l (fun x => f x ^ n) fun x => g x ^ n
+ IsBigOWith (Nat.casesOn n ‖(1 : R)‖ fun n => c ^ (n + 1)) l (fun x => f x ^ n) fun x =>
+ g x ^ n
| 0 => by simpa using is_O_with_const_const (1 : R) (one_ne_zero' 𝕜) l
| 1 => by simpa
| n + 2 => by simpa [pow_succ] using h.mul (is_O_with.pow' (n + 1))
-#align asymptotics.is_O_with.pow' Asymptotics.IsOWith.pow'
-
-theorem IsOWith.pow [NormOneClass R] {f : α → R} {g : α → 𝕜} (h : IsOWith c l f g) :
- ∀ n : ℕ, IsOWith (c ^ n) l (fun x => f x ^ n) fun x => g x ^ n
+#align asymptotics.is_O_with.pow' Asymptotics.IsBigOWith.pow'
+
+/- warning: asymptotics.is_O_with.pow -> Asymptotics.IsBigOWith.pow is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {c : Real} {l : Filter.{u1} α} [_inst_14 : NormOneClass.{u2} R (SeminormedRing.toHasNorm.{u2} R _inst_10) (AddMonoidWithOne.toOne.{u2} R (AddGroupWithOne.toAddMonoidWithOne.{u2} R (AddCommGroupWithOne.toAddGroupWithOne.{u2} R (Ring.toAddCommGroupWithOne.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))] {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) c l f g) -> (forall (n : Nat), Asymptotics.IsBigOWith.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) c n) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f x) n) (fun (x : α) => HPow.hPow.{u3, 0, u3} 𝕜 Nat 𝕜 (instHPow.{u3, 0} 𝕜 Nat (Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g x) n))
+but is expected to have type
+ forall {α : Type.{u2}} {R : Type.{u3}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u3} R] [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u2} α} [_inst_14 : NormOneClass.{u3} R (SeminormedRing.toNorm.{u3} R _inst_10) (NonAssocRing.toOne.{u3} R (Ring.toNonAssocRing.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))] {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigOWith.{u2, u3, u1} α R 𝕜 (SeminormedRing.toNorm.{u3} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l f g) -> (forall (n : Nat), Asymptotics.IsBigOWith.{u2, u3, u1} α R 𝕜 (SeminormedRing.toNorm.{u3} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) c n) l (fun (x : α) => HPow.hPow.{u3, 0, u3} R Nat R (instHPow.{u3, 0} R Nat (Monoid.Pow.{u3} R (MonoidWithZero.toMonoid.{u3} R (Semiring.toMonoidWithZero.{u3} R (Ring.toSemiring.{u3} R (SeminormedRing.toRing.{u3} R _inst_10)))))) (f x) n) (fun (x : α) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (g x) n))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.pow Asymptotics.IsBigOWith.powₓ'. -/
+theorem IsBigOWith.pow [NormOneClass R] {f : α → R} {g : α → 𝕜} (h : IsBigOWith c l f g) :
+ ∀ n : ℕ, IsBigOWith (c ^ n) l (fun x => f x ^ n) fun x => g x ^ n
| 0 => by simpa using h.pow' 0
| n + 1 => h.pow' (n + 1)
-#align asymptotics.is_O_with.pow Asymptotics.IsOWith.pow
-
-theorem IsOWith.of_pow {n : ℕ} {f : α → 𝕜} {g : α → R} (h : IsOWith c l (f ^ n) (g ^ n))
- (hn : n ≠ 0) (hc : c ≤ c' ^ n) (hc' : 0 ≤ c') : IsOWith c' l f g :=
- IsOWith.of_bound <|
+#align asymptotics.is_O_with.pow Asymptotics.IsBigOWith.pow
+
+/- warning: asymptotics.is_O_with.of_pow -> Asymptotics.IsBigOWith.of_pow is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {c : Real} {c' : Real} {l : Filter.{u1} α} {n : Nat} {f : α -> 𝕜} {g : α -> R}, (Asymptotics.IsBigOWith.{u1, u3, u2} α 𝕜 R (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (SeminormedRing.toHasNorm.{u2} R _inst_10) c l (HPow.hPow.{max u1 u3, 0, max u1 u3} (α -> 𝕜) Nat (α -> 𝕜) (instHPow.{max u1 u3, 0} (α -> 𝕜) Nat (Pi.hasPow.{u1, u3, 0} α Nat (fun (ᾰ : α) => 𝕜) (fun (i : α) => Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) f n) (HPow.hPow.{max u1 u2, 0, max u1 u2} (α -> R) Nat (α -> R) (instHPow.{max u1 u2, 0} (α -> R) Nat (Pi.hasPow.{u1, u2, 0} α Nat (fun (ᾰ : α) => R) (fun (i : α) => Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) g n)) -> (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (LE.le.{0} Real Real.hasLe c (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) c' n)) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c') -> (Asymptotics.IsBigOWith.{u1, u3, u2} α 𝕜 R (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (SeminormedRing.toHasNorm.{u2} R _inst_10) c' l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {R : Type.{u1}} {𝕜 : Type.{u2}} [_inst_10 : SeminormedRing.{u1} R] [_inst_12 : NormedField.{u2} 𝕜] {c : Real} {c' : Real} {l : Filter.{u3} α} {n : Nat} {f : α -> 𝕜} {g : α -> R}, (Asymptotics.IsBigOWith.{u3, u2, u1} α 𝕜 R (NormedField.toNorm.{u2} 𝕜 _inst_12) (SeminormedRing.toNorm.{u1} R _inst_10) c l (HPow.hPow.{max u3 u2, 0, max u3 u2} (α -> 𝕜) Nat (α -> 𝕜) (instHPow.{max u3 u2, 0} (α -> 𝕜) Nat (Pi.instPow.{u3, u2, 0} α Nat (fun (ᾰ : α) => 𝕜) (fun (i : α) => Monoid.Pow.{u2} 𝕜 (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))))))))) f n) (HPow.hPow.{max u3 u1, 0, max u3 u1} (α -> R) Nat (α -> R) (instHPow.{max u3 u1, 0} (α -> R) Nat (Pi.instPow.{u3, u1, 0} α Nat (fun (ᾰ : α) => R) (fun (i : α) => Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))))) g n)) -> (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (LE.le.{0} Real Real.instLEReal c (HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) c' n)) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c') -> (Asymptotics.IsBigOWith.{u3, u2, u1} α 𝕜 R (NormedField.toNorm.{u2} 𝕜 _inst_12) (SeminormedRing.toNorm.{u1} R _inst_10) c' l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.of_pow Asymptotics.IsBigOWith.of_powₓ'. -/
+theorem IsBigOWith.of_pow {n : ℕ} {f : α → 𝕜} {g : α → R} (h : IsBigOWith c l (f ^ n) (g ^ n))
+ (hn : n ≠ 0) (hc : c ≤ c' ^ n) (hc' : 0 ≤ c') : IsBigOWith c' l f g :=
+ IsBigOWith.of_bound <|
(h.weaken hc).bound.mono fun x hx =>
le_of_pow_le_pow n (mul_nonneg hc' <| norm_nonneg _) hn.bot_lt <|
calc
@@ -1603,40 +3388,70 @@ theorem IsOWith.of_pow {n : ℕ} {f : α → 𝕜} {g : α → R} (h : IsOWith c
(mul_le_mul_of_nonneg_left (norm_pow_le' _ hn.bot_lt) (pow_nonneg hc' _))
_ = (c' * ‖g x‖) ^ n := (mul_pow _ _ _).symm
-#align asymptotics.is_O_with.of_pow Asymptotics.IsOWith.of_pow
-
-theorem IsO.pow {f : α → R} {g : α → 𝕜} (h : f =O[l] g) (n : ℕ) :
+#align asymptotics.is_O_with.of_pow Asymptotics.IsBigOWith.of_pow
+
+/- warning: asymptotics.is_O.pow -> Asymptotics.IsBigO.pow is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f g) -> (forall (n : Nat), Asymptotics.IsBigO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f x) n) (fun (x : α) => HPow.hPow.{u3, 0, u3} 𝕜 Nat 𝕜 (instHPow.{u3, 0} 𝕜 Nat (Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g x) n))
+but is expected to have type
+ forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u3} α} {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsBigO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) -> (forall (n : Nat), Asymptotics.IsBigO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) (f x) n) (fun (x : α) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (g x) n))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.pow Asymptotics.IsBigO.powₓ'. -/
+theorem IsBigO.pow {f : α → R} {g : α → 𝕜} (h : f =O[l] g) (n : ℕ) :
(fun x => f x ^ n) =O[l] fun x => g x ^ n :=
- let ⟨C, hC⟩ := h.IsOWith
- isO_iff_isOWith.2 ⟨_, hC.pow' n⟩
-#align asymptotics.is_O.pow Asymptotics.IsO.pow
-
-theorem IsO.of_pow {f : α → 𝕜} {g : α → R} {n : ℕ} (hn : n ≠ 0) (h : (f ^ n) =O[l] (g ^ n)) :
+ let ⟨C, hC⟩ := h.IsBigOWith
+ isBigO_iff_isBigOWith.2 ⟨_, hC.pow' n⟩
+#align asymptotics.is_O.pow Asymptotics.IsBigO.pow
+
+/- warning: asymptotics.is_O.of_pow -> Asymptotics.IsBigO.of_pow is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> R} {n : Nat}, (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (Asymptotics.IsBigO.{u1, u3, u2} α 𝕜 R (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (SeminormedRing.toHasNorm.{u2} R _inst_10) l (HPow.hPow.{max u1 u3, 0, max u1 u3} (α -> 𝕜) Nat (α -> 𝕜) (instHPow.{max u1 u3, 0} (α -> 𝕜) Nat (Pi.hasPow.{u1, u3, 0} α Nat (fun (ᾰ : α) => 𝕜) (fun (i : α) => Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) f n) (HPow.hPow.{max u1 u2, 0, max u1 u2} (α -> R) Nat (α -> R) (instHPow.{max u1 u2, 0} (α -> R) Nat (Pi.hasPow.{u1, u2, 0} α Nat (fun (ᾰ : α) => R) (fun (i : α) => Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) g n)) -> (Asymptotics.IsBigO.{u1, u3, u2} α 𝕜 R (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (SeminormedRing.toHasNorm.{u2} R _inst_10) l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {R : Type.{u1}} {𝕜 : Type.{u2}} [_inst_10 : SeminormedRing.{u1} R] [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u3} α} {f : α -> 𝕜} {g : α -> R} {n : Nat}, (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (Asymptotics.IsBigO.{u3, u2, u1} α 𝕜 R (NormedField.toNorm.{u2} 𝕜 _inst_12) (SeminormedRing.toNorm.{u1} R _inst_10) l (HPow.hPow.{max u3 u2, 0, max u3 u2} (α -> 𝕜) Nat (α -> 𝕜) (instHPow.{max u3 u2, 0} (α -> 𝕜) Nat (Pi.instPow.{u3, u2, 0} α Nat (fun (ᾰ : α) => 𝕜) (fun (i : α) => Monoid.Pow.{u2} 𝕜 (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))))))))) f n) (HPow.hPow.{max u3 u1, 0, max u3 u1} (α -> R) Nat (α -> R) (instHPow.{max u3 u1, 0} (α -> R) Nat (Pi.instPow.{u3, u1, 0} α Nat (fun (ᾰ : α) => R) (fun (i : α) => Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))))) g n)) -> (Asymptotics.IsBigO.{u3, u2, u1} α 𝕜 R (NormedField.toNorm.{u2} 𝕜 _inst_12) (SeminormedRing.toNorm.{u1} R _inst_10) l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.of_pow Asymptotics.IsBigO.of_powₓ'. -/
+theorem IsBigO.of_pow {f : α → 𝕜} {g : α → R} {n : ℕ} (hn : n ≠ 0) (h : (f ^ n) =O[l] (g ^ n)) :
f =O[l] g := by
rcases h.exists_pos with ⟨C, hC₀, hC⟩
obtain ⟨c, hc₀, hc⟩ : ∃ c : ℝ, 0 ≤ c ∧ C ≤ c ^ n
exact ((eventually_ge_at_top _).And <| (tendsto_pow_at_top hn).eventually_ge_atTop C).exists
- exact (hC.of_pow hn hc hc₀).IsO
-#align asymptotics.is_O.of_pow Asymptotics.IsO.of_pow
-
-theorem IsOCat.pow {f : α → R} {g : α → 𝕜} (h : f =o[l] g) {n : ℕ} (hn : 0 < n) :
+ exact (hC.of_pow hn hc hc₀).IsBigO
+#align asymptotics.is_O.of_pow Asymptotics.IsBigO.of_pow
+
+/- warning: asymptotics.is_o.pow -> Asymptotics.IsLittleO.pow is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f g) -> (forall {n : Nat}, (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) n) -> (Asymptotics.IsLittleO.{u1, u2, u3} α R 𝕜 (SeminormedRing.toHasNorm.{u2} R _inst_10) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))) (f x) n) (fun (x : α) => HPow.hPow.{u3, 0, u3} 𝕜 Nat 𝕜 (instHPow.{u3, 0} 𝕜 Nat (Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))) (g x) n)))
+but is expected to have type
+ forall {α : Type.{u3}} {R : Type.{u2}} {𝕜 : Type.{u1}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u3} α} {f : α -> R} {g : α -> 𝕜}, (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) -> (forall {n : Nat}, (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) n) -> (Asymptotics.IsLittleO.{u3, u2, u1} α R 𝕜 (SeminormedRing.toNorm.{u2} R _inst_10) (NormedField.toNorm.{u1} 𝕜 _inst_12) l (fun (x : α) => HPow.hPow.{u2, 0, u2} R Nat R (instHPow.{u2, 0} R Nat (Monoid.Pow.{u2} R (MonoidWithZero.toMonoid.{u2} R (Semiring.toMonoidWithZero.{u2} R (Ring.toSemiring.{u2} R (SeminormedRing.toRing.{u2} R _inst_10)))))) (f x) n) (fun (x : α) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (g x) n)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.pow Asymptotics.IsLittleO.powₓ'. -/
+theorem IsLittleO.pow {f : α → R} {g : α → 𝕜} (h : f =o[l] g) {n : ℕ} (hn : 0 < n) :
(fun x => f x ^ n) =o[l] fun x => g x ^ n :=
by
cases n; exact hn.false.elim; clear hn
induction' n with n ihn; · simpa only [pow_one]
convert h.mul ihn <;> simp [pow_succ]
-#align asymptotics.is_o.pow Asymptotics.IsOCat.pow
-
-theorem IsOCat.of_pow {f : α → 𝕜} {g : α → R} {n : ℕ} (h : (f ^ n) =o[l] (g ^ n)) (hn : n ≠ 0) :
+#align asymptotics.is_o.pow Asymptotics.IsLittleO.pow
+
+/- warning: asymptotics.is_o.of_pow -> Asymptotics.IsLittleO.of_pow is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {R : Type.{u2}} {𝕜 : Type.{u3}} [_inst_10 : SeminormedRing.{u2} R] [_inst_12 : NormedField.{u3} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> R} {n : Nat}, (Asymptotics.IsLittleO.{u1, u3, u2} α 𝕜 R (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (SeminormedRing.toHasNorm.{u2} R _inst_10) l (HPow.hPow.{max u1 u3, 0, max u1 u3} (α -> 𝕜) Nat (α -> 𝕜) (instHPow.{max u1 u3, 0} (α -> 𝕜) Nat (Pi.hasPow.{u1, u3, 0} α Nat (fun (ᾰ : α) => 𝕜) (fun (i : α) => Monoid.Pow.{u3} 𝕜 (Ring.toMonoid.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))))) f n) (HPow.hPow.{max u1 u2, 0, max u1 u2} (α -> R) Nat (α -> R) (instHPow.{max u1 u2, 0} (α -> R) Nat (Pi.hasPow.{u1, u2, 0} α Nat (fun (ᾰ : α) => R) (fun (i : α) => Monoid.Pow.{u2} R (Ring.toMonoid.{u2} R (SeminormedRing.toRing.{u2} R _inst_10))))) g n)) -> (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero)))) -> (Asymptotics.IsLittleO.{u1, u3, u2} α 𝕜 R (NormedField.toHasNorm.{u3} 𝕜 _inst_12) (SeminormedRing.toHasNorm.{u2} R _inst_10) l f g)
+but is expected to have type
+ forall {α : Type.{u3}} {R : Type.{u1}} {𝕜 : Type.{u2}} [_inst_10 : SeminormedRing.{u1} R] [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u3} α} {f : α -> 𝕜} {g : α -> R} {n : Nat}, (Asymptotics.IsLittleO.{u3, u2, u1} α 𝕜 R (NormedField.toNorm.{u2} 𝕜 _inst_12) (SeminormedRing.toNorm.{u1} R _inst_10) l (HPow.hPow.{max u3 u2, 0, max u3 u2} (α -> 𝕜) Nat (α -> 𝕜) (instHPow.{max u3 u2, 0} (α -> 𝕜) Nat (Pi.instPow.{u3, u2, 0} α Nat (fun (ᾰ : α) => 𝕜) (fun (i : α) => Monoid.Pow.{u2} 𝕜 (MonoidWithZero.toMonoid.{u2} 𝕜 (Semiring.toMonoidWithZero.{u2} 𝕜 (DivisionSemiring.toSemiring.{u2} 𝕜 (Semifield.toDivisionSemiring.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))))))))) f n) (HPow.hPow.{max u3 u1, 0, max u3 u1} (α -> R) Nat (α -> R) (instHPow.{max u3 u1, 0} (α -> R) Nat (Pi.instPow.{u3, u1, 0} α Nat (fun (ᾰ : α) => R) (fun (i : α) => Monoid.Pow.{u1} R (MonoidWithZero.toMonoid.{u1} R (Semiring.toMonoidWithZero.{u1} R (Ring.toSemiring.{u1} R (SeminormedRing.toRing.{u1} R _inst_10))))))) g n)) -> (Ne.{1} Nat n (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0))) -> (Asymptotics.IsLittleO.{u3, u2, u1} α 𝕜 R (NormedField.toNorm.{u2} 𝕜 _inst_12) (SeminormedRing.toNorm.{u1} R _inst_10) l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.of_pow Asymptotics.IsLittleO.of_powₓ'. -/
+theorem IsLittleO.of_pow {f : α → 𝕜} {g : α → R} {n : ℕ} (h : (f ^ n) =o[l] (g ^ n)) (hn : n ≠ 0) :
f =o[l] g :=
- IsOCat.of_isOWith fun c hc => (h.def' <| pow_pos hc _).ofPow hn le_rfl hc.le
-#align asymptotics.is_o.of_pow Asymptotics.IsOCat.of_pow
+ IsLittleO.of_isBigOWith fun c hc => (h.def' <| pow_pos hc _).ofPow hn le_rfl hc.le
+#align asymptotics.is_o.of_pow Asymptotics.IsLittleO.of_pow
/-! ### Inverse -/
-theorem IsOWith.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : IsOWith c l f g)
- (h₀ : ∀ᶠ x in l, f x = 0 → g x = 0) : IsOWith c l (fun x => (g x)⁻¹) fun x => (f x)⁻¹ :=
+/- warning: asymptotics.is_O_with.inv_rev -> Asymptotics.IsBigOWith.inv_rev is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} {𝕜' : Type.{u3}} [_inst_12 : NormedField.{u2} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {c : Real} {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜'}, (Asymptotics.IsBigOWith.{u1, u2, u3} α 𝕜 𝕜' (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u3} 𝕜' _inst_13) c l f g) -> (Filter.Eventually.{u1} α (fun (x : α) => (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u3} 𝕜' (g x) (OfNat.ofNat.{u3} 𝕜' 0 (OfNat.mk.{u3} 𝕜' 0 (Zero.zero.{u3} 𝕜' (MulZeroClass.toHasZero.{u3} 𝕜' (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜' (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜' (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜' (Ring.toNonAssocRing.{u3} 𝕜' (NormedRing.toRing.{u3} 𝕜' (NormedCommRing.toNormedRing.{u3} 𝕜' (NormedField.toNormedCommRing.{u3} 𝕜' _inst_13))))))))))))) l) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α 𝕜' 𝕜 (NormedField.toHasNorm.{u3} 𝕜' _inst_13) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) c l (fun (x : α) => Inv.inv.{u3} 𝕜' (DivInvMonoid.toHasInv.{u3} 𝕜' (DivisionRing.toDivInvMonoid.{u3} 𝕜' (NormedDivisionRing.toDivisionRing.{u3} 𝕜' (NormedField.toNormedDivisionRing.{u3} 𝕜' _inst_13)))) (g x)) (fun (x : α) => Inv.inv.{u2} 𝕜 (DivInvMonoid.toHasInv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12)))) (f x)))
+but is expected to have type
+ forall {α : Type.{u3}} {𝕜 : Type.{u2}} {𝕜' : Type.{u1}} [_inst_12 : NormedField.{u2} 𝕜] [_inst_13 : NormedField.{u1} 𝕜'] {c : Real} {l : Filter.{u3} α} {f : α -> 𝕜} {g : α -> 𝕜'}, (Asymptotics.IsBigOWith.{u3, u2, u1} α 𝕜 𝕜' (NormedField.toNorm.{u2} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜' _inst_13) c l f g) -> (Filter.Eventually.{u3} α (fun (x : α) => (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜' (g x) (OfNat.ofNat.{u1} 𝕜' 0 (Zero.toOfNat0.{u1} 𝕜' (CommMonoidWithZero.toZero.{u1} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜' (Semifield.toCommGroupWithZero.{u1} 𝕜' (Field.toSemifield.{u1} 𝕜' (NormedField.toField.{u1} 𝕜' _inst_13))))))))) l) -> (Asymptotics.IsBigOWith.{u3, u1, u2} α 𝕜' 𝕜 (NormedField.toNorm.{u1} 𝕜' _inst_13) (NormedField.toNorm.{u2} 𝕜 _inst_12) c l (fun (x : α) => Inv.inv.{u1} 𝕜' (Field.toInv.{u1} 𝕜' (NormedField.toField.{u1} 𝕜' _inst_13)) (g x)) (fun (x : α) => Inv.inv.{u2} 𝕜 (Field.toInv.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)) (f x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.inv_rev Asymptotics.IsBigOWith.inv_revₓ'. -/
+theorem IsBigOWith.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : IsBigOWith c l f g)
+ (h₀ : ∀ᶠ x in l, f x = 0 → g x = 0) : IsBigOWith c l (fun x => (g x)⁻¹) fun x => (f x)⁻¹ :=
by
refine' is_O_with.of_bound (h.bound.mp (h₀.mono fun x h₀ hle => _))
cases' eq_or_ne (f x) 0 with hx hx
@@ -1644,18 +3459,30 @@ theorem IsOWith.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : IsOWith c l f
· have hc : 0 < c := pos_of_mul_pos_left ((norm_pos_iff.2 hx).trans_le hle) (norm_nonneg _)
replace hle := inv_le_inv_of_le (norm_pos_iff.2 hx) hle
simpa only [norm_inv, mul_inv, ← div_eq_inv_mul, div_le_iff hc] using hle
-#align asymptotics.is_O_with.inv_rev Asymptotics.IsOWith.inv_rev
-
-theorem IsO.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : f =O[l] g) (h₀ : ∀ᶠ x in l, f x = 0 → g x = 0) :
- (fun x => (g x)⁻¹) =O[l] fun x => (f x)⁻¹ :=
- let ⟨c, hc⟩ := h.IsOWith
- (hc.inv_rev h₀).IsO
-#align asymptotics.is_O.inv_rev Asymptotics.IsO.inv_rev
-
-theorem IsOCat.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : f =o[l] g)
+#align asymptotics.is_O_with.inv_rev Asymptotics.IsBigOWith.inv_rev
+
+/- warning: asymptotics.is_O.inv_rev -> Asymptotics.IsBigO.inv_rev is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} {𝕜' : Type.{u3}} [_inst_12 : NormedField.{u2} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜'}, (Asymptotics.IsBigO.{u1, u2, u3} α 𝕜 𝕜' (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u3} 𝕜' _inst_13) l f g) -> (Filter.Eventually.{u1} α (fun (x : α) => (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u3} 𝕜' (g x) (OfNat.ofNat.{u3} 𝕜' 0 (OfNat.mk.{u3} 𝕜' 0 (Zero.zero.{u3} 𝕜' (MulZeroClass.toHasZero.{u3} 𝕜' (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜' (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜' (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜' (Ring.toNonAssocRing.{u3} 𝕜' (NormedRing.toRing.{u3} 𝕜' (NormedCommRing.toNormedRing.{u3} 𝕜' (NormedField.toNormedCommRing.{u3} 𝕜' _inst_13))))))))))))) l) -> (Asymptotics.IsBigO.{u1, u3, u2} α 𝕜' 𝕜 (NormedField.toHasNorm.{u3} 𝕜' _inst_13) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l (fun (x : α) => Inv.inv.{u3} 𝕜' (DivInvMonoid.toHasInv.{u3} 𝕜' (DivisionRing.toDivInvMonoid.{u3} 𝕜' (NormedDivisionRing.toDivisionRing.{u3} 𝕜' (NormedField.toNormedDivisionRing.{u3} 𝕜' _inst_13)))) (g x)) (fun (x : α) => Inv.inv.{u2} 𝕜 (DivInvMonoid.toHasInv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12)))) (f x)))
+but is expected to have type
+ forall {α : Type.{u3}} {𝕜 : Type.{u2}} {𝕜' : Type.{u1}} [_inst_12 : NormedField.{u2} 𝕜] [_inst_13 : NormedField.{u1} 𝕜'] {l : Filter.{u3} α} {f : α -> 𝕜} {g : α -> 𝕜'}, (Asymptotics.IsBigO.{u3, u2, u1} α 𝕜 𝕜' (NormedField.toNorm.{u2} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜' _inst_13) l f g) -> (Filter.Eventually.{u3} α (fun (x : α) => (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜' (g x) (OfNat.ofNat.{u1} 𝕜' 0 (Zero.toOfNat0.{u1} 𝕜' (CommMonoidWithZero.toZero.{u1} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜' (Semifield.toCommGroupWithZero.{u1} 𝕜' (Field.toSemifield.{u1} 𝕜' (NormedField.toField.{u1} 𝕜' _inst_13))))))))) l) -> (Asymptotics.IsBigO.{u3, u1, u2} α 𝕜' 𝕜 (NormedField.toNorm.{u1} 𝕜' _inst_13) (NormedField.toNorm.{u2} 𝕜 _inst_12) l (fun (x : α) => Inv.inv.{u1} 𝕜' (Field.toInv.{u1} 𝕜' (NormedField.toField.{u1} 𝕜' _inst_13)) (g x)) (fun (x : α) => Inv.inv.{u2} 𝕜 (Field.toInv.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)) (f x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.inv_rev Asymptotics.IsBigO.inv_revₓ'. -/
+theorem IsBigO.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : f =O[l] g)
+ (h₀ : ∀ᶠ x in l, f x = 0 → g x = 0) : (fun x => (g x)⁻¹) =O[l] fun x => (f x)⁻¹ :=
+ let ⟨c, hc⟩ := h.IsBigOWith
+ (hc.inv_rev h₀).IsBigO
+#align asymptotics.is_O.inv_rev Asymptotics.IsBigO.inv_rev
+
+/- warning: asymptotics.is_o.inv_rev -> Asymptotics.IsLittleO.inv_rev is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} {𝕜' : Type.{u3}} [_inst_12 : NormedField.{u2} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜'}, (Asymptotics.IsLittleO.{u1, u2, u3} α 𝕜 𝕜' (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u3} 𝕜' _inst_13) l f g) -> (Filter.Eventually.{u1} α (fun (x : α) => (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u3} 𝕜' (g x) (OfNat.ofNat.{u3} 𝕜' 0 (OfNat.mk.{u3} 𝕜' 0 (Zero.zero.{u3} 𝕜' (MulZeroClass.toHasZero.{u3} 𝕜' (NonUnitalNonAssocSemiring.toMulZeroClass.{u3} 𝕜' (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u3} 𝕜' (NonAssocRing.toNonUnitalNonAssocRing.{u3} 𝕜' (Ring.toNonAssocRing.{u3} 𝕜' (NormedRing.toRing.{u3} 𝕜' (NormedCommRing.toNormedRing.{u3} 𝕜' (NormedField.toNormedCommRing.{u3} 𝕜' _inst_13))))))))))))) l) -> (Asymptotics.IsLittleO.{u1, u3, u2} α 𝕜' 𝕜 (NormedField.toHasNorm.{u3} 𝕜' _inst_13) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l (fun (x : α) => Inv.inv.{u3} 𝕜' (DivInvMonoid.toHasInv.{u3} 𝕜' (DivisionRing.toDivInvMonoid.{u3} 𝕜' (NormedDivisionRing.toDivisionRing.{u3} 𝕜' (NormedField.toNormedDivisionRing.{u3} 𝕜' _inst_13)))) (g x)) (fun (x : α) => Inv.inv.{u2} 𝕜 (DivInvMonoid.toHasInv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12)))) (f x)))
+but is expected to have type
+ forall {α : Type.{u3}} {𝕜 : Type.{u2}} {𝕜' : Type.{u1}} [_inst_12 : NormedField.{u2} 𝕜] [_inst_13 : NormedField.{u1} 𝕜'] {l : Filter.{u3} α} {f : α -> 𝕜} {g : α -> 𝕜'}, (Asymptotics.IsLittleO.{u3, u2, u1} α 𝕜 𝕜' (NormedField.toNorm.{u2} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜' _inst_13) l f g) -> (Filter.Eventually.{u3} α (fun (x : α) => (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜' (g x) (OfNat.ofNat.{u1} 𝕜' 0 (Zero.toOfNat0.{u1} 𝕜' (CommMonoidWithZero.toZero.{u1} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜' (Semifield.toCommGroupWithZero.{u1} 𝕜' (Field.toSemifield.{u1} 𝕜' (NormedField.toField.{u1} 𝕜' _inst_13))))))))) l) -> (Asymptotics.IsLittleO.{u3, u1, u2} α 𝕜' 𝕜 (NormedField.toNorm.{u1} 𝕜' _inst_13) (NormedField.toNorm.{u2} 𝕜 _inst_12) l (fun (x : α) => Inv.inv.{u1} 𝕜' (Field.toInv.{u1} 𝕜' (NormedField.toField.{u1} 𝕜' _inst_13)) (g x)) (fun (x : α) => Inv.inv.{u2} 𝕜 (Field.toInv.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)) (f x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.inv_rev Asymptotics.IsLittleO.inv_revₓ'. -/
+theorem IsLittleO.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : f =o[l] g)
(h₀ : ∀ᶠ x in l, f x = 0 → g x = 0) : (fun x => (g x)⁻¹) =o[l] fun x => (f x)⁻¹ :=
- IsOCat.of_isOWith fun c hc => (h.def' hc).inv_rev h₀
-#align asymptotics.is_o.inv_rev Asymptotics.IsOCat.inv_rev
+ IsLittleO.of_isBigOWith fun c hc => (h.def' hc).inv_rev h₀
+#align asymptotics.is_o.inv_rev Asymptotics.IsLittleO.inv_rev
/-! ### Scalar multiplication -/
@@ -1664,52 +3491,95 @@ section SmulConst
variable [NormedSpace 𝕜 E']
-theorem IsOWith.const_smul_left (h : IsOWith c l f' g) (c' : 𝕜) :
- IsOWith (‖c'‖ * c) l (fun x => c' • f' x) g :=
- IsOWith.of_norm_left <| by
+/- warning: asymptotics.is_O_with.const_smul_left -> Asymptotics.IsBigOWith.const_smul_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 c l f' g) -> (forall (c' : 𝕜), Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) (Norm.norm.{u4} 𝕜 (NormedField.toHasNorm.{u4} 𝕜 _inst_12) c') c) l (fun (x : α) => SMul.smul.{u4, u3} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))) c' (f' x)) g)
+but is expected to have type
+ forall {α : Type.{u4}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {g : α -> F} {f' : α -> E'} {l : Filter.{u4} α} [_inst_14 : NormedSpace.{u1, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsBigOWith.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 c l f' g) -> (forall (c' : 𝕜), Asymptotics.IsBigOWith.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) c') c) l (fun (x : α) => HSMul.hSMul.{u1, u3, u3} 𝕜 E' E' (instHSMul.{u1, u3} 𝕜 E' (SMulZeroClass.toSMul.{u1, u3} 𝕜 E' (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u1, u3} 𝕜 E' (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (Module.toMulActionWithZero.{u1, u3} 𝕜 E' (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u1, u3} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c' (f' x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.const_smul_left Asymptotics.IsBigOWith.const_smul_leftₓ'. -/
+theorem IsBigOWith.const_smul_left (h : IsBigOWith c l f' g) (c' : 𝕜) :
+ IsBigOWith (‖c'‖ * c) l (fun x => c' • f' x) g :=
+ IsBigOWith.of_norm_left <| by
simpa only [← norm_smul, norm_norm] using h.norm_left.const_mul_left ‖c'‖
-#align asymptotics.is_O_with.const_smul_left Asymptotics.IsOWith.const_smul_left
-
-theorem IsO.const_smul_left (h : f' =O[l] g) (c : 𝕜) : (c • f') =O[l] g :=
- let ⟨b, hb⟩ := h.IsOWith
- (hb.const_smul_left _).IsO
-#align asymptotics.is_O.const_smul_left Asymptotics.IsO.const_smul_left
-
-theorem IsOCat.const_smul_left (h : f' =o[l] g) (c : 𝕜) : (c • f') =o[l] g :=
- IsOCat.of_norm_left <| by simpa only [← norm_smul] using h.norm_left.const_mul_left ‖c‖
-#align asymptotics.is_o.const_smul_left Asymptotics.IsOCat.const_smul_left
-
-theorem isO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x) =O[l] g ↔ f' =O[l] g :=
+#align asymptotics.is_O_with.const_smul_left Asymptotics.IsBigOWith.const_smul_left
+
+/- warning: asymptotics.is_O.const_smul_left -> Asymptotics.IsBigO.const_smul_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (SMul.smul.{u4, max u1 u3} 𝕜 (α -> E') (Function.hasSMul.{u1, u4, u3} α 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c f') g)
+but is expected to have type
+ forall {α : Type.{u4}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u1} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u4} α} [_inst_14 : NormedSpace.{u1, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsBigO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsBigO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l (HSMul.hSMul.{u1, max u4 u3, max u4 u3} 𝕜 (α -> E') (α -> E') (instHSMul.{u1, max u4 u3} 𝕜 (α -> E') (Pi.instSMul.{u4, u3, u1} α 𝕜 (fun (a._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.45605 : α) => E') (fun (i : α) => SMulZeroClass.toSMul.{u1, u3} 𝕜 E' (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u1, u3} 𝕜 E' (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (Module.toMulActionWithZero.{u1, u3} 𝕜 E' (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u1, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))))) c f') g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.const_smul_left Asymptotics.IsBigO.const_smul_leftₓ'. -/
+theorem IsBigO.const_smul_left (h : f' =O[l] g) (c : 𝕜) : (c • f') =O[l] g :=
+ let ⟨b, hb⟩ := h.IsBigOWith
+ (hb.const_smul_left _).IsBigO
+#align asymptotics.is_O.const_smul_left Asymptotics.IsBigO.const_smul_left
+
+/- warning: asymptotics.is_o.const_smul_left -> Asymptotics.IsLittleO.const_smul_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (SMul.smul.{u4, max u1 u3} 𝕜 (α -> E') (Function.hasSMul.{u1, u4, u3} α 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c f') g)
+but is expected to have type
+ forall {α : Type.{u4}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u1}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u1} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u4} α} [_inst_14 : NormedSpace.{u1, u3} 𝕜 E' _inst_12 _inst_4], (Asymptotics.IsLittleO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l f' g) -> (forall (c : 𝕜), Asymptotics.IsLittleO.{u4, u3, u2} α E' F (SeminormedAddCommGroup.toNorm.{u3} E' _inst_4) _inst_2 l (HSMul.hSMul.{u1, max u4 u3, max u4 u3} 𝕜 (α -> E') (α -> E') (instHSMul.{u1, max u4 u3} 𝕜 (α -> E') (Pi.instSMul.{u4, u3, u1} α 𝕜 (fun (a._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.45751 : α) => E') (fun (i : α) => SMulZeroClass.toSMul.{u1, u3} 𝕜 E' (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u1, u3} 𝕜 E' (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u1, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u3} E' (SubNegZeroMonoid.toNegZeroClass.{u3} E' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E' (AddCommGroup.toDivisionAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)))))) (Module.toMulActionWithZero.{u1, u3} 𝕜 E' (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u1, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))))) c f') g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.const_smul_left Asymptotics.IsLittleO.const_smul_leftₓ'. -/
+theorem IsLittleO.const_smul_left (h : f' =o[l] g) (c : 𝕜) : (c • f') =o[l] g :=
+ IsLittleO.of_norm_left <| by simpa only [← norm_smul] using h.norm_left.const_mul_left ‖c‖
+#align asymptotics.is_o.const_smul_left Asymptotics.IsLittleO.const_smul_left
+
+/- warning: asymptotics.is_O_const_smul_left -> Asymptotics.isBigO_const_smul_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (OfNat.mk.{u4} 𝕜 0 (Zero.zero.{u4} 𝕜 (MulZeroClass.toHasZero.{u4} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u4} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u4} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u4} 𝕜 (Ring.toNonAssocRing.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => SMul.smul.{u4, u3} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))) c (f' x)) g) (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g))
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (Zero.toOfNat0.{u4} 𝕜 (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSMul.hSMul.{u4, u2, u2} 𝕜 E' E' (instHSMul.{u4, u2} 𝕜 E' (SMulZeroClass.toSMul.{u4, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c (f' x)) g) (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_smul_left Asymptotics.isBigO_const_smul_leftₓ'. -/
+theorem isBigO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x) =O[l] g ↔ f' =O[l] g :=
by
have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
rw [← is_O_norm_left]
simp only [norm_smul]
rw [is_O_const_mul_left_iff cne0, is_O_norm_left]
-#align asymptotics.is_O_const_smul_left Asymptotics.isO_const_smul_left
-
-theorem isOCat_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x) =o[l] g ↔ f' =o[l] g :=
+#align asymptotics.is_O_const_smul_left Asymptotics.isBigO_const_smul_left
+
+/- warning: asymptotics.is_o_const_smul_left -> Asymptotics.isLittleO_const_smul_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (OfNat.mk.{u4} 𝕜 0 (Zero.zero.{u4} 𝕜 (MulZeroClass.toHasZero.{u4} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u4} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u4} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u4} 𝕜 (Ring.toNonAssocRing.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => SMul.smul.{u4, u3} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))) c (f' x)) g) (Asymptotics.IsLittleO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l f' g))
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} {𝕜 : Type.{u4}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_12 : NormedField.{u4} 𝕜] {g : α -> F} {f' : α -> E'} {l : Filter.{u3} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (Zero.toOfNat0.{u4} 𝕜 (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => HSMul.hSMul.{u4, u2, u2} 𝕜 E' E' (instHSMul.{u4, u2} 𝕜 E' (SMulZeroClass.toSMul.{u4, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c (f' x)) g) (Asymptotics.IsLittleO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l f' g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_smul_left Asymptotics.isLittleO_const_smul_leftₓ'. -/
+theorem isLittleO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x) =o[l] g ↔ f' =o[l] g :=
by
have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
rw [← is_o_norm_left]
simp only [norm_smul]
rw [is_o_const_mul_left_iff cne0, is_o_norm_left]
-#align asymptotics.is_o_const_smul_left Asymptotics.isOCat_const_smul_left
-
-theorem isO_const_smul_right {c : 𝕜} (hc : c ≠ 0) : (f =O[l] fun x => c • f' x) ↔ f =O[l] f' :=
+#align asymptotics.is_o_const_smul_left Asymptotics.isLittleO_const_smul_left
+
+/- warning: asymptotics.is_O_const_smul_right -> Asymptotics.isBigO_const_smul_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {f : α -> E} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (OfNat.mk.{u4} 𝕜 0 (Zero.zero.{u4} 𝕜 (MulZeroClass.toHasZero.{u4} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u4} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u4} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u4} 𝕜 (Ring.toNonAssocRing.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E E' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) l f (fun (x : α) => SMul.smul.{u4, u3} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))) c (f' x))) (Asymptotics.IsBigO.{u1, u2, u3} α E E' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) l f f'))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {E' : Type.{u1}} {𝕜 : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_12 : NormedField.{u4} 𝕜] {f : α -> E} {f' : α -> E'} {l : Filter.{u3} α} [_inst_14 : NormedSpace.{u4, u1} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (Zero.toOfNat0.{u4} 𝕜 (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsBigO.{u3, u2, u1} α E E' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f (fun (x : α) => HSMul.hSMul.{u4, u1, u1} 𝕜 E' E' (instHSMul.{u4, u1} 𝕜 E' (SMulZeroClass.toSMul.{u4, u1} 𝕜 E' (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u1} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u1} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u1} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)) (NormedSpace.toModule.{u4, u1} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c (f' x))) (Asymptotics.IsBigO.{u3, u2, u1} α E E' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f f'))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_const_smul_right Asymptotics.isBigO_const_smul_rightₓ'. -/
+theorem isBigO_const_smul_right {c : 𝕜} (hc : c ≠ 0) : (f =O[l] fun x => c • f' x) ↔ f =O[l] f' :=
by
have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
rw [← is_O_norm_right]
simp only [norm_smul]
rw [is_O_const_mul_right_iff cne0, is_O_norm_right]
-#align asymptotics.is_O_const_smul_right Asymptotics.isO_const_smul_right
-
-theorem isOCat_const_smul_right {c : 𝕜} (hc : c ≠ 0) : (f =o[l] fun x => c • f' x) ↔ f =o[l] f' :=
+#align asymptotics.is_O_const_smul_right Asymptotics.isBigO_const_smul_right
+
+/- warning: asymptotics.is_o_const_smul_right -> Asymptotics.isLittleO_const_smul_right is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {E' : Type.{u3}} {𝕜 : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_4 : SeminormedAddCommGroup.{u3} E'] [_inst_12 : NormedField.{u4} 𝕜] {f : α -> E} {f' : α -> E'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u3} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (OfNat.mk.{u4} 𝕜 0 (Zero.zero.{u4} 𝕜 (MulZeroClass.toHasZero.{u4} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u4} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u4} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u4} 𝕜 (Ring.toNonAssocRing.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E E' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) l f (fun (x : α) => SMul.smul.{u4, u3} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u3} 𝕜 E' (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u3} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u3} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u3} E' (AddMonoid.toAddZeroClass.{u3} E' (AddCommMonoid.toAddMonoid.{u3} E' (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u3} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) (NormedSpace.toModule.{u4, u3} 𝕜 E' _inst_12 _inst_4 _inst_14))))) c (f' x))) (Asymptotics.IsLittleO.{u1, u2, u3} α E E' _inst_1 (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) l f f'))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {E' : Type.{u1}} {𝕜 : Type.{u4}} [_inst_1 : Norm.{u2} E] [_inst_4 : SeminormedAddCommGroup.{u1} E'] [_inst_12 : NormedField.{u4} 𝕜] {f : α -> E} {f' : α -> E'} {l : Filter.{u3} α} [_inst_14 : NormedSpace.{u4, u1} 𝕜 E' _inst_12 _inst_4] {c : 𝕜}, (Ne.{succ u4} 𝕜 c (OfNat.ofNat.{u4} 𝕜 0 (Zero.toOfNat0.{u4} 𝕜 (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))))))) -> (Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E E' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f (fun (x : α) => HSMul.hSMul.{u4, u1, u1} 𝕜 E' E' (instHSMul.{u4, u1} 𝕜 E' (SMulZeroClass.toSMul.{u4, u1} 𝕜 E' (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u1} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u1} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u1} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4)) (NormedSpace.toModule.{u4, u1} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) c (f' x))) (Asymptotics.IsLittleO.{u3, u2, u1} α E E' _inst_1 (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f f'))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_smul_right Asymptotics.isLittleO_const_smul_rightₓ'. -/
+theorem isLittleO_const_smul_right {c : 𝕜} (hc : c ≠ 0) :
+ (f =o[l] fun x => c • f' x) ↔ f =o[l] f' :=
by
have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
rw [← is_o_norm_right]
simp only [norm_smul]
rw [is_o_const_mul_right_iff cne0, is_o_norm_right]
-#align asymptotics.is_o_const_smul_right Asymptotics.isOCat_const_smul_right
+#align asymptotics.is_o_const_smul_right Asymptotics.isLittleO_const_smul_right
end SmulConst
@@ -1717,35 +3587,65 @@ section Smul
variable [NormedSpace 𝕜 E'] [NormedSpace 𝕜' F'] {k₁ : α → 𝕜} {k₂ : α → 𝕜'}
-theorem IsOWith.smul (h₁ : IsOWith c l k₁ k₂) (h₂ : IsOWith c' l f' g') :
- IsOWith (c * c') l (fun x => k₁ x • f' x) fun x => k₂ x • g' x := by
+/- warning: asymptotics.is_O_with.smul -> Asymptotics.IsBigOWith.smul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {𝕜 : Type.{u4}} {𝕜' : Type.{u5}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u5} 𝕜'] {c : Real} {c' : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u5, u3} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsBigOWith.{u1, u4, u5} α 𝕜 𝕜' (NormedField.toHasNorm.{u4} 𝕜 _inst_12) (NormedField.toHasNorm.{u5} 𝕜' _inst_13) c l k₁ k₂) -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) c' l f' g') -> (Asymptotics.IsBigOWith.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) c c') l (fun (x : α) => SMul.smul.{u4, u2} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u2} 𝕜 E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u2} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14))))) (k₁ x) (f' x)) (fun (x : α) => SMul.smul.{u5, u3} 𝕜' F' (SMulZeroClass.toHasSmul.{u5, u3} 𝕜' F' (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (SMulWithZero.toSmulZeroClass.{u5, u3} 𝕜' F' (MulZeroClass.toHasZero.{u5} 𝕜' (MulZeroOneClass.toMulZeroClass.{u5} 𝕜' (MonoidWithZero.toMulZeroOneClass.{u5} 𝕜' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (MulActionWithZero.toSMulWithZero.{u5, u3} 𝕜' F' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (Module.toMulActionWithZero.{u5, u3} 𝕜' F' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5)) (NormedSpace.toModule.{u5, u3} 𝕜' F' _inst_13 _inst_5 _inst_15))))) (k₂ x) (g' x)))
+but is expected to have type
+ forall {α : Type.{u5}} {E' : Type.{u2}} {F' : Type.{u1}} {𝕜 : Type.{u4}} {𝕜' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {c : Real} {c' : Real} {f' : α -> E'} {g' : α -> F'} {l : Filter.{u5} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u3, u1} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsBigOWith.{u5, u4, u3} α 𝕜 𝕜' (NormedField.toNorm.{u4} 𝕜 _inst_12) (NormedField.toNorm.{u3} 𝕜' _inst_13) c l k₁ k₂) -> (Asymptotics.IsBigOWith.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) c' l f' g') -> (Asymptotics.IsBigOWith.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) c c') l (fun (x : α) => HSMul.hSMul.{u4, u2, u2} 𝕜 E' E' (instHSMul.{u4, u2} 𝕜 E' (SMulZeroClass.toSMul.{u4, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) (k₁ x) (f' x)) (fun (x : α) => HSMul.hSMul.{u3, u1, u1} 𝕜' F' F' (instHSMul.{u3, u1} 𝕜' F' (SMulZeroClass.toSMul.{u3, u1} 𝕜' F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (SMulWithZero.toSMulZeroClass.{u3, u1} 𝕜' F' (CommMonoidWithZero.toZero.{u3} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜' (Semifield.toCommGroupWithZero.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (MulActionWithZero.toSMulWithZero.{u3, u1} 𝕜' F' (Semiring.toMonoidWithZero.{u3} 𝕜' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (Module.toMulActionWithZero.{u3, u1} 𝕜' F' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)) (NormedSpace.toModule.{u3, u1} 𝕜' F' _inst_13 _inst_5 _inst_15)))))) (k₂ x) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.smul Asymptotics.IsBigOWith.smulₓ'. -/
+theorem IsBigOWith.smul (h₁ : IsBigOWith c l k₁ k₂) (h₂ : IsBigOWith c' l f' g') :
+ IsBigOWith (c * c') l (fun x => k₁ x • f' x) fun x => k₂ x • g' x := by
refine' ((h₁.norm_norm.mul h₂.norm_norm).congr rfl _ _).of_norm_norm <;>
· intros <;> simp only [norm_smul]
-#align asymptotics.is_O_with.smul Asymptotics.IsOWith.smul
-
-theorem IsO.smul (h₁ : k₁ =O[l] k₂) (h₂ : f' =O[l] g') :
+#align asymptotics.is_O_with.smul Asymptotics.IsBigOWith.smul
+
+/- warning: asymptotics.is_O.smul -> Asymptotics.IsBigO.smul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {𝕜 : Type.{u4}} {𝕜' : Type.{u5}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u5} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u5, u3} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsBigO.{u1, u4, u5} α 𝕜 𝕜' (NormedField.toHasNorm.{u4} 𝕜 _inst_12) (NormedField.toHasNorm.{u5} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g') -> (Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => SMul.smul.{u4, u2} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u2} 𝕜 E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u2} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14))))) (k₁ x) (f' x)) (fun (x : α) => SMul.smul.{u5, u3} 𝕜' F' (SMulZeroClass.toHasSmul.{u5, u3} 𝕜' F' (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (SMulWithZero.toSmulZeroClass.{u5, u3} 𝕜' F' (MulZeroClass.toHasZero.{u5} 𝕜' (MulZeroOneClass.toMulZeroClass.{u5} 𝕜' (MonoidWithZero.toMulZeroOneClass.{u5} 𝕜' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (MulActionWithZero.toSMulWithZero.{u5, u3} 𝕜' F' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (Module.toMulActionWithZero.{u5, u3} 𝕜' F' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5)) (NormedSpace.toModule.{u5, u3} 𝕜' F' _inst_13 _inst_5 _inst_15))))) (k₂ x) (g' x)))
+but is expected to have type
+ forall {α : Type.{u5}} {E' : Type.{u2}} {F' : Type.{u1}} {𝕜 : Type.{u4}} {𝕜' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u5} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u3, u1} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsBigO.{u5, u4, u3} α 𝕜 𝕜' (NormedField.toNorm.{u4} 𝕜 _inst_12) (NormedField.toNorm.{u3} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsBigO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g') -> (Asymptotics.IsBigO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => HSMul.hSMul.{u4, u2, u2} 𝕜 E' E' (instHSMul.{u4, u2} 𝕜 E' (SMulZeroClass.toSMul.{u4, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) (k₁ x) (f' x)) (fun (x : α) => HSMul.hSMul.{u3, u1, u1} 𝕜' F' F' (instHSMul.{u3, u1} 𝕜' F' (SMulZeroClass.toSMul.{u3, u1} 𝕜' F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (SMulWithZero.toSMulZeroClass.{u3, u1} 𝕜' F' (CommMonoidWithZero.toZero.{u3} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜' (Semifield.toCommGroupWithZero.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (MulActionWithZero.toSMulWithZero.{u3, u1} 𝕜' F' (Semiring.toMonoidWithZero.{u3} 𝕜' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (Module.toMulActionWithZero.{u3, u1} 𝕜' F' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)) (NormedSpace.toModule.{u3, u1} 𝕜' F' _inst_13 _inst_5 _inst_15)))))) (k₂ x) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.smul Asymptotics.IsBigO.smulₓ'. -/
+theorem IsBigO.smul (h₁ : k₁ =O[l] k₂) (h₂ : f' =O[l] g') :
(fun x => k₁ x • f' x) =O[l] fun x => k₂ x • g' x := by
refine' ((h₁.norm_norm.mul h₂.norm_norm).congr _ _).of_norm_norm <;>
· intros <;> simp only [norm_smul]
-#align asymptotics.is_O.smul Asymptotics.IsO.smul
-
-theorem IsO.smul_isOCat (h₁ : k₁ =O[l] k₂) (h₂ : f' =o[l] g') :
+#align asymptotics.is_O.smul Asymptotics.IsBigO.smul
+
+/- warning: asymptotics.is_O.smul_is_o -> Asymptotics.IsBigO.smul_isLittleO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {𝕜 : Type.{u4}} {𝕜' : Type.{u5}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u5} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u5, u3} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsBigO.{u1, u4, u5} α 𝕜 𝕜' (NormedField.toHasNorm.{u4} 𝕜 _inst_12) (NormedField.toHasNorm.{u5} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => SMul.smul.{u4, u2} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u2} 𝕜 E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u2} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14))))) (k₁ x) (f' x)) (fun (x : α) => SMul.smul.{u5, u3} 𝕜' F' (SMulZeroClass.toHasSmul.{u5, u3} 𝕜' F' (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (SMulWithZero.toSmulZeroClass.{u5, u3} 𝕜' F' (MulZeroClass.toHasZero.{u5} 𝕜' (MulZeroOneClass.toMulZeroClass.{u5} 𝕜' (MonoidWithZero.toMulZeroOneClass.{u5} 𝕜' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (MulActionWithZero.toSMulWithZero.{u5, u3} 𝕜' F' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (Module.toMulActionWithZero.{u5, u3} 𝕜' F' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5)) (NormedSpace.toModule.{u5, u3} 𝕜' F' _inst_13 _inst_5 _inst_15))))) (k₂ x) (g' x)))
+but is expected to have type
+ forall {α : Type.{u5}} {E' : Type.{u2}} {F' : Type.{u1}} {𝕜 : Type.{u4}} {𝕜' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u5} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u3, u1} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsBigO.{u5, u4, u3} α 𝕜 𝕜' (NormedField.toNorm.{u4} 𝕜 _inst_12) (NormedField.toNorm.{u3} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsLittleO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => HSMul.hSMul.{u4, u2, u2} 𝕜 E' E' (instHSMul.{u4, u2} 𝕜 E' (SMulZeroClass.toSMul.{u4, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) (k₁ x) (f' x)) (fun (x : α) => HSMul.hSMul.{u3, u1, u1} 𝕜' F' F' (instHSMul.{u3, u1} 𝕜' F' (SMulZeroClass.toSMul.{u3, u1} 𝕜' F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (SMulWithZero.toSMulZeroClass.{u3, u1} 𝕜' F' (CommMonoidWithZero.toZero.{u3} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜' (Semifield.toCommGroupWithZero.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (MulActionWithZero.toSMulWithZero.{u3, u1} 𝕜' F' (Semiring.toMonoidWithZero.{u3} 𝕜' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (Module.toMulActionWithZero.{u3, u1} 𝕜' F' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)) (NormedSpace.toModule.{u3, u1} 𝕜' F' _inst_13 _inst_5 _inst_15)))))) (k₂ x) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.smul_is_o Asymptotics.IsBigO.smul_isLittleOₓ'. -/
+theorem IsBigO.smul_isLittleO (h₁ : k₁ =O[l] k₂) (h₂ : f' =o[l] g') :
(fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x := by
refine' ((h₁.norm_norm.mul_is_o h₂.norm_norm).congr _ _).of_norm_norm <;>
· intros <;> simp only [norm_smul]
-#align asymptotics.is_O.smul_is_o Asymptotics.IsO.smul_isOCat
-
-theorem IsOCat.smul_isO (h₁ : k₁ =o[l] k₂) (h₂ : f' =O[l] g') :
+#align asymptotics.is_O.smul_is_o Asymptotics.IsBigO.smul_isLittleO
+
+/- warning: asymptotics.is_o.smul_is_O -> Asymptotics.IsLittleO.smul_isBigO is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {𝕜 : Type.{u4}} {𝕜' : Type.{u5}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u5} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u5, u3} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsLittleO.{u1, u4, u5} α 𝕜 𝕜' (NormedField.toHasNorm.{u4} 𝕜 _inst_12) (NormedField.toHasNorm.{u5} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsBigO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => SMul.smul.{u4, u2} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u2} 𝕜 E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u2} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14))))) (k₁ x) (f' x)) (fun (x : α) => SMul.smul.{u5, u3} 𝕜' F' (SMulZeroClass.toHasSmul.{u5, u3} 𝕜' F' (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (SMulWithZero.toSmulZeroClass.{u5, u3} 𝕜' F' (MulZeroClass.toHasZero.{u5} 𝕜' (MulZeroOneClass.toMulZeroClass.{u5} 𝕜' (MonoidWithZero.toMulZeroOneClass.{u5} 𝕜' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (MulActionWithZero.toSMulWithZero.{u5, u3} 𝕜' F' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (Module.toMulActionWithZero.{u5, u3} 𝕜' F' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5)) (NormedSpace.toModule.{u5, u3} 𝕜' F' _inst_13 _inst_5 _inst_15))))) (k₂ x) (g' x)))
+but is expected to have type
+ forall {α : Type.{u5}} {E' : Type.{u2}} {F' : Type.{u1}} {𝕜 : Type.{u4}} {𝕜' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u5} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u3, u1} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsLittleO.{u5, u4, u3} α 𝕜 𝕜' (NormedField.toNorm.{u4} 𝕜 _inst_12) (NormedField.toNorm.{u3} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsBigO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => HSMul.hSMul.{u4, u2, u2} 𝕜 E' E' (instHSMul.{u4, u2} 𝕜 E' (SMulZeroClass.toSMul.{u4, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) (k₁ x) (f' x)) (fun (x : α) => HSMul.hSMul.{u3, u1, u1} 𝕜' F' F' (instHSMul.{u3, u1} 𝕜' F' (SMulZeroClass.toSMul.{u3, u1} 𝕜' F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (SMulWithZero.toSMulZeroClass.{u3, u1} 𝕜' F' (CommMonoidWithZero.toZero.{u3} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜' (Semifield.toCommGroupWithZero.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (MulActionWithZero.toSMulWithZero.{u3, u1} 𝕜' F' (Semiring.toMonoidWithZero.{u3} 𝕜' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (Module.toMulActionWithZero.{u3, u1} 𝕜' F' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)) (NormedSpace.toModule.{u3, u1} 𝕜' F' _inst_13 _inst_5 _inst_15)))))) (k₂ x) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.smul_is_O Asymptotics.IsLittleO.smul_isBigOₓ'. -/
+theorem IsLittleO.smul_isBigO (h₁ : k₁ =o[l] k₂) (h₂ : f' =O[l] g') :
(fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x := by
refine' ((h₁.norm_norm.mul_is_O h₂.norm_norm).congr _ _).of_norm_norm <;>
· intros <;> simp only [norm_smul]
-#align asymptotics.is_o.smul_is_O Asymptotics.IsOCat.smul_isO
-
-theorem IsOCat.smul (h₁ : k₁ =o[l] k₂) (h₂ : f' =o[l] g') :
+#align asymptotics.is_o.smul_is_O Asymptotics.IsLittleO.smul_isBigO
+
+/- warning: asymptotics.is_o.smul -> Asymptotics.IsLittleO.smul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} {𝕜 : Type.{u4}} {𝕜' : Type.{u5}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u5} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u1} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u5, u3} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsLittleO.{u1, u4, u5} α 𝕜 𝕜' (NormedField.toHasNorm.{u4} 𝕜 _inst_12) (NormedField.toHasNorm.{u5} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => SMul.smul.{u4, u2} 𝕜 E' (SMulZeroClass.toHasSmul.{u4, u2} 𝕜 E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u4, u2} 𝕜 E' (MulZeroClass.toHasZero.{u4} 𝕜 (MulZeroOneClass.toMulZeroClass.{u4} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u4} 𝕜 (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (Ring.toSemiring.{u4} 𝕜 (NormedRing.toRing.{u4} 𝕜 (NormedCommRing.toNormedRing.{u4} 𝕜 (NormedField.toNormedCommRing.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14))))) (k₁ x) (f' x)) (fun (x : α) => SMul.smul.{u5, u3} 𝕜' F' (SMulZeroClass.toHasSmul.{u5, u3} 𝕜' F' (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (SMulWithZero.toSmulZeroClass.{u5, u3} 𝕜' F' (MulZeroClass.toHasZero.{u5} 𝕜' (MulZeroOneClass.toMulZeroClass.{u5} 𝕜' (MonoidWithZero.toMulZeroOneClass.{u5} 𝕜' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (MulActionWithZero.toSMulWithZero.{u5, u3} 𝕜' F' (Semiring.toMonoidWithZero.{u5} 𝕜' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13))))) (AddZeroClass.toHasZero.{u3} F' (AddMonoid.toAddZeroClass.{u3} F' (AddCommMonoid.toAddMonoid.{u3} F' (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5))))) (Module.toMulActionWithZero.{u5, u3} 𝕜' F' (Ring.toSemiring.{u5} 𝕜' (NormedRing.toRing.{u5} 𝕜' (NormedCommRing.toNormedRing.{u5} 𝕜' (NormedField.toNormedCommRing.{u5} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u3} F' (SeminormedAddCommGroup.toAddCommGroup.{u3} F' _inst_5)) (NormedSpace.toModule.{u5, u3} 𝕜' F' _inst_13 _inst_5 _inst_15))))) (k₂ x) (g' x)))
+but is expected to have type
+ forall {α : Type.{u5}} {E' : Type.{u2}} {F' : Type.{u1}} {𝕜 : Type.{u4}} {𝕜' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] [_inst_12 : NormedField.{u4} 𝕜] [_inst_13 : NormedField.{u3} 𝕜'] {f' : α -> E'} {g' : α -> F'} {l : Filter.{u5} α} [_inst_14 : NormedSpace.{u4, u2} 𝕜 E' _inst_12 _inst_4] [_inst_15 : NormedSpace.{u3, u1} 𝕜' F' _inst_13 _inst_5] {k₁ : α -> 𝕜} {k₂ : α -> 𝕜'}, (Asymptotics.IsLittleO.{u5, u4, u3} α 𝕜 𝕜' (NormedField.toNorm.{u4} 𝕜 _inst_12) (NormedField.toNorm.{u3} 𝕜' _inst_13) l k₁ k₂) -> (Asymptotics.IsLittleO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f' g') -> (Asymptotics.IsLittleO.{u5, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => HSMul.hSMul.{u4, u2, u2} 𝕜 E' E' (instHSMul.{u4, u2} 𝕜 E' (SMulZeroClass.toSMul.{u4, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u4, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u4} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u4} 𝕜 (Semifield.toCommGroupWithZero.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u4, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u4} 𝕜 (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u4, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u4} 𝕜 (Semifield.toDivisionSemiring.{u4} 𝕜 (Field.toSemifield.{u4} 𝕜 (NormedField.toField.{u4} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u4, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) (k₁ x) (f' x)) (fun (x : α) => HSMul.hSMul.{u3, u1, u1} 𝕜' F' F' (instHSMul.{u3, u1} 𝕜' F' (SMulZeroClass.toSMul.{u3, u1} 𝕜' F' (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (SMulWithZero.toSMulZeroClass.{u3, u1} 𝕜' F' (CommMonoidWithZero.toZero.{u3} 𝕜' (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜' (Semifield.toCommGroupWithZero.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (MulActionWithZero.toSMulWithZero.{u3, u1} 𝕜' F' (Semiring.toMonoidWithZero.{u3} 𝕜' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13))))) (NegZeroClass.toZero.{u1} F' (SubNegZeroMonoid.toNegZeroClass.{u1} F' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F' (AddCommGroup.toDivisionAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)))))) (Module.toMulActionWithZero.{u3, u1} 𝕜' F' (DivisionSemiring.toSemiring.{u3} 𝕜' (Semifield.toDivisionSemiring.{u3} 𝕜' (Field.toSemifield.{u3} 𝕜' (NormedField.toField.{u3} 𝕜' _inst_13)))) (AddCommGroup.toAddCommMonoid.{u1} F' (SeminormedAddCommGroup.toAddCommGroup.{u1} F' _inst_5)) (NormedSpace.toModule.{u3, u1} 𝕜' F' _inst_13 _inst_5 _inst_15)))))) (k₂ x) (g' x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.smul Asymptotics.IsLittleO.smulₓ'. -/
+theorem IsLittleO.smul (h₁ : k₁ =o[l] k₂) (h₂ : f' =o[l] g') :
(fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x := by
refine' ((h₁.norm_norm.mul h₂.norm_norm).congr _ _).of_norm_norm <;>
· intros <;> simp only [norm_smul]
-#align asymptotics.is_o.smul Asymptotics.IsOCat.smul
+#align asymptotics.is_o.smul Asymptotics.IsLittleO.smul
end Smul
@@ -1756,113 +3656,210 @@ section Sum
variable {ι : Type _} {A : ι → α → E'} {C : ι → ℝ} {s : Finset ι}
-theorem IsOWith.sum (h : ∀ i ∈ s, IsOWith (C i) l (A i) g) :
- IsOWith (∑ i in s, C i) l (fun x => ∑ i in s, A i x) g :=
+/- warning: asymptotics.is_O_with.sum -> Asymptotics.IsBigOWith.sum is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {ι : Type.{u4}} {A : ι -> α -> E'} {C : ι -> Real} {s : Finset.{u4} ι}, (forall (i : ι), (Membership.Mem.{u4, u4} ι (Finset.{u4} ι) (Finset.hasMem.{u4} ι) i s) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 (C i) l (A i) g)) -> (Asymptotics.IsBigOWith.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 (Finset.sum.{0, u4} Real ι Real.addCommMonoid s (fun (i : ι) => C i)) l (fun (x : α) => Finset.sum.{u3, u4} E' ι (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) s (fun (i : ι) => A i x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {ι : Type.{u4}} {A : ι -> α -> E'} {C : ι -> Real} {s : Finset.{u4} ι}, (forall (i : ι), (Membership.mem.{u4, u4} ι (Finset.{u4} ι) (Finset.instMembershipFinset.{u4} ι) i s) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 (C i) l (A i) g)) -> (Asymptotics.IsBigOWith.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 (Finset.sum.{0, u4} Real ι Real.instAddCommMonoidReal s (fun (i : ι) => C i)) l (fun (x : α) => Finset.sum.{u2, u4} E' ι (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) s (fun (i : ι) => A i x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.sum Asymptotics.IsBigOWith.sumₓ'. -/
+theorem IsBigOWith.sum (h : ∀ i ∈ s, IsBigOWith (C i) l (A i) g) :
+ IsBigOWith (∑ i in s, C i) l (fun x => ∑ i in s, A i x) g :=
by
induction' s using Finset.induction_on with i s is IH
· simp only [is_O_with_zero', Finset.sum_empty, forall_true_iff]
· simp only [is, Finset.sum_insert, not_false_iff]
exact (h _ (Finset.mem_insert_self i s)).add (IH fun j hj => h _ (Finset.mem_insert_of_mem hj))
-#align asymptotics.is_O_with.sum Asymptotics.IsOWith.sum
-
-theorem IsO.sum (h : ∀ i ∈ s, A i =O[l] g) : (fun x => ∑ i in s, A i x) =O[l] g :=
+#align asymptotics.is_O_with.sum Asymptotics.IsBigOWith.sum
+
+/- warning: asymptotics.is_O.sum -> Asymptotics.IsBigO.sum is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_4 : SeminormedAddCommGroup.{u3} E'] {g : α -> F} {l : Filter.{u1} α} {ι : Type.{u4}} {A : ι -> α -> E'} {s : Finset.{u4} ι}, (forall (i : ι), (Membership.Mem.{u4, u4} ι (Finset.{u4} ι) (Finset.hasMem.{u4} ι) i s) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (A i) g)) -> (Asymptotics.IsBigO.{u1, u3, u2} α E' F (SeminormedAddCommGroup.toHasNorm.{u3} E' _inst_4) _inst_2 l (fun (x : α) => Finset.sum.{u3, u4} E' ι (AddCommGroup.toAddCommMonoid.{u3} E' (SeminormedAddCommGroup.toAddCommGroup.{u3} E' _inst_4)) s (fun (i : ι) => A i x)) g)
+but is expected to have type
+ forall {α : Type.{u3}} {F : Type.{u1}} {E' : Type.{u2}} [_inst_2 : Norm.{u1} F] [_inst_4 : SeminormedAddCommGroup.{u2} E'] {g : α -> F} {l : Filter.{u3} α} {ι : Type.{u4}} {A : ι -> α -> E'} {s : Finset.{u4} ι}, (forall (i : ι), (Membership.mem.{u4, u4} ι (Finset.{u4} ι) (Finset.instMembershipFinset.{u4} ι) i s) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (A i) g)) -> (Asymptotics.IsBigO.{u3, u2, u1} α E' F (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) _inst_2 l (fun (x : α) => Finset.sum.{u2, u4} E' ι (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) s (fun (i : ι) => A i x)) g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.sum Asymptotics.IsBigO.sumₓ'. -/
+theorem IsBigO.sum (h : ∀ i ∈ s, A i =O[l] g) : (fun x => ∑ i in s, A i x) =O[l] g :=
by
unfold is_O at *
choose! C hC using h
exact ⟨_, is_O_with.sum hC⟩
-#align asymptotics.is_O.sum Asymptotics.IsO.sum
-
-theorem IsOCat.sum (h : ∀ i ∈ s, A i =o[l] g') : (fun x => ∑ i in s, A i x) =o[l] g' :=
+#align asymptotics.is_O.sum Asymptotics.IsBigO.sum
+
+/- warning: asymptotics.is_o.sum -> Asymptotics.IsLittleO.sum is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {F' : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u3} F'] {g' : α -> F'} {l : Filter.{u1} α} {ι : Type.{u4}} {A : ι -> α -> E'} {s : Finset.{u4} ι}, (forall (i : ι), (Membership.Mem.{u4, u4} ι (Finset.{u4} ι) (Finset.hasMem.{u4} ι) i s) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (A i) g')) -> (Asymptotics.IsLittleO.{u1, u2, u3} α E' F' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u3} F' _inst_5) l (fun (x : α) => Finset.sum.{u2, u4} E' ι (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) s (fun (i : ι) => A i x)) g')
+but is expected to have type
+ forall {α : Type.{u3}} {E' : Type.{u2}} {F' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_5 : SeminormedAddCommGroup.{u1} F'] {g' : α -> F'} {l : Filter.{u3} α} {ι : Type.{u4}} {A : ι -> α -> E'} {s : Finset.{u4} ι}, (forall (i : ι), (Membership.mem.{u4, u4} ι (Finset.{u4} ι) (Finset.instMembershipFinset.{u4} ι) i s) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (A i) g')) -> (Asymptotics.IsLittleO.{u3, u2, u1} α E' F' (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => Finset.sum.{u2, u4} E' ι (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) s (fun (i : ι) => A i x)) g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.sum Asymptotics.IsLittleO.sumₓ'. -/
+theorem IsLittleO.sum (h : ∀ i ∈ s, A i =o[l] g') : (fun x => ∑ i in s, A i x) =o[l] g' :=
by
induction' s using Finset.induction_on with i s is IH
· simp only [is_o_zero, Finset.sum_empty, forall_true_iff]
· simp only [is, Finset.sum_insert, not_false_iff]
exact (h _ (Finset.mem_insert_self i s)).add (IH fun j hj => h _ (Finset.mem_insert_of_mem hj))
-#align asymptotics.is_o.sum Asymptotics.IsOCat.sum
+#align asymptotics.is_o.sum Asymptotics.IsLittleO.sum
end Sum
/-! ### Relation between `f = o(g)` and `f / g → 0` -/
-theorem IsOCat.tendsto_div_nhds_zero {f g : α → 𝕜} (h : f =o[l] g) :
+/- warning: asymptotics.is_o.tendsto_div_nhds_zero -> Asymptotics.IsLittleO.tendsto_div_nhds_zero is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l f g) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (x : α) => HDiv.hDiv.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHDiv.{u2} 𝕜 (DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12))))) (f x) (g x)) l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Asymptotics.IsLittleO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) -> (Filter.Tendsto.{u2, u1} α 𝕜 (fun (x : α) => HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x)) l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.tendsto_div_nhds_zero Asymptotics.IsLittleO.tendsto_div_nhds_zeroₓ'. -/
+theorem IsLittleO.tendsto_div_nhds_zero {f g : α → 𝕜} (h : f =o[l] g) :
Tendsto (fun x => f x / g x) l (𝓝 0) :=
- (isOCat_one_iff 𝕜).mp <|
+ (isLittleO_one_iff 𝕜).mp <|
calc
(fun x => f x / g x) =o[l] fun x => g x / g x := by
simpa only [div_eq_mul_inv] using h.mul_is_O (is_O_refl _ _)
- _ =O[l] fun x => (1 : 𝕜) := isO_of_le _ fun x => by simp [div_self_le_one]
+ _ =O[l] fun x => (1 : 𝕜) := isBigO_of_le _ fun x => by simp [div_self_le_one]
-#align asymptotics.is_o.tendsto_div_nhds_zero Asymptotics.IsOCat.tendsto_div_nhds_zero
-
-theorem IsOCat.tendsto_inv_smul_nhds_zero [NormedSpace 𝕜 E'] {f : α → E'} {g : α → 𝕜} {l : Filter α}
- (h : f =o[l] g) : Tendsto (fun x => (g x)⁻¹ • f x) l (𝓝 0) := by
+#align asymptotics.is_o.tendsto_div_nhds_zero Asymptotics.IsLittleO.tendsto_div_nhds_zero
+
+/- warning: asymptotics.is_o.tendsto_inv_smul_nhds_zero -> Asymptotics.IsLittleO.tendsto_inv_smul_nhds_zero is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} {𝕜 : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_12 : NormedField.{u3} 𝕜] [_inst_14 : NormedSpace.{u3, u2} 𝕜 E' _inst_12 _inst_4] {f : α -> E'} {g : α -> 𝕜} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E' 𝕜 (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (NormedField.toHasNorm.{u3} 𝕜 _inst_12) l f g) -> (Filter.Tendsto.{u1, u2} α E' (fun (x : α) => SMul.smul.{u3, u2} 𝕜 E' (SMulZeroClass.toHasSmul.{u3, u2} 𝕜 E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (SMulWithZero.toSmulZeroClass.{u3, u2} 𝕜 E' (MulZeroClass.toHasZero.{u3} 𝕜 (MulZeroOneClass.toMulZeroClass.{u3} 𝕜 (MonoidWithZero.toMulZeroOneClass.{u3} 𝕜 (Semiring.toMonoidWithZero.{u3} 𝕜 (Ring.toSemiring.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (MulActionWithZero.toSMulWithZero.{u3, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u3} 𝕜 (Ring.toSemiring.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12))))) (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (AddCommMonoid.toAddMonoid.{u2} E' (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))) (Module.toMulActionWithZero.{u3, u2} 𝕜 E' (Ring.toSemiring.{u3} 𝕜 (NormedRing.toRing.{u3} 𝕜 (NormedCommRing.toNormedRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u3, u2} 𝕜 E' _inst_12 _inst_4 _inst_14))))) (Inv.inv.{u3} 𝕜 (DivInvMonoid.toHasInv.{u3} 𝕜 (DivisionRing.toDivInvMonoid.{u3} 𝕜 (NormedDivisionRing.toDivisionRing.{u3} 𝕜 (NormedField.toNormedDivisionRing.{u3} 𝕜 _inst_12)))) (g x)) (f x)) l (nhds.{u2} E' (UniformSpace.toTopologicalSpace.{u2} E' (PseudoMetricSpace.toUniformSpace.{u2} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E' _inst_4))) (OfNat.ofNat.{u2} E' 0 (OfNat.mk.{u2} E' 0 (Zero.zero.{u2} E' (AddZeroClass.toHasZero.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4)))))))))))
+but is expected to have type
+ forall {α : Type.{u1}} {E' : Type.{u2}} {𝕜 : Type.{u3}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] [_inst_12 : NormedField.{u3} 𝕜] [_inst_14 : NormedSpace.{u3, u2} 𝕜 E' _inst_12 _inst_4] {f : α -> E'} {g : α -> 𝕜} {l : Filter.{u1} α}, (Asymptotics.IsLittleO.{u1, u2, u3} α E' 𝕜 (SeminormedAddCommGroup.toNorm.{u2} E' _inst_4) (NormedField.toNorm.{u3} 𝕜 _inst_12) l f g) -> (Filter.Tendsto.{u1, u2} α E' (fun (x : α) => HSMul.hSMul.{u3, u2, u2} 𝕜 E' E' (instHSMul.{u3, u2} 𝕜 E' (SMulZeroClass.toSMul.{u3, u2} 𝕜 E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (SMulWithZero.toSMulZeroClass.{u3, u2} 𝕜 E' (CommMonoidWithZero.toZero.{u3} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u3} 𝕜 (Semifield.toCommGroupWithZero.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (MulActionWithZero.toSMulWithZero.{u3, u2} 𝕜 E' (Semiring.toMonoidWithZero.{u3} 𝕜 (DivisionSemiring.toSemiring.{u3} 𝕜 (Semifield.toDivisionSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12))))) (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)))))) (Module.toMulActionWithZero.{u3, u2} 𝕜 E' (DivisionSemiring.toSemiring.{u3} 𝕜 (Semifield.toDivisionSemiring.{u3} 𝕜 (Field.toSemifield.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)))) (AddCommGroup.toAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4)) (NormedSpace.toModule.{u3, u2} 𝕜 E' _inst_12 _inst_4 _inst_14)))))) (Inv.inv.{u3} 𝕜 (Field.toInv.{u3} 𝕜 (NormedField.toField.{u3} 𝕜 _inst_12)) (g x)) (f x)) l (nhds.{u2} E' (UniformSpace.toTopologicalSpace.{u2} E' (PseudoMetricSpace.toUniformSpace.{u2} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E' _inst_4))) (OfNat.ofNat.{u2} E' 0 (Zero.toOfNat0.{u2} E' (NegZeroClass.toZero.{u2} E' (SubNegZeroMonoid.toNegZeroClass.{u2} E' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E' (AddCommGroup.toDivisionAddCommMonoid.{u2} E' (SeminormedAddCommGroup.toAddCommGroup.{u2} E' _inst_4))))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.tendsto_inv_smul_nhds_zero Asymptotics.IsLittleO.tendsto_inv_smul_nhds_zeroₓ'. -/
+theorem IsLittleO.tendsto_inv_smul_nhds_zero [NormedSpace 𝕜 E'] {f : α → E'} {g : α → 𝕜}
+ {l : Filter α} (h : f =o[l] g) : Tendsto (fun x => (g x)⁻¹ • f x) l (𝓝 0) := by
simpa only [div_eq_inv_mul, ← norm_inv, ← norm_smul, ← tendsto_zero_iff_norm_tendsto_zero] using
h.norm_norm.tendsto_div_nhds_zero
-#align asymptotics.is_o.tendsto_inv_smul_nhds_zero Asymptotics.IsOCat.tendsto_inv_smul_nhds_zero
-
-theorem isOCat_iff_tendsto' {f g : α → 𝕜} (hgf : ∀ᶠ x in l, g x = 0 → f x = 0) :
+#align asymptotics.is_o.tendsto_inv_smul_nhds_zero Asymptotics.IsLittleO.tendsto_inv_smul_nhds_zero
+
+/- warning: asymptotics.is_o_iff_tendsto' -> Asymptotics.isLittleO_iff_tendsto' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u1} α (fun (x : α) => (Eq.{succ u2} 𝕜 (g x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) l) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l f g) (Filter.Tendsto.{u1, u2} α 𝕜 (fun (x : α) => HDiv.hDiv.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHDiv.{u2} 𝕜 (DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12))))) (f x) (g x)) l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) l) -> (Iff (Asymptotics.IsLittleO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) (Filter.Tendsto.{u2, u1} α 𝕜 (fun (x : α) => HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x)) l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff_tendsto' Asymptotics.isLittleO_iff_tendsto'ₓ'. -/
+theorem isLittleO_iff_tendsto' {f g : α → 𝕜} (hgf : ∀ᶠ x in l, g x = 0 → f x = 0) :
f =o[l] g ↔ Tendsto (fun x => f x / g x) l (𝓝 0) :=
- ⟨IsOCat.tendsto_div_nhds_zero, fun h =>
- (((isOCat_one_iff _).mpr h).mul_isO (isO_refl g l)).congr'
+ ⟨IsLittleO.tendsto_div_nhds_zero, fun h =>
+ (((isLittleO_one_iff _).mpr h).mul_isBigO (isBigO_refl g l)).congr'
(hgf.mono fun x => div_mul_cancel_of_imp) (eventually_of_forall fun x => one_mul _)⟩
-#align asymptotics.is_o_iff_tendsto' Asymptotics.isOCat_iff_tendsto'
-
-theorem isOCat_iff_tendsto {f g : α → 𝕜} (hgf : ∀ x, g x = 0 → f x = 0) :
+#align asymptotics.is_o_iff_tendsto' Asymptotics.isLittleO_iff_tendsto'
+
+/- warning: asymptotics.is_o_iff_tendsto -> Asymptotics.isLittleO_iff_tendsto is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜}, (forall (x : α), (Eq.{succ u2} 𝕜 (g x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l f g) (Filter.Tendsto.{u1, u2} α 𝕜 (fun (x : α) => HDiv.hDiv.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHDiv.{u2} 𝕜 (DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12))))) (f x) (g x)) l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))))
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜}, (forall (x : α), (Eq.{succ u2} 𝕜 (g x) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)))))))) -> (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toNorm.{u2} 𝕜 _inst_12) (NormedField.toNorm.{u2} 𝕜 _inst_12) l f g) (Filter.Tendsto.{u1, u2} α 𝕜 (fun (x : α) => HDiv.hDiv.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHDiv.{u2} 𝕜 (Field.toDiv.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))) (f x) (g x)) l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSeminormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff_tendsto Asymptotics.isLittleO_iff_tendstoₓ'. -/
+theorem isLittleO_iff_tendsto {f g : α → 𝕜} (hgf : ∀ x, g x = 0 → f x = 0) :
f =o[l] g ↔ Tendsto (fun x => f x / g x) l (𝓝 0) :=
- isOCat_iff_tendsto' (eventually_of_forall hgf)
-#align asymptotics.is_o_iff_tendsto Asymptotics.isOCat_iff_tendsto
-
+ isLittleO_iff_tendsto' (eventually_of_forall hgf)
+#align asymptotics.is_o_iff_tendsto Asymptotics.isLittleO_iff_tendsto
+
+/- warning: asymptotics.is_o_of_tendsto' -> Asymptotics.isLittleO_of_tendsto' is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u1} α (fun (x : α) => (Eq.{succ u2} 𝕜 (g x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) l) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (x : α) => HDiv.hDiv.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHDiv.{u2} 𝕜 (DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12))))) (f x) (g x)) l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) -> (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l f g)
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) l) -> (Filter.Tendsto.{u2, u1} α 𝕜 (fun (x : α) => HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x)) l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) -> (Asymptotics.IsLittleO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_of_tendsto' Asymptotics.isLittleO_of_tendsto'ₓ'. -/
alias is_o_iff_tendsto' ↔ _ is_o_of_tendsto'
-#align asymptotics.is_o_of_tendsto' Asymptotics.isOCat_of_tendsto'
-
+#align asymptotics.is_o_of_tendsto' Asymptotics.isLittleO_of_tendsto'
+
+/- warning: asymptotics.is_o_of_tendsto -> Asymptotics.isLittleO_of_tendsto is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜}, (forall (x : α), (Eq.{succ u2} 𝕜 (g x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (x : α) => HDiv.hDiv.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHDiv.{u2} 𝕜 (DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12))))) (f x) (g x)) l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) -> (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l f g)
+but is expected to have type
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {f : α -> 𝕜} {g : α -> 𝕜}, (forall (x : α), (Eq.{succ u2} 𝕜 (g x) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12)))))))) -> (Eq.{succ u2} 𝕜 (f x) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))))))))) -> (Filter.Tendsto.{u1, u2} α 𝕜 (fun (x : α) => HDiv.hDiv.{u2, u2, u2} 𝕜 𝕜 𝕜 (instHDiv.{u2} 𝕜 (Field.toDiv.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))) (f x) (g x)) l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSeminormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (Zero.toOfNat0.{u2} 𝕜 (CommMonoidWithZero.toZero.{u2} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u2} 𝕜 (Semifield.toCommGroupWithZero.{u2} 𝕜 (Field.toSemifield.{u2} 𝕜 (NormedField.toField.{u2} 𝕜 _inst_12))))))))) -> (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toNorm.{u2} 𝕜 _inst_12) (NormedField.toNorm.{u2} 𝕜 _inst_12) l f g)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_of_tendsto Asymptotics.isLittleO_of_tendstoₓ'. -/
alias is_o_iff_tendsto ↔ _ is_o_of_tendsto
-#align asymptotics.is_o_of_tendsto Asymptotics.isOCat_of_tendsto
-
-theorem isOCat_const_left_of_ne {c : E''} (hc : c ≠ 0) :
+#align asymptotics.is_o_of_tendsto Asymptotics.isLittleO_of_tendsto
+
+/- warning: asymptotics.is_o_const_left_of_ne -> Asymptotics.isLittleO_const_left_of_ne is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F : Type.{u2}} {E'' : Type.{u3}} [_inst_2 : Norm.{u2} F] [_inst_7 : NormedAddCommGroup.{u3} E''] {g : α -> F} {l : Filter.{u1} α} {c : E''}, (Ne.{succ u3} E'' c (OfNat.ofNat.{u3} E'' 0 (OfNat.mk.{u3} E'' 0 (Zero.zero.{u3} E'' (AddZeroClass.toHasZero.{u3} E'' (AddMonoid.toAddZeroClass.{u3} E'' (SubNegMonoid.toAddMonoid.{u3} E'' (AddGroup.toSubNegMonoid.{u3} E'' (NormedAddGroup.toAddGroup.{u3} E'' (NormedAddCommGroup.toNormedAddGroup.{u3} E'' _inst_7)))))))))) -> (Iff (Asymptotics.IsLittleO.{u1, u3, u2} α E'' F (NormedAddCommGroup.toHasNorm.{u3} E'' _inst_7) _inst_2 l (fun (x : α) => c) g) (Filter.Tendsto.{u1, 0} α Real (fun (x : α) => Norm.norm.{u2} F _inst_2 (g x)) l (Filter.atTop.{0} Real Real.preorder)))
+but is expected to have type
+ forall {α : Type.{u2}} {F : Type.{u1}} {E'' : Type.{u3}} [_inst_2 : Norm.{u1} F] [_inst_7 : NormedAddCommGroup.{u3} E''] {g : α -> F} {l : Filter.{u2} α} {c : E''}, (Ne.{succ u3} E'' c (OfNat.ofNat.{u3} E'' 0 (Zero.toOfNat0.{u3} E'' (NegZeroClass.toZero.{u3} E'' (SubNegZeroMonoid.toNegZeroClass.{u3} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} E'' (AddCommGroup.toDivisionAddCommMonoid.{u3} E'' (NormedAddCommGroup.toAddCommGroup.{u3} E'' _inst_7))))))))) -> (Iff (Asymptotics.IsLittleO.{u2, u3, u1} α E'' F (NormedAddCommGroup.toNorm.{u3} E'' _inst_7) _inst_2 l (fun (x : α) => c) g) (Filter.Tendsto.{u2, 0} α Real (fun (x : α) => Norm.norm.{u1} F _inst_2 (g x)) l (Filter.atTop.{0} Real Real.instPreorderReal)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_left_of_ne Asymptotics.isLittleO_const_left_of_neₓ'. -/
+theorem isLittleO_const_left_of_ne {c : E''} (hc : c ≠ 0) :
(fun x => c) =o[l] g ↔ Tendsto (fun x => ‖g x‖) l atTop :=
by
simp only [← is_o_one_left_iff ℝ]
- exact ⟨(is_O_const_const (1 : ℝ) hc l).trans_isOCat, (is_O_const_one ℝ c l).trans_isOCat⟩
-#align asymptotics.is_o_const_left_of_ne Asymptotics.isOCat_const_left_of_ne
-
+ exact ⟨(is_O_const_const (1 : ℝ) hc l).trans_isLittleO, (is_O_const_one ℝ c l).trans_isLittleO⟩
+#align asymptotics.is_o_const_left_of_ne Asymptotics.isLittleO_const_left_of_ne
+
+/- warning: asymptotics.is_o_const_left -> Asymptotics.isLittleO_const_left is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {g'' : α -> F''} {l : Filter.{u1} α} {c : E''}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l (fun (x : α) => c) g'') (Or (Eq.{succ u2} E'' c (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))) (Filter.Tendsto.{u1, 0} α Real (Function.comp.{succ u1, succ u3, 1} α F'' Real (Norm.norm.{u3} F'' (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8)) g'') l (Filter.atTop.{0} Real Real.preorder)))
+but is expected to have type
+ forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {g'' : α -> F''} {l : Filter.{u3} α} {c : E''}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l (fun (x : α) => c) g'') (Or (Eq.{succ u2} E'' c (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7))))))))) (Filter.Tendsto.{u3, 0} α Real (Function.comp.{succ u3, succ u1, 1} α F'' Real (Norm.norm.{u1} F'' (NormedAddCommGroup.toNorm.{u1} F'' _inst_8)) g'') l (Filter.atTop.{0} Real Real.instPreorderReal)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_left Asymptotics.isLittleO_const_leftₓ'. -/
@[simp]
-theorem isOCat_const_left {c : E''} :
+theorem isLittleO_const_left {c : E''} :
(fun x => c) =o[l] g'' ↔ c = 0 ∨ Tendsto (norm ∘ g'') l atTop :=
by
rcases eq_or_ne c 0 with (rfl | hc)
· simp only [is_o_zero, eq_self_iff_true, true_or_iff]
· simp only [hc, false_or_iff, is_o_const_left_of_ne hc]
-#align asymptotics.is_o_const_left Asymptotics.isOCat_const_left
-
+#align asymptotics.is_o_const_left Asymptotics.isLittleO_const_left
+
+/- warning: asymptotics.is_o_const_const_iff -> Asymptotics.isLittleO_const_const_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {l : Filter.{u1} α} [_inst_14 : Filter.NeBot.{u1} α l] {d : E''} {c : F''}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) l (fun (x : α) => d) (fun (x : α) => c)) (Eq.{succ u2} E'' d (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))))))))
+but is expected to have type
+ forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {l : Filter.{u3} α} [_inst_14 : Filter.NeBot.{u3} α l] {d : E''} {c : F''}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) l (fun (x : α) => d) (fun (x : α) => c)) (Eq.{succ u2} E'' d (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7)))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_const_iff Asymptotics.isLittleO_const_const_iffₓ'. -/
@[simp]
-theorem isOCat_const_const_iff [NeBot l] {d : E''} {c : F''} :
+theorem isLittleO_const_const_iff [NeBot l] {d : E''} {c : F''} :
((fun x => d) =o[l] fun x => c) ↔ d = 0 :=
by
have : ¬Tendsto (Function.const α ‖c‖) l atTop :=
not_tendsto_atTop_of_tendsto_nhds tendsto_const_nhds
simp [Function.const, this]
-#align asymptotics.is_o_const_const_iff Asymptotics.isOCat_const_const_iff
-
+#align asymptotics.is_o_const_const_iff Asymptotics.isLittleO_const_const_iff
+
+/- warning: asymptotics.is_o_pure -> Asymptotics.isLittleO_pure is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''} {x : α}, Iff (Asymptotics.IsLittleO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (Pure.pure.{u1, u1} Filter.{u1} Filter.hasPure.{u1} α x) f'' g'') (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))))))))
+but is expected to have type
+ forall {α : Type.{u3}} {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f'' : α -> E''} {g'' : α -> F''} {x : α}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) (Pure.pure.{u3, u3} Filter.{u3} Filter.instPureFilter.{u3} α x) f'' g'') (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7)))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_pure Asymptotics.isLittleO_pureₓ'. -/
@[simp]
-theorem isOCat_pure {x} : f'' =o[pure x] g'' ↔ f'' x = 0 :=
+theorem isLittleO_pure {x} : f'' =o[pure x] g'' ↔ f'' x = 0 :=
calc
- f'' =o[pure x] g'' ↔ (fun y : α => f'' x) =o[pure x] fun _ => g'' x := isOCat_congr rfl rfl
- _ ↔ f'' x = 0 := isOCat_const_const_iff
+ f'' =o[pure x] g'' ↔ (fun y : α => f'' x) =o[pure x] fun _ => g'' x := isLittleO_congr rfl rfl
+ _ ↔ f'' x = 0 := isLittleO_const_const_iff
-#align asymptotics.is_o_pure Asymptotics.isOCat_pure
-
-theorem isOCat_const_id_comap_norm_atTop (c : F'') : (fun x : E'' => c) =o[comap norm atTop] id :=
- isOCat_const_left.2 <| Or.inr tendsto_comap
-#align asymptotics.is_o_const_id_comap_norm_at_top Asymptotics.isOCat_const_id_comap_norm_atTop
-
-theorem isOCat_const_id_atTop (c : E'') : (fun x : ℝ => c) =o[atTop] id :=
- isOCat_const_left.2 <| Or.inr tendsto_abs_atTop_atTop
-#align asymptotics.is_o_const_id_at_top Asymptotics.isOCat_const_id_atTop
-
-theorem isOCat_const_id_atBot (c : E'') : (fun x : ℝ => c) =o[atBot] id :=
- isOCat_const_left.2 <| Or.inr tendsto_abs_atBot_atTop
-#align asymptotics.is_o_const_id_at_bot Asymptotics.isOCat_const_id_atBot
+#align asymptotics.is_o_pure Asymptotics.isLittleO_pure
+
+/- warning: asymptotics.is_o_const_id_comap_norm_at_top -> Asymptotics.isLittleO_const_id_comap_norm_atTop is a dubious translation:
+lean 3 declaration is
+ forall {E'' : Type.{u1}} {F'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u2} F''] (c : F''), Asymptotics.IsLittleO.{u1, u2, u1} E'' F'' E'' (NormedAddCommGroup.toHasNorm.{u2} F'' _inst_8) (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) (Filter.comap.{u1, 0} E'' Real (Norm.norm.{u1} E'' (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7)) (Filter.atTop.{0} Real Real.preorder)) (fun (x : E'') => c) (id.{succ u1} E'')
+but is expected to have type
+ forall {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] (c : F''), Asymptotics.IsLittleO.{u2, u1, u2} E'' F'' E'' (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (Filter.comap.{u2, 0} E'' Real (Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7)) (Filter.atTop.{0} Real Real.instPreorderReal)) (fun (x : E'') => c) (id.{succ u2} E'')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_id_comap_norm_at_top Asymptotics.isLittleO_const_id_comap_norm_atTopₓ'. -/
+theorem isLittleO_const_id_comap_norm_atTop (c : F'') :
+ (fun x : E'' => c) =o[comap norm atTop] id :=
+ isLittleO_const_left.2 <| Or.inr tendsto_comap
+#align asymptotics.is_o_const_id_comap_norm_at_top Asymptotics.isLittleO_const_id_comap_norm_atTop
+
+/- warning: asymptotics.is_o_const_id_at_top -> Asymptotics.isLittleO_const_id_atTop is a dubious translation:
+lean 3 declaration is
+ forall {E'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u1} E''] (c : E''), Asymptotics.IsLittleO.{0, u1, 0} Real E'' Real (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) Real.hasNorm (Filter.atTop.{0} Real Real.preorder) (fun (x : Real) => c) (id.{1} Real)
+but is expected to have type
+ forall {E'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u1} E''] (c : E''), Asymptotics.IsLittleO.{0, u1, 0} Real E'' Real (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) Real.norm (Filter.atTop.{0} Real Real.instPreorderReal) (fun (x : Real) => c) (id.{1} Real)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_id_at_top Asymptotics.isLittleO_const_id_atTopₓ'. -/
+theorem isLittleO_const_id_atTop (c : E'') : (fun x : ℝ => c) =o[atTop] id :=
+ isLittleO_const_left.2 <| Or.inr tendsto_abs_atTop_atTop
+#align asymptotics.is_o_const_id_at_top Asymptotics.isLittleO_const_id_atTop
+
+/- warning: asymptotics.is_o_const_id_at_bot -> Asymptotics.isLittleO_const_id_atBot is a dubious translation:
+lean 3 declaration is
+ forall {E'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u1} E''] (c : E''), Asymptotics.IsLittleO.{0, u1, 0} Real E'' Real (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) Real.hasNorm (Filter.atBot.{0} Real Real.preorder) (fun (x : Real) => c) (id.{1} Real)
+but is expected to have type
+ forall {E'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u1} E''] (c : E''), Asymptotics.IsLittleO.{0, u1, 0} Real E'' Real (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) Real.norm (Filter.atBot.{0} Real Real.instPreorderReal) (fun (x : Real) => c) (id.{1} Real)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_const_id_at_bot Asymptotics.isLittleO_const_id_atBotₓ'. -/
+theorem isLittleO_const_id_atBot (c : E'') : (fun x : ℝ => c) =o[atBot] id :=
+ isLittleO_const_left.2 <| Or.inr tendsto_abs_atBot_atTop
+#align asymptotics.is_o_const_id_at_bot Asymptotics.isLittleO_const_id_atBot
/-!
### Eventually (u / v) * v = u
@@ -1876,20 +3873,38 @@ section EventuallyMulDivCancel
variable {u v : α → 𝕜}
-theorem IsOWith.eventually_mul_div_cancel (h : IsOWith c l u v) : u / v * v =ᶠ[l] u :=
+/- warning: asymptotics.is_O_with.eventually_mul_div_cancel -> Asymptotics.IsBigOWith.eventually_mul_div_cancel is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {c : Real} {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigOWith.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) c l u v) -> (Filter.EventuallyEq.{u1, u2} α 𝕜 l (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u1 u2} (α -> 𝕜) (Pi.instDiv.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12)))))) u v) v) u)
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigOWith.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l u v) -> (Filter.EventuallyEq.{u2, u1} α 𝕜 l (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u2 u1} (α -> 𝕜) (Pi.instDiv.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) u v) v) u)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.eventually_mul_div_cancel Asymptotics.IsBigOWith.eventually_mul_div_cancelₓ'. -/
+theorem IsBigOWith.eventually_mul_div_cancel (h : IsBigOWith c l u v) : u / v * v =ᶠ[l] u :=
Eventually.mono h.bound fun y hy => div_mul_cancel_of_imp fun hv => by simpa [hv] using hy
-#align asymptotics.is_O_with.eventually_mul_div_cancel Asymptotics.IsOWith.eventually_mul_div_cancel
-
+#align asymptotics.is_O_with.eventually_mul_div_cancel Asymptotics.IsBigOWith.eventually_mul_div_cancel
+
+/- warning: asymptotics.is_O.eventually_mul_div_cancel -> Asymptotics.IsBigO.eventually_mul_div_cancel is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) -> (Filter.EventuallyEq.{u1, u2} α 𝕜 l (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u1 u2} (α -> 𝕜) (Pi.instDiv.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12)))))) u v) v) u)
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) -> (Filter.EventuallyEq.{u2, u1} α 𝕜 l (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u2 u1} (α -> 𝕜) (Pi.instDiv.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) u v) v) u)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.eventually_mul_div_cancel Asymptotics.IsBigO.eventually_mul_div_cancelₓ'. -/
/-- If `u = O(v)` along `l`, then `(u / v) * v = u` eventually at `l`. -/
-theorem IsO.eventually_mul_div_cancel (h : u =O[l] v) : u / v * v =ᶠ[l] u :=
- let ⟨c, hc⟩ := h.IsOWith
+theorem IsBigO.eventually_mul_div_cancel (h : u =O[l] v) : u / v * v =ᶠ[l] u :=
+ let ⟨c, hc⟩ := h.IsBigOWith
hc.eventually_mul_div_cancel
-#align asymptotics.is_O.eventually_mul_div_cancel Asymptotics.IsO.eventually_mul_div_cancel
-
+#align asymptotics.is_O.eventually_mul_div_cancel Asymptotics.IsBigO.eventually_mul_div_cancel
+
+/- warning: asymptotics.is_o.eventually_mul_div_cancel -> Asymptotics.IsLittleO.eventually_mul_div_cancel is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) -> (Filter.EventuallyEq.{u1, u2} α 𝕜 l (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u1 u2} (α -> 𝕜) (Pi.instDiv.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => DivInvMonoid.toHasDiv.{u2} 𝕜 (DivisionRing.toDivInvMonoid.{u2} 𝕜 (NormedDivisionRing.toDivisionRing.{u2} 𝕜 (NormedField.toNormedDivisionRing.{u2} 𝕜 _inst_12)))))) u v) v) u)
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsLittleO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) -> (Filter.EventuallyEq.{u2, u1} α 𝕜 l (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u2 u1} (α -> 𝕜) (Pi.instDiv.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) u v) v) u)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.eventually_mul_div_cancel Asymptotics.IsLittleO.eventually_mul_div_cancelₓ'. -/
/-- If `u = o(v)` along `l`, then `(u / v) * v = u` eventually at `l`. -/
-theorem IsOCat.eventually_mul_div_cancel (h : u =o[l] v) : u / v * v =ᶠ[l] u :=
- (h.forall_isOWith zero_lt_one).eventually_mul_div_cancel
-#align asymptotics.is_o.eventually_mul_div_cancel Asymptotics.IsOCat.eventually_mul_div_cancel
+theorem IsLittleO.eventually_mul_div_cancel (h : u =o[l] v) : u / v * v =ᶠ[l] u :=
+ (h.forall_isBigOWith zero_lt_one).eventually_mul_div_cancel
+#align asymptotics.is_o.eventually_mul_div_cancel Asymptotics.IsLittleO.eventually_mul_div_cancel
end EventuallyMulDivCancel
@@ -1900,19 +3915,31 @@ section ExistsMulEq
variable {u v : α → 𝕜}
+/- warning: asymptotics.is_O_with_of_eq_mul -> Asymptotics.isBigOWith_of_eq_mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {c : Real} {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜} (φ : α -> 𝕜), (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (φ x)) c) l) -> (Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v)) -> (Asymptotics.IsBigOWith.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) c l u v)
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜} (φ : α -> 𝕜), (Filter.Eventually.{u2} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (φ x)) c) l) -> (Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v)) -> (Asymptotics.IsBigOWith.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l u v)
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_of_eq_mul Asymptotics.isBigOWith_of_eq_mulₓ'. -/
/-- If `‖φ‖` is eventually bounded by `c`, and `u =ᶠ[l] φ * v`, then we have `is_O_with c u v l`.
This does not require any assumptions on `c`, which is why we keep this version along with
`is_O_with_iff_exists_eq_mul`. -/
-theorem isOWith_of_eq_mul (φ : α → 𝕜) (hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c) (h : u =ᶠ[l] φ * v) :
- IsOWith c l u v := by
+theorem isBigOWith_of_eq_mul (φ : α → 𝕜) (hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c) (h : u =ᶠ[l] φ * v) :
+ IsBigOWith c l u v := by
unfold is_O_with
refine' h.symm.rw (fun x a => ‖a‖ ≤ c * ‖v x‖) (hφ.mono fun x hx => _)
simp only [norm_mul, Pi.mul_apply]
exact mul_le_mul_of_nonneg_right hx (norm_nonneg _)
-#align asymptotics.is_O_with_of_eq_mul Asymptotics.isOWith_of_eq_mul
-
-theorem isOWith_iff_exists_eq_mul (hc : 0 ≤ c) :
- IsOWith c l u v ↔ ∃ (φ : α → 𝕜)(hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v :=
+#align asymptotics.is_O_with_of_eq_mul Asymptotics.isBigOWith_of_eq_mul
+
+/- warning: asymptotics.is_O_with_iff_exists_eq_mul -> Asymptotics.isBigOWith_iff_exists_eq_mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {c : Real} {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Iff (Asymptotics.IsBigOWith.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) c l u v) (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (φ x)) c) l) (fun (hφ : Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (φ x)) c) l) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v)))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Iff (Asymptotics.IsBigOWith.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l u v) (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Eventually.{u2} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (φ x)) c) l) (fun (hφ : Filter.Eventually.{u2} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (φ x)) c) l) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v)))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_iff_exists_eq_mul Asymptotics.isBigOWith_iff_exists_eq_mulₓ'. -/
+theorem isBigOWith_iff_exists_eq_mul (hc : 0 ≤ c) :
+ IsBigOWith c l u v ↔ ∃ (φ : α → 𝕜)(hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v :=
by
constructor
· intro h
@@ -1921,14 +3948,26 @@ theorem isOWith_iff_exists_eq_mul (hc : 0 ≤ c) :
simpa using div_le_of_nonneg_of_le_mul (norm_nonneg _) hc hy
· rintro ⟨φ, hφ, h⟩
exact is_O_with_of_eq_mul φ hφ h
-#align asymptotics.is_O_with_iff_exists_eq_mul Asymptotics.isOWith_iff_exists_eq_mul
-
-theorem IsOWith.exists_eq_mul (h : IsOWith c l u v) (hc : 0 ≤ c) :
+#align asymptotics.is_O_with_iff_exists_eq_mul Asymptotics.isBigOWith_iff_exists_eq_mul
+
+/- warning: asymptotics.is_O_with.exists_eq_mul -> Asymptotics.IsBigOWith.exists_eq_mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {c : Real} {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigOWith.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) c l u v) -> (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) c) -> (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (φ x)) c) l) (fun (hφ : Filter.Eventually.{u1} α (fun (x : α) => LE.le.{0} Real Real.hasLe (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (φ x)) c) l) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {c : Real} {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigOWith.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) c l u v) -> (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) c) -> (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Eventually.{u2} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (φ x)) c) l) (fun (hφ : Filter.Eventually.{u2} α (fun (x : α) => LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (φ x)) c) l) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.exists_eq_mul Asymptotics.IsBigOWith.exists_eq_mulₓ'. -/
+theorem IsBigOWith.exists_eq_mul (h : IsBigOWith c l u v) (hc : 0 ≤ c) :
∃ (φ : α → 𝕜)(hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v :=
- (isOWith_iff_exists_eq_mul hc).mp h
-#align asymptotics.is_O_with.exists_eq_mul Asymptotics.IsOWith.exists_eq_mul
-
-theorem isO_iff_exists_eq_mul :
+ (isBigOWith_iff_exists_eq_mul hc).mp h
+#align asymptotics.is_O_with.exists_eq_mul Asymptotics.IsBigOWith.exists_eq_mul
+
+/- warning: asymptotics.is_O_iff_exists_eq_mul -> Asymptotics.isBigO_iff_exists_eq_mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, Iff (Asymptotics.IsBigO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_exists_eq_mul Asymptotics.isBigO_iff_exists_eq_mulₓ'. -/
+theorem isBigO_iff_exists_eq_mul :
u =O[l] v ↔ ∃ (φ : α → 𝕜)(hφ : l.IsBoundedUnder (· ≤ ·) (norm ∘ φ)), u =ᶠ[l] φ * v :=
by
constructor
@@ -1938,12 +3977,24 @@ theorem isO_iff_exists_eq_mul :
exact ⟨φ, ⟨c, hφ⟩, huvφ⟩
· rintro ⟨φ, ⟨c, hφ⟩, huvφ⟩
exact is_O_iff_is_O_with.2 ⟨c, is_O_with_of_eq_mul φ hφ huvφ⟩
-#align asymptotics.is_O_iff_exists_eq_mul Asymptotics.isO_iff_exists_eq_mul
-
+#align asymptotics.is_O_iff_exists_eq_mul Asymptotics.isBigO_iff_exists_eq_mul
+
+/- warning: asymptotics.is_O.exists_eq_mul -> Asymptotics.IsBigO.exists_eq_mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) -> (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u1} Real α (LE.le.{0} Real Real.hasLe) l (Function.comp.{succ u1, succ u2, 1} α 𝕜 Real (Norm.norm.{u2} 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) -> (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) (fun (hφ : Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51589 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.51591) l (Function.comp.{succ u2, succ u1, 1} α 𝕜 Real (Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12)) φ)) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.exists_eq_mul Asymptotics.IsBigO.exists_eq_mulₓ'. -/
alias is_O_iff_exists_eq_mul ↔ is_O.exists_eq_mul _
-#align asymptotics.is_O.exists_eq_mul Asymptotics.IsO.exists_eq_mul
-
-theorem isOCat_iff_exists_eq_mul :
+#align asymptotics.is_O.exists_eq_mul Asymptotics.IsBigO.exists_eq_mul
+
+/- warning: asymptotics.is_o_iff_exists_eq_mul -> Asymptotics.isLittleO_iff_exists_eq_mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, Iff (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Tendsto.{u1, u2} α 𝕜 φ l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) (fun (hφ : Filter.Tendsto.{u1, u2} α 𝕜 φ l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, Iff (Asymptotics.IsLittleO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Tendsto.{u2, u1} α 𝕜 φ l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) (fun (hφ : Filter.Tendsto.{u2, u1} α 𝕜 φ l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_iff_exists_eq_mul Asymptotics.isLittleO_iff_exists_eq_mulₓ'. -/
+theorem isLittleO_iff_exists_eq_mul :
u =o[l] v ↔ ∃ (φ : α → 𝕜)(hφ : Tendsto φ l (𝓝 0)), u =ᶠ[l] φ * v :=
by
constructor
@@ -1952,26 +4003,44 @@ theorem isOCat_iff_exists_eq_mul :
rintro ⟨φ, hφ, huvφ⟩ c hpos
rw [NormedAddCommGroup.tendsto_nhds_zero] at hφ
exact is_O_with_of_eq_mul _ ((hφ c hpos).mono fun x => le_of_lt) huvφ
-#align asymptotics.is_o_iff_exists_eq_mul Asymptotics.isOCat_iff_exists_eq_mul
-
+#align asymptotics.is_o_iff_exists_eq_mul Asymptotics.isLittleO_iff_exists_eq_mul
+
+/- warning: asymptotics.is_o.exists_eq_mul -> Asymptotics.IsLittleO.exists_eq_mul is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {𝕜 : Type.{u2}} [_inst_12 : NormedField.{u2} 𝕜] {l : Filter.{u1} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsLittleO.{u1, u2, u2} α 𝕜 𝕜 (NormedField.toHasNorm.{u2} 𝕜 _inst_12) (NormedField.toHasNorm.{u2} 𝕜 _inst_12) l u v) -> (Exists.{max (succ u1) (succ u2)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Tendsto.{u1, u2} α 𝕜 φ l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) (fun (hφ : Filter.Tendsto.{u1, u2} α 𝕜 φ l (nhds.{u2} 𝕜 (UniformSpace.toTopologicalSpace.{u2} 𝕜 (PseudoMetricSpace.toUniformSpace.{u2} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u2} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u2} 𝕜 (NormedCommRing.toSeminormedCommRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12)))))) (OfNat.ofNat.{u2} 𝕜 0 (OfNat.mk.{u2} 𝕜 0 (Zero.zero.{u2} 𝕜 (MulZeroClass.toHasZero.{u2} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u2} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u2} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u2} 𝕜 (Ring.toNonAssocRing.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))))))))) => Filter.EventuallyEq.{u1, u2} α 𝕜 l u (HMul.hMul.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u1 u2} (α -> 𝕜) (Pi.instMul.{u1, u2} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Distrib.toHasMul.{u2} 𝕜 (Ring.toDistrib.{u2} 𝕜 (NormedRing.toRing.{u2} 𝕜 (NormedCommRing.toNormedRing.{u2} 𝕜 (NormedField.toNormedCommRing.{u2} 𝕜 _inst_12))))))) φ v))))
+but is expected to have type
+ forall {α : Type.{u2}} {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {l : Filter.{u2} α} {u : α -> 𝕜} {v : α -> 𝕜}, (Asymptotics.IsLittleO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l u v) -> (Exists.{max (succ u2) (succ u1)} (α -> 𝕜) (fun (φ : α -> 𝕜) => Exists.{0} (Filter.Tendsto.{u2, u1} α 𝕜 φ l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) (fun (hφ : Filter.Tendsto.{u2, u1} α 𝕜 φ l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) => Filter.EventuallyEq.{u2, u1} α 𝕜 l u (HMul.hMul.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHMul.{max u2 u1} (α -> 𝕜) (Pi.instMul.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => NonUnitalNonAssocRing.toMul.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))) φ v))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.exists_eq_mul Asymptotics.IsLittleO.exists_eq_mulₓ'. -/
alias is_o_iff_exists_eq_mul ↔ is_o.exists_eq_mul _
-#align asymptotics.is_o.exists_eq_mul Asymptotics.IsOCat.exists_eq_mul
+#align asymptotics.is_o.exists_eq_mul Asymptotics.IsLittleO.exists_eq_mul
end ExistsMulEq
/-! ### Miscellanous lemmas -/
-theorem div_isBoundedUnder_of_isO {α : Type _} {l : Filter α} {f g : α → 𝕜} (h : f =O[l] g) :
+/- warning: asymptotics.div_is_bounded_under_of_is_O -> Asymptotics.div_isBoundedUnder_of_isBigO is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (NormedField.toHasNorm.{u1} 𝕜 _inst_12) l f g) -> (Filter.IsBoundedUnder.{0, u2} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (DivInvMonoid.toHasDiv.{u1} 𝕜 (DivisionRing.toDivInvMonoid.{u1} 𝕜 (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_12))))) (f x) (g x))))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) -> (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52010 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52012 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52010 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52012) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.div_is_bounded_under_of_is_O Asymptotics.div_isBoundedUnder_of_isBigOₓ'. -/
+theorem div_isBoundedUnder_of_isBigO {α : Type _} {l : Filter α} {f g : α → 𝕜} (h : f =O[l] g) :
IsBoundedUnder (· ≤ ·) l fun x => ‖f x / g x‖ :=
by
obtain ⟨c, h₀, hc⟩ := h.exists_nonneg
refine' ⟨c, eventually_map.2 (hc.bound.mono fun x hx => _)⟩
rw [norm_div]
exact div_le_of_nonneg_of_le_mul (norm_nonneg _) h₀ hx
-#align asymptotics.div_is_bounded_under_of_is_O Asymptotics.div_isBoundedUnder_of_isO
-
-theorem isO_iff_div_isBoundedUnder {α : Type _} {l : Filter α} {f g : α → 𝕜}
+#align asymptotics.div_is_bounded_under_of_is_O Asymptotics.div_isBoundedUnder_of_isBigO
+
+/- warning: asymptotics.is_O_iff_div_is_bounded_under -> Asymptotics.isBigO_iff_div_isBoundedUnder is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))))))))) l) -> (Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (NormedField.toHasNorm.{u1} 𝕜 _inst_12) l f g) (Filter.IsBoundedUnder.{0, u2} Real α (LE.le.{0} Real Real.hasLe) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (DivInvMonoid.toHasDiv.{u1} 𝕜 (DivisionRing.toDivInvMonoid.{u1} 𝕜 (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_12))))) (f x) (g x)))))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) l) -> (Iff (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g) (Filter.IsBoundedUnder.{0, u2} Real α (fun (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52244 : Real) (x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52246 : Real) => LE.le.{0} Real Real.instLEReal x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52244 x._@.Mathlib.Analysis.Asymptotics.Asymptotics._hyg.52246) l (fun (x : α) => Norm.norm.{u1} 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (HDiv.hDiv.{u1, u1, u1} 𝕜 𝕜 𝕜 (instHDiv.{u1} 𝕜 (Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))) (f x) (g x)))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_iff_div_is_bounded_under Asymptotics.isBigO_iff_div_isBoundedUnderₓ'. -/
+theorem isBigO_iff_div_isBoundedUnder {α : Type _} {l : Filter α} {f g : α → 𝕜}
(hgf : ∀ᶠ x in l, g x = 0 → f x = 0) :
f =O[l] g ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x / g x‖ :=
by
@@ -1982,57 +4051,111 @@ theorem isO_iff_div_isBoundedUnder {α : Type _} {l : Filter α} {f g : α →
by_cases hgx : g x = 0
· simp [hx₁ hgx, hgx]
· exact (div_le_iff (norm_pos_iff.2 hgx)).mp hx₂
-#align asymptotics.is_O_iff_div_is_bounded_under Asymptotics.isO_iff_div_isBoundedUnder
-
-theorem isO_of_div_tendsto_nhds {α : Type _} {l : Filter α} {f g : α → 𝕜}
+#align asymptotics.is_O_iff_div_is_bounded_under Asymptotics.isBigO_iff_div_isBoundedUnder
+
+/- warning: asymptotics.is_O_of_div_tendsto_nhds -> Asymptotics.isBigO_of_div_tendsto_nhds is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12))))))))))))) l) -> (forall (c : 𝕜), (Filter.Tendsto.{u2, u1} α 𝕜 (HDiv.hDiv.{max u2 u1, max u2 u1, max u2 u1} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u2 u1} (α -> 𝕜) (Pi.instDiv.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => DivInvMonoid.toHasDiv.{u1} 𝕜 (DivisionRing.toDivInvMonoid.{u1} 𝕜 (NormedDivisionRing.toDivisionRing.{u1} 𝕜 (NormedField.toNormedDivisionRing.{u1} 𝕜 _inst_12)))))) f g) l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) c)) -> (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (NormedField.toHasNorm.{u1} 𝕜 _inst_12) l f g))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {α : Type.{u2}} {l : Filter.{u2} α} {f : α -> 𝕜} {g : α -> 𝕜}, (Filter.Eventually.{u2} α (fun (x : α) => (Eq.{succ u1} 𝕜 (g x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) -> (Eq.{succ u1} 𝕜 (f x) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12))))))))) l) -> (forall (c : 𝕜), (Filter.Tendsto.{u2, u1} α 𝕜 (HDiv.hDiv.{max u1 u2, max u1 u2, max u1 u2} (α -> 𝕜) (α -> 𝕜) (α -> 𝕜) (instHDiv.{max u1 u2} (α -> 𝕜) (Pi.instDiv.{u2, u1} α (fun (ᾰ : α) => 𝕜) (fun (i : α) => Field.toDiv.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))) f g) l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) c)) -> (Asymptotics.IsBigO.{u2, u1, u1} α 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) l f g))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_of_div_tendsto_nhds Asymptotics.isBigO_of_div_tendsto_nhdsₓ'. -/
+theorem isBigO_of_div_tendsto_nhds {α : Type _} {l : Filter α} {f g : α → 𝕜}
(hgf : ∀ᶠ x in l, g x = 0 → f x = 0) (c : 𝕜) (H : Filter.Tendsto (f / g) l (𝓝 c)) : f =O[l] g :=
- (isO_iff_div_isBoundedUnder hgf).2 <| H.norm.isBoundedUnder_le
-#align asymptotics.is_O_of_div_tendsto_nhds Asymptotics.isO_of_div_tendsto_nhds
-
-theorem IsOCat.tendsto_zero_of_tendsto {α E 𝕜 : Type _} [NormedAddCommGroup E] [NormedField 𝕜]
+ (isBigO_iff_div_isBoundedUnder hgf).2 <| H.norm.isBoundedUnder_le
+#align asymptotics.is_O_of_div_tendsto_nhds Asymptotics.isBigO_of_div_tendsto_nhds
+
+/- warning: asymptotics.is_o.tendsto_zero_of_tendsto -> Asymptotics.IsLittleO.tendsto_zero_of_tendsto is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {𝕜 : Type.{u3}} [_inst_14 : NormedAddCommGroup.{u2} E] [_inst_15 : NormedField.{u3} 𝕜] {u : α -> E} {v : α -> 𝕜} {l : Filter.{u1} α} {y : 𝕜}, (Asymptotics.IsLittleO.{u1, u2, u3} α E 𝕜 (NormedAddCommGroup.toHasNorm.{u2} E _inst_14) (NormedField.toHasNorm.{u3} 𝕜 _inst_15) l u v) -> (Filter.Tendsto.{u1, u3} α 𝕜 v l (nhds.{u3} 𝕜 (UniformSpace.toTopologicalSpace.{u3} 𝕜 (PseudoMetricSpace.toUniformSpace.{u3} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u3} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u3} 𝕜 (NormedCommRing.toSeminormedCommRing.{u3} 𝕜 (NormedField.toNormedCommRing.{u3} 𝕜 _inst_15)))))) y)) -> (Filter.Tendsto.{u1, u2} α E u l (nhds.{u2} E (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_14)))) (OfNat.ofNat.{u2} E 0 (OfNat.mk.{u2} E 0 (Zero.zero.{u2} E (AddZeroClass.toHasZero.{u2} E (AddMonoid.toAddZeroClass.{u2} E (SubNegMonoid.toAddMonoid.{u2} E (AddGroup.toSubNegMonoid.{u2} E (NormedAddGroup.toAddGroup.{u2} E (NormedAddCommGroup.toNormedAddGroup.{u2} E _inst_14)))))))))))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {𝕜 : Type.{u1}} [_inst_14 : NormedAddCommGroup.{u2} E] [_inst_15 : NormedField.{u1} 𝕜] {u : α -> E} {v : α -> 𝕜} {l : Filter.{u3} α} {y : 𝕜}, (Asymptotics.IsLittleO.{u3, u2, u1} α E 𝕜 (NormedAddCommGroup.toNorm.{u2} E _inst_14) (NormedField.toNorm.{u1} 𝕜 _inst_15) l u v) -> (Filter.Tendsto.{u3, u1} α 𝕜 v l (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_15)))))) y)) -> (Filter.Tendsto.{u3, u2} α E u l (nhds.{u2} E (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_14)))) (OfNat.ofNat.{u2} E 0 (Zero.toOfNat0.{u2} E (NegZeroClass.toZero.{u2} E (SubNegZeroMonoid.toNegZeroClass.{u2} E (SubtractionMonoid.toSubNegZeroMonoid.{u2} E (SubtractionCommMonoid.toSubtractionMonoid.{u2} E (AddCommGroup.toDivisionAddCommMonoid.{u2} E (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_14))))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.tendsto_zero_of_tendsto Asymptotics.IsLittleO.tendsto_zero_of_tendstoₓ'. -/
+theorem IsLittleO.tendsto_zero_of_tendsto {α E 𝕜 : Type _} [NormedAddCommGroup E] [NormedField 𝕜]
{u : α → E} {v : α → 𝕜} {l : Filter α} {y : 𝕜} (huv : u =o[l] v) (hv : Tendsto v l (𝓝 y)) :
Tendsto u l (𝓝 0) := by
suffices h : u =o[l] fun x => (1 : 𝕜)
· rwa [is_o_one_iff] at h
exact huv.trans_is_O (hv.is_O_one 𝕜)
-#align asymptotics.is_o.tendsto_zero_of_tendsto Asymptotics.IsOCat.tendsto_zero_of_tendsto
-
-theorem isOCat_pow_pow {m n : ℕ} (h : m < n) : (fun x : 𝕜 => x ^ n) =o[𝓝 0] fun x => x ^ m :=
+#align asymptotics.is_o.tendsto_zero_of_tendsto Asymptotics.IsLittleO.tendsto_zero_of_tendsto
+
+/- warning: asymptotics.is_o_pow_pow -> Asymptotics.isLittleO_pow_pow is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {m : Nat} {n : Nat}, (LT.lt.{0} Nat Nat.hasLt m n) -> (Asymptotics.IsLittleO.{u1, u1, u1} 𝕜 𝕜 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))))))) (fun (x : 𝕜) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (Ring.toMonoid.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) x n) (fun (x : 𝕜) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (Ring.toMonoid.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) x m))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {m : Nat} {n : Nat}, (LT.lt.{0} Nat instLTNat m n) -> (Asymptotics.IsLittleO.{u1, u1, u1} 𝕜 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (fun (x : 𝕜) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) x n) (fun (x : 𝕜) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) x m))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_pow_pow Asymptotics.isLittleO_pow_powₓ'. -/
+theorem isLittleO_pow_pow {m n : ℕ} (h : m < n) : (fun x : 𝕜 => x ^ n) =o[𝓝 0] fun x => x ^ m :=
by
rcases lt_iff_exists_add.1 h with ⟨p, hp0 : 0 < p, rfl⟩
suffices (fun x : 𝕜 => x ^ m * x ^ p) =o[𝓝 0] fun x => x ^ m * 1 ^ p by
simpa only [pow_add, one_pow, mul_one]
exact is_O.mul_is_o (is_O_refl _ _) (is_o.pow ((is_o_one_iff _).2 tendsto_id) hp0)
-#align asymptotics.is_o_pow_pow Asymptotics.isOCat_pow_pow
-
-theorem isOCat_norm_pow_norm_pow {m n : ℕ} (h : m < n) :
+#align asymptotics.is_o_pow_pow Asymptotics.isLittleO_pow_pow
+
+/- warning: asymptotics.is_o_norm_pow_norm_pow -> Asymptotics.isLittleO_norm_pow_norm_pow is a dubious translation:
+lean 3 declaration is
+ forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {m : Nat} {n : Nat}, (LT.lt.{0} Nat Nat.hasLt m n) -> (Asymptotics.IsLittleO.{u1, 0, 0} E' Real Real Real.hasNorm Real.hasNorm (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) (OfNat.ofNat.{u1} E' 0 (OfNat.mk.{u1} E' 0 (Zero.zero.{u1} E' (AddZeroClass.toHasZero.{u1} E' (AddMonoid.toAddZeroClass.{u1} E' (SubNegMonoid.toAddMonoid.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4)))))))))) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) x) n) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) x) m))
+but is expected to have type
+ forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {m : Nat} {n : Nat}, (LT.lt.{0} Nat instLTNat m n) -> (Asymptotics.IsLittleO.{u1, 0, 0} E' Real Real Real.norm Real.norm (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) (OfNat.ofNat.{u1} E' 0 (Zero.toOfNat0.{u1} E' (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4))))))))) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) x) n) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) x) m))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_norm_pow_norm_pow Asymptotics.isLittleO_norm_pow_norm_powₓ'. -/
+theorem isLittleO_norm_pow_norm_pow {m n : ℕ} (h : m < n) :
(fun x : E' => ‖x‖ ^ n) =o[𝓝 0] fun x => ‖x‖ ^ m :=
- (isOCat_pow_pow h).comp_tendsto tendsto_norm_zero
-#align asymptotics.is_o_norm_pow_norm_pow Asymptotics.isOCat_norm_pow_norm_pow
-
-theorem isOCat_pow_id {n : ℕ} (h : 1 < n) : (fun x : 𝕜 => x ^ n) =o[𝓝 0] fun x => x :=
+ (isLittleO_pow_pow h).comp_tendsto tendsto_norm_zero
+#align asymptotics.is_o_norm_pow_norm_pow Asymptotics.isLittleO_norm_pow_norm_pow
+
+/- warning: asymptotics.is_o_pow_id -> Asymptotics.isLittleO_pow_id is a dubious translation:
+lean 3 declaration is
+ forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {n : Nat}, (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))) n) -> (Asymptotics.IsLittleO.{u1, u1, u1} 𝕜 𝕜 𝕜 (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (NormedField.toHasNorm.{u1} 𝕜 _inst_12) (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSemiNormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (OfNat.mk.{u1} 𝕜 0 (Zero.zero.{u1} 𝕜 (MulZeroClass.toHasZero.{u1} 𝕜 (NonUnitalNonAssocSemiring.toMulZeroClass.{u1} 𝕜 (NonUnitalNonAssocRing.toNonUnitalNonAssocSemiring.{u1} 𝕜 (NonAssocRing.toNonUnitalNonAssocRing.{u1} 𝕜 (Ring.toNonAssocRing.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))))))))) (fun (x : 𝕜) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (Ring.toMonoid.{u1} 𝕜 (NormedRing.toRing.{u1} 𝕜 (NormedCommRing.toNormedRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) x n) (fun (x : 𝕜) => x))
+but is expected to have type
+ forall {𝕜 : Type.{u1}} [_inst_12 : NormedField.{u1} 𝕜] {n : Nat}, (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)) n) -> (Asymptotics.IsLittleO.{u1, u1, u1} 𝕜 𝕜 𝕜 (NormedField.toNorm.{u1} 𝕜 _inst_12) (NormedField.toNorm.{u1} 𝕜 _inst_12) (nhds.{u1} 𝕜 (UniformSpace.toTopologicalSpace.{u1} 𝕜 (PseudoMetricSpace.toUniformSpace.{u1} 𝕜 (SeminormedRing.toPseudoMetricSpace.{u1} 𝕜 (SeminormedCommRing.toSeminormedRing.{u1} 𝕜 (NormedCommRing.toSeminormedCommRing.{u1} 𝕜 (NormedField.toNormedCommRing.{u1} 𝕜 _inst_12)))))) (OfNat.ofNat.{u1} 𝕜 0 (Zero.toOfNat0.{u1} 𝕜 (CommMonoidWithZero.toZero.{u1} 𝕜 (CommGroupWithZero.toCommMonoidWithZero.{u1} 𝕜 (Semifield.toCommGroupWithZero.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) (fun (x : 𝕜) => HPow.hPow.{u1, 0, u1} 𝕜 Nat 𝕜 (instHPow.{u1, 0} 𝕜 Nat (Monoid.Pow.{u1} 𝕜 (MonoidWithZero.toMonoid.{u1} 𝕜 (Semiring.toMonoidWithZero.{u1} 𝕜 (DivisionSemiring.toSemiring.{u1} 𝕜 (Semifield.toDivisionSemiring.{u1} 𝕜 (Field.toSemifield.{u1} 𝕜 (NormedField.toField.{u1} 𝕜 _inst_12)))))))) x n) (fun (x : 𝕜) => x))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_pow_id Asymptotics.isLittleO_pow_idₓ'. -/
+theorem isLittleO_pow_id {n : ℕ} (h : 1 < n) : (fun x : 𝕜 => x ^ n) =o[𝓝 0] fun x => x :=
by
convert is_o_pow_pow h
simp only [pow_one]
-#align asymptotics.is_o_pow_id Asymptotics.isOCat_pow_id
-
-theorem isOCat_norm_pow_id {n : ℕ} (h : 1 < n) : (fun x : E' => ‖x‖ ^ n) =o[𝓝 0] fun x => x := by
+#align asymptotics.is_o_pow_id Asymptotics.isLittleO_pow_id
+
+/- warning: asymptotics.is_o_norm_pow_id -> Asymptotics.isLittleO_norm_pow_id is a dubious translation:
+lean 3 declaration is
+ forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {n : Nat}, (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))) n) -> (Asymptotics.IsLittleO.{u1, 0, u1} E' Real E' Real.hasNorm (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) (OfNat.ofNat.{u1} E' 0 (OfNat.mk.{u1} E' 0 (Zero.zero.{u1} E' (AddZeroClass.toHasZero.{u1} E' (AddMonoid.toAddZeroClass.{u1} E' (SubNegMonoid.toAddMonoid.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4)))))))))) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) x) n) (fun (x : E') => x))
+but is expected to have type
+ forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {n : Nat}, (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)) n) -> (Asymptotics.IsLittleO.{u1, 0, u1} E' Real E' Real.norm (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) (OfNat.ofNat.{u1} E' 0 (Zero.toOfNat0.{u1} E' (NegZeroClass.toZero.{u1} E' (SubNegZeroMonoid.toNegZeroClass.{u1} E' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E' (AddCommGroup.toDivisionAddCommMonoid.{u1} E' (SeminormedAddCommGroup.toAddCommGroup.{u1} E' _inst_4))))))))) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) x) n) (fun (x : E') => x))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_norm_pow_id Asymptotics.isLittleO_norm_pow_idₓ'. -/
+theorem isLittleO_norm_pow_id {n : ℕ} (h : 1 < n) : (fun x : E' => ‖x‖ ^ n) =o[𝓝 0] fun x => x := by
simpa only [pow_one, is_o_norm_right] using @is_o_norm_pow_norm_pow E' _ _ _ h
-#align asymptotics.is_o_norm_pow_id Asymptotics.isOCat_norm_pow_id
-
-theorem IsO.eq_zero_of_norm_pow_within {f : E'' → F''} {s : Set E''} {x₀ : E''} {n : ℕ}
+#align asymptotics.is_o_norm_pow_id Asymptotics.isLittleO_norm_pow_id
+
+/- warning: asymptotics.is_O.eq_zero_of_norm_pow_within -> Asymptotics.IsBigO.eq_zero_of_norm_pow_within is a dubious translation:
+lean 3 declaration is
+ forall {E'' : Type.{u1}} {F'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u2} F''] {f : E'' -> F''} {s : Set.{u1} E''} {x₀ : E''} {n : Nat}, (Asymptotics.IsBigO.{u1, u2, 0} E'' F'' Real (NormedAddCommGroup.toHasNorm.{u2} F'' _inst_8) Real.hasNorm (nhdsWithin.{u1} E'' (UniformSpace.toTopologicalSpace.{u1} E'' (PseudoMetricSpace.toUniformSpace.{u1} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E'' _inst_7)))) x₀ s) f (fun (x : E'') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E'' (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) (HSub.hSub.{u1, u1, u1} E'' E'' E'' (instHSub.{u1} E'' (SubNegMonoid.toHasSub.{u1} E'' (AddGroup.toSubNegMonoid.{u1} E'' (NormedAddGroup.toAddGroup.{u1} E'' (NormedAddCommGroup.toNormedAddGroup.{u1} E'' _inst_7))))) x x₀)) n)) -> (Membership.Mem.{u1, u1} E'' (Set.{u1} E'') (Set.hasMem.{u1} E'') x₀ s) -> (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) n) -> (Eq.{succ u2} F'' (f x₀) (OfNat.ofNat.{u2} F'' 0 (OfNat.mk.{u2} F'' 0 (Zero.zero.{u2} F'' (AddZeroClass.toHasZero.{u2} F'' (AddMonoid.toAddZeroClass.{u2} F'' (SubNegMonoid.toAddMonoid.{u2} F'' (AddGroup.toSubNegMonoid.{u2} F'' (NormedAddGroup.toAddGroup.{u2} F'' (NormedAddCommGroup.toNormedAddGroup.{u2} F'' _inst_8))))))))))
+but is expected to have type
+ forall {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f : E'' -> F''} {s : Set.{u2} E''} {x₀ : E''} {n : Nat}, (Asymptotics.IsBigO.{u2, u1, 0} E'' F'' Real (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) Real.norm (nhdsWithin.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) x₀ s) f (fun (x : E'') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (HSub.hSub.{u2, u2, u2} E'' E'' E'' (instHSub.{u2} E'' (SubNegMonoid.toSub.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))) x x₀)) n)) -> (Membership.mem.{u2, u2} E'' (Set.{u2} E'') (Set.instMembershipSet.{u2} E'') x₀ s) -> (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) n) -> (Eq.{succ u1} F'' (f x₀) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8)))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.eq_zero_of_norm_pow_within Asymptotics.IsBigO.eq_zero_of_norm_pow_withinₓ'. -/
+theorem IsBigO.eq_zero_of_norm_pow_within {f : E'' → F''} {s : Set E''} {x₀ : E''} {n : ℕ}
(h : f =O[𝓝[s] x₀] fun x => ‖x - x₀‖ ^ n) (hx₀ : x₀ ∈ s) (hn : 0 < n) : f x₀ = 0 :=
mem_of_mem_nhdsWithin hx₀ h.eq_zero_imp <| by simp_rw [sub_self, norm_zero, zero_pow hn]
-#align asymptotics.is_O.eq_zero_of_norm_pow_within Asymptotics.IsO.eq_zero_of_norm_pow_within
-
-theorem IsO.eq_zero_of_norm_pow {f : E'' → F''} {x₀ : E''} {n : ℕ}
+#align asymptotics.is_O.eq_zero_of_norm_pow_within Asymptotics.IsBigO.eq_zero_of_norm_pow_within
+
+/- warning: asymptotics.is_O.eq_zero_of_norm_pow -> Asymptotics.IsBigO.eq_zero_of_norm_pow is a dubious translation:
+lean 3 declaration is
+ forall {E'' : Type.{u1}} {F'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u2} F''] {f : E'' -> F''} {x₀ : E''} {n : Nat}, (Asymptotics.IsBigO.{u1, u2, 0} E'' F'' Real (NormedAddCommGroup.toHasNorm.{u2} F'' _inst_8) Real.hasNorm (nhds.{u1} E'' (UniformSpace.toTopologicalSpace.{u1} E'' (PseudoMetricSpace.toUniformSpace.{u1} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E'' _inst_7)))) x₀) f (fun (x : E'') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E'' (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) (HSub.hSub.{u1, u1, u1} E'' E'' E'' (instHSub.{u1} E'' (SubNegMonoid.toHasSub.{u1} E'' (AddGroup.toSubNegMonoid.{u1} E'' (NormedAddGroup.toAddGroup.{u1} E'' (NormedAddCommGroup.toNormedAddGroup.{u1} E'' _inst_7))))) x x₀)) n)) -> (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 0 (OfNat.mk.{0} Nat 0 (Zero.zero.{0} Nat Nat.hasZero))) n) -> (Eq.{succ u2} F'' (f x₀) (OfNat.ofNat.{u2} F'' 0 (OfNat.mk.{u2} F'' 0 (Zero.zero.{u2} F'' (AddZeroClass.toHasZero.{u2} F'' (AddMonoid.toAddZeroClass.{u2} F'' (SubNegMonoid.toAddMonoid.{u2} F'' (AddGroup.toSubNegMonoid.{u2} F'' (NormedAddGroup.toAddGroup.{u2} F'' (NormedAddCommGroup.toNormedAddGroup.{u2} F'' _inst_8))))))))))
+but is expected to have type
+ forall {E'' : Type.{u2}} {F'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u1} F''] {f : E'' -> F''} {x₀ : E''} {n : Nat}, (Asymptotics.IsBigO.{u2, u1, 0} E'' F'' Real (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) Real.norm (nhds.{u2} E'' (UniformSpace.toTopologicalSpace.{u2} E'' (PseudoMetricSpace.toUniformSpace.{u2} E'' (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E'' (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E'' _inst_7)))) x₀) f (fun (x : E'') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (HSub.hSub.{u2, u2, u2} E'' E'' E'' (instHSub.{u2} E'' (SubNegMonoid.toSub.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))) x x₀)) n)) -> (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 0 (instOfNatNat 0)) n) -> (Eq.{succ u1} F'' (f x₀) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8)))))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O.eq_zero_of_norm_pow Asymptotics.IsBigO.eq_zero_of_norm_powₓ'. -/
+theorem IsBigO.eq_zero_of_norm_pow {f : E'' → F''} {x₀ : E''} {n : ℕ}
(h : f =O[𝓝 x₀] fun x => ‖x - x₀‖ ^ n) (hn : 0 < n) : f x₀ = 0 :=
by
rw [← nhdsWithin_univ] at h
exact h.eq_zero_of_norm_pow_within (mem_univ _) hn
-#align asymptotics.is_O.eq_zero_of_norm_pow Asymptotics.IsO.eq_zero_of_norm_pow
-
-theorem isOCat_pow_sub_pow_sub (x₀ : E') {n m : ℕ} (h : n < m) :
+#align asymptotics.is_O.eq_zero_of_norm_pow Asymptotics.IsBigO.eq_zero_of_norm_pow
+
+/- warning: asymptotics.is_o_pow_sub_pow_sub -> Asymptotics.isLittleO_pow_sub_pow_sub is a dubious translation:
+lean 3 declaration is
+ forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] (x₀ : E') {n : Nat} {m : Nat}, (LT.lt.{0} Nat Nat.hasLt n m) -> (Asymptotics.IsLittleO.{u1, 0, 0} E' Real Real Real.hasNorm Real.hasNorm (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) x₀) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) (HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toHasSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀)) m) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) (HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toHasSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀)) n))
+but is expected to have type
+ forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] (x₀ : E') {n : Nat} {m : Nat}, (LT.lt.{0} Nat instLTNat n m) -> (Asymptotics.IsLittleO.{u1, 0, 0} E' Real Real Real.norm Real.norm (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) x₀) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀)) m) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀)) n))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_pow_sub_pow_sub Asymptotics.isLittleO_pow_sub_pow_subₓ'. -/
+theorem isLittleO_pow_sub_pow_sub (x₀ : E') {n m : ℕ} (h : n < m) :
(fun x => ‖x - x₀‖ ^ m) =o[𝓝 x₀] fun x => ‖x - x₀‖ ^ n :=
haveI : tendsto (fun x => ‖x - x₀‖) (𝓝 x₀) (𝓝 0) :=
by
@@ -2040,41 +4163,79 @@ theorem isOCat_pow_sub_pow_sub (x₀ : E') {n m : ℕ} (h : n < m) :
rw [← sub_self x₀]
exact tendsto_id.sub tendsto_const_nhds
(is_o_pow_pow h).comp_tendsto this
-#align asymptotics.is_o_pow_sub_pow_sub Asymptotics.isOCat_pow_sub_pow_sub
-
-theorem isOCat_pow_sub_sub (x₀ : E') {m : ℕ} (h : 1 < m) :
+#align asymptotics.is_o_pow_sub_pow_sub Asymptotics.isLittleO_pow_sub_pow_sub
+
+/- warning: asymptotics.is_o_pow_sub_sub -> Asymptotics.isLittleO_pow_sub_sub is a dubious translation:
+lean 3 declaration is
+ forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] (x₀ : E') {m : Nat}, (LT.lt.{0} Nat Nat.hasLt (OfNat.ofNat.{0} Nat 1 (OfNat.mk.{0} Nat 1 (One.one.{0} Nat Nat.hasOne))) m) -> (Asymptotics.IsLittleO.{u1, 0, u1} E' Real E' Real.hasNorm (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) x₀) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.monoid)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toHasNorm.{u1} E' _inst_4) (HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toHasSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀)) m) (fun (x : E') => HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toHasSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀))
+but is expected to have type
+ forall {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] (x₀ : E') {m : Nat}, (LT.lt.{0} Nat instLTNat (OfNat.ofNat.{0} Nat 1 (instOfNatNat 1)) m) -> (Asymptotics.IsLittleO.{u1, 0, u1} E' Real E' Real.norm (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (nhds.{u1} E' (UniformSpace.toTopologicalSpace.{u1} E' (PseudoMetricSpace.toUniformSpace.{u1} E' (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E' _inst_4))) x₀) (fun (x : E') => HPow.hPow.{0, 0, 0} Real Nat Real (instHPow.{0, 0} Real Nat (Monoid.Pow.{0} Real Real.instMonoidReal)) (Norm.norm.{u1} E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀)) m) (fun (x : E') => HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) x x₀))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_pow_sub_sub Asymptotics.isLittleO_pow_sub_subₓ'. -/
+theorem isLittleO_pow_sub_sub (x₀ : E') {m : ℕ} (h : 1 < m) :
(fun x => ‖x - x₀‖ ^ m) =o[𝓝 x₀] fun x => x - x₀ := by
simpa only [is_o_norm_right, pow_one] using is_o_pow_sub_pow_sub x₀ h
-#align asymptotics.is_o_pow_sub_sub Asymptotics.isOCat_pow_sub_sub
-
-theorem IsOWith.right_le_sub_of_lt_1 {f₁ f₂ : α → E'} (h : IsOWith c l f₁ f₂) (hc : c < 1) :
- IsOWith (1 / (1 - c)) l f₂ fun x => f₂ x - f₁ x :=
- IsOWith.of_bound <|
+#align asymptotics.is_o_pow_sub_sub Asymptotics.isLittleO_pow_sub_sub
+
+/- warning: asymptotics.is_O_with.right_le_sub_of_lt_1 -> Asymptotics.IsBigOWith.right_le_sub_of_lt_1 is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) c l f₁ f₂) -> (LT.lt.{0} Real Real.hasLt c (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) -> (Asymptotics.IsBigOWith.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.hasSub) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) c)) l f₂ (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toHasSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)))
+but is expected to have type
+ forall {α : Type.{u2}} {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {c : Real} {l : Filter.{u2} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) c l f₁ f₂) -> (LT.lt.{0} Real Real.instLTReal c (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) -> (Asymptotics.IsBigOWith.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.instSubReal) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) c)) l f₂ (fun (x : α) => HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) (f₂ x) (f₁ x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.right_le_sub_of_lt_1 Asymptotics.IsBigOWith.right_le_sub_of_lt_1ₓ'. -/
+theorem IsBigOWith.right_le_sub_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith c l f₁ f₂) (hc : c < 1) :
+ IsBigOWith (1 / (1 - c)) l f₂ fun x => f₂ x - f₁ x :=
+ IsBigOWith.of_bound <|
mem_of_superset h.bound fun x hx =>
by
simp only [mem_set_of_eq] at hx⊢
rw [mul_comm, one_div, ← div_eq_mul_inv, le_div_iff, mul_sub, mul_one, mul_comm]
· exact le_trans (sub_le_sub_left hx _) (norm_sub_norm_le _ _)
· exact sub_pos.2 hc
-#align asymptotics.is_O_with.right_le_sub_of_lt_1 Asymptotics.IsOWith.right_le_sub_of_lt_1
-
-theorem IsOWith.right_le_add_of_lt_1 {f₁ f₂ : α → E'} (h : IsOWith c l f₁ f₂) (hc : c < 1) :
- IsOWith (1 / (1 - c)) l f₂ fun x => f₁ x + f₂ x :=
+#align asymptotics.is_O_with.right_le_sub_of_lt_1 Asymptotics.IsBigOWith.right_le_sub_of_lt_1
+
+/- warning: asymptotics.is_O_with.right_le_add_of_lt_1 -> Asymptotics.IsBigOWith.right_le_add_of_lt_1 is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] {c : Real} {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) c l f₁ f₂) -> (LT.lt.{0} Real Real.hasLt c (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) -> (Asymptotics.IsBigOWith.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (DivInvMonoid.toHasDiv.{0} Real (DivisionRing.toDivInvMonoid.{0} Real Real.divisionRing))) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) (HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.hasSub) (OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne))) c)) l f₂ (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toHasAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)))
+but is expected to have type
+ forall {α : Type.{u2}} {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {c : Real} {l : Filter.{u2} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsBigOWith.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) c l f₁ f₂) -> (LT.lt.{0} Real Real.instLTReal c (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) -> (Asymptotics.IsBigOWith.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (HDiv.hDiv.{0, 0, 0} Real Real Real (instHDiv.{0} Real (LinearOrderedField.toDiv.{0} Real Real.instLinearOrderedFieldReal)) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) (HSub.hSub.{0, 0, 0} Real Real Real (instHSub.{0} Real Real.instSubReal) (OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal)) c)) l f₂ (fun (x : α) => HAdd.hAdd.{u1, u1, u1} E' E' E' (instHAdd.{u1} E' (AddZeroClass.toAdd.{u1} E' (AddMonoid.toAddZeroClass.{u1} E' (SubNegMonoid.toAddMonoid.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))))) (f₁ x) (f₂ x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with.right_le_add_of_lt_1 Asymptotics.IsBigOWith.right_le_add_of_lt_1ₓ'. -/
+theorem IsBigOWith.right_le_add_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith c l f₁ f₂) (hc : c < 1) :
+ IsBigOWith (1 / (1 - c)) l f₂ fun x => f₁ x + f₂ x :=
(h.neg_right.right_le_sub_of_lt_1 hc).neg_right.of_neg_left.congr rfl (fun x => rfl) fun x => by
rw [neg_sub, sub_neg_eq_add]
-#align asymptotics.is_O_with.right_le_add_of_lt_1 Asymptotics.IsOWith.right_le_add_of_lt_1
-
-theorem IsOCat.right_isO_sub {f₁ f₂ : α → E'} (h : f₁ =o[l] f₂) : f₂ =O[l] fun x => f₂ x - f₁ x :=
- ((h.def' one_half_pos).right_le_sub_of_lt_1 one_half_lt_one).IsO
-#align asymptotics.is_o.right_is_O_sub Asymptotics.IsOCat.right_isO_sub
-
-theorem IsOCat.right_isO_add {f₁ f₂ : α → E'} (h : f₁ =o[l] f₂) : f₂ =O[l] fun x => f₁ x + f₂ x :=
- ((h.def' one_half_pos).right_le_add_of_lt_1 one_half_lt_one).IsO
-#align asymptotics.is_o.right_is_O_add Asymptotics.IsOCat.right_isO_add
-
+#align asymptotics.is_O_with.right_le_add_of_lt_1 Asymptotics.IsBigOWith.right_le_add_of_lt_1
+
+/- warning: asymptotics.is_o.right_is_O_sub -> Asymptotics.IsLittleO.right_isBigO_sub is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) l f₁ f₂) -> (Asymptotics.IsBigO.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) l f₂ (fun (x : α) => HSub.hSub.{u2, u2, u2} E' E' E' (instHSub.{u2} E' (SubNegMonoid.toHasSub.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))) (f₂ x) (f₁ x)))
+but is expected to have type
+ forall {α : Type.{u2}} {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {l : Filter.{u2} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f₁ f₂) -> (Asymptotics.IsBigO.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f₂ (fun (x : α) => HSub.hSub.{u1, u1, u1} E' E' E' (instHSub.{u1} E' (SubNegMonoid.toSub.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))) (f₂ x) (f₁ x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.right_is_O_sub Asymptotics.IsLittleO.right_isBigO_subₓ'. -/
+theorem IsLittleO.right_isBigO_sub {f₁ f₂ : α → E'} (h : f₁ =o[l] f₂) :
+ f₂ =O[l] fun x => f₂ x - f₁ x :=
+ ((h.def' one_half_pos).right_le_sub_of_lt_1 one_half_lt_one).IsBigO
+#align asymptotics.is_o.right_is_O_sub Asymptotics.IsLittleO.right_isBigO_sub
+
+/- warning: asymptotics.is_o.right_is_O_add -> Asymptotics.IsLittleO.right_isBigO_add is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E' : Type.{u2}} [_inst_4 : SeminormedAddCommGroup.{u2} E'] {l : Filter.{u1} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) l f₁ f₂) -> (Asymptotics.IsBigO.{u1, u2, u2} α E' E' (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) (SeminormedAddCommGroup.toHasNorm.{u2} E' _inst_4) l f₂ (fun (x : α) => HAdd.hAdd.{u2, u2, u2} E' E' E' (instHAdd.{u2} E' (AddZeroClass.toHasAdd.{u2} E' (AddMonoid.toAddZeroClass.{u2} E' (SubNegMonoid.toAddMonoid.{u2} E' (AddGroup.toSubNegMonoid.{u2} E' (SeminormedAddGroup.toAddGroup.{u2} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u2} E' _inst_4))))))) (f₁ x) (f₂ x)))
+but is expected to have type
+ forall {α : Type.{u2}} {E' : Type.{u1}} [_inst_4 : SeminormedAddCommGroup.{u1} E'] {l : Filter.{u2} α} {f₁ : α -> E'} {f₂ : α -> E'}, (Asymptotics.IsLittleO.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f₁ f₂) -> (Asymptotics.IsBigO.{u2, u1, u1} α E' E' (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) (SeminormedAddCommGroup.toNorm.{u1} E' _inst_4) l f₂ (fun (x : α) => HAdd.hAdd.{u1, u1, u1} E' E' E' (instHAdd.{u1} E' (AddZeroClass.toAdd.{u1} E' (AddMonoid.toAddZeroClass.{u1} E' (SubNegMonoid.toAddMonoid.{u1} E' (AddGroup.toSubNegMonoid.{u1} E' (SeminormedAddGroup.toAddGroup.{u1} E' (SeminormedAddCommGroup.toSeminormedAddGroup.{u1} E' _inst_4))))))) (f₁ x) (f₂ x)))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o.right_is_O_add Asymptotics.IsLittleO.right_isBigO_addₓ'. -/
+theorem IsLittleO.right_isBigO_add {f₁ f₂ : α → E'} (h : f₁ =o[l] f₂) :
+ f₂ =O[l] fun x => f₁ x + f₂ x :=
+ ((h.def' one_half_pos).right_le_add_of_lt_1 one_half_lt_one).IsBigO
+#align asymptotics.is_o.right_is_O_add Asymptotics.IsLittleO.right_isBigO_add
+
+/- warning: asymptotics.bound_of_is_O_cofinite -> Asymptotics.bound_of_isBigO_cofinite is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E : Type.{u2}} {F'' : Type.{u3}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u3} F''] {f : α -> E} {g'' : α -> F''}, (Asymptotics.IsBigO.{u1, u2, u3} α E F'' _inst_1 (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (Filter.cofinite.{u1} α) f g'') -> (Exists.{1} Real (fun (C : Real) => Exists.{0} (GT.gt.{0} Real Real.hasLt C (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) (fun (H : GT.gt.{0} Real Real.hasLt C (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) => forall {{x : α}}, (Ne.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u3} F'' (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (g'' x)))))))
+but is expected to have type
+ forall {α : Type.{u3}} {E : Type.{u2}} {F'' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_8 : NormedAddCommGroup.{u1} F''] {f : α -> E} {g'' : α -> F''}, (Asymptotics.IsBigO.{u3, u2, u1} α E F'' _inst_1 (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) (Filter.cofinite.{u3} α) f g'') -> (Exists.{1} Real (fun (C : Real) => And (GT.gt.{0} Real Real.instLTReal C (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) (forall {{x : α}}, (Ne.{succ u1} F'' (g'' x) (OfNat.ofNat.{u1} F'' 0 (Zero.toOfNat0.{u1} F'' (NegZeroClass.toZero.{u1} F'' (SubNegZeroMonoid.toNegZeroClass.{u1} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} F'' (AddCommGroup.toDivisionAddCommMonoid.{u1} F'' (NormedAddCommGroup.toAddCommGroup.{u1} F'' _inst_8))))))))) -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u1} F'' (NormedAddCommGroup.toNorm.{u1} F'' _inst_8) (g'' x)))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.bound_of_is_O_cofinite Asymptotics.bound_of_isBigO_cofiniteₓ'. -/
/-- If `f x = O(g x)` along `cofinite`, then there exists a positive constant `C` such that
`‖f x‖ ≤ C * ‖g x‖` whenever `g x ≠ 0`. -/
-theorem bound_of_isO_cofinite (h : f =O[cofinite] g'') :
+theorem bound_of_isBigO_cofinite (h : f =O[cofinite] g'') :
∃ C > 0, ∀ ⦃x⦄, g'' x ≠ 0 → ‖f x‖ ≤ C * ‖g'' x‖ :=
by
rcases h.exists_pos with ⟨C, C₀, hC⟩
@@ -2084,69 +4245,124 @@ theorem bound_of_isO_cofinite (h : f =O[cofinite] g'') :
refine' ⟨max C C', lt_max_iff.2 (Or.inl C₀), fun x h₀ => _⟩
rw [max_mul_of_nonneg _ _ (norm_nonneg _), le_max_iff, or_iff_not_imp_left, not_le]
exact fun hx => (div_le_iff (norm_pos_iff.2 h₀)).1 (this _ hx)
-#align asymptotics.bound_of_is_O_cofinite Asymptotics.bound_of_isO_cofinite
-
-theorem isO_cofinite_iff (h : ∀ x, g'' x = 0 → f'' x = 0) :
+#align asymptotics.bound_of_is_O_cofinite Asymptotics.bound_of_isBigO_cofinite
+
+/- warning: asymptotics.is_O_cofinite_iff -> Asymptotics.isBigO_cofinite_iff is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''}, (forall (x : α), (Eq.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (OfNat.mk.{u3} F'' 0 (Zero.zero.{u3} F'' (AddZeroClass.toHasZero.{u3} F'' (AddMonoid.toAddZeroClass.{u3} F'' (SubNegMonoid.toAddMonoid.{u3} F'' (AddGroup.toSubNegMonoid.{u3} F'' (NormedAddGroup.toAddGroup.{u3} F'' (NormedAddCommGroup.toNormedAddGroup.{u3} F'' _inst_8)))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7))))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (Filter.cofinite.{u1} α) f'' g'') (Exists.{1} Real (fun (C : Real) => forall (x : α), LE.le.{0} Real Real.hasLe (Norm.norm.{u2} E'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (f'' x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u3} F'' (NormedAddCommGroup.toHasNorm.{u3} F'' _inst_8) (g'' x))))))
+but is expected to have type
+ forall {α : Type.{u1}} {E'' : Type.{u2}} {F'' : Type.{u3}} [_inst_7 : NormedAddCommGroup.{u2} E''] [_inst_8 : NormedAddCommGroup.{u3} F''] {f'' : α -> E''} {g'' : α -> F''}, (forall (x : α), (Eq.{succ u3} F'' (g'' x) (OfNat.ofNat.{u3} F'' 0 (Zero.toOfNat0.{u3} F'' (NegZeroClass.toZero.{u3} F'' (SubNegZeroMonoid.toNegZeroClass.{u3} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u3} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u3} F'' (AddCommGroup.toDivisionAddCommMonoid.{u3} F'' (NormedAddCommGroup.toAddCommGroup.{u3} F'' _inst_8))))))))) -> (Eq.{succ u2} E'' (f'' x) (OfNat.ofNat.{u2} E'' 0 (Zero.toOfNat0.{u2} E'' (NegZeroClass.toZero.{u2} E'' (SubNegZeroMonoid.toNegZeroClass.{u2} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} E'' (AddCommGroup.toDivisionAddCommMonoid.{u2} E'' (NormedAddCommGroup.toAddCommGroup.{u2} E'' _inst_7)))))))))) -> (Iff (Asymptotics.IsBigO.{u1, u2, u3} α E'' F'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) (Filter.cofinite.{u1} α) f'' g'') (Exists.{1} Real (fun (C : Real) => forall (x : α), LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E'' (NormedAddCommGroup.toNorm.{u2} E'' _inst_7) (f'' x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u3} F'' (NormedAddCommGroup.toNorm.{u3} F'' _inst_8) (g'' x))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_cofinite_iff Asymptotics.isBigO_cofinite_iffₓ'. -/
+theorem isBigO_cofinite_iff (h : ∀ x, g'' x = 0 → f'' x = 0) :
f'' =O[cofinite] g'' ↔ ∃ C, ∀ x, ‖f'' x‖ ≤ C * ‖g'' x‖ :=
⟨fun h' =>
- let ⟨C, C₀, hC⟩ := bound_of_isO_cofinite h'
+ let ⟨C, C₀, hC⟩ := bound_of_isBigO_cofinite h'
⟨C, fun x => if hx : g'' x = 0 then by simp [h _ hx, hx] else hC hx⟩,
- fun h => (isO_top.2 h).mono le_top⟩
-#align asymptotics.is_O_cofinite_iff Asymptotics.isO_cofinite_iff
-
-theorem bound_of_isO_nat_atTop {f : ℕ → E} {g'' : ℕ → E''} (h : f =O[atTop] g'') :
+ fun h => (isBigO_top.2 h).mono le_top⟩
+#align asymptotics.is_O_cofinite_iff Asymptotics.isBigO_cofinite_iff
+
+/- warning: asymptotics.bound_of_is_O_nat_at_top -> Asymptotics.bound_of_isBigO_nat_atTop is a dubious translation:
+lean 3 declaration is
+ forall {E : Type.{u1}} {E'' : Type.{u2}} [_inst_1 : Norm.{u1} E] [_inst_7 : NormedAddCommGroup.{u2} E''] {f : Nat -> E} {g'' : Nat -> E''}, (Asymptotics.IsBigO.{0, u1, u2} Nat E E'' _inst_1 (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring)))) f g'') -> (Exists.{1} Real (fun (C : Real) => Exists.{0} (GT.gt.{0} Real Real.hasLt C (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) (fun (H : GT.gt.{0} Real Real.hasLt C (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) => forall {{x : Nat}}, (Ne.{succ u2} E'' (g'' x) (OfNat.ofNat.{u2} E'' 0 (OfNat.mk.{u2} E'' 0 (Zero.zero.{u2} E'' (AddZeroClass.toHasZero.{u2} E'' (AddMonoid.toAddZeroClass.{u2} E'' (SubNegMonoid.toAddMonoid.{u2} E'' (AddGroup.toSubNegMonoid.{u2} E'' (NormedAddGroup.toAddGroup.{u2} E'' (NormedAddCommGroup.toNormedAddGroup.{u2} E'' _inst_7)))))))))) -> (LE.le.{0} Real Real.hasLe (Norm.norm.{u1} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u2} E'' (NormedAddCommGroup.toHasNorm.{u2} E'' _inst_7) (g'' x)))))))
+but is expected to have type
+ forall {E : Type.{u2}} {E'' : Type.{u1}} [_inst_1 : Norm.{u2} E] [_inst_7 : NormedAddCommGroup.{u1} E''] {f : Nat -> E} {g'' : Nat -> E''}, (Asymptotics.IsBigO.{0, u2, u1} Nat E E'' _inst_1 (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring))) f g'') -> (Exists.{1} Real (fun (C : Real) => And (GT.gt.{0} Real Real.instLTReal C (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) (forall {{x : Nat}}, (Ne.{succ u1} E'' (g'' x) (OfNat.ofNat.{u1} E'' 0 (Zero.toOfNat0.{u1} E'' (NegZeroClass.toZero.{u1} E'' (SubNegZeroMonoid.toNegZeroClass.{u1} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E'' (AddCommGroup.toDivisionAddCommMonoid.{u1} E'' (NormedAddCommGroup.toAddCommGroup.{u1} E'' _inst_7))))))))) -> (LE.le.{0} Real Real.instLEReal (Norm.norm.{u2} E _inst_1 (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u1} E'' (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (g'' x)))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.bound_of_is_O_nat_at_top Asymptotics.bound_of_isBigO_nat_atTopₓ'. -/
+theorem bound_of_isBigO_nat_atTop {f : ℕ → E} {g'' : ℕ → E''} (h : f =O[atTop] g'') :
∃ C > 0, ∀ ⦃x⦄, g'' x ≠ 0 → ‖f x‖ ≤ C * ‖g'' x‖ :=
- bound_of_isO_cofinite <| by rwa [Nat.cofinite_eq_atTop]
-#align asymptotics.bound_of_is_O_nat_at_top Asymptotics.bound_of_isO_nat_atTop
-
-theorem isO_nat_atTop_iff {f : ℕ → E''} {g : ℕ → F''} (h : ∀ x, g x = 0 → f x = 0) :
+ bound_of_isBigO_cofinite <| by rwa [Nat.cofinite_eq_atTop]
+#align asymptotics.bound_of_is_O_nat_at_top Asymptotics.bound_of_isBigO_nat_atTop
+
+/- warning: asymptotics.is_O_nat_at_top_iff -> Asymptotics.isBigO_nat_atTop_iff is a dubious translation:
+lean 3 declaration is
+ forall {E'' : Type.{u1}} {F'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u2} F''] {f : Nat -> E''} {g : Nat -> F''}, (forall (x : Nat), (Eq.{succ u2} F'' (g x) (OfNat.ofNat.{u2} F'' 0 (OfNat.mk.{u2} F'' 0 (Zero.zero.{u2} F'' (AddZeroClass.toHasZero.{u2} F'' (AddMonoid.toAddZeroClass.{u2} F'' (SubNegMonoid.toAddMonoid.{u2} F'' (AddGroup.toSubNegMonoid.{u2} F'' (NormedAddGroup.toAddGroup.{u2} F'' (NormedAddCommGroup.toNormedAddGroup.{u2} F'' _inst_8)))))))))) -> (Eq.{succ u1} E'' (f x) (OfNat.ofNat.{u1} E'' 0 (OfNat.mk.{u1} E'' 0 (Zero.zero.{u1} E'' (AddZeroClass.toHasZero.{u1} E'' (AddMonoid.toAddZeroClass.{u1} E'' (SubNegMonoid.toAddMonoid.{u1} E'' (AddGroup.toSubNegMonoid.{u1} E'' (NormedAddGroup.toAddGroup.{u1} E'' (NormedAddCommGroup.toNormedAddGroup.{u1} E'' _inst_7))))))))))) -> (Iff (Asymptotics.IsBigO.{0, u1, u2} Nat E'' F'' (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) (NormedAddCommGroup.toHasNorm.{u2} F'' _inst_8) (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring)))) f g) (Exists.{1} Real (fun (C : Real) => forall (x : Nat), LE.le.{0} Real Real.hasLe (Norm.norm.{u1} E'' (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.hasMul) C (Norm.norm.{u2} F'' (NormedAddCommGroup.toHasNorm.{u2} F'' _inst_8) (g x))))))
+but is expected to have type
+ forall {E'' : Type.{u1}} {F'' : Type.{u2}} [_inst_7 : NormedAddCommGroup.{u1} E''] [_inst_8 : NormedAddCommGroup.{u2} F''] {f : Nat -> E''} {g : Nat -> F''}, (forall (x : Nat), (Eq.{succ u2} F'' (g x) (OfNat.ofNat.{u2} F'' 0 (Zero.toOfNat0.{u2} F'' (NegZeroClass.toZero.{u2} F'' (SubNegZeroMonoid.toNegZeroClass.{u2} F'' (SubtractionMonoid.toSubNegZeroMonoid.{u2} F'' (SubtractionCommMonoid.toSubtractionMonoid.{u2} F'' (AddCommGroup.toDivisionAddCommMonoid.{u2} F'' (NormedAddCommGroup.toAddCommGroup.{u2} F'' _inst_8))))))))) -> (Eq.{succ u1} E'' (f x) (OfNat.ofNat.{u1} E'' 0 (Zero.toOfNat0.{u1} E'' (NegZeroClass.toZero.{u1} E'' (SubNegZeroMonoid.toNegZeroClass.{u1} E'' (SubtractionMonoid.toSubNegZeroMonoid.{u1} E'' (SubtractionCommMonoid.toSubtractionMonoid.{u1} E'' (AddCommGroup.toDivisionAddCommMonoid.{u1} E'' (NormedAddCommGroup.toAddCommGroup.{u1} E'' _inst_7)))))))))) -> (Iff (Asymptotics.IsBigO.{0, u1, u2} Nat E'' F'' (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring))) f g) (Exists.{1} Real (fun (C : Real) => forall (x : Nat), LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} E'' (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (f x)) (HMul.hMul.{0, 0, 0} Real Real Real (instHMul.{0} Real Real.instMulReal) C (Norm.norm.{u2} F'' (NormedAddCommGroup.toNorm.{u2} F'' _inst_8) (g x))))))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_nat_at_top_iff Asymptotics.isBigO_nat_atTop_iffₓ'. -/
+theorem isBigO_nat_atTop_iff {f : ℕ → E''} {g : ℕ → F''} (h : ∀ x, g x = 0 → f x = 0) :
f =O[atTop] g ↔ ∃ C, ∀ x, ‖f x‖ ≤ C * ‖g x‖ := by
rw [← Nat.cofinite_eq_atTop, is_O_cofinite_iff h]
-#align asymptotics.is_O_nat_at_top_iff Asymptotics.isO_nat_atTop_iff
-
-theorem isO_one_nat_atTop_iff {f : ℕ → E''} :
+#align asymptotics.is_O_nat_at_top_iff Asymptotics.isBigO_nat_atTop_iff
+
+/- warning: asymptotics.is_O_one_nat_at_top_iff -> Asymptotics.isBigO_one_nat_atTop_iff is a dubious translation:
+lean 3 declaration is
+ forall {E'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u1} E''] {f : Nat -> E''}, Iff (Asymptotics.IsBigO.{0, u1, 0} Nat E'' Real (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) Real.hasNorm (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring)))) f (fun (n : Nat) => OfNat.ofNat.{0} Real 1 (OfNat.mk.{0} Real 1 (One.one.{0} Real Real.hasOne)))) (Exists.{1} Real (fun (C : Real) => forall (n : Nat), LE.le.{0} Real Real.hasLe (Norm.norm.{u1} E'' (NormedAddCommGroup.toHasNorm.{u1} E'' _inst_7) (f n)) C))
+but is expected to have type
+ forall {E'' : Type.{u1}} [_inst_7 : NormedAddCommGroup.{u1} E''] {f : Nat -> E''}, Iff (Asymptotics.IsBigO.{0, u1, 0} Nat E'' Real (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) Real.norm (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring))) f (fun (n : Nat) => OfNat.ofNat.{0} Real 1 (One.toOfNat1.{0} Real Real.instOneReal))) (Exists.{1} Real (fun (C : Real) => forall (n : Nat), LE.le.{0} Real Real.instLEReal (Norm.norm.{u1} E'' (NormedAddCommGroup.toNorm.{u1} E'' _inst_7) (f n)) C))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_one_nat_at_top_iff Asymptotics.isBigO_one_nat_atTop_iffₓ'. -/
+theorem isBigO_one_nat_atTop_iff {f : ℕ → E''} :
f =O[atTop] (fun n => 1 : ℕ → ℝ) ↔ ∃ C, ∀ n, ‖f n‖ ≤ C :=
- Iff.trans (isO_nat_atTop_iff fun n h => (one_ne_zero h).elim) <| by simp only [norm_one, mul_one]
-#align asymptotics.is_O_one_nat_at_top_iff Asymptotics.isO_one_nat_atTop_iff
-
-theorem isOWith_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, NormedAddCommGroup (E' i)]
+ Iff.trans (isBigO_nat_atTop_iff fun n h => (one_ne_zero h).elim) <| by
+ simp only [norm_one, mul_one]
+#align asymptotics.is_O_one_nat_at_top_iff Asymptotics.isBigO_one_nat_atTop_iff
+
+/- warning: asymptotics.is_O_with_pi -> Asymptotics.isBigOWith_pi is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] {g' : α -> F'} {l : Filter.{u1} α} {ι : Type.{u3}} [_inst_14 : Fintype.{u3} ι] {E' : ι -> Type.{u4}} [_inst_15 : forall (i : ι), NormedAddCommGroup.{u4} (E' i)] {f : α -> (forall (i : ι), E' i)} {C : Real}, (LE.le.{0} Real Real.hasLe (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero))) C) -> (Iff (Asymptotics.IsBigOWith.{u1, max u3 u4, u2} α (forall (i : ι), E' i) F' (NormedAddCommGroup.toHasNorm.{max u3 u4} (forall (i : ι), E' i) (Pi.normedAddCommGroup.{u3, u4} ι (fun (i : ι) => E' i) _inst_14 (fun (i : ι) => _inst_15 i))) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) C l f g') (forall (i : ι), Asymptotics.IsBigOWith.{u1, u4, u2} α (E' i) F' (NormedAddCommGroup.toHasNorm.{u4} (E' i) (_inst_15 i)) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) C l (fun (x : α) => f x i) g'))
+but is expected to have type
+ forall {α : Type.{u2}} {F' : Type.{u1}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] {g' : α -> F'} {l : Filter.{u2} α} {ι : Type.{u4}} [_inst_14 : Fintype.{u4} ι] {E' : ι -> Type.{u3}} [_inst_15 : forall (i : ι), NormedAddCommGroup.{u3} (E' i)] {f : α -> (forall (i : ι), E' i)} {C : Real}, (LE.le.{0} Real Real.instLEReal (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal)) C) -> (Iff (Asymptotics.IsBigOWith.{u2, max u4 u3, u1} α (forall (i : ι), E' i) F' (NormedAddCommGroup.toNorm.{max u4 u3} (forall (i : ι), E' i) (Pi.normedAddCommGroup.{u4, u3} ι (fun (i : ι) => E' i) _inst_14 (fun (i : ι) => _inst_15 i))) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) C l f g') (forall (i : ι), Asymptotics.IsBigOWith.{u2, u3, u1} α (E' i) F' (NormedAddCommGroup.toNorm.{u3} (E' i) (_inst_15 i)) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) C l (fun (x : α) => f x i) g'))
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_with_pi Asymptotics.isBigOWith_piₓ'. -/
+theorem isBigOWith_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, NormedAddCommGroup (E' i)]
{f : α → ∀ i, E' i} {C : ℝ} (hC : 0 ≤ C) :
- IsOWith C l f g' ↔ ∀ i, IsOWith C l (fun x => f x i) g' :=
+ IsBigOWith C l f g' ↔ ∀ i, IsBigOWith C l (fun x => f x i) g' :=
by
have : ∀ x, 0 ≤ C * ‖g' x‖ := fun x => mul_nonneg hC (norm_nonneg _)
simp only [is_O_with_iff, pi_norm_le_iff_of_nonneg (this _), eventually_all]
-#align asymptotics.is_O_with_pi Asymptotics.isOWith_pi
-
+#align asymptotics.is_O_with_pi Asymptotics.isBigOWith_pi
+
+/- warning: asymptotics.is_O_pi -> Asymptotics.isBigO_pi is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] {g' : α -> F'} {l : Filter.{u1} α} {ι : Type.{u3}} [_inst_14 : Fintype.{u3} ι] {E' : ι -> Type.{u4}} [_inst_15 : forall (i : ι), NormedAddCommGroup.{u4} (E' i)] {f : α -> (forall (i : ι), E' i)}, Iff (Asymptotics.IsBigO.{u1, max u3 u4, u2} α (forall (i : ι), E' i) F' (NormedAddCommGroup.toHasNorm.{max u3 u4} (forall (i : ι), E' i) (Pi.normedAddCommGroup.{u3, u4} ι (fun (i : ι) => E' i) _inst_14 (fun (i : ι) => _inst_15 i))) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f g') (forall (i : ι), Asymptotics.IsBigO.{u1, u4, u2} α (E' i) F' (NormedAddCommGroup.toHasNorm.{u4} (E' i) (_inst_15 i)) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l (fun (x : α) => f x i) g')
+but is expected to have type
+ forall {α : Type.{u2}} {F' : Type.{u1}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] {g' : α -> F'} {l : Filter.{u2} α} {ι : Type.{u4}} [_inst_14 : Fintype.{u4} ι] {E' : ι -> Type.{u3}} [_inst_15 : forall (i : ι), NormedAddCommGroup.{u3} (E' i)] {f : α -> (forall (i : ι), E' i)}, Iff (Asymptotics.IsBigO.{u2, max u4 u3, u1} α (forall (i : ι), E' i) F' (NormedAddCommGroup.toNorm.{max u4 u3} (forall (i : ι), E' i) (Pi.normedAddCommGroup.{u4, u3} ι (fun (i : ι) => E' i) _inst_14 (fun (i : ι) => _inst_15 i))) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') (forall (i : ι), Asymptotics.IsBigO.{u2, u3, u1} α (E' i) F' (NormedAddCommGroup.toNorm.{u3} (E' i) (_inst_15 i)) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => f x i) g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_O_pi Asymptotics.isBigO_piₓ'. -/
@[simp]
-theorem isO_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, NormedAddCommGroup (E' i)]
+theorem isBigO_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, NormedAddCommGroup (E' i)]
{f : α → ∀ i, E' i} : f =O[l] g' ↔ ∀ i, (fun x => f x i) =O[l] g' :=
by
simp only [is_O_iff_eventually_is_O_with, ← eventually_all]
exact eventually_congr (eventually_at_top.2 ⟨0, fun c => is_O_with_pi⟩)
-#align asymptotics.is_O_pi Asymptotics.isO_pi
-
+#align asymptotics.is_O_pi Asymptotics.isBigO_pi
+
+/- warning: asymptotics.is_o_pi -> Asymptotics.isLittleO_pi is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {F' : Type.{u2}} [_inst_5 : SeminormedAddCommGroup.{u2} F'] {g' : α -> F'} {l : Filter.{u1} α} {ι : Type.{u3}} [_inst_14 : Fintype.{u3} ι] {E' : ι -> Type.{u4}} [_inst_15 : forall (i : ι), NormedAddCommGroup.{u4} (E' i)] {f : α -> (forall (i : ι), E' i)}, Iff (Asymptotics.IsLittleO.{u1, max u3 u4, u2} α (forall (i : ι), E' i) F' (NormedAddCommGroup.toHasNorm.{max u3 u4} (forall (i : ι), E' i) (Pi.normedAddCommGroup.{u3, u4} ι (fun (i : ι) => E' i) _inst_14 (fun (i : ι) => _inst_15 i))) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l f g') (forall (i : ι), Asymptotics.IsLittleO.{u1, u4, u2} α (E' i) F' (NormedAddCommGroup.toHasNorm.{u4} (E' i) (_inst_15 i)) (SeminormedAddCommGroup.toHasNorm.{u2} F' _inst_5) l (fun (x : α) => f x i) g')
+but is expected to have type
+ forall {α : Type.{u2}} {F' : Type.{u1}} [_inst_5 : SeminormedAddCommGroup.{u1} F'] {g' : α -> F'} {l : Filter.{u2} α} {ι : Type.{u4}} [_inst_14 : Fintype.{u4} ι] {E' : ι -> Type.{u3}} [_inst_15 : forall (i : ι), NormedAddCommGroup.{u3} (E' i)] {f : α -> (forall (i : ι), E' i)}, Iff (Asymptotics.IsLittleO.{u2, max u4 u3, u1} α (forall (i : ι), E' i) F' (NormedAddCommGroup.toNorm.{max u4 u3} (forall (i : ι), E' i) (Pi.normedAddCommGroup.{u4, u3} ι (fun (i : ι) => E' i) _inst_14 (fun (i : ι) => _inst_15 i))) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l f g') (forall (i : ι), Asymptotics.IsLittleO.{u2, u3, u1} α (E' i) F' (NormedAddCommGroup.toNorm.{u3} (E' i) (_inst_15 i)) (SeminormedAddCommGroup.toNorm.{u1} F' _inst_5) l (fun (x : α) => f x i) g')
+Case conversion may be inaccurate. Consider using '#align asymptotics.is_o_pi Asymptotics.isLittleO_piₓ'. -/
@[simp]
-theorem isOCat_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, NormedAddCommGroup (E' i)]
+theorem isLittleO_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, NormedAddCommGroup (E' i)]
{f : α → ∀ i, E' i} : f =o[l] g' ↔ ∀ i, (fun x => f x i) =o[l] g' :=
by
simp (config := { contextual := true }) only [is_o, is_O_with_pi, le_of_lt]
exact ⟨fun h i c hc => h hc i, fun h c hc i => h i hc⟩
-#align asymptotics.is_o_pi Asymptotics.isOCat_pi
+#align asymptotics.is_o_pi Asymptotics.isLittleO_pi
end Asymptotics
open Asymptotics
-theorem summable_of_isO {ι E} [NormedAddCommGroup E] [CompleteSpace E] {f : ι → E} {g : ι → ℝ}
+/- warning: summable_of_is_O -> summable_of_isBigO is a dubious translation:
+lean 3 declaration is
+ forall {ι : Type.{u1}} {E : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u2} E] [_inst_2 : CompleteSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_1)))] {f : ι -> E} {g : ι -> Real}, (Summable.{0, u1} Real ι Real.addCommMonoid (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) g) -> (Asymptotics.IsBigO.{u1, u2, 0} ι E Real (NormedAddCommGroup.toHasNorm.{u2} E _inst_1) Real.hasNorm (Filter.cofinite.{u1} ι) f g) -> (Summable.{u2, u1} E ι (AddCommGroup.toAddCommMonoid.{u2} E (NormedAddCommGroup.toAddCommGroup.{u2} E _inst_1)) (UniformSpace.toTopologicalSpace.{u2} E (PseudoMetricSpace.toUniformSpace.{u2} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} E _inst_1)))) f)
+but is expected to have type
+ forall {ι : Type.{u2}} {E : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} E] [_inst_2 : CompleteSpace.{u1} E (PseudoMetricSpace.toUniformSpace.{u1} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)))] {f : ι -> E} {g : ι -> Real}, (Summable.{0, u2} Real ι Real.instAddCommMonoidReal (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) g) -> (Asymptotics.IsBigO.{u2, u1, 0} ι E Real (NormedAddCommGroup.toNorm.{u1} E _inst_1) Real.norm (Filter.cofinite.{u2} ι) f g) -> (Summable.{u1, u2} E ι (AddCommGroup.toAddCommMonoid.{u1} E (NormedAddCommGroup.toAddCommGroup.{u1} E _inst_1)) (UniformSpace.toTopologicalSpace.{u1} E (PseudoMetricSpace.toUniformSpace.{u1} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)))) f)
+Case conversion may be inaccurate. Consider using '#align summable_of_is_O summable_of_isBigOₓ'. -/
+theorem summable_of_isBigO {ι E} [NormedAddCommGroup E] [CompleteSpace E] {f : ι → E} {g : ι → ℝ}
(hg : Summable g) (h : f =O[cofinite] g) : Summable f :=
- let ⟨C, hC⟩ := h.IsOWith
+ let ⟨C, hC⟩ := h.IsBigOWith
summable_of_norm_bounded_eventually (fun x => C * ‖g x‖) (hg.abs.mul_left _) hC.bound
-#align summable_of_is_O summable_of_isO
-
-theorem summable_of_isO_nat {E} [NormedAddCommGroup E] [CompleteSpace E] {f : ℕ → E} {g : ℕ → ℝ}
+#align summable_of_is_O summable_of_isBigO
+
+/- warning: summable_of_is_O_nat -> summable_of_isBigO_nat is a dubious translation:
+lean 3 declaration is
+ forall {E : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} E] [_inst_2 : CompleteSpace.{u1} E (PseudoMetricSpace.toUniformSpace.{u1} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)))] {f : Nat -> E} {g : Nat -> Real}, (Summable.{0, 0} Real Nat Real.addCommMonoid (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) g) -> (Asymptotics.IsBigO.{0, u1, 0} Nat E Real (NormedAddCommGroup.toHasNorm.{u1} E _inst_1) Real.hasNorm (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (OrderedCancelAddCommMonoid.toPartialOrder.{0} Nat (StrictOrderedSemiring.toOrderedCancelAddCommMonoid.{0} Nat Nat.strictOrderedSemiring)))) f g) -> (Summable.{u1, 0} E Nat (AddCommGroup.toAddCommMonoid.{u1} E (NormedAddCommGroup.toAddCommGroup.{u1} E _inst_1)) (UniformSpace.toTopologicalSpace.{u1} E (PseudoMetricSpace.toUniformSpace.{u1} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)))) f)
+but is expected to have type
+ forall {E : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} E] [_inst_2 : CompleteSpace.{u1} E (PseudoMetricSpace.toUniformSpace.{u1} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)))] {f : Nat -> E} {g : Nat -> Real}, (Summable.{0, 0} Real Nat Real.instAddCommMonoidReal (UniformSpace.toTopologicalSpace.{0} Real (PseudoMetricSpace.toUniformSpace.{0} Real Real.pseudoMetricSpace)) g) -> (Asymptotics.IsBigO.{0, u1, 0} Nat E Real (NormedAddCommGroup.toNorm.{u1} E _inst_1) Real.norm (Filter.atTop.{0} Nat (PartialOrder.toPreorder.{0} Nat (StrictOrderedSemiring.toPartialOrder.{0} Nat Nat.strictOrderedSemiring))) f g) -> (Summable.{u1, 0} E Nat (AddCommGroup.toAddCommMonoid.{u1} E (NormedAddCommGroup.toAddCommGroup.{u1} E _inst_1)) (UniformSpace.toTopologicalSpace.{u1} E (PseudoMetricSpace.toUniformSpace.{u1} E (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} E (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} E _inst_1)))) f)
+Case conversion may be inaccurate. Consider using '#align summable_of_is_O_nat summable_of_isBigO_natₓ'. -/
+theorem summable_of_isBigO_nat {E} [NormedAddCommGroup E] [CompleteSpace E] {f : ℕ → E} {g : ℕ → ℝ}
(hg : Summable g) (h : f =O[atTop] g) : Summable f :=
- summable_of_isO hg <| Nat.cofinite_eq_atTop.symm ▸ h
-#align summable_of_is_O_nat summable_of_isO_nat
+ summable_of_isBigO hg <| Nat.cofinite_eq_atTop.symm ▸ h
+#align summable_of_is_O_nat summable_of_isBigO_nat
namespace LocalHomeomorph
@@ -2154,9 +4370,15 @@ variable {α : Type _} {β : Type _} [TopologicalSpace α] [TopologicalSpace β]
variable {E : Type _} [Norm E] {F : Type _} [Norm F]
+/- warning: local_homeomorph.is_O_with_congr -> LocalHomeomorph.isBigOWith_congr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {E : Type.{u3}} [_inst_3 : Norm.{u3} E] {F : Type.{u4}} [_inst_4 : Norm.{u4} F] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {b : β}, (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) b (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (forall {f : β -> E} {g : β -> F} {C : Real}, Iff (Asymptotics.IsBigOWith.{u2, u3, u4} β E F _inst_3 _inst_4 C (nhds.{u2} β _inst_2 b) f g) (Asymptotics.IsBigOWith.{u1, u3, u4} α E F _inst_3 _inst_4 C (nhds.{u1} α _inst_1 (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u1, succ u2, succ u3} α β E f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)) (Function.comp.{succ u1, succ u2, succ u4} α β F g (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e))))
+but is expected to have type
+ forall {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] {E : Type.{u2}} [_inst_3 : Norm.{u2} E] {F : Type.{u1}} [_inst_4 : Norm.{u1} F] (e : LocalHomeomorph.{u4, u3} α β _inst_1 _inst_2) {b : β}, (Membership.mem.{u3, u3} β (Set.{u3} β) (Set.instMembershipSet.{u3} β) b (LocalEquiv.target.{u4, u3} α β (LocalHomeomorph.toLocalEquiv.{u4, u3} α β _inst_1 _inst_2 e))) -> (forall {f : β -> E} {g : β -> F} {C : Real}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} β E F _inst_3 _inst_4 C (nhds.{u3} β _inst_2 b) f g) (Asymptotics.IsBigOWith.{u4, u2, u1} α E F _inst_3 _inst_4 C (nhds.{u4} α _inst_1 (LocalHomeomorph.toFun'.{u3, u4} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u4, u3} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u4, succ u3, succ u2} α β E f (LocalHomeomorph.toFun'.{u4, u3} α β _inst_1 _inst_2 e)) (Function.comp.{succ u4, succ u3, succ u1} α β F g (LocalHomeomorph.toFun'.{u4, u3} α β _inst_1 _inst_2 e))))
+Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_O_with_congr LocalHomeomorph.isBigOWith_congrₓ'. -/
/-- Transfer `is_O_with` over a `local_homeomorph`. -/
-theorem isOWith_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E} {g : β → F}
- {C : ℝ} : IsOWith C (𝓝 b) f g ↔ IsOWith C (𝓝 (e.symm b)) (f ∘ e) (g ∘ e) :=
+theorem isBigOWith_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
+ {g : β → F} {C : ℝ} : IsBigOWith C (𝓝 b) f g ↔ IsBigOWith C (𝓝 (e.symm b)) (f ∘ e) (g ∘ e) :=
⟨fun h =>
h.comp_tendsto <| by
convert e.continuous_at (e.map_target hb)
@@ -2165,23 +4387,35 @@ theorem isOWith_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target)
(h.comp_tendsto (e.continuousAt_symm hb)).congr' rfl
((e.eventually_right_inverse hb).mono fun x hx => congr_arg f hx)
((e.eventually_right_inverse hb).mono fun x hx => congr_arg g hx)⟩
-#align local_homeomorph.is_O_with_congr LocalHomeomorph.isOWith_congr
-
+#align local_homeomorph.is_O_with_congr LocalHomeomorph.isBigOWith_congr
+
+/- warning: local_homeomorph.is_O_congr -> LocalHomeomorph.isBigO_congr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {E : Type.{u3}} [_inst_3 : Norm.{u3} E] {F : Type.{u4}} [_inst_4 : Norm.{u4} F] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {b : β}, (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) b (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (forall {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsBigO.{u2, u3, u4} β E F _inst_3 _inst_4 (nhds.{u2} β _inst_2 b) f g) (Asymptotics.IsBigO.{u1, u3, u4} α E F _inst_3 _inst_4 (nhds.{u1} α _inst_1 (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u1, succ u2, succ u3} α β E f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)) (Function.comp.{succ u1, succ u2, succ u4} α β F g (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e))))
+but is expected to have type
+ forall {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] {E : Type.{u2}} [_inst_3 : Norm.{u2} E] {F : Type.{u1}} [_inst_4 : Norm.{u1} F] (e : LocalHomeomorph.{u4, u3} α β _inst_1 _inst_2) {b : β}, (Membership.mem.{u3, u3} β (Set.{u3} β) (Set.instMembershipSet.{u3} β) b (LocalEquiv.target.{u4, u3} α β (LocalHomeomorph.toLocalEquiv.{u4, u3} α β _inst_1 _inst_2 e))) -> (forall {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsBigO.{u3, u2, u1} β E F _inst_3 _inst_4 (nhds.{u3} β _inst_2 b) f g) (Asymptotics.IsBigO.{u4, u2, u1} α E F _inst_3 _inst_4 (nhds.{u4} α _inst_1 (LocalHomeomorph.toFun'.{u3, u4} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u4, u3} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u4, succ u3, succ u2} α β E f (LocalHomeomorph.toFun'.{u4, u3} α β _inst_1 _inst_2 e)) (Function.comp.{succ u4, succ u3, succ u1} α β F g (LocalHomeomorph.toFun'.{u4, u3} α β _inst_1 _inst_2 e))))
+Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_O_congr LocalHomeomorph.isBigO_congrₓ'. -/
/-- Transfer `is_O` over a `local_homeomorph`. -/
-theorem isO_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E} {g : β → F} :
+theorem isBigO_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E} {g : β → F} :
f =O[𝓝 b] g ↔ (f ∘ e) =O[𝓝 (e.symm b)] (g ∘ e) :=
by
unfold is_O
exact exists_congr fun C => e.is_O_with_congr hb
-#align local_homeomorph.is_O_congr LocalHomeomorph.isO_congr
-
+#align local_homeomorph.is_O_congr LocalHomeomorph.isBigO_congr
+
+/- warning: local_homeomorph.is_o_congr -> LocalHomeomorph.isLittleO_congr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {E : Type.{u3}} [_inst_3 : Norm.{u3} E] {F : Type.{u4}} [_inst_4 : Norm.{u4} F] (e : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) {b : β}, (Membership.Mem.{u2, u2} β (Set.{u2} β) (Set.hasMem.{u2} β) b (LocalEquiv.target.{u1, u2} α β (LocalHomeomorph.toLocalEquiv.{u1, u2} α β _inst_1 _inst_2 e))) -> (forall {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsLittleO.{u2, u3, u4} β E F _inst_3 _inst_4 (nhds.{u2} β _inst_2 b) f g) (Asymptotics.IsLittleO.{u1, u3, u4} α E F _inst_3 _inst_4 (nhds.{u1} α _inst_1 (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : LocalHomeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (LocalHomeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (LocalHomeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u1, succ u2, succ u3} α β E f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)) (Function.comp.{succ u1, succ u2, succ u4} α β F g (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : LocalHomeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (LocalHomeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e))))
+but is expected to have type
+ forall {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] {E : Type.{u2}} [_inst_3 : Norm.{u2} E] {F : Type.{u1}} [_inst_4 : Norm.{u1} F] (e : LocalHomeomorph.{u4, u3} α β _inst_1 _inst_2) {b : β}, (Membership.mem.{u3, u3} β (Set.{u3} β) (Set.instMembershipSet.{u3} β) b (LocalEquiv.target.{u4, u3} α β (LocalHomeomorph.toLocalEquiv.{u4, u3} α β _inst_1 _inst_2 e))) -> (forall {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} β E F _inst_3 _inst_4 (nhds.{u3} β _inst_2 b) f g) (Asymptotics.IsLittleO.{u4, u2, u1} α E F _inst_3 _inst_4 (nhds.{u4} α _inst_1 (LocalHomeomorph.toFun'.{u3, u4} β α _inst_2 _inst_1 (LocalHomeomorph.symm.{u4, u3} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u4, succ u3, succ u2} α β E f (LocalHomeomorph.toFun'.{u4, u3} α β _inst_1 _inst_2 e)) (Function.comp.{succ u4, succ u3, succ u1} α β F g (LocalHomeomorph.toFun'.{u4, u3} α β _inst_1 _inst_2 e))))
+Case conversion may be inaccurate. Consider using '#align local_homeomorph.is_o_congr LocalHomeomorph.isLittleO_congrₓ'. -/
/-- Transfer `is_o` over a `local_homeomorph`. -/
-theorem isOCat_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E} {g : β → F} :
- f =o[𝓝 b] g ↔ (f ∘ e) =o[𝓝 (e.symm b)] (g ∘ e) :=
+theorem isLittleO_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
+ {g : β → F} : f =o[𝓝 b] g ↔ (f ∘ e) =o[𝓝 (e.symm b)] (g ∘ e) :=
by
unfold is_o
exact forall₂_congr fun c hc => e.is_O_with_congr hb
-#align local_homeomorph.is_o_congr LocalHomeomorph.isOCat_congr
+#align local_homeomorph.is_o_congr LocalHomeomorph.isLittleO_congr
end LocalHomeomorph
@@ -2193,27 +4427,45 @@ variable {E : Type _} [Norm E] {F : Type _} [Norm F]
open Asymptotics
+/- warning: homeomorph.is_O_with_congr -> Homeomorph.isBigOWith_congr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {E : Type.{u3}} [_inst_3 : Norm.{u3} E] {F : Type.{u4}} [_inst_4 : Norm.{u4} F] (e : Homeomorph.{u1, u2} α β _inst_1 _inst_2) {b : β} {f : β -> E} {g : β -> F} {C : Real}, Iff (Asymptotics.IsBigOWith.{u2, u3, u4} β E F _inst_3 _inst_4 C (nhds.{u2} β _inst_2 b) f g) (Asymptotics.IsBigOWith.{u1, u3, u4} α E F _inst_3 _inst_4 C (nhds.{u1} α _inst_1 (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (Homeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : Homeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (Homeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (Homeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u1, succ u2, succ u3} α β E f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Homeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : Homeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (Homeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)) (Function.comp.{succ u1, succ u2, succ u4} α β F g (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Homeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : Homeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (Homeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)))
+but is expected to have type
+ forall {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] {E : Type.{u2}} [_inst_3 : Norm.{u2} E] {F : Type.{u1}} [_inst_4 : Norm.{u1} F] (e : Homeomorph.{u4, u3} α β _inst_1 _inst_2) {b : β} {f : β -> E} {g : β -> F} {C : Real}, Iff (Asymptotics.IsBigOWith.{u3, u2, u1} β E F _inst_3 _inst_4 C (nhds.{u3} β _inst_2 b) f g) (Asymptotics.IsBigOWith.{u4, u2, u1} α E F _inst_3 _inst_4 C (nhds.{u4} α _inst_1 (FunLike.coe.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β (fun (_x : β) => α) (EmbeddingLike.toFunLike.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β α (EquivLike.toEmbeddingLike.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β α (Homeomorph.instEquivLikeHomeomorph.{u3, u4} β α _inst_2 _inst_1))) (Homeomorph.symm.{u4, u3} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u4, succ u3, succ u2} α β E f (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α (fun (_x : α) => β) (EmbeddingLike.toFunLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (EquivLike.toEmbeddingLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (Homeomorph.instEquivLikeHomeomorph.{u4, u3} α β _inst_1 _inst_2))) e)) (Function.comp.{succ u4, succ u3, succ u1} α β F g (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α (fun (_x : α) => β) (EmbeddingLike.toFunLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (EquivLike.toEmbeddingLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (Homeomorph.instEquivLikeHomeomorph.{u4, u3} α β _inst_1 _inst_2))) e)))
+Case conversion may be inaccurate. Consider using '#align homeomorph.is_O_with_congr Homeomorph.isBigOWith_congrₓ'. -/
/-- Transfer `is_O_with` over a `homeomorph`. -/
-theorem isOWith_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} {C : ℝ} :
- IsOWith C (𝓝 b) f g ↔ IsOWith C (𝓝 (e.symm b)) (f ∘ e) (g ∘ e) :=
- e.toLocalHomeomorph.isOWith_congr trivial
-#align homeomorph.is_O_with_congr Homeomorph.isOWith_congr
-
+theorem isBigOWith_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} {C : ℝ} :
+ IsBigOWith C (𝓝 b) f g ↔ IsBigOWith C (𝓝 (e.symm b)) (f ∘ e) (g ∘ e) :=
+ e.toLocalHomeomorph.isBigOWith_congr trivial
+#align homeomorph.is_O_with_congr Homeomorph.isBigOWith_congr
+
+/- warning: homeomorph.is_O_congr -> Homeomorph.isBigO_congr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {E : Type.{u3}} [_inst_3 : Norm.{u3} E] {F : Type.{u4}} [_inst_4 : Norm.{u4} F] (e : Homeomorph.{u1, u2} α β _inst_1 _inst_2) {b : β} {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsBigO.{u2, u3, u4} β E F _inst_3 _inst_4 (nhds.{u2} β _inst_2 b) f g) (Asymptotics.IsBigO.{u1, u3, u4} α E F _inst_3 _inst_4 (nhds.{u1} α _inst_1 (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (Homeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : Homeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (Homeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (Homeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u1, succ u2, succ u3} α β E f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Homeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : Homeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (Homeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)) (Function.comp.{succ u1, succ u2, succ u4} α β F g (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Homeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : Homeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (Homeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)))
+but is expected to have type
+ forall {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] {E : Type.{u2}} [_inst_3 : Norm.{u2} E] {F : Type.{u1}} [_inst_4 : Norm.{u1} F] (e : Homeomorph.{u4, u3} α β _inst_1 _inst_2) {b : β} {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsBigO.{u3, u2, u1} β E F _inst_3 _inst_4 (nhds.{u3} β _inst_2 b) f g) (Asymptotics.IsBigO.{u4, u2, u1} α E F _inst_3 _inst_4 (nhds.{u4} α _inst_1 (FunLike.coe.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β (fun (_x : β) => α) (EmbeddingLike.toFunLike.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β α (EquivLike.toEmbeddingLike.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β α (Homeomorph.instEquivLikeHomeomorph.{u3, u4} β α _inst_2 _inst_1))) (Homeomorph.symm.{u4, u3} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u4, succ u3, succ u2} α β E f (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α (fun (_x : α) => β) (EmbeddingLike.toFunLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (EquivLike.toEmbeddingLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (Homeomorph.instEquivLikeHomeomorph.{u4, u3} α β _inst_1 _inst_2))) e)) (Function.comp.{succ u4, succ u3, succ u1} α β F g (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α (fun (_x : α) => β) (EmbeddingLike.toFunLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (EquivLike.toEmbeddingLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (Homeomorph.instEquivLikeHomeomorph.{u4, u3} α β _inst_1 _inst_2))) e)))
+Case conversion may be inaccurate. Consider using '#align homeomorph.is_O_congr Homeomorph.isBigO_congrₓ'. -/
/-- Transfer `is_O` over a `homeomorph`. -/
-theorem isO_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} :
+theorem isBigO_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} :
f =O[𝓝 b] g ↔ (f ∘ e) =O[𝓝 (e.symm b)] (g ∘ e) :=
by
unfold is_O
exact exists_congr fun C => e.is_O_with_congr
-#align homeomorph.is_O_congr Homeomorph.isO_congr
-
+#align homeomorph.is_O_congr Homeomorph.isBigO_congr
+
+/- warning: homeomorph.is_o_congr -> Homeomorph.isLittleO_congr is a dubious translation:
+lean 3 declaration is
+ forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {E : Type.{u3}} [_inst_3 : Norm.{u3} E] {F : Type.{u4}} [_inst_4 : Norm.{u4} F] (e : Homeomorph.{u1, u2} α β _inst_1 _inst_2) {b : β} {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsLittleO.{u2, u3, u4} β E F _inst_3 _inst_4 (nhds.{u2} β _inst_2 b) f g) (Asymptotics.IsLittleO.{u1, u3, u4} α E F _inst_3 _inst_4 (nhds.{u1} α _inst_1 (coeFn.{max (succ u2) (succ u1), max (succ u2) (succ u1)} (Homeomorph.{u2, u1} β α _inst_2 _inst_1) (fun (_x : Homeomorph.{u2, u1} β α _inst_2 _inst_1) => β -> α) (Homeomorph.hasCoeToFun.{u2, u1} β α _inst_2 _inst_1) (Homeomorph.symm.{u1, u2} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u1, succ u2, succ u3} α β E f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Homeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : Homeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (Homeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)) (Function.comp.{succ u1, succ u2, succ u4} α β F g (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (Homeomorph.{u1, u2} α β _inst_1 _inst_2) (fun (_x : Homeomorph.{u1, u2} α β _inst_1 _inst_2) => α -> β) (Homeomorph.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) e)))
+but is expected to have type
+ forall {α : Type.{u4}} {β : Type.{u3}} [_inst_1 : TopologicalSpace.{u4} α] [_inst_2 : TopologicalSpace.{u3} β] {E : Type.{u2}} [_inst_3 : Norm.{u2} E] {F : Type.{u1}} [_inst_4 : Norm.{u1} F] (e : Homeomorph.{u4, u3} α β _inst_1 _inst_2) {b : β} {f : β -> E} {g : β -> F}, Iff (Asymptotics.IsLittleO.{u3, u2, u1} β E F _inst_3 _inst_4 (nhds.{u3} β _inst_2 b) f g) (Asymptotics.IsLittleO.{u4, u2, u1} α E F _inst_3 _inst_4 (nhds.{u4} α _inst_1 (FunLike.coe.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β (fun (_x : β) => α) (EmbeddingLike.toFunLike.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β α (EquivLike.toEmbeddingLike.{max (succ u3) (succ u4), succ u3, succ u4} (Homeomorph.{u3, u4} β α _inst_2 _inst_1) β α (Homeomorph.instEquivLikeHomeomorph.{u3, u4} β α _inst_2 _inst_1))) (Homeomorph.symm.{u4, u3} α β _inst_1 _inst_2 e) b)) (Function.comp.{succ u4, succ u3, succ u2} α β E f (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α (fun (_x : α) => β) (EmbeddingLike.toFunLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (EquivLike.toEmbeddingLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (Homeomorph.instEquivLikeHomeomorph.{u4, u3} α β _inst_1 _inst_2))) e)) (Function.comp.{succ u4, succ u3, succ u1} α β F g (FunLike.coe.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α (fun (_x : α) => β) (EmbeddingLike.toFunLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (EquivLike.toEmbeddingLike.{max (succ u4) (succ u3), succ u4, succ u3} (Homeomorph.{u4, u3} α β _inst_1 _inst_2) α β (Homeomorph.instEquivLikeHomeomorph.{u4, u3} α β _inst_1 _inst_2))) e)))
+Case conversion may be inaccurate. Consider using '#align homeomorph.is_o_congr Homeomorph.isLittleO_congrₓ'. -/
/-- Transfer `is_o` over a `homeomorph`. -/
-theorem isOCat_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} :
+theorem isLittleO_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} :
f =o[𝓝 b] g ↔ (f ∘ e) =o[𝓝 (e.symm b)] (g ∘ e) :=
by
unfold is_o
exact forall₂_congr fun c hc => e.is_O_with_congr
-#align homeomorph.is_o_congr Homeomorph.isOCat_congr
+#align homeomorph.is_o_congr Homeomorph.isLittleO_congr
end Homeomorph
mathlib commit https://github.com/leanprover-community/mathlib/commit/2af0836443b4cfb5feda0df0051acdb398304931
@@ -63,8 +63,8 @@ variable {α : Type _} {β : Type _} {E : Type _} {F : Type _} {G : Type _} {E'
variable [Norm E] [Norm F] [Norm G]
variable [SeminormedAddCommGroup E'] [SeminormedAddCommGroup F'] [SeminormedAddCommGroup G']
- [NormedAddCommGroup E''] [NormedAddCommGroup F''] [NormedAddCommGroup G''] [SemiNormedRing R]
- [SemiNormedRing R']
+ [NormedAddCommGroup E''] [NormedAddCommGroup F''] [NormedAddCommGroup G''] [SeminormedRing R]
+ [SeminormedRing R']
variable [NormedField 𝕜] [NormedField 𝕜']
mathlib commit https://github.com/leanprover-community/mathlib/commit/3180fab693e2cee3bff62675571264cb8778b212
@@ -247,7 +247,7 @@ theorem isOCat_iff_nat_mul_le_aux (h₀ : (∀ x, 0 ≤ ‖f x‖) ∨ ∀ x, 0
constructor
· rintro H (_ | n)
· refine' (H.def one_pos).mono fun x h₀' => _
- rw [Nat.cast_zero, zero_mul]
+ rw [Nat.cast_zero, MulZeroClass.zero_mul]
refine' h₀.elim (fun hf => (hf x).trans _) fun hg => hg x
rwa [one_mul] at h₀'
· have : (0 : ℝ) < n.succ := Nat.cast_pos.2 n.succ_pos
@@ -1186,8 +1186,8 @@ variable {g g' l}
@[simp]
theorem isOWith_zero_right_iff : (IsOWith c l f'' fun x => (0 : F')) ↔ f'' =ᶠ[l] 0 := by
- simp only [is_O_with, exists_prop, true_and_iff, norm_zero, mul_zero, norm_le_zero_iff,
- eventually_eq, Pi.zero_apply]
+ simp only [is_O_with, exists_prop, true_and_iff, norm_zero, MulZeroClass.mul_zero,
+ norm_le_zero_iff, eventually_eq, Pi.zero_apply]
#align asymptotics.is_O_with_zero_right_iff Asymptotics.isOWith_zero_right_iff
@[simp]
@@ -1253,7 +1253,8 @@ theorem isOCat_top : f'' =o[⊤] g'' ↔ ∀ x, f'' x = 0 :=
simp only [is_o_iff, eventually_top]
refine' fun h x => norm_le_zero_iff.1 _
have : tendsto (fun c : ℝ => c * ‖g'' x‖) (𝓝[>] 0) (𝓝 0) :=
- ((continuous_id.mul continuous_const).tendsto' _ _ (zero_mul _)).mono_left inf_le_left
+ ((continuous_id.mul continuous_const).tendsto' _ _ (MulZeroClass.zero_mul _)).mono_left
+ inf_le_left
exact
le_of_tendsto_of_tendsto tendsto_const_nhds this
(eventually_nhdsWithin_iff.2 <| eventually_of_forall fun c hc => h hc x)
@@ -1639,7 +1640,7 @@ theorem IsOWith.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : IsOWith c l f
by
refine' is_O_with.of_bound (h.bound.mp (h₀.mono fun x h₀ hle => _))
cases' eq_or_ne (f x) 0 with hx hx
- · simp only [hx, h₀ hx, inv_zero, norm_zero, mul_zero]
+ · simp only [hx, h₀ hx, inv_zero, norm_zero, MulZeroClass.mul_zero]
· have hc : 0 < c := pos_of_mul_pos_left ((norm_pos_iff.2 hx).trans_le hle) (norm_nonneg _)
replace hle := inv_le_inv_of_le (norm_pos_iff.2 hx) hle
simpa only [norm_inv, mul_inv, ← div_eq_inv_mul, div_le_iff hc] using hle
mathlib commit https://github.com/leanprover-community/mathlib/commit/21e3562c5e12d846c7def5eff8cdbc520d7d4936
@@ -60,7 +60,7 @@ variable {α : Type _} {β : Type _} {E : Type _} {F : Type _} {G : Type _} {E'
{F' : Type _} {G' : Type _} {E'' : Type _} {F'' : Type _} {G'' : Type _} {R : Type _}
{R' : Type _} {𝕜 : Type _} {𝕜' : Type _}
-variable [HasNorm E] [HasNorm F] [HasNorm G]
+variable [Norm E] [Norm F] [Norm G]
variable [SeminormedAddCommGroup E'] [SeminormedAddCommGroup F'] [SeminormedAddCommGroup G']
[NormedAddCommGroup E''] [NormedAddCommGroup F''] [NormedAddCommGroup G''] [SemiNormedRing R]
@@ -2151,7 +2151,7 @@ namespace LocalHomeomorph
variable {α : Type _} {β : Type _} [TopologicalSpace α] [TopologicalSpace β]
-variable {E : Type _} [HasNorm E] {F : Type _} [HasNorm F]
+variable {E : Type _} [Norm E] {F : Type _} [Norm F]
/-- Transfer `is_O_with` over a `local_homeomorph`. -/
theorem isOWith_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E} {g : β → F}
@@ -2188,7 +2188,7 @@ namespace Homeomorph
variable {α : Type _} {β : Type _} [TopologicalSpace α] [TopologicalSpace β]
-variable {E : Type _} [HasNorm E] {F : Type _} [HasNorm F]
+variable {E : Type _} [Norm E] {F : Type _} [Norm F]
open Asymptotics
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -446,7 +446,7 @@ theorem IsOWith.trans (hfg : IsOWith c l f g) (hgk : IsOWith c' l g k) (hc : 0
filter_upwards [hfg, hgk]with x hx hx'
calc
‖f x‖ ≤ c * ‖g x‖ := hx
- _ ≤ c * (c' * ‖k x‖) := mul_le_mul_of_nonneg_left hx' hc
+ _ ≤ c * (c' * ‖k x‖) := (mul_le_mul_of_nonneg_left hx' hc)
_ = c * c' * ‖k x‖ := (mul_assoc _ _ _).symm
#align asymptotics.is_O_with.trans Asymptotics.IsOWith.trans
@@ -1599,7 +1599,7 @@ theorem IsOWith.of_pow {n : ℕ} {f : α → 𝕜} {g : α → R} (h : IsOWith c
‖f x‖ ^ n = ‖f x ^ n‖ := (norm_pow _ _).symm
_ ≤ c' ^ n * ‖g x ^ n‖ := hx
_ ≤ c' ^ n * ‖g x‖ ^ n :=
- mul_le_mul_of_nonneg_left (norm_pow_le' _ hn.bot_lt) (pow_nonneg hc' _)
+ (mul_le_mul_of_nonneg_left (norm_pow_le' _ hn.bot_lt) (pow_nonneg hc' _))
_ = (c' * ‖g x‖) ^ n := (mul_pow _ _ _).symm
#align asymptotics.is_O_with.of_pow Asymptotics.IsOWith.of_pow
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -2136,13 +2136,15 @@ theorem IsBigOWith.right_le_sub_of_lt_one {f₁ f₂ : α → E'} (h : IsBigOWit
· exact le_trans (sub_le_sub_left hx _) (norm_sub_norm_le _ _)
· exact sub_pos.2 hc
#align asymptotics.is_O_with.right_le_sub_of_lt_1 Asymptotics.IsBigOWith.right_le_sub_of_lt_one
-@[deprecated] alias IsBigOWith.right_le_sub_of_lt_1 := IsBigOWith.right_le_sub_of_lt_one
theorem IsBigOWith.right_le_add_of_lt_one {f₁ f₂ : α → E'} (h : IsBigOWith c l f₁ f₂) (hc : c < 1) :
IsBigOWith (1 / (1 - c)) l f₂ fun x => f₁ x + f₂ x :=
(h.neg_right.right_le_sub_of_lt_one hc).neg_right.of_neg_left.congr rfl (fun x ↦ rfl) fun x ↦ by
rw [neg_sub, sub_neg_eq_add]
#align asymptotics.is_O_with.right_le_add_of_lt_1 Asymptotics.IsBigOWith.right_le_add_of_lt_one
+
+-- 2024-01-31
+@[deprecated] alias IsBigOWith.right_le_sub_of_lt_1 := IsBigOWith.right_le_sub_of_lt_one
@[deprecated] alias IsBigOWith.right_le_add_of_lt_1 := IsBigOWith.right_le_add_of_lt_one
theorem IsLittleO.right_isBigO_sub {f₁ f₂ : α → E'} (h : f₁ =o[l] f₂) :
Show that the constant term of the Laurent series of Riemann zeta at s = 1 is the Euler-Mascheroni γ
.
@@ -1394,6 +1394,18 @@ theorem IsBigO.trans_tendsto_nhds (hfg : f =O[l] g') {y : F'} (hg : Tendsto g' l
hfg.trans <| hg.isBigO_one F
#align asymptotics.is_O.trans_tendsto_nhds Asymptotics.IsBigO.trans_tendsto_nhds
+/-- The condition `f = O[𝓝[≠] a] 1` is equivalent to `f = O[𝓝 a] 1`. -/
+lemma isBigO_one_nhds_ne_iff [TopologicalSpace α] {a : α} :
+ f =O[𝓝[≠] a] (fun _ ↦ 1 : α → F) ↔ f =O[𝓝 a] (fun _ ↦ 1 : α → F) := by
+ refine ⟨fun h ↦ ?_, fun h ↦ h.mono nhdsWithin_le_nhds⟩
+ simp only [isBigO_one_iff, IsBoundedUnder, IsBounded, eventually_map] at h ⊢
+ obtain ⟨c, hc⟩ := h
+ use max c ‖f a‖
+ filter_upwards [eventually_nhdsWithin_iff.mp hc] with b hb
+ rcases eq_or_ne b a with rfl | hb'
+ · apply le_max_right
+ · exact (hb hb').trans (le_max_left ..)
+
end
theorem isLittleO_const_iff {c : F''} (hc : c ≠ 0) :
nat_cast
/int_cast
/rat_cast
to natCast
/intCast
/ratCast
(#11486)
Now that I am defining NNRat.cast
, I want a definitive answer to this naming issue. Plenty of lemmas in mathlib already use natCast
/intCast
/ratCast
over nat_cast
/int_cast
/rat_cast
, and this matches with the general expectation that underscore-separated name parts correspond to a single declaration.
@@ -2205,15 +2205,15 @@ theorem isLittleO_pi {ι : Type*} [Fintype ι] {E' : ι → Type*} [∀ i, Norme
exact ⟨fun h i c hc => h hc i, fun h c hc i => h i hc⟩
#align asymptotics.is_o_pi Asymptotics.isLittleO_pi
-theorem IsBigO.nat_cast_atTop {R : Type*} [StrictOrderedSemiring R] [Archimedean R]
+theorem IsBigO.natCast_atTop {R : Type*} [StrictOrderedSemiring R] [Archimedean R]
{f : R → E} {g : R → F} (h : f =O[atTop] g) :
(fun (n : ℕ) => f n) =O[atTop] (fun n => g n) :=
- IsBigO.comp_tendsto h tendsto_nat_cast_atTop_atTop
+ IsBigO.comp_tendsto h tendsto_natCast_atTop_atTop
-theorem IsLittleO.nat_cast_atTop {R : Type*} [StrictOrderedSemiring R] [Archimedean R]
+theorem IsLittleO.natCast_atTop {R : Type*} [StrictOrderedSemiring R] [Archimedean R]
{f : R → E} {g : R → F} (h : f =o[atTop] g) :
(fun (n : ℕ) => f n) =o[atTop] (fun n => g n) :=
- IsLittleO.comp_tendsto h tendsto_nat_cast_atTop_atTop
+ IsLittleO.comp_tendsto h tendsto_natCast_atTop_atTop
theorem isBigO_atTop_iff_eventually_exists {α : Type*} [SemilatticeSup α] [Nonempty α]
{f : α → E} {g : α → F} : f =O[atTop] g ↔ ∀ᶠ n₀ in atTop, ∃ c, ∀ n ≥ n₀, ‖f n‖ ≤ c * ‖g n‖ := by
@@ -191,18 +191,16 @@ alias ⟨IsLittleO.bound, IsLittleO.of_bound⟩ := isLittleO_iff
#align asymptotics.is_o.bound Asymptotics.IsLittleO.bound
#align asymptotics.is_o.of_bound Asymptotics.IsLittleO.of_bound
--- Adaptation note: 2024-03-15: this was called `def`.
--- Should lean be changed to allow that as a name again?
-theorem IsLittleO.definition (h : f =o[l] g) (hc : 0 < c) : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
+theorem IsLittleO.def (h : f =o[l] g) (hc : 0 < c) : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
isLittleO_iff.1 h hc
-#align asymptotics.is_o.def Asymptotics.IsLittleO.definition
+#align asymptotics.is_o.def Asymptotics.IsLittleO.def
theorem IsLittleO.def' (h : f =o[l] g) (hc : 0 < c) : IsBigOWith c l f g :=
isBigOWith_iff.2 <| isLittleO_iff.1 h hc
#align asymptotics.is_o.def' Asymptotics.IsLittleO.def'
theorem IsLittleO.eventuallyLE (h : f =o[l] g) : ∀ᶠ x in l, ‖f x‖ ≤ ‖g x‖ := by
- simpa using h.definition zero_lt_one
+ simpa using h.def zero_lt_one
end Defs
@@ -280,7 +278,7 @@ theorem isLittleO_iff_nat_mul_le_aux (h₀ : (∀ x, 0 ≤ ‖f x‖) ∨ ∀ x,
f =o[l] g ↔ ∀ n : ℕ, ∀ᶠ x in l, ↑n * ‖f x‖ ≤ ‖g x‖ := by
constructor
· rintro H (_ | n)
- · refine' (H.definition one_pos).mono fun x h₀' => _
+ · refine' (H.def one_pos).mono fun x h₀' => _
rw [Nat.cast_zero, zero_mul]
refine' h₀.elim (fun hf => (hf x).trans _) fun hg => hg x
rwa [one_mul] at h₀'
We change the following field in the definition of an additive commutative monoid:
nsmul_succ : ∀ (n : ℕ) (x : G),
- AddMonoid.nsmul (n + 1) x = x + AddMonoid.nsmul n x
+ AddMonoid.nsmul (n + 1) x = AddMonoid.nsmul n x + x
where the latter is more natural
We adjust the definitions of ^
in monoids, groups, etc.
Originally there was a warning comment about why this natural order was preferred
use
x * npowRec n x
and notnpowRec n x * x
in the definition to make sure that definitional unfolding ofnpowRec
is blocked, to avoid deep recursion issues.
but it seems to no longer apply.
Remarks on the PR :
pow_succ
and pow_succ'
have switched their meanings.Ideal.IsPrime.mul_mem_pow
which is defined in [Mathlib/RingTheory/DedekindDomain/Ideal.lean]. Changing the order of operation forced me to add the symmetric lemma Ideal.IsPrime.mem_pow_mul
.@@ -1648,7 +1648,7 @@ theorem IsBigOWith.pow' {f : α → R} {g : α → 𝕜} (h : IsBigOWith c l f g
l (fun x => f x ^ n) fun x => g x ^ n
| 0 => by simpa using isBigOWith_const_const (1 : R) (one_ne_zero' 𝕜) l
| 1 => by simpa
- | n + 2 => by simpa [pow_succ] using h.mul (IsBigOWith.pow' h (n + 1))
+ | n + 2 => by simpa [pow_succ] using (IsBigOWith.pow' h (n + 1)).mul h
#align asymptotics.is_O_with.pow' Asymptotics.IsBigOWith.pow'
theorem IsBigOWith.pow [NormOneClass R] {f : α → R} {g : α → 𝕜} (h : IsBigOWith c l f g) :
@@ -1687,7 +1687,7 @@ theorem IsLittleO.pow {f : α → R} {g : α → 𝕜} (h : f =o[l] g) {n : ℕ}
obtain ⟨n, rfl⟩ := Nat.exists_eq_succ_of_ne_zero hn.ne'; clear hn
induction' n with n ihn
· simpa only [Nat.zero_eq, ← Nat.one_eq_succ_zero, pow_one]
- · convert h.mul ihn <;> simp [pow_succ]
+ · convert ihn.mul h <;> simp [pow_succ]
#align asymptotics.is_o.pow Asymptotics.IsLittleO.pow
theorem IsLittleO.of_pow {f : α → 𝕜} {g : α → R} {n : ℕ} (h : (f ^ n) =o[l] (g ^ n)) (hn : n ≠ 0) :
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 | |
@@ -516,7 +516,7 @@ theorem IsLittleO.trans_isBigOWith (hfg : f =o[l] g) (hgk : IsBigOWith c l g k)
simp only [IsLittleO_def] at *
intro c' c'pos
have : 0 < c' / c := div_pos c'pos hc
- exact ((hfg this).trans hgk this.le).congr_const (div_mul_cancel _ hc.ne')
+ exact ((hfg this).trans hgk this.le).congr_const (div_mul_cancel₀ _ hc.ne')
#align asymptotics.is_o.trans_is_O_with Asymptotics.IsLittleO.trans_isBigOWith
@[trans]
@@ -535,7 +535,7 @@ theorem IsBigOWith.trans_isLittleO (hfg : IsBigOWith c l f g) (hgk : g =o[l] k)
simp only [IsLittleO_def] at *
intro c' c'pos
have : 0 < c' / c := div_pos c'pos hc
- exact (hfg.trans (hgk this) hc.le).congr_const (mul_div_cancel' _ hc.ne')
+ exact (hfg.trans (hgk this) hc.le).congr_const (mul_div_cancel₀ _ hc.ne')
#align asymptotics.is_O_with.trans_is_o Asymptotics.IsBigOWith.trans_isLittleO
@[trans]
@@ -1129,7 +1129,7 @@ theorem IsLittleO.add_isBigO (h₁ : f₁ =o[l] g) (h₂ : f₂ =O[l] g) : (fun
theorem IsBigOWith.add_isLittleO (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : f₂ =o[l] g) (hc : c₁ < c₂) :
IsBigOWith c₂ l (fun x => f₁ x + f₂ x) g :=
- (h₁.add (h₂.forall_isBigOWith (sub_pos.2 hc))).congr_const (add_sub_cancel'_right _ _)
+ (h₁.add (h₂.forall_isBigOWith (sub_pos.2 hc))).congr_const (add_sub_cancel _ _)
#align asymptotics.is_O_with.add_is_o Asymptotics.IsBigOWith.add_isLittleO
theorem IsLittleO.add_isBigOWith (h₁ : f₁ =o[l] g) (h₂ : IsBigOWith c₁ l f₂ g) (hc : c₁ < c₂) :
@@ -1279,7 +1279,7 @@ theorem isBigOWith_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter
simp only [IsBigOWith_def]
apply univ_mem'
intro x
- rw [mem_setOf, div_mul_cancel _ (norm_ne_zero_iff.mpr hc')]
+ rw [mem_setOf, div_mul_cancel₀ _ (norm_ne_zero_iff.mpr hc')]
#align asymptotics.is_O_with_const_const Asymptotics.isBigOWith_const_const
theorem isBigO_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter α) :
@@ -1627,7 +1627,7 @@ theorem IsBigO.mul_isLittleO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h
simp only [IsLittleO_def] at *
intro c cpos
rcases h₁.exists_pos with ⟨c', c'pos, hc'⟩
- exact (hc'.mul (h₂ (div_pos cpos c'pos))).congr_const (mul_div_cancel' _ (ne_of_gt c'pos))
+ exact (hc'.mul (h₂ (div_pos cpos c'pos))).congr_const (mul_div_cancel₀ _ (ne_of_gt c'pos))
#align asymptotics.is_O.mul_is_o Asymptotics.IsBigO.mul_isLittleO
theorem IsLittleO.mul_isBigO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =O[l] g₂) :
@@ -1635,7 +1635,7 @@ theorem IsLittleO.mul_isBigO {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h
simp only [IsLittleO_def] at *
intro c cpos
rcases h₂.exists_pos with ⟨c', c'pos, hc'⟩
- exact ((h₁ (div_pos cpos c'pos)).mul hc').congr_const (div_mul_cancel _ (ne_of_gt c'pos))
+ exact ((h₁ (div_pos cpos c'pos)).mul hc').congr_const (div_mul_cancel₀ _ (ne_of_gt c'pos))
#align asymptotics.is_o.mul_is_O Asymptotics.IsLittleO.mul_isBigO
theorem IsLittleO.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =o[l] g₂) :
@@ -1807,7 +1807,7 @@ theorem IsBigO.smul_isLittleO (h₁ : k₁ =O[l] k₂) (h₂ : f' =o[l] g') :
simp only [IsLittleO_def] at *
intro c cpos
rcases h₁.exists_pos with ⟨c', c'pos, hc'⟩
- exact (hc'.smul (h₂ (div_pos cpos c'pos))).congr_const (mul_div_cancel' _ (ne_of_gt c'pos))
+ exact (hc'.smul (h₂ (div_pos cpos c'pos))).congr_const (mul_div_cancel₀ _ (ne_of_gt c'pos))
#align asymptotics.is_O.smul_is_o Asymptotics.IsBigO.smul_isLittleO
theorem IsLittleO.smul_isBigO (h₁ : k₁ =o[l] k₂) (h₂ : f' =O[l] g') :
@@ -1815,7 +1815,7 @@ theorem IsLittleO.smul_isBigO (h₁ : k₁ =o[l] k₂) (h₂ : f' =O[l] g') :
simp only [IsLittleO_def] at *
intro c cpos
rcases h₂.exists_pos with ⟨c', c'pos, hc'⟩
- exact ((h₁ (div_pos cpos c'pos)).smul hc').congr_const (div_mul_cancel _ (ne_of_gt c'pos))
+ exact ((h₁ (div_pos cpos c'pos)).smul hc').congr_const (div_mul_cancel₀ _ (ne_of_gt c'pos))
#align asymptotics.is_o.smul_is_O Asymptotics.IsLittleO.smul_isBigO
theorem IsLittleO.smul (h₁ : k₁ =o[l] k₂) (h₂ : f' =o[l] g') :
@@ -191,16 +191,18 @@ alias ⟨IsLittleO.bound, IsLittleO.of_bound⟩ := isLittleO_iff
#align asymptotics.is_o.bound Asymptotics.IsLittleO.bound
#align asymptotics.is_o.of_bound Asymptotics.IsLittleO.of_bound
-theorem IsLittleO.def (h : f =o[l] g) (hc : 0 < c) : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
+-- Adaptation note: 2024-03-15: this was called `def`.
+-- Should lean be changed to allow that as a name again?
+theorem IsLittleO.definition (h : f =o[l] g) (hc : 0 < c) : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ :=
isLittleO_iff.1 h hc
-#align asymptotics.is_o.def Asymptotics.IsLittleO.def
+#align asymptotics.is_o.def Asymptotics.IsLittleO.definition
theorem IsLittleO.def' (h : f =o[l] g) (hc : 0 < c) : IsBigOWith c l f g :=
isBigOWith_iff.2 <| isLittleO_iff.1 h hc
#align asymptotics.is_o.def' Asymptotics.IsLittleO.def'
theorem IsLittleO.eventuallyLE (h : f =o[l] g) : ∀ᶠ x in l, ‖f x‖ ≤ ‖g x‖ := by
- simpa using h.def zero_lt_one
+ simpa using h.definition zero_lt_one
end Defs
@@ -278,7 +280,7 @@ theorem isLittleO_iff_nat_mul_le_aux (h₀ : (∀ x, 0 ≤ ‖f x‖) ∨ ∀ x,
f =o[l] g ↔ ∀ n : ℕ, ∀ᶠ x in l, ↑n * ‖f x‖ ≤ ‖g x‖ := by
constructor
· rintro H (_ | n)
- · refine' (H.def one_pos).mono fun x h₀' => _
+ · refine' (H.definition one_pos).mono fun x h₀' => _
rw [Nat.cast_zero, zero_mul]
refine' h₀.elim (fun hf => (hf x).trans _) fun hg => hg x
rwa [one_mul] at h₀'
@@ -1984,7 +1984,7 @@ theorem isBigOWith_of_eq_mul {u v : α → R} (φ : α → R) (hφ : ∀ᶠ x in
#align asymptotics.is_O_with_of_eq_mul Asymptotics.isBigOWith_of_eq_mul
theorem isBigOWith_iff_exists_eq_mul (hc : 0 ≤ c) :
- IsBigOWith c l u v ↔ ∃ (φ : α → 𝕜) (_hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v := by
+ IsBigOWith c l u v ↔ ∃ φ : α → 𝕜, (∀ᶠ x in l, ‖φ x‖ ≤ c) ∧ u =ᶠ[l] φ * v := by
constructor
· intro h
use fun x => u x / v x
@@ -1995,12 +1995,12 @@ theorem isBigOWith_iff_exists_eq_mul (hc : 0 ≤ c) :
#align asymptotics.is_O_with_iff_exists_eq_mul Asymptotics.isBigOWith_iff_exists_eq_mul
theorem IsBigOWith.exists_eq_mul (h : IsBigOWith c l u v) (hc : 0 ≤ c) :
- ∃ (φ : α → 𝕜) (_hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v :=
+ ∃ φ : α → 𝕜, (∀ᶠ x in l, ‖φ x‖ ≤ c) ∧ u =ᶠ[l] φ * v :=
(isBigOWith_iff_exists_eq_mul hc).mp h
#align asymptotics.is_O_with.exists_eq_mul Asymptotics.IsBigOWith.exists_eq_mul
theorem isBigO_iff_exists_eq_mul :
- u =O[l] v ↔ ∃ (φ : α → 𝕜) (_hφ : l.IsBoundedUnder (· ≤ ·) (norm ∘ φ)), u =ᶠ[l] φ * v := by
+ u =O[l] v ↔ ∃ φ : α → 𝕜, l.IsBoundedUnder (· ≤ ·) (norm ∘ φ) ∧ u =ᶠ[l] φ * v := by
constructor
· rintro h
rcases h.exists_nonneg with ⟨c, hnnc, hc⟩
@@ -2014,7 +2014,7 @@ alias ⟨IsBigO.exists_eq_mul, _⟩ := isBigO_iff_exists_eq_mul
#align asymptotics.is_O.exists_eq_mul Asymptotics.IsBigO.exists_eq_mul
theorem isLittleO_iff_exists_eq_mul :
- u =o[l] v ↔ ∃ (φ : α → 𝕜) (_hφ : Tendsto φ l (𝓝 0)), u =ᶠ[l] φ * v := by
+ u =o[l] v ↔ ∃ φ : α → 𝕜, Tendsto φ l (𝓝 0) ∧ u =ᶠ[l] φ * v := by
constructor
· exact fun h => ⟨fun x => u x / v x, h.tendsto_div_nhds_zero, h.eventually_mul_div_cancel.symm⟩
· simp only [IsLittleO_def]
Empty lines were removed by executing the following Python script twice
import os
import re
# Loop through each file in the repository
for dir_path, dirs, files in os.walk('.'):
for filename in files:
if filename.endswith('.lean'):
file_path = os.path.join(dir_path, filename)
# Open the file and read its contents
with open(file_path, 'r') as file:
content = file.read()
# Use a regular expression to replace sequences of "variable" lines separated by empty lines
# with sequences without empty lines
modified_content = re.sub(r'(variable.*\n)\n(variable(?! .* in))', r'\1\2', content)
# Write the modified content back to the file
with open(file_path, 'w') as file:
file.write(modified_content)
@@ -61,20 +61,15 @@ variable {α : Type*} {β : Type*} {E : Type*} {F : Type*} {G : Type*} {E' : Typ
{R : Type*} {R' : Type*} {𝕜 : Type*} {𝕜' : Type*}
variable [Norm E] [Norm F] [Norm G]
-
variable [SeminormedAddCommGroup E'] [SeminormedAddCommGroup F'] [SeminormedAddCommGroup G']
[NormedAddCommGroup E''] [NormedAddCommGroup F''] [NormedAddCommGroup G''] [SeminormedRing R]
[SeminormedAddGroup E''']
[SeminormedRing R']
variable [NormedDivisionRing 𝕜] [NormedDivisionRing 𝕜']
-
variable {c c' c₁ c₂ : ℝ} {f : α → E} {g : α → F} {k : α → G}
-
variable {f' : α → E'} {g' : α → F'} {k' : α → G'}
-
variable {f'' : α → E''} {g'' : α → F''} {k'' : α → G''}
-
variable {l l' : Filter α}
section Defs
@@ -2255,7 +2250,6 @@ lemma Asymptotics.IsBigO.comp_summable_norm {ι E F : Type*}
namespace PartialHomeomorph
variable {α : Type*} {β : Type*} [TopologicalSpace α] [TopologicalSpace β]
-
variable {E : Type*} [Norm E] {F : Type*} [Norm F]
/-- Transfer `IsBigOWith` over a `PartialHomeomorph`. -/
@@ -2293,7 +2287,6 @@ end PartialHomeomorph
namespace Homeomorph
variable {α : Type*} {β : Type*} [TopologicalSpace α] [TopologicalSpace β]
-
variable {E : Type*} [Norm E] {F : Type*} [Norm F]
open Asymptotics
open Classical
(#11199)
We remove all but one open Classical
s, instead preferring to use open scoped Classical
. The only real side-effect this led to is moving a couple declarations to use Exists.choose
instead of Classical.choose
.
The first few commits are explicitly labelled regex replaces for ease of review.
@@ -49,7 +49,8 @@ the Fréchet derivative.)
open Filter Set
-open Topology BigOperators Classical Filter NNReal
+open scoped Classical
+open Topology BigOperators Filter NNReal
namespace Asymptotics
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -1496,7 +1496,7 @@ theorem isBigOWith_self_const_mul' (u : Rˣ) (f : α → R) (l : Filter α) :
IsBigOWith ‖(↑u⁻¹ : R)‖ l f fun x => ↑u * f x := by
refine' (isBigOWith_const_mul_self ↑u⁻¹ _ l).congr_left _
exact fun x => u.inv_mul_cancel_left (f x)
- -- porting note: Lean just had trouble elaborating correctly, but this fixes it.
+ -- Porting note: Lean just had trouble elaborating correctly, but this fixes it.
#align asymptotics.is_O_with_self_const_mul' Asymptotics.isBigOWith_self_const_mul'
theorem isBigOWith_self_const_mul (c : 𝕜) (hc : c ≠ 0) (f : α → 𝕜) (l : Filter α) :
@@ -1909,7 +1909,7 @@ theorem isLittleO_const_left {c : E''} :
· simp only [hc, false_or_iff, isLittleO_const_left_of_ne hc]; rfl
#align asymptotics.is_o_const_left Asymptotics.isLittleO_const_left
-@[simp 1001] -- porting note: increase priority so that this triggers before `isLittleO_const_left`
+@[simp 1001] -- Porting note: increase priority so that this triggers before `isLittleO_const_left`
theorem isLittleO_const_const_iff [NeBot l] {d : E''} {c : F''} :
((fun _x => d) =o[l] fun _x => c) ↔ d = 0 := by
have : ¬Tendsto (Function.const α ‖c‖) l atTop :=
IsTheta.add_isLittleO
, and add_comm
ed variants (#10386)
BREAKING CHANGE: Change IsTheta.add_isLittleO
into a dot-notation statement, in line with the existing IsBigO.add_isLittleO
. Move the current IsTheta.add_isLittleO
statement to IsLittleO.right_isTheta_add'
, in line with the existing IsLittleO.right_isBigO_add
.
feat: Add add_comm
ed variants of related lemmas.
These changes smoothen the flow when proving e.g.
a + b + c + d + e + f =Θ[l] d
.
Co-authored-by: L Lllvvuu <git@llllvvuu.dev>
@@ -2147,6 +2147,10 @@ theorem IsLittleO.right_isBigO_add {f₁ f₂ : α → E'} (h : f₁ =o[l] f₂)
((h.def' one_half_pos).right_le_add_of_lt_one one_half_lt_one).isBigO
#align asymptotics.is_o.right_is_O_add Asymptotics.IsLittleO.right_isBigO_add
+theorem IsLittleO.right_isBigO_add' {f₁ f₂ : α → E'} (h : f₁ =o[l] f₂) :
+ f₂ =O[l] (f₂ + f₁) :=
+ add_comm f₁ f₂ ▸ h.right_isBigO_add
+
/-- If `f x = O(g x)` along `cofinite`, then there exists a positive constant `C` such that
`‖f x‖ ≤ C * ‖g x‖` whenever `g x ≠ 0`. -/
theorem bound_of_isBigO_cofinite (h : f =O[cofinite] g'') :
Using BoundedSMul
instead of NormedSpace
makes these true more generally. The old proofs do not generalize, so are replaced with copies of the mul
proofs.
The const_smul_self
lemmas match the existing const_mul_self
ones.
shake
then reports that the imports can be reduced.
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jeremy Avigad, Yury Kudryashov
-/
import Mathlib.Analysis.Normed.Group.InfiniteSum
-import Mathlib.Analysis.NormedSpace.Basic
+import Mathlib.Analysis.Normed.MulAction
import Mathlib.Topology.Algebra.Order.LiminfLimsup
import Mathlib.Topology.PartialHomeomorph
@@ -66,7 +66,7 @@ variable [SeminormedAddCommGroup E'] [SeminormedAddCommGroup F'] [SeminormedAddC
[SeminormedAddGroup E''']
[SeminormedRing R']
-variable [NormedField 𝕜] [NormedField 𝕜']
+variable [NormedDivisionRing 𝕜] [NormedDivisionRing 𝕜']
variable {c c' c₁ c₂ : ℝ} {f : α → E} {g : α → F} {k : α → G}
@@ -1460,12 +1460,6 @@ theorem isBigO_const_left_iff_pos_le_norm {c : E''} (hc : c ≠ 0) :
exact le_mul_of_one_le_right (norm_nonneg _) ((one_le_div hb₀).2 hx)
#align asymptotics.is_O_const_left_iff_pos_le_norm Asymptotics.isBigO_const_left_iff_pos_le_norm
-section
-
-variable (𝕜)
-
-end
-
theorem IsBigO.trans_tendsto (hfg : f'' =O[l] g'') (hg : Tendsto g'' l (𝓝 0)) :
Tendsto f'' l (𝓝 0) :=
(isLittleO_one_iff ℝ).1 <| hfg.trans_isLittleO <| (isLittleO_one_iff ℝ).2 hg
@@ -1732,25 +1726,30 @@ theorem IsLittleO.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : f =o[l] g)
section SMulConst
-variable [NormedSpace 𝕜 E']
+variable [Module R E'] [BoundedSMul R E']
-theorem IsBigOWith.const_smul_left (h : IsBigOWith c l f' g) (c' : 𝕜) :
+theorem IsBigOWith.const_smul_self (c' : R) :
+ IsBigOWith (‖c'‖) l (fun x => c' • f' x) f' :=
+ isBigOWith_of_le' _ fun _ => norm_smul_le _ _
+
+theorem IsBigO.const_smul_self (c' : R) : (fun x => c' • f' x) =O[l] f' :=
+ (IsBigOWith.const_smul_self _).isBigO
+
+theorem IsBigOWith.const_smul_left (h : IsBigOWith c l f' g) (c' : R) :
IsBigOWith (‖c'‖ * c) l (fun x => c' • f' x) g :=
- IsBigOWith.of_norm_left <| by
- simpa only [norm_smul, _root_.norm_norm] using h.norm_left.const_mul_left ‖c'‖
- -- porting note: probably `Asymptotics.IsBigO.norm_norm` and `Asymptotics.IsLittleO.norm_norm`
- -- should be protected.
-#align asymptotics.is_O_with.const_smul_left Asymptotics.IsBigOWith.const_smul_left
+ .trans (.const_smul_self _) h (norm_nonneg _)
-theorem IsBigO.const_smul_left (h : f' =O[l] g) (c : 𝕜) : (c • f') =O[l] g :=
+theorem IsBigO.const_smul_left (h : f' =O[l] g) (c : R) : (c • f') =O[l] g :=
let ⟨_b, hb⟩ := h.isBigOWith
(hb.const_smul_left _).isBigO
#align asymptotics.is_O.const_smul_left Asymptotics.IsBigO.const_smul_left
-theorem IsLittleO.const_smul_left (h : f' =o[l] g) (c : 𝕜) : (c • f') =o[l] g :=
- IsLittleO.of_norm_left <| by simpa only [← norm_smul] using h.norm_left.const_mul_left ‖c‖
+theorem IsLittleO.const_smul_left (h : f' =o[l] g) (c : R) : (c • f') =o[l] g :=
+ (IsBigO.const_smul_self _).trans_isLittleO h
#align asymptotics.is_o.const_smul_left Asymptotics.IsLittleO.const_smul_left
+variable [Module 𝕜 E'] [BoundedSMul 𝕜 E']
+
theorem isBigO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x) =O[l] g ↔ f' =O[l] g := by
have cne0 : ‖c‖ ≠ 0 := norm_ne_zero_iff.mpr hc
rw [← isBigO_norm_left]
@@ -1786,36 +1785,44 @@ end SMulConst
section SMul
-variable [NormedSpace 𝕜 E'] [NormedSpace 𝕜' F'] {k₁ : α → 𝕜} {k₂ : α → 𝕜'}
+variable [Module R E'] [BoundedSMul R E'] [Module 𝕜' F'] [BoundedSMul 𝕜' F']
+variable {k₁ : α → R} {k₂ : α → 𝕜'}
theorem IsBigOWith.smul (h₁ : IsBigOWith c l k₁ k₂) (h₂ : IsBigOWith c' l f' g') :
IsBigOWith (c * c') l (fun x => k₁ x • f' x) fun x => k₂ x • g' x := by
- refine' ((h₁.norm_norm.mul h₂.norm_norm).congr rfl _ _).of_norm_norm <;>
- · intros; simp only [norm_smul]
+ simp only [IsBigOWith_def] at *
+ filter_upwards [h₁, h₂] with _ hx₁ hx₂
+ apply le_trans (norm_smul_le _ _)
+ convert mul_le_mul hx₁ hx₂ (norm_nonneg _) (le_trans (norm_nonneg _) hx₁) using 1
+ rw [norm_smul, mul_mul_mul_comm]
#align asymptotics.is_O_with.smul Asymptotics.IsBigOWith.smul
theorem IsBigO.smul (h₁ : k₁ =O[l] k₂) (h₂ : f' =O[l] g') :
(fun x => k₁ x • f' x) =O[l] fun x => k₂ x • g' x := by
- refine' ((h₁.norm_norm.mul h₂.norm_norm).congr _ _).of_norm_norm <;>
- · intros; simp only [norm_smul]
+ obtain ⟨c₁, h₁⟩ := h₁.isBigOWith
+ obtain ⟨c₂, h₂⟩ := h₂.isBigOWith
+ exact (h₁.smul h₂).isBigO
#align asymptotics.is_O.smul Asymptotics.IsBigO.smul
theorem IsBigO.smul_isLittleO (h₁ : k₁ =O[l] k₂) (h₂ : f' =o[l] g') :
(fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x := by
- refine' ((h₁.norm_norm.mul_isLittleO h₂.norm_norm).congr _ _).of_norm_norm <;>
- · intros; simp only [norm_smul]
+ simp only [IsLittleO_def] at *
+ intro c cpos
+ rcases h₁.exists_pos with ⟨c', c'pos, hc'⟩
+ exact (hc'.smul (h₂ (div_pos cpos c'pos))).congr_const (mul_div_cancel' _ (ne_of_gt c'pos))
#align asymptotics.is_O.smul_is_o Asymptotics.IsBigO.smul_isLittleO
theorem IsLittleO.smul_isBigO (h₁ : k₁ =o[l] k₂) (h₂ : f' =O[l] g') :
(fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x := by
- refine' ((h₁.norm_norm.mul_isBigO h₂.norm_norm).congr _ _).of_norm_norm <;>
- · intros; simp only [norm_smul]
+ simp only [IsLittleO_def] at *
+ intro c cpos
+ rcases h₂.exists_pos with ⟨c', c'pos, hc'⟩
+ exact ((h₁ (div_pos cpos c'pos)).smul hc').congr_const (div_mul_cancel _ (ne_of_gt c'pos))
#align asymptotics.is_o.smul_is_O Asymptotics.IsLittleO.smul_isBigO
theorem IsLittleO.smul (h₁ : k₁ =o[l] k₂) (h₂ : f' =o[l] g') :
- (fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x := by
- refine' ((h₁.norm_norm.mul h₂.norm_norm).congr _ _).of_norm_norm <;>
- · intros; simp only [norm_smul]
+ (fun x => k₁ x • f' x) =o[l] fun x => k₂ x • g' x :=
+ h₁.smul_isBigO h₂.isBigO
#align asymptotics.is_o.smul Asymptotics.IsLittleO.smul
end SMul
@@ -1862,7 +1869,8 @@ theorem IsLittleO.tendsto_div_nhds_zero {f g : α → 𝕜} (h : f =o[l] g) :
_ =O[l] fun _x => (1 : 𝕜) := isBigO_of_le _ fun x => by simp [div_self_le_one]
#align asymptotics.is_o.tendsto_div_nhds_zero Asymptotics.IsLittleO.tendsto_div_nhds_zero
-theorem IsLittleO.tendsto_inv_smul_nhds_zero [NormedSpace 𝕜 E'] {f : α → E'} {g : α → 𝕜}
+theorem IsLittleO.tendsto_inv_smul_nhds_zero [Module 𝕜 E'] [BoundedSMul 𝕜 E']
+ {f : α → E'} {g : α → 𝕜}
{l : Filter α} (h : f =o[l] g) : Tendsto (fun x => (g x)⁻¹ • f x) l (𝓝 0) := by
simpa only [div_eq_inv_mul, ← norm_inv, ← norm_smul, ← tendsto_zero_iff_norm_tendsto_zero] using
h.norm_norm.tendsto_div_nhds_zero
@@ -1969,11 +1977,13 @@ variable {u v : α → 𝕜}
/-- If `‖φ‖` is eventually bounded by `c`, and `u =ᶠ[l] φ * v`, then we have `IsBigOWith c u v l`.
This does not require any assumptions on `c`, which is why we keep this version along with
`IsBigOWith_iff_exists_eq_mul`. -/
-theorem isBigOWith_of_eq_mul (φ : α → 𝕜) (hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c) (h : u =ᶠ[l] φ * v) :
+theorem isBigOWith_of_eq_mul {u v : α → R} (φ : α → R) (hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c)
+ (h : u =ᶠ[l] φ * v) :
IsBigOWith c l u v := by
simp only [IsBigOWith_def]
refine' h.symm.rw (fun x a => ‖a‖ ≤ c * ‖v x‖) (hφ.mono fun x hx => _)
- simp only [norm_mul, Pi.mul_apply]
+ simp only [Pi.mul_apply]
+ refine (norm_mul_le _ _).trans ?_
gcongr
#align asymptotics.is_O_with_of_eq_mul Asymptotics.isBigOWith_of_eq_mul
@@ -2109,7 +2109,7 @@ theorem isLittleO_pow_sub_sub (x₀ : E') {m : ℕ} (h : 1 < m) :
simpa only [isLittleO_norm_right, pow_one] using isLittleO_pow_sub_pow_sub x₀ h
#align asymptotics.is_o_pow_sub_sub Asymptotics.isLittleO_pow_sub_sub
-theorem IsBigOWith.right_le_sub_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith c l f₁ f₂) (hc : c < 1) :
+theorem IsBigOWith.right_le_sub_of_lt_one {f₁ f₂ : α → E'} (h : IsBigOWith c l f₁ f₂) (hc : c < 1) :
IsBigOWith (1 / (1 - c)) l f₂ fun x => f₂ x - f₁ x :=
IsBigOWith.of_bound <|
mem_of_superset h.bound fun x hx => by
@@ -2117,22 +2117,24 @@ theorem IsBigOWith.right_le_sub_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith
rw [mul_comm, one_div, ← div_eq_mul_inv, _root_.le_div_iff, mul_sub, mul_one, mul_comm]
· exact le_trans (sub_le_sub_left hx _) (norm_sub_norm_le _ _)
· exact sub_pos.2 hc
-#align asymptotics.is_O_with.right_le_sub_of_lt_1 Asymptotics.IsBigOWith.right_le_sub_of_lt_1
+#align asymptotics.is_O_with.right_le_sub_of_lt_1 Asymptotics.IsBigOWith.right_le_sub_of_lt_one
+@[deprecated] alias IsBigOWith.right_le_sub_of_lt_1 := IsBigOWith.right_le_sub_of_lt_one
-theorem IsBigOWith.right_le_add_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith c l f₁ f₂) (hc : c < 1) :
+theorem IsBigOWith.right_le_add_of_lt_one {f₁ f₂ : α → E'} (h : IsBigOWith c l f₁ f₂) (hc : c < 1) :
IsBigOWith (1 / (1 - c)) l f₂ fun x => f₁ x + f₂ x :=
- (h.neg_right.right_le_sub_of_lt_1 hc).neg_right.of_neg_left.congr rfl (fun x => rfl) fun x => by
+ (h.neg_right.right_le_sub_of_lt_one hc).neg_right.of_neg_left.congr rfl (fun x ↦ rfl) fun x ↦ by
rw [neg_sub, sub_neg_eq_add]
-#align asymptotics.is_O_with.right_le_add_of_lt_1 Asymptotics.IsBigOWith.right_le_add_of_lt_1
+#align asymptotics.is_O_with.right_le_add_of_lt_1 Asymptotics.IsBigOWith.right_le_add_of_lt_one
+@[deprecated] alias IsBigOWith.right_le_add_of_lt_1 := IsBigOWith.right_le_add_of_lt_one
theorem IsLittleO.right_isBigO_sub {f₁ f₂ : α → E'} (h : f₁ =o[l] f₂) :
f₂ =O[l] fun x => f₂ x - f₁ x :=
- ((h.def' one_half_pos).right_le_sub_of_lt_1 one_half_lt_one).isBigO
+ ((h.def' one_half_pos).right_le_sub_of_lt_one one_half_lt_one).isBigO
#align asymptotics.is_o.right_is_O_sub Asymptotics.IsLittleO.right_isBigO_sub
theorem IsLittleO.right_isBigO_add {f₁ f₂ : α → E'} (h : f₁ =o[l] f₂) :
f₂ =O[l] fun x => f₁ x + f₂ x :=
- ((h.def' one_half_pos).right_le_add_of_lt_1 one_half_lt_one).isBigO
+ ((h.def' one_half_pos).right_le_add_of_lt_one one_half_lt_one).isBigO
#align asymptotics.is_o.right_is_O_add Asymptotics.IsLittleO.right_isBigO_add
/-- If `f x = O(g x)` along `cofinite`, then there exists a positive constant `C` such that
f ^ n
(#9617)
This involves moving lemmas from Algebra.GroupPower.Ring
to Algebra.GroupWithZero.Basic
and changing some 0 < n
assumptions to n ≠ 0
.
From LeanAPAP
@@ -2085,12 +2085,12 @@ theorem isLittleO_norm_pow_id {n : ℕ} (h : 1 < n) :
#align asymptotics.is_o_norm_pow_id Asymptotics.isLittleO_norm_pow_id
theorem IsBigO.eq_zero_of_norm_pow_within {f : E'' → F''} {s : Set E''} {x₀ : E''} {n : ℕ}
- (h : f =O[𝓝[s] x₀] fun x => ‖x - x₀‖ ^ n) (hx₀ : x₀ ∈ s) (hn : 0 < n) : f x₀ = 0 :=
+ (h : f =O[𝓝[s] x₀] fun x => ‖x - x₀‖ ^ n) (hx₀ : x₀ ∈ s) (hn : n ≠ 0) : f x₀ = 0 :=
mem_of_mem_nhdsWithin hx₀ h.eq_zero_imp <| by simp_rw [sub_self, norm_zero, zero_pow hn]
#align asymptotics.is_O.eq_zero_of_norm_pow_within Asymptotics.IsBigO.eq_zero_of_norm_pow_within
theorem IsBigO.eq_zero_of_norm_pow {f : E'' → F''} {x₀ : E''} {n : ℕ}
- (h : f =O[𝓝 x₀] fun x => ‖x - x₀‖ ^ n) (hn : 0 < n) : f x₀ = 0 := by
+ (h : f =O[𝓝 x₀] fun x => ‖x - x₀‖ ^ n) (hn : n ≠ 0) : f x₀ = 0 := by
rw [← nhdsWithin_univ] at h
exact h.eq_zero_of_norm_pow_within (mem_univ _) hn
#align asymptotics.is_O.eq_zero_of_norm_pow Asymptotics.IsBigO.eq_zero_of_norm_pow
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
.
@@ -1709,7 +1709,7 @@ theorem IsLittleO.of_pow {f : α → 𝕜} {g : α → R} {n : ℕ} (h : (f ^ n)
theorem IsBigOWith.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : IsBigOWith c l f g)
(h₀ : ∀ᶠ x in l, f x = 0 → g x = 0) : IsBigOWith c l (fun x => (g x)⁻¹) fun x => (f x)⁻¹ := by
refine' IsBigOWith.of_bound (h.bound.mp (h₀.mono fun x h₀ hle => _))
- cases' eq_or_ne (f x) 0 with hx hx
+ rcases eq_or_ne (f x) 0 with hx | hx
· simp only [hx, h₀ hx, inv_zero, norm_zero, mul_zero, le_rfl]
· have hc : 0 < c := pos_of_mul_pos_left ((norm_pos_iff.2 hx).trans_le hle) (norm_nonneg _)
replace hle := inv_le_inv_of_le (norm_pos_iff.2 hx) hle
[a, +oo)
(#8712)
We have in the library the lemma not_intervalIntegrable_of_tendsto_norm_atTop_of_deriv_isBigO_filter
, saying that if a function tends to infinity at a point in an interval [a, b]
, then its derivative is not interval-integrable on [a, b]
. We generalize this result to allow for any set instead of [a, b]
, and apply it to half-infinite intervals.
In particular, we characterize integrability of x^s
on [a, +oo)
, and deduce that x^s
is never integrable on [0, +oo)
. This makes it possible to remove one assumption in Lemma mellin_comp_rpow
on the Mellin transform.
@@ -603,6 +603,9 @@ theorem isBigO_refl (f : α → E) (l : Filter α) : f =O[l] f :=
(isBigOWith_refl f l).isBigO
#align asymptotics.is_O_refl Asymptotics.isBigO_refl
+theorem _root_.Filter.EventuallyEq.isBigO {f₁ f₂ : α → E} (hf : f₁ =ᶠ[l] f₂) : f₁ =O[l] f₂ :=
+ hf.trans_isBigO (isBigO_refl _ _)
+
theorem IsBigOWith.trans_le (hfg : IsBigOWith c l f g) (hgk : ∀ x, ‖g x‖ ≤ ‖k x‖) (hc : 0 ≤ c) :
IsBigOWith c l f k :=
(hfg.trans (isBigOWith_of_le l hgk) hc).congr_const <| mul_one c
The names for lemmas about monotonicity of (a ^ ·)
and (· ^ n)
were a mess. This PR tidies up everything related by following the naming convention for (a * ·)
and (· * b)
. Namely, (a ^ ·)
is pow_right
and (· ^ n)
is pow_left
in lemma names. All lemma renames follow the corresponding multiplication lemma names closely.
Algebra.GroupPower.Order
pow_mono
→ pow_right_mono
pow_le_pow
→ pow_le_pow_right
pow_le_pow_of_le_left
→ pow_le_pow_left
pow_lt_pow_of_lt_left
→ pow_lt_pow_left
strictMonoOn_pow
→ pow_left_strictMonoOn
pow_strictMono_right
→ pow_right_strictMono
pow_lt_pow
→ pow_lt_pow_right
pow_lt_pow_iff
→ pow_lt_pow_iff_right
pow_le_pow_iff
→ pow_le_pow_iff_right
self_lt_pow
→ lt_self_pow
strictAnti_pow
→ pow_right_strictAnti
pow_lt_pow_iff_of_lt_one
→ pow_lt_pow_iff_right_of_lt_one
pow_lt_pow_of_lt_one
→ pow_lt_pow_right_of_lt_one
lt_of_pow_lt_pow
→ lt_of_pow_lt_pow_left
le_of_pow_le_pow
→ le_of_pow_le_pow_left
pow_lt_pow₀
→ pow_lt_pow_right₀
Algebra.GroupPower.CovariantClass
pow_le_pow_of_le_left'
→ pow_le_pow_left'
nsmul_le_nsmul_of_le_right
→ nsmul_le_nsmul_right
pow_lt_pow'
→ pow_lt_pow_right'
nsmul_lt_nsmul
→ nsmul_lt_nsmul_left
pow_strictMono_left
→ pow_right_strictMono'
nsmul_strictMono_right
→ nsmul_left_strictMono
StrictMono.pow_right'
→ StrictMono.pow_const
StrictMono.nsmul_left
→ StrictMono.const_nsmul
pow_strictMono_right'
→ pow_left_strictMono
nsmul_strictMono_left
→ nsmul_right_strictMono
Monotone.pow_right
→ Monotone.pow_const
Monotone.nsmul_left
→ Monotone.const_nsmul
lt_of_pow_lt_pow'
→ lt_of_pow_lt_pow_left'
lt_of_nsmul_lt_nsmul
→ lt_of_nsmul_lt_nsmul_right
pow_le_pow'
→ pow_le_pow_right'
nsmul_le_nsmul
→ nsmul_le_nsmul_left
pow_le_pow_of_le_one'
→ pow_le_pow_right_of_le_one'
nsmul_le_nsmul_of_nonpos
→ nsmul_le_nsmul_left_of_nonpos
le_of_pow_le_pow'
→ le_of_pow_le_pow_left'
le_of_nsmul_le_nsmul'
→ le_of_nsmul_le_nsmul_right'
pow_le_pow_iff'
→ pow_le_pow_iff_right'
nsmul_le_nsmul_iff
→ nsmul_le_nsmul_iff_left
pow_lt_pow_iff'
→ pow_lt_pow_iff_right'
nsmul_lt_nsmul_iff
→ nsmul_lt_nsmul_iff_left
Data.Nat.Pow
Nat.pow_lt_pow_of_lt_left
→ Nat.pow_lt_pow_left
Nat.pow_le_iff_le_left
→ Nat.pow_le_pow_iff_left
Nat.pow_lt_iff_lt_left
→ Nat.pow_lt_pow_iff_left
pow_le_pow_iff_left
pow_lt_pow_iff_left
pow_right_injective
pow_right_inj
Nat.pow_le_pow_left
to have the correct name since Nat.pow_le_pow_of_le_left
is in Std.Nat.pow_le_pow_right
to have the correct name since Nat.pow_le_pow_of_le_right
is in Std.self_le_pow
was a duplicate of le_self_pow
.Nat.pow_lt_pow_of_lt_right
is defeq to pow_lt_pow_right
.Nat.pow_right_strictMono
is defeq to pow_right_strictMono
.Nat.pow_le_iff_le_right
is defeq to pow_le_pow_iff_right
.Nat.pow_lt_iff_lt_right
is defeq to pow_lt_pow_iff_right
.0 < n
or 1 ≤ n
to n ≠ 0
.Nat
lemmas have been protected
.@@ -1664,14 +1664,13 @@ theorem IsBigOWith.pow [NormOneClass R] {f : α → R} {g : α → 𝕜} (h : Is
theorem IsBigOWith.of_pow {n : ℕ} {f : α → 𝕜} {g : α → R} (h : IsBigOWith c l (f ^ n) (g ^ n))
(hn : n ≠ 0) (hc : c ≤ c' ^ n) (hc' : 0 ≤ c') : IsBigOWith c' l f g :=
- IsBigOWith.of_bound <|
- (h.weaken hc).bound.mono fun x hx =>
- le_of_pow_le_pow n (mul_nonneg hc' <| norm_nonneg _) hn.bot_lt <|
- calc
- ‖f x‖ ^ n = ‖f x ^ n‖ := (norm_pow _ _).symm
- _ ≤ c' ^ n * ‖g x ^ n‖ := hx
- _ ≤ c' ^ n * ‖g x‖ ^ n := by gcongr; exact norm_pow_le' _ hn.bot_lt
- _ = (c' * ‖g x‖) ^ n := (mul_pow _ _ _).symm
+ IsBigOWith.of_bound <| (h.weaken hc).bound.mono fun x hx ↦
+ le_of_pow_le_pow_left hn (by positivity) <|
+ calc
+ ‖f x‖ ^ n = ‖f x ^ n‖ := (norm_pow _ _).symm
+ _ ≤ c' ^ n * ‖g x ^ n‖ := hx
+ _ ≤ c' ^ n * ‖g x‖ ^ n := by gcongr; exact norm_pow_le' _ hn.bot_lt
+ _ = (c' * ‖g x‖) ^ n := (mul_pow _ _ _).symm
#align asymptotics.is_O_with.of_pow Asymptotics.IsBigOWith.of_pow
theorem IsBigO.pow {f : α → R} {g : α → 𝕜} (h : f =O[l] g) (n : ℕ) :
LocalHomeomorph
evokes a "local homeomorphism": this is not what this means.
Instead, this is a homeomorphism on an open set of the domain (extended to the whole space, by the junk value pattern). Hence, partial homeomorphism is more appropriate, and avoids confusion with IsLocallyHomeomorph
.
A future PR will rename LocalEquiv
to PartialEquiv
.
@@ -6,7 +6,7 @@ Authors: Jeremy Avigad, Yury Kudryashov
import Mathlib.Analysis.Normed.Group.InfiniteSum
import Mathlib.Analysis.NormedSpace.Basic
import Mathlib.Topology.Algebra.Order.LiminfLimsup
-import Mathlib.Topology.LocalHomeomorph
+import Mathlib.Topology.PartialHomeomorph
#align_import analysis.asymptotics.asymptotics from "leanprover-community/mathlib"@"f2ce6086713c78a7f880485f7917ea547a215982"
@@ -2233,14 +2233,14 @@ lemma Asymptotics.IsBigO.comp_summable_norm {ι E F : Type*}
summable_of_isBigO hg <| hf.norm_norm.comp_tendsto <|
tendsto_zero_iff_norm_tendsto_zero.2 hg.tendsto_cofinite_zero
-namespace LocalHomeomorph
+namespace PartialHomeomorph
variable {α : Type*} {β : Type*} [TopologicalSpace α] [TopologicalSpace β]
variable {E : Type*} [Norm E] {F : Type*} [Norm F]
-/-- Transfer `IsBigOWith` over a `LocalHomeomorph`. -/
-theorem isBigOWith_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
+/-- Transfer `IsBigOWith` over a `PartialHomeomorph`. -/
+theorem isBigOWith_congr (e : PartialHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
{g : β → F} {C : ℝ} : IsBigOWith C (𝓝 b) f g ↔ IsBigOWith C (𝓝 (e.symm b)) (f ∘ e) (g ∘ e) :=
⟨fun h =>
h.comp_tendsto <| by
@@ -2251,25 +2251,25 @@ theorem isBigOWith_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.targ
((e.eventually_right_inverse hb).mono fun x hx => congr_arg f hx)
((e.eventually_right_inverse hb).mono fun x hx => congr_arg g hx)⟩
set_option linter.uppercaseLean3 false in
-#align local_homeomorph.is_O_with_congr LocalHomeomorph.isBigOWith_congr
+#align local_homeomorph.is_O_with_congr PartialHomeomorph.isBigOWith_congr
-/-- Transfer `IsBigO` over a `LocalHomeomorph`. -/
-theorem isBigO_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E} {g : β → F} :
- f =O[𝓝 b] g ↔ (f ∘ e) =O[𝓝 (e.symm b)] (g ∘ e) := by
+/-- Transfer `IsBigO` over a `PartialHomeomorph`. -/
+theorem isBigO_congr (e : PartialHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
+ {g : β → F} : f =O[𝓝 b] g ↔ (f ∘ e) =O[𝓝 (e.symm b)] (g ∘ e) := by
simp only [IsBigO_def]
exact exists_congr fun C => e.isBigOWith_congr hb
set_option linter.uppercaseLean3 false in
-#align local_homeomorph.is_O_congr LocalHomeomorph.isBigO_congr
+#align local_homeomorph.is_O_congr PartialHomeomorph.isBigO_congr
-/-- Transfer `IsLittleO` over a `LocalHomeomorph`. -/
-theorem isLittleO_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
+/-- Transfer `IsLittleO` over a `PartialHomeomorph`. -/
+theorem isLittleO_congr (e : PartialHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
{g : β → F} : f =o[𝓝 b] g ↔ (f ∘ e) =o[𝓝 (e.symm b)] (g ∘ e) := by
simp only [IsLittleO_def]
exact forall₂_congr fun c _hc => e.isBigOWith_congr hb
set_option linter.uppercaseLean3 false in
-#align local_homeomorph.is_o_congr LocalHomeomorph.isLittleO_congr
+#align local_homeomorph.is_o_congr PartialHomeomorph.isLittleO_congr
-end LocalHomeomorph
+end PartialHomeomorph
namespace Homeomorph
@@ -2282,7 +2282,7 @@ open Asymptotics
/-- Transfer `IsBigOWith` over a `Homeomorph`. -/
theorem isBigOWith_congr (e : α ≃ₜ β) {b : β} {f : β → E} {g : β → F} {C : ℝ} :
IsBigOWith C (𝓝 b) f g ↔ IsBigOWith C (𝓝 (e.symm b)) (f ∘ e) (g ∘ e) :=
- e.toLocalHomeomorph.isBigOWith_congr trivial
+ e.toPartialHomeomorph.isBigOWith_congr trivial
set_option linter.uppercaseLean3 false in
#align homeomorph.is_O_with_congr Homeomorph.isBigOWith_congr
@@ -150,7 +150,7 @@ theorem isBigO_iff'' {g : α → E'''} :
obtain ⟨c, ⟨hc_pos, hc⟩⟩ := h
refine ⟨c⁻¹, ⟨by positivity, ?_⟩⟩
filter_upwards [hc] with x hx
- rwa [←inv_inv c, inv_mul_le_iff (by positivity)] at hx
+ rwa [← inv_inv c, inv_mul_le_iff (by positivity)] at hx
theorem IsBigO.of_bound (c : ℝ) (h : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖) : f =O[l] g :=
isBigO_iff.2 ⟨c, h⟩
@@ -1692,7 +1692,7 @@ theorem IsLittleO.pow {f : α → R} {g : α → 𝕜} (h : f =o[l] g) {n : ℕ}
(fun x => f x ^ n) =o[l] fun x => g x ^ n := by
obtain ⟨n, rfl⟩ := Nat.exists_eq_succ_of_ne_zero hn.ne'; clear hn
induction' n with n ihn
- · simpa only [Nat.zero_eq, ←Nat.one_eq_succ_zero, pow_one]
+ · simpa only [Nat.zero_eq, ← Nat.one_eq_succ_zero, pow_one]
· convert h.mul ihn <;> simp [pow_succ]
#align asymptotics.is_o.pow Asymptotics.IsLittleO.pow
@@ -1915,10 +1915,10 @@ theorem isLittleO_pure {x} : f'' =o[pure x] g'' ↔ f'' x = 0 :=
_ ↔ f'' x = 0 := isLittleO_const_const_iff
#align asymptotics.is_o_pure Asymptotics.isLittleO_pure
-theorem isLittleO_const_id_comap_norm_atTop (c : F'') :
- (fun _x : E'' => c) =o[comap norm atTop] id :=
- isLittleO_const_left.2 <| Or.inr tendsto_comap
-#align asymptotics.is_o_const_id_comap_norm_at_top Asymptotics.isLittleO_const_id_comap_norm_atTop
+theorem isLittleO_const_id_cobounded (c : F'') :
+ (fun _ => c) =o[Bornology.cobounded E''] id :=
+ isLittleO_const_left.2 <| .inr tendsto_norm_cobounded_atTop
+#align asymptotics.is_o_const_id_comap_norm_at_top Asymptotics.isLittleO_const_id_cobounded
theorem isLittleO_const_id_atTop (c : E'') : (fun _x : ℝ => c) =o[atTop] id :=
isLittleO_const_left.2 <| Or.inr tendsto_abs_atTop_atTop
IsBigO.comp_summable
(#8359)
Add Asymptotics.IsBigO.comp_summable
.
@@ -2214,19 +2214,25 @@ end Asymptotics
open Asymptotics
-theorem summable_of_isBigO {ι E} [NormedAddCommGroup E] [CompleteSpace E] {f : ι → E} {g : ι → ℝ}
- (hg : Summable g) (h : f =O[cofinite] g) : Summable f :=
+theorem summable_of_isBigO {ι E} [SeminormedAddCommGroup E] [CompleteSpace E]
+ {f : ι → E} {g : ι → ℝ} (hg : Summable g) (h : f =O[cofinite] g) : Summable f :=
let ⟨C, hC⟩ := h.isBigOWith
.of_norm_bounded_eventually (fun x => C * ‖g x‖) (hg.abs.mul_left _) hC.bound
set_option linter.uppercaseLean3 false in
#align summable_of_is_O summable_of_isBigO
-theorem summable_of_isBigO_nat {E} [NormedAddCommGroup E] [CompleteSpace E] {f : ℕ → E} {g : ℕ → ℝ}
- (hg : Summable g) (h : f =O[atTop] g) : Summable f :=
+theorem summable_of_isBigO_nat {E} [SeminormedAddCommGroup E] [CompleteSpace E]
+ {f : ℕ → E} {g : ℕ → ℝ} (hg : Summable g) (h : f =O[atTop] g) : Summable f :=
summable_of_isBigO hg <| Nat.cofinite_eq_atTop.symm ▸ h
set_option linter.uppercaseLean3 false in
#align summable_of_is_O_nat summable_of_isBigO_nat
+lemma Asymptotics.IsBigO.comp_summable_norm {ι E F : Type*}
+ [SeminormedAddCommGroup E] [SeminormedAddCommGroup F] {f : E → F} {g : ι → E}
+ (hf : f =O[𝓝 0] id) (hg : Summable (‖g ·‖)) : Summable (‖f <| g ·‖) :=
+ summable_of_isBigO hg <| hf.norm_norm.comp_tendsto <|
+ tendsto_zero_iff_norm_tendsto_zero.2 hg.tendsto_cofinite_zero
+
namespace LocalHomeomorph
variable {α : Type*} {β : Type*} [TopologicalSpace α] [TopologicalSpace β]
@@ -235,22 +235,22 @@ theorem IsBigOWith.weaken (h : IsBigOWith c l f g') (hc : c ≤ c') : IsBigOWith
#align asymptotics.is_O_with.weaken Asymptotics.IsBigOWith.weaken
theorem IsBigOWith.exists_pos (h : IsBigOWith c l f g') :
- ∃ (c' : _) (_H : 0 < c'), IsBigOWith c' l f g' :=
+ ∃ c' > 0, IsBigOWith c' l f g' :=
⟨max c 1, lt_of_lt_of_le zero_lt_one (le_max_right c 1), h.weaken <| le_max_left c 1⟩
#align asymptotics.is_O_with.exists_pos Asymptotics.IsBigOWith.exists_pos
-theorem IsBigO.exists_pos (h : f =O[l] g') : ∃ (c : _) (_H : 0 < c), IsBigOWith c l f g' :=
+theorem IsBigO.exists_pos (h : f =O[l] g') : ∃ c > 0, IsBigOWith c l f g' :=
let ⟨_c, hc⟩ := h.isBigOWith
hc.exists_pos
#align asymptotics.is_O.exists_pos Asymptotics.IsBigO.exists_pos
theorem IsBigOWith.exists_nonneg (h : IsBigOWith c l f g') :
- ∃ (c' : _) (_H : 0 ≤ c'), IsBigOWith c' l f g' :=
+ ∃ c' ≥ 0, IsBigOWith c' l f g' :=
let ⟨c, cpos, hc⟩ := h.exists_pos
⟨c, le_of_lt cpos, hc⟩
#align asymptotics.is_O_with.exists_nonneg Asymptotics.IsBigOWith.exists_nonneg
-theorem IsBigO.exists_nonneg (h : f =O[l] g') : ∃ (c : _) (_H : 0 ≤ c), IsBigOWith c l f g' :=
+theorem IsBigO.exists_nonneg (h : f =O[l] g') : ∃ c ≥ 0, IsBigOWith c l f g' :=
let ⟨_c, hc⟩ := h.isBigOWith
hc.exists_nonneg
#align asymptotics.is_O.exists_nonneg Asymptotics.IsBigO.exists_nonneg
@@ -268,8 +268,8 @@ theorem isBigO_iff_eventually : f =O[l] g' ↔ ∀ᶠ c in atTop, ∀ᶠ x in l,
theorem IsBigO.exists_mem_basis {ι} {p : ι → Prop} {s : ι → Set α} (h : f =O[l] g')
(hb : l.HasBasis p s) :
- ∃ (c : ℝ) (_hc : 0 < c) (i : ι) (_hi : p i), ∀ x ∈ s i, ‖f x‖ ≤ c * ‖g' x‖ :=
- flip Exists₂.imp h.exists_pos fun c _hc h => by
+ ∃ c > 0, ∃ i : ι, p i ∧ ∀ x ∈ s i, ‖f x‖ ≤ c * ‖g' x‖ :=
+ flip Exists.imp h.exists_pos fun c h => by
simpa only [isBigOWith_iff, hb.eventually_iff, exists_prop] using h
#align asymptotics.is_O.exists_mem_basis Asymptotics.IsBigO.exists_mem_basis
@@ -1094,11 +1094,11 @@ variable {f₁ f₂ : α → E'} {g₁ g₂ : α → F'}
theorem IsBigOWith.add (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : IsBigOWith c₂ l f₂ g) :
IsBigOWith (c₁ + c₂) l (fun x => f₁ x + f₂ x) g := by
- rw [IsBigOWith_def] at *;
- filter_upwards [h₁,
- h₂] with x hx₁ hx₂ using calc
- ‖f₁ x + f₂ x‖ ≤ c₁ * ‖g x‖ + c₂ * ‖g x‖ := norm_add_le_of_le hx₁ hx₂
- _ = (c₁ + c₂) * ‖g x‖ := (add_mul _ _ _).symm
+ rw [IsBigOWith_def] at *
+ filter_upwards [h₁, h₂] with x hx₁ hx₂ using
+ calc
+ ‖f₁ x + f₂ x‖ ≤ c₁ * ‖g x‖ + c₂ * ‖g x‖ := norm_add_le_of_le hx₁ hx₂
+ _ = (c₁ + c₂) * ‖g x‖ := (add_mul _ _ _).symm
#align asymptotics.is_O_with.add Asymptotics.IsBigOWith.add
theorem IsBigO.add (h₁ : f₁ =O[l] g) (h₂ : f₂ =O[l] g) : (fun x => f₁ x + f₂ x) =O[l] g :=
@@ -1269,8 +1269,8 @@ theorem isBigO_zero_right_iff : (f'' =O[l] fun _x => (0 : F')) ↔ f'' =ᶠ[l] 0
@[simp]
theorem isLittleO_zero_right_iff : (f'' =o[l] fun _x => (0 : F')) ↔ f'' =ᶠ[l] 0 :=
- ⟨fun h => isBigO_zero_right_iff.1 h.isBigO, fun h =>
- IsLittleO.of_isBigOWith fun _c _hc => isBigOWith_zero_right_iff.2 h⟩
+ ⟨fun h => isBigO_zero_right_iff.1 h.isBigO,
+ fun h => IsLittleO.of_isBigOWith fun _c _hc => isBigOWith_zero_right_iff.2 h⟩
#align asymptotics.is_o_zero_right_iff Asymptotics.isLittleO_zero_right_iff
theorem isBigOWith_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter α) :
@@ -1278,9 +1278,7 @@ theorem isBigOWith_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter
simp only [IsBigOWith_def]
apply univ_mem'
intro x
- simp only [mem_setOf_eq]
- rw [div_mul_cancel]
- rwa [Ne.def, norm_eq_zero]
+ rw [mem_setOf, div_mul_cancel _ (norm_ne_zero_iff.mpr hc')]
#align asymptotics.is_O_with_const_const Asymptotics.isBigOWith_const_const
theorem isBigO_const_const (c : E) {c' : F''} (hc' : c' ≠ 0) (l : Filter α) :
@@ -1306,12 +1304,12 @@ theorem isBigO_pure {x} : f'' =O[pure x] g'' ↔ g'' x = 0 → f'' x = 0 :=
end ZeroConst
@[simp]
-theorem isBigOWith_principal {s : Set α} : IsBigOWith c (𝓟 s) f g ↔ ∀ x ∈ s, ‖f x‖ ≤ c * ‖g x‖ :=
- by rw [IsBigOWith_def]; rfl
+theorem isBigOWith_principal {s : Set α} : IsBigOWith c (𝓟 s) f g ↔ ∀ x ∈ s, ‖f x‖ ≤ c * ‖g x‖ := by
+ rw [IsBigOWith_def, eventually_principal]
#align asymptotics.is_O_with_principal Asymptotics.isBigOWith_principal
theorem isBigO_principal {s : Set α} : f =O[𝓟 s] g ↔ ∃ c, ∀ x ∈ s, ‖f x‖ ≤ c * ‖g x‖ := by
- rw [isBigO_iff]; rfl
+ simp_rw [isBigO_iff, eventually_principal]
#align asymptotics.is_O_principal Asymptotics.isBigO_principal
@[simp]
@@ -1319,8 +1317,8 @@ theorem isLittleO_principal {s : Set α} : f'' =o[𝓟 s] g' ↔ ∀ x ∈ s, f'
refine ⟨fun h x hx ↦ norm_le_zero_iff.1 ?_, fun h ↦ ?_⟩
· simp only [isLittleO_iff, isBigOWith_principal] at h
have : Tendsto (fun c : ℝ => c * ‖g' x‖) (𝓝[>] 0) (𝓝 0) :=
- ((continuous_id.mul continuous_const).tendsto' _ _ (zero_mul _)).mono_left
- inf_le_left
+ ((continuous_id.mul continuous_const).tendsto' _ _ (zero_mul _)).mono_left
+ inf_le_left
apply le_of_tendsto_of_tendsto tendsto_const_nhds this
apply eventually_nhdsWithin_iff.2 (eventually_of_forall (fun c hc ↦ ?_))
exact eventually_principal.1 (h hc) x hx
@@ -1328,11 +1326,13 @@ theorem isLittleO_principal {s : Set α} : f'' =o[𝓟 s] g' ↔ ∀ x ∈ s, f'
exact fun x hx ↦ (h x hx).symm
@[simp]
-theorem isBigOWith_top : IsBigOWith c ⊤ f g ↔ ∀ x, ‖f x‖ ≤ c * ‖g x‖ := by rw [IsBigOWith_def]; rfl
+theorem isBigOWith_top : IsBigOWith c ⊤ f g ↔ ∀ x, ‖f x‖ ≤ c * ‖g x‖ := by
+ rw [IsBigOWith_def, eventually_top]
#align asymptotics.is_O_with_top Asymptotics.isBigOWith_top
@[simp]
-theorem isBigO_top : f =O[⊤] g ↔ ∃ C, ∀ x, ‖f x‖ ≤ C * ‖g x‖ := by rw [isBigO_iff]; rfl
+theorem isBigO_top : f =O[⊤] g ↔ ∃ C, ∀ x, ‖f x‖ ≤ C * ‖g x‖ := by
+ simp_rw [isBigO_iff, eventually_top]
#align asymptotics.is_O_top Asymptotics.isBigO_top
@[simp]
@@ -1355,8 +1355,8 @@ theorem isBigO_const_one (c : E) (l : Filter α) : (fun _x : α => c) =O[l] fun
theorem isLittleO_const_iff_isLittleO_one {c : F''} (hc : c ≠ 0) :
(f =o[l] fun _x => c) ↔ f =o[l] fun _x => (1 : F) :=
- ⟨fun h => h.trans_isBigOWith (isBigOWith_const_one _ _ _) (norm_pos_iff.2 hc), fun h =>
- h.trans_isBigO <| isBigO_const_const _ hc _⟩
+ ⟨fun h => h.trans_isBigOWith (isBigOWith_const_one _ _ _) (norm_pos_iff.2 hc),
+ fun h => h.trans_isBigO <| isBigO_const_const _ hc _⟩
#align asymptotics.is_o_const_iff_is_o_one Asymptotics.isLittleO_const_iff_isLittleO_one
@[simp]
@@ -1368,8 +1368,7 @@ theorem isLittleO_one_iff : f' =o[l] (fun _x => 1 : α → F) ↔ Tendsto f' l (
@[simp]
theorem isBigO_one_iff : f =O[l] (fun _x => 1 : α → F) ↔
IsBoundedUnder (· ≤ ·) l fun x => ‖f x‖ := by
- simp only [isBigO_iff, norm_one, mul_one]
- rfl
+ simp only [isBigO_iff, norm_one, mul_one, IsBoundedUnder, IsBounded, eventually_map]
#align asymptotics.is_O_one_iff Asymptotics.isBigO_one_iff
alias ⟨_, _root_.Filter.IsBoundedUnder.isBigO_one⟩ := isBigO_one_iff
@@ -1684,14 +1683,14 @@ theorem IsBigO.pow {f : α → R} {g : α → 𝕜} (h : f =O[l] g) (n : ℕ) :
theorem IsBigO.of_pow {f : α → 𝕜} {g : α → R} {n : ℕ} (hn : n ≠ 0) (h : (f ^ n) =O[l] (g ^ n)) :
f =O[l] g := by
rcases h.exists_pos with ⟨C, _hC₀, hC⟩
- obtain ⟨c, hc₀, hc⟩ : ∃ c : ℝ, 0 ≤ c ∧ C ≤ c ^ n
- exact ((eventually_ge_atTop _).and <| (tendsto_pow_atTop hn).eventually_ge_atTop C).exists
+ obtain ⟨c : ℝ, hc₀ : 0 ≤ c, hc : C ≤ c ^ n⟩ :=
+ ((eventually_ge_atTop _).and <| (tendsto_pow_atTop hn).eventually_ge_atTop C).exists
exact (hC.of_pow hn hc hc₀).isBigO
#align asymptotics.is_O.of_pow Asymptotics.IsBigO.of_pow
theorem IsLittleO.pow {f : α → R} {g : α → 𝕜} (h : f =o[l] g) {n : ℕ} (hn : 0 < n) :
(fun x => f x ^ n) =o[l] fun x => g x ^ n := by
- cases' n with n; exact hn.false.elim; clear hn
+ obtain ⟨n, rfl⟩ := Nat.exists_eq_succ_of_ne_zero hn.ne'; clear hn
induction' n with n ihn
· simpa only [Nat.zero_eq, ←Nat.one_eq_succ_zero, pow_one]
· convert h.mul ihn <;> simp [pow_succ]
@@ -1709,7 +1708,7 @@ theorem IsBigOWith.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : IsBigOWith
(h₀ : ∀ᶠ x in l, f x = 0 → g x = 0) : IsBigOWith c l (fun x => (g x)⁻¹) fun x => (f x)⁻¹ := by
refine' IsBigOWith.of_bound (h.bound.mp (h₀.mono fun x h₀ hle => _))
cases' eq_or_ne (f x) 0 with hx hx
- · simp only [hx, h₀ hx, inv_zero, norm_zero, mul_zero]; rfl
+ · simp only [hx, h₀ hx, inv_zero, norm_zero, mul_zero, le_rfl]
· have hc : 0 < c := pos_of_mul_pos_left ((norm_pos_iff.2 hx).trans_le hle) (norm_nonneg _)
replace hle := inv_le_inv_of_le (norm_pos_iff.2 hx) hle
simpa only [norm_inv, mul_inv, ← div_eq_inv_mul, div_le_iff hc] using hle
@@ -1729,7 +1728,7 @@ theorem IsLittleO.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : f =o[l] g)
/-! ### Scalar multiplication -/
-section SmulConst
+section SMulConst
variable [NormedSpace 𝕜 E']
@@ -1751,7 +1750,7 @@ theorem IsLittleO.const_smul_left (h : f' =o[l] g) (c : 𝕜) : (c • f') =o[l]
#align asymptotics.is_o.const_smul_left Asymptotics.IsLittleO.const_smul_left
theorem isBigO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x) =O[l] g ↔ f' =O[l] g := by
- have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
+ have cne0 : ‖c‖ ≠ 0 := norm_ne_zero_iff.mpr hc
rw [← isBigO_norm_left]
simp only [norm_smul]
rw [isBigO_const_mul_left_iff cne0, isBigO_norm_left]
@@ -1759,7 +1758,7 @@ theorem isBigO_const_smul_left {c : 𝕜} (hc : c ≠ 0) : (fun x => c • f' x)
theorem isLittleO_const_smul_left {c : 𝕜} (hc : c ≠ 0) :
(fun x => c • f' x) =o[l] g ↔ f' =o[l] g := by
- have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
+ have cne0 : ‖c‖ ≠ 0 := norm_ne_zero_iff.mpr hc
rw [← isLittleO_norm_left]
simp only [norm_smul]
rw [isLittleO_const_mul_left_iff cne0, isLittleO_norm_left]
@@ -1767,7 +1766,7 @@ theorem isLittleO_const_smul_left {c : 𝕜} (hc : c ≠ 0) :
theorem isBigO_const_smul_right {c : 𝕜} (hc : c ≠ 0) :
(f =O[l] fun x => c • f' x) ↔ f =O[l] f' := by
- have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
+ have cne0 : ‖c‖ ≠ 0 := norm_ne_zero_iff.mpr hc
rw [← isBigO_norm_right]
simp only [norm_smul]
rw [isBigO_const_mul_right_iff cne0, isBigO_norm_right]
@@ -1775,15 +1774,15 @@ theorem isBigO_const_smul_right {c : 𝕜} (hc : c ≠ 0) :
theorem isLittleO_const_smul_right {c : 𝕜} (hc : c ≠ 0) :
(f =o[l] fun x => c • f' x) ↔ f =o[l] f' := by
- have cne0 : ‖c‖ ≠ 0 := mt norm_eq_zero.mp hc
+ have cne0 : ‖c‖ ≠ 0 := norm_ne_zero_iff.mpr hc
rw [← isLittleO_norm_right]
simp only [norm_smul]
rw [isLittleO_const_mul_right_iff cne0, isLittleO_norm_right]
#align asymptotics.is_o_const_smul_right Asymptotics.isLittleO_const_smul_right
-end SmulConst
+end SMulConst
-section Smul
+section SMul
variable [NormedSpace 𝕜 E'] [NormedSpace 𝕜' F'] {k₁ : α → 𝕜} {k₂ : α → 𝕜'}
@@ -1817,7 +1816,7 @@ theorem IsLittleO.smul (h₁ : k₁ =o[l] k₂) (h₂ : f' =o[l] g') :
· intros; simp only [norm_smul]
#align asymptotics.is_o.smul Asymptotics.IsLittleO.smul
-end Smul
+end SMul
/-! ### Sum -/
@@ -2053,8 +2052,8 @@ theorem isBigO_of_div_tendsto_nhds {α : Type*} {l : Filter α} {f g : α →
theorem IsLittleO.tendsto_zero_of_tendsto {α E 𝕜 : Type*} [NormedAddCommGroup E] [NormedField 𝕜]
{u : α → E} {v : α → 𝕜} {l : Filter α} {y : 𝕜} (huv : u =o[l] v) (hv : Tendsto v l (𝓝 y)) :
Tendsto u l (𝓝 0) := by
- suffices h : u =o[l] fun _x => (1 : 𝕜)
- · rwa [isLittleO_one_iff] at h
+ suffices h : u =o[l] fun _x => (1 : 𝕜) by
+ rwa [isLittleO_one_iff] at h
exact huv.trans_isBigO (hv.isBigO_one 𝕜)
#align asymptotics.is_o.tendsto_zero_of_tendsto Asymptotics.IsLittleO.tendsto_zero_of_tendsto
@@ -2194,12 +2193,12 @@ theorem isLittleO_pi {ι : Type*} [Fintype ι] {E' : ι → Type*} [∀ i, Norme
theorem IsBigO.nat_cast_atTop {R : Type*} [StrictOrderedSemiring R] [Archimedean R]
{f : R → E} {g : R → F} (h : f =O[atTop] g) :
- (fun (n:ℕ) => f n) =O[atTop] (fun n => g n) :=
+ (fun (n : ℕ) => f n) =O[atTop] (fun n => g n) :=
IsBigO.comp_tendsto h tendsto_nat_cast_atTop_atTop
theorem IsLittleO.nat_cast_atTop {R : Type*} [StrictOrderedSemiring R] [Archimedean R]
{f : R → E} {g : R → F} (h : f =o[atTop] g) :
- (fun (n:ℕ) => f n) =o[atTop] (fun n => g n) :=
+ (fun (n : ℕ) => f n) =o[atTop] (fun n => g n) :=
IsLittleO.comp_tendsto h tendsto_nat_cast_atTop_atTop
theorem isBigO_atTop_iff_eventually_exists {α : Type*} [SemilatticeSup α] [Nonempty α]
summable_of_norm_bounded
-> Summable.of_norm_bounded
;summable_of_norm_bounded_eventually
-> Summable.of_norm_bounded_eventually
;summable_of_nnnorm_bounded
-> Summable.of_nnnorm_bounded
;summable_of_summable_norm
-> Summable.of_norm
;summable_of_summable_nnnorm
-> Summable.of_nnnorm
;Summable.of_norm_bounded_eventually_nat
Summable.norm
@@ -2218,7 +2218,7 @@ open Asymptotics
theorem summable_of_isBigO {ι E} [NormedAddCommGroup E] [CompleteSpace E] {f : ι → E} {g : ι → ℝ}
(hg : Summable g) (h : f =O[cofinite] g) : Summable f :=
let ⟨C, hC⟩ := h.isBigOWith
- summable_of_norm_bounded_eventually (fun x => C * ‖g x‖) (hg.abs.mul_left _) hC.bound
+ .of_norm_bounded_eventually (fun x => C * ‖g x‖) (hg.abs.mul_left _) hC.bound
set_option linter.uppercaseLean3 false in
#align summable_of_is_O summable_of_isBigO
rcases
, convert
and congrm
(#7725)
Replace rcases(
with rcases (
. Same thing for convert(
and congrm(
. No other change.
@@ -618,7 +618,7 @@ theorem IsLittleO.trans_le (hfg : f =o[l] g) (hgk : ∀ x, ‖g x‖ ≤ ‖k x
theorem isLittleO_irrefl' (h : ∃ᶠ x in l, ‖f' x‖ ≠ 0) : ¬f' =o[l] f' := by
intro ho
- rcases((ho.bound one_half_pos).and_frequently h).exists with ⟨x, hle, hne⟩
+ rcases ((ho.bound one_half_pos).and_frequently h).exists with ⟨x, hle, hne⟩
rw [one_div, ← div_eq_inv_mul] at hle
exact (half_lt_self (lt_of_le_of_ne (norm_nonneg _) hne.symm)).not_le hle
#align asymptotics.is_o_irrefl' Asymptotics.isLittleO_irrefl'
filter_upwards
(#7719)
mathport was forgetting a space in filter_upwards [...]with
instead of filter_upwards [...] with
.
@@ -330,7 +330,7 @@ theorem isBigOWith_congr (hc : c₁ = c₂) (hf : f₁ =ᶠ[l] f₂) (hg : g₁
simp only [IsBigOWith_def]
subst c₂
apply Filter.eventually_congr
- filter_upwards [hf, hg]with _ e₁ e₂
+ filter_upwards [hf, hg] with _ e₁ e₂
rw [e₁, e₂]
#align asymptotics.is_O_with_congr Asymptotics.isBigOWith_congr
@@ -494,7 +494,7 @@ theorem IsLittleO.mono (h : f =o[l'] g) (hl : l ≤ l') : f =o[l] g :=
theorem IsBigOWith.trans (hfg : IsBigOWith c l f g) (hgk : IsBigOWith c' l g k) (hc : 0 ≤ c) :
IsBigOWith (c * c') l f k := by
simp only [IsBigOWith_def] at *
- filter_upwards [hfg, hgk]with x hx hx'
+ filter_upwards [hfg, hgk] with x hx hx'
calc
‖f x‖ ≤ c * ‖g x‖ := hx
_ ≤ c * (c' * ‖k x‖) := by gcongr
@@ -1015,7 +1015,7 @@ end
theorem IsBigOWith.prod_left_same (hf : IsBigOWith c l f' k') (hg : IsBigOWith c l g' k') :
IsBigOWith c l (fun x => (f' x, g' x)) k' := by
- rw [isBigOWith_iff] at *; filter_upwards [hf, hg]with x using max_le
+ rw [isBigOWith_iff] at *; filter_upwards [hf, hg] with x using max_le
#align asymptotics.is_O_with.prod_left_same Asymptotics.IsBigOWith.prod_left_same
theorem IsBigOWith.prod_left (hf : IsBigOWith c l f' k') (hg : IsBigOWith c' l g' k') :
@@ -1096,7 +1096,7 @@ theorem IsBigOWith.add (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : IsBigOWith c₂
IsBigOWith (c₁ + c₂) l (fun x => f₁ x + f₂ x) g := by
rw [IsBigOWith_def] at *;
filter_upwards [h₁,
- h₂]with x hx₁ hx₂ using calc
+ h₂] with x hx₁ hx₂ using calc
‖f₁ x + f₂ x‖ ≤ c₁ * ‖g x‖ + c₂ * ‖g x‖ := norm_add_le_of_le hx₁ hx₂
_ = (c₁ + c₂) * ‖g x‖ := (add_mul _ _ _).symm
#align asymptotics.is_O_with.add Asymptotics.IsBigOWith.add
@@ -1615,7 +1615,7 @@ theorem IsBigOWith.mul {f₁ f₂ : α → R} {g₁ g₂ : α → 𝕜} {c₁ c
(h₂ : IsBigOWith c₂ l f₂ g₂) :
IsBigOWith (c₁ * c₂) l (fun x => f₁ x * f₂ x) fun x => g₁ x * g₂ x := by
simp only [IsBigOWith_def] at *
- filter_upwards [h₁, h₂]with _ hx₁ hx₂
+ filter_upwards [h₁, h₂] with _ hx₁ hx₂
apply le_trans (norm_mul_le _ _)
convert mul_le_mul hx₁ hx₂ (norm_nonneg _) (le_trans (norm_nonneg _) hx₁) using 1
rw [norm_mul, mul_mul_mul_comm]
And use this to golf isLittleO_top
.
@@ -1305,6 +1305,28 @@ theorem isBigO_pure {x} : f'' =O[pure x] g'' ↔ g'' x = 0 → f'' x = 0 :=
end ZeroConst
+@[simp]
+theorem isBigOWith_principal {s : Set α} : IsBigOWith c (𝓟 s) f g ↔ ∀ x ∈ s, ‖f x‖ ≤ c * ‖g x‖ :=
+ by rw [IsBigOWith_def]; rfl
+#align asymptotics.is_O_with_principal Asymptotics.isBigOWith_principal
+
+theorem isBigO_principal {s : Set α} : f =O[𝓟 s] g ↔ ∃ c, ∀ x ∈ s, ‖f x‖ ≤ c * ‖g x‖ := by
+ rw [isBigO_iff]; rfl
+#align asymptotics.is_O_principal Asymptotics.isBigO_principal
+
+@[simp]
+theorem isLittleO_principal {s : Set α} : f'' =o[𝓟 s] g' ↔ ∀ x ∈ s, f'' x = 0 := by
+ refine ⟨fun h x hx ↦ norm_le_zero_iff.1 ?_, fun h ↦ ?_⟩
+ · simp only [isLittleO_iff, isBigOWith_principal] at h
+ have : Tendsto (fun c : ℝ => c * ‖g' x‖) (𝓝[>] 0) (𝓝 0) :=
+ ((continuous_id.mul continuous_const).tendsto' _ _ (zero_mul _)).mono_left
+ inf_le_left
+ apply le_of_tendsto_of_tendsto tendsto_const_nhds this
+ apply eventually_nhdsWithin_iff.2 (eventually_of_forall (fun c hc ↦ ?_))
+ exact eventually_principal.1 (h hc) x hx
+ · apply (isLittleO_zero g' _).congr' ?_ EventuallyEq.rfl
+ exact fun x hx ↦ (h x hx).symm
+
@[simp]
theorem isBigOWith_top : IsBigOWith c ⊤ f g ↔ ∀ x, ‖f x‖ ≤ c * ‖g x‖ := by rw [IsBigOWith_def]; rfl
#align asymptotics.is_O_with_top Asymptotics.isBigOWith_top
@@ -1314,27 +1336,10 @@ theorem isBigO_top : f =O[⊤] g ↔ ∃ C, ∀ x, ‖f x‖ ≤ C * ‖g x‖ :
#align asymptotics.is_O_top Asymptotics.isBigO_top
@[simp]
-theorem isLittleO_top : f'' =o[⊤] g'' ↔ ∀ x, f'' x = 0 := by
- refine' ⟨_, fun h => (isLittleO_zero g'' ⊤).congr (fun x => (h x).symm) fun x => rfl⟩
- simp only [isLittleO_iff, eventually_top]
- refine' fun h x => norm_le_zero_iff.1 _
- have : Tendsto (fun c : ℝ => c * ‖g'' x‖) (𝓝[>] 0) (𝓝 0) :=
- ((continuous_id.mul continuous_const).tendsto' _ _ (zero_mul _)).mono_left
- inf_le_left
- exact
- le_of_tendsto_of_tendsto tendsto_const_nhds this
- (eventually_nhdsWithin_iff.2 <| eventually_of_forall fun c hc => h hc x)
+theorem isLittleO_top : f'' =o[⊤] g' ↔ ∀ x, f'' x = 0 := by
+ simp only [← principal_univ, isLittleO_principal, mem_univ, forall_true_left]
#align asymptotics.is_o_top Asymptotics.isLittleO_top
-@[simp]
-theorem isBigOWith_principal {s : Set α} : IsBigOWith c (𝓟 s) f g ↔ ∀ x ∈ s, ‖f x‖ ≤ c * ‖g x‖ :=
- by rw [IsBigOWith_def]; rfl
-#align asymptotics.is_O_with_principal Asymptotics.isBigOWith_principal
-
-theorem isBigO_principal {s : Set α} : f =O[𝓟 s] g ↔ ∃ c, ∀ x ∈ s, ‖f x‖ ≤ c * ‖g x‖ := by
- rw [isBigO_iff]; rfl
-#align asymptotics.is_O_principal Asymptotics.isBigO_principal
-
section
variable (F)
@@ -93,7 +93,7 @@ irreducible_def IsBigOWith (c : ℝ) (l : Filter α) (f : α → E) (g : α →
theorem isBigOWith_iff : IsBigOWith c l f g ↔ ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ := by rw [IsBigOWith_def]
#align asymptotics.is_O_with_iff Asymptotics.isBigOWith_iff
-alias isBigOWith_iff ↔ IsBigOWith.bound IsBigOWith.of_bound
+alias ⟨IsBigOWith.bound, IsBigOWith.of_bound⟩ := isBigOWith_iff
#align asymptotics.is_O_with.bound Asymptotics.IsBigOWith.bound
#align asymptotics.is_O_with.of_bound Asymptotics.IsBigOWith.of_bound
@@ -182,7 +182,7 @@ theorem isLittleO_iff_forall_isBigOWith : f =o[l] g ↔ ∀ ⦃c : ℝ⦄, 0 < c
rw [IsLittleO_def]
#align asymptotics.is_o_iff_forall_is_O_with Asymptotics.isLittleO_iff_forall_isBigOWith
-alias isLittleO_iff_forall_isBigOWith ↔ IsLittleO.forall_isBigOWith IsLittleO.of_isBigOWith
+alias ⟨IsLittleO.forall_isBigOWith, IsLittleO.of_isBigOWith⟩ := isLittleO_iff_forall_isBigOWith
#align asymptotics.is_o.forall_is_O_with Asymptotics.IsLittleO.forall_isBigOWith
#align asymptotics.is_o.of_is_O_with Asymptotics.IsLittleO.of_isBigOWith
@@ -191,7 +191,7 @@ theorem isLittleO_iff : f =o[l] g ↔ ∀ ⦃c : ℝ⦄, 0 < c → ∀ᶠ x in l
simp only [IsLittleO_def, IsBigOWith_def]
#align asymptotics.is_o_iff Asymptotics.isLittleO_iff
-alias isLittleO_iff ↔ IsLittleO.bound IsLittleO.of_bound
+alias ⟨IsLittleO.bound, IsLittleO.of_bound⟩ := isLittleO_iff
#align asymptotics.is_o.bound Asymptotics.IsLittleO.bound
#align asymptotics.is_o.of_bound Asymptotics.IsLittleO.of_bound
@@ -737,11 +737,11 @@ theorem isBigOWith_abs_right : (IsBigOWith c l f fun x => |u x|) ↔ IsBigOWith
@isBigOWith_norm_right _ _ _ _ _ _ f u l
#align asymptotics.is_O_with_abs_right Asymptotics.isBigOWith_abs_right
-alias isBigOWith_norm_right ↔ IsBigOWith.of_norm_right IsBigOWith.norm_right
+alias ⟨IsBigOWith.of_norm_right, IsBigOWith.norm_right⟩ := isBigOWith_norm_right
#align asymptotics.is_O_with.of_norm_right Asymptotics.IsBigOWith.of_norm_right
#align asymptotics.is_O_with.norm_right Asymptotics.IsBigOWith.norm_right
-alias isBigOWith_abs_right ↔ IsBigOWith.of_abs_right IsBigOWith.abs_right
+alias ⟨IsBigOWith.of_abs_right, IsBigOWith.abs_right⟩ := isBigOWith_abs_right
#align asymptotics.is_O_with.of_abs_right Asymptotics.IsBigOWith.of_abs_right
#align asymptotics.is_O_with.abs_right Asymptotics.IsBigOWith.abs_right
@@ -756,11 +756,11 @@ theorem isBigO_abs_right : (f =O[l] fun x => |u x|) ↔ f =O[l] u :=
@isBigO_norm_right _ _ ℝ _ _ _ _ _
#align asymptotics.is_O_abs_right Asymptotics.isBigO_abs_right
-alias isBigO_norm_right ↔ IsBigO.of_norm_right IsBigO.norm_right
+alias ⟨IsBigO.of_norm_right, IsBigO.norm_right⟩ := isBigO_norm_right
#align asymptotics.is_O.of_norm_right Asymptotics.IsBigO.of_norm_right
#align asymptotics.is_O.norm_right Asymptotics.IsBigO.norm_right
-alias isBigO_abs_right ↔ IsBigO.of_abs_right IsBigO.abs_right
+alias ⟨IsBigO.of_abs_right, IsBigO.abs_right⟩ := isBigO_abs_right
#align asymptotics.is_O.of_abs_right Asymptotics.IsBigO.of_abs_right
#align asymptotics.is_O.abs_right Asymptotics.IsBigO.abs_right
@@ -775,11 +775,11 @@ theorem isLittleO_abs_right : (f =o[l] fun x => |u x|) ↔ f =o[l] u :=
@isLittleO_norm_right _ _ ℝ _ _ _ _ _
#align asymptotics.is_o_abs_right Asymptotics.isLittleO_abs_right
-alias isLittleO_norm_right ↔ IsLittleO.of_norm_right IsLittleO.norm_right
+alias ⟨IsLittleO.of_norm_right, IsLittleO.norm_right⟩ := isLittleO_norm_right
#align asymptotics.is_o.of_norm_right Asymptotics.IsLittleO.of_norm_right
#align asymptotics.is_o.norm_right Asymptotics.IsLittleO.norm_right
-alias isLittleO_abs_right ↔ IsLittleO.of_abs_right IsLittleO.abs_right
+alias ⟨IsLittleO.of_abs_right, IsLittleO.abs_right⟩ := isLittleO_abs_right
#align asymptotics.is_o.of_abs_right Asymptotics.IsLittleO.of_abs_right
#align asymptotics.is_o.abs_right Asymptotics.IsLittleO.abs_right
@@ -793,11 +793,11 @@ theorem isBigOWith_abs_left : IsBigOWith c l (fun x => |u x|) g ↔ IsBigOWith c
@isBigOWith_norm_left _ _ _ _ _ _ g u l
#align asymptotics.is_O_with_abs_left Asymptotics.isBigOWith_abs_left
-alias isBigOWith_norm_left ↔ IsBigOWith.of_norm_left IsBigOWith.norm_left
+alias ⟨IsBigOWith.of_norm_left, IsBigOWith.norm_left⟩ := isBigOWith_norm_left
#align asymptotics.is_O_with.of_norm_left Asymptotics.IsBigOWith.of_norm_left
#align asymptotics.is_O_with.norm_left Asymptotics.IsBigOWith.norm_left
-alias isBigOWith_abs_left ↔ IsBigOWith.of_abs_left IsBigOWith.abs_left
+alias ⟨IsBigOWith.of_abs_left, IsBigOWith.abs_left⟩ := isBigOWith_abs_left
#align asymptotics.is_O_with.of_abs_left Asymptotics.IsBigOWith.of_abs_left
#align asymptotics.is_O_with.abs_left Asymptotics.IsBigOWith.abs_left
@@ -812,11 +812,11 @@ theorem isBigO_abs_left : (fun x => |u x|) =O[l] g ↔ u =O[l] g :=
@isBigO_norm_left _ _ _ _ _ g u l
#align asymptotics.is_O_abs_left Asymptotics.isBigO_abs_left
-alias isBigO_norm_left ↔ IsBigO.of_norm_left IsBigO.norm_left
+alias ⟨IsBigO.of_norm_left, IsBigO.norm_left⟩ := isBigO_norm_left
#align asymptotics.is_O.of_norm_left Asymptotics.IsBigO.of_norm_left
#align asymptotics.is_O.norm_left Asymptotics.IsBigO.norm_left
-alias isBigO_abs_left ↔ IsBigO.of_abs_left IsBigO.abs_left
+alias ⟨IsBigO.of_abs_left, IsBigO.abs_left⟩ := isBigO_abs_left
#align asymptotics.is_O.of_abs_left Asymptotics.IsBigO.of_abs_left
#align asymptotics.is_O.abs_left Asymptotics.IsBigO.abs_left
@@ -831,11 +831,11 @@ theorem isLittleO_abs_left : (fun x => |u x|) =o[l] g ↔ u =o[l] g :=
@isLittleO_norm_left _ _ _ _ _ g u l
#align asymptotics.is_o_abs_left Asymptotics.isLittleO_abs_left
-alias isLittleO_norm_left ↔ IsLittleO.of_norm_left IsLittleO.norm_left
+alias ⟨IsLittleO.of_norm_left, IsLittleO.norm_left⟩ := isLittleO_norm_left
#align asymptotics.is_o.of_norm_left Asymptotics.IsLittleO.of_norm_left
#align asymptotics.is_o.norm_left Asymptotics.IsLittleO.norm_left
-alias isLittleO_abs_left ↔ IsLittleO.of_abs_left IsLittleO.abs_left
+alias ⟨IsLittleO.of_abs_left, IsLittleO.abs_left⟩ := isLittleO_abs_left
#align asymptotics.is_o.of_abs_left Asymptotics.IsLittleO.of_abs_left
#align asymptotics.is_o.abs_left Asymptotics.IsLittleO.abs_left
@@ -849,11 +849,11 @@ theorem isBigOWith_abs_abs :
isBigOWith_abs_left.trans isBigOWith_abs_right
#align asymptotics.is_O_with_abs_abs Asymptotics.isBigOWith_abs_abs
-alias isBigOWith_norm_norm ↔ IsBigOWith.of_norm_norm IsBigOWith.norm_norm
+alias ⟨IsBigOWith.of_norm_norm, IsBigOWith.norm_norm⟩ := isBigOWith_norm_norm
#align asymptotics.is_O_with.of_norm_norm Asymptotics.IsBigOWith.of_norm_norm
#align asymptotics.is_O_with.norm_norm Asymptotics.IsBigOWith.norm_norm
-alias isBigOWith_abs_abs ↔ IsBigOWith.of_abs_abs IsBigOWith.abs_abs
+alias ⟨IsBigOWith.of_abs_abs, IsBigOWith.abs_abs⟩ := isBigOWith_abs_abs
#align asymptotics.is_O_with.of_abs_abs Asymptotics.IsBigOWith.of_abs_abs
#align asymptotics.is_O_with.abs_abs Asymptotics.IsBigOWith.abs_abs
@@ -865,11 +865,11 @@ theorem isBigO_abs_abs : ((fun x => |u x|) =O[l] fun x => |v x|) ↔ u =O[l] v :
isBigO_abs_left.trans isBigO_abs_right
#align asymptotics.is_O_abs_abs Asymptotics.isBigO_abs_abs
-alias isBigO_norm_norm ↔ IsBigO.of_norm_norm IsBigO.norm_norm
+alias ⟨IsBigO.of_norm_norm, IsBigO.norm_norm⟩ := isBigO_norm_norm
#align asymptotics.is_O.of_norm_norm Asymptotics.IsBigO.of_norm_norm
#align asymptotics.is_O.norm_norm Asymptotics.IsBigO.norm_norm
-alias isBigO_abs_abs ↔ IsBigO.of_abs_abs IsBigO.abs_abs
+alias ⟨IsBigO.of_abs_abs, IsBigO.abs_abs⟩ := isBigO_abs_abs
#align asymptotics.is_O.of_abs_abs Asymptotics.IsBigO.of_abs_abs
#align asymptotics.is_O.abs_abs Asymptotics.IsBigO.abs_abs
@@ -881,11 +881,11 @@ theorem isLittleO_abs_abs : ((fun x => |u x|) =o[l] fun x => |v x|) ↔ u =o[l]
isLittleO_abs_left.trans isLittleO_abs_right
#align asymptotics.is_o_abs_abs Asymptotics.isLittleO_abs_abs
-alias isLittleO_norm_norm ↔ IsLittleO.of_norm_norm IsLittleO.norm_norm
+alias ⟨IsLittleO.of_norm_norm, IsLittleO.norm_norm⟩ := isLittleO_norm_norm
#align asymptotics.is_o.of_norm_norm Asymptotics.IsLittleO.of_norm_norm
#align asymptotics.is_o.norm_norm Asymptotics.IsLittleO.norm_norm
-alias isLittleO_abs_abs ↔ IsLittleO.of_abs_abs IsLittleO.abs_abs
+alias ⟨IsLittleO.of_abs_abs, IsLittleO.abs_abs⟩ := isLittleO_abs_abs
#align asymptotics.is_o.of_abs_abs Asymptotics.IsLittleO.of_abs_abs
#align asymptotics.is_o.abs_abs Asymptotics.IsLittleO.abs_abs
@@ -899,7 +899,7 @@ theorem isBigOWith_neg_right : (IsBigOWith c l f fun x => -g' x) ↔ IsBigOWith
simp only [IsBigOWith_def, norm_neg]
#align asymptotics.is_O_with_neg_right Asymptotics.isBigOWith_neg_right
-alias isBigOWith_neg_right ↔ IsBigOWith.of_neg_right IsBigOWith.neg_right
+alias ⟨IsBigOWith.of_neg_right, IsBigOWith.neg_right⟩ := isBigOWith_neg_right
#align asymptotics.is_O_with.of_neg_right Asymptotics.IsBigOWith.of_neg_right
#align asymptotics.is_O_with.neg_right Asymptotics.IsBigOWith.neg_right
@@ -909,7 +909,7 @@ theorem isBigO_neg_right : (f =O[l] fun x => -g' x) ↔ f =O[l] g' := by
exact exists_congr fun _ => isBigOWith_neg_right
#align asymptotics.is_O_neg_right Asymptotics.isBigO_neg_right
-alias isBigO_neg_right ↔ IsBigO.of_neg_right IsBigO.neg_right
+alias ⟨IsBigO.of_neg_right, IsBigO.neg_right⟩ := isBigO_neg_right
#align asymptotics.is_O.of_neg_right Asymptotics.IsBigO.of_neg_right
#align asymptotics.is_O.neg_right Asymptotics.IsBigO.neg_right
@@ -919,7 +919,7 @@ theorem isLittleO_neg_right : (f =o[l] fun x => -g' x) ↔ f =o[l] g' := by
exact forall₂_congr fun _ _ => isBigOWith_neg_right
#align asymptotics.is_o_neg_right Asymptotics.isLittleO_neg_right
-alias isLittleO_neg_right ↔ IsLittleO.of_neg_right IsLittleO.neg_right
+alias ⟨IsLittleO.of_neg_right, IsLittleO.neg_right⟩ := isLittleO_neg_right
#align asymptotics.is_o.of_neg_right Asymptotics.IsLittleO.of_neg_right
#align asymptotics.is_o.neg_right Asymptotics.IsLittleO.neg_right
@@ -928,7 +928,7 @@ theorem isBigOWith_neg_left : IsBigOWith c l (fun x => -f' x) g ↔ IsBigOWith c
simp only [IsBigOWith_def, norm_neg]
#align asymptotics.is_O_with_neg_left Asymptotics.isBigOWith_neg_left
-alias isBigOWith_neg_left ↔ IsBigOWith.of_neg_left IsBigOWith.neg_left
+alias ⟨IsBigOWith.of_neg_left, IsBigOWith.neg_left⟩ := isBigOWith_neg_left
#align asymptotics.is_O_with.of_neg_left Asymptotics.IsBigOWith.of_neg_left
#align asymptotics.is_O_with.neg_left Asymptotics.IsBigOWith.neg_left
@@ -938,7 +938,7 @@ theorem isBigO_neg_left : (fun x => -f' x) =O[l] g ↔ f' =O[l] g := by
exact exists_congr fun _ => isBigOWith_neg_left
#align asymptotics.is_O_neg_left Asymptotics.isBigO_neg_left
-alias isBigO_neg_left ↔ IsBigO.of_neg_left IsBigO.neg_left
+alias ⟨IsBigO.of_neg_left, IsBigO.neg_left⟩ := isBigO_neg_left
#align asymptotics.is_O.of_neg_left Asymptotics.IsBigO.of_neg_left
#align asymptotics.is_O.neg_left Asymptotics.IsBigO.neg_left
@@ -948,7 +948,7 @@ theorem isLittleO_neg_left : (fun x => -f' x) =o[l] g ↔ f' =o[l] g := by
exact forall₂_congr fun _ _ => isBigOWith_neg_left
#align asymptotics.is_o_neg_left Asymptotics.isLittleO_neg_left
-alias isLittleO_neg_left ↔ IsLittleO.of_neg_left IsLittleO.neg_left
+alias ⟨IsLittleO.of_neg_left, IsLittleO.neg_left⟩ := isLittleO_neg_left
#align asymptotics.is_o.of_neg_left Asymptotics.IsLittleO.of_neg_left
#align asymptotics.is_o.neg_left Asymptotics.IsLittleO.neg_left
@@ -1367,7 +1367,7 @@ theorem isBigO_one_iff : f =O[l] (fun _x => 1 : α → F) ↔
rfl
#align asymptotics.is_O_one_iff Asymptotics.isBigO_one_iff
-alias isBigO_one_iff ↔ _ _root_.Filter.IsBoundedUnder.isBigO_one
+alias ⟨_, _root_.Filter.IsBoundedUnder.isBigO_one⟩ := isBigO_one_iff
#align filter.is_bounded_under.is_O_one Filter.IsBoundedUnder.isBigO_one
@[simp]
@@ -1874,10 +1874,10 @@ theorem isLittleO_iff_tendsto {f g : α → 𝕜} (hgf : ∀ x, g x = 0 → f x
isLittleO_iff_tendsto' (eventually_of_forall hgf)
#align asymptotics.is_o_iff_tendsto Asymptotics.isLittleO_iff_tendsto
-alias isLittleO_iff_tendsto' ↔ _ isLittleO_of_tendsto'
+alias ⟨_, isLittleO_of_tendsto'⟩ := isLittleO_iff_tendsto'
#align asymptotics.is_o_of_tendsto' Asymptotics.isLittleO_of_tendsto'
-alias isLittleO_iff_tendsto ↔ _ isLittleO_of_tendsto
+alias ⟨_, isLittleO_of_tendsto⟩ := isLittleO_iff_tendsto
#align asymptotics.is_o_of_tendsto Asymptotics.isLittleO_of_tendsto
theorem isLittleO_const_left_of_ne {c : E''} (hc : c ≠ 0) :
@@ -1998,7 +1998,7 @@ theorem isBigO_iff_exists_eq_mul :
exact isBigO_iff_isBigOWith.2 ⟨c, isBigOWith_of_eq_mul φ hφ huvφ⟩
#align asymptotics.is_O_iff_exists_eq_mul Asymptotics.isBigO_iff_exists_eq_mul
-alias isBigO_iff_exists_eq_mul ↔ IsBigO.exists_eq_mul _
+alias ⟨IsBigO.exists_eq_mul, _⟩ := isBigO_iff_exists_eq_mul
#align asymptotics.is_O.exists_eq_mul Asymptotics.IsBigO.exists_eq_mul
theorem isLittleO_iff_exists_eq_mul :
@@ -2011,7 +2011,7 @@ theorem isLittleO_iff_exists_eq_mul :
exact isBigOWith_of_eq_mul _ ((hφ c hpos).mono fun x => le_of_lt) huvφ
#align asymptotics.is_o_iff_exists_eq_mul Asymptotics.isLittleO_iff_exists_eq_mul
-alias isLittleO_iff_exists_eq_mul ↔ IsLittleO.exists_eq_mul _
+alias ⟨IsLittleO.exists_eq_mul, _⟩ := isLittleO_iff_exists_eq_mul
#align asymptotics.is_o.exists_eq_mul Asymptotics.IsLittleO.exists_eq_mul
end ExistsMulEq
MulZeroClass.
in mul_zero
/zero_mul
(#6682)
Search&replace MulZeroClass.mul_zero
-> mul_zero
, MulZeroClass.zero_mul
-> zero_mul
.
These were introduced by Mathport, as the full name of mul_zero
is actually MulZeroClass.mul_zero
(it's exported with the short name).
@@ -283,7 +283,7 @@ theorem isLittleO_iff_nat_mul_le_aux (h₀ : (∀ x, 0 ≤ ‖f x‖) ∨ ∀ x,
constructor
· rintro H (_ | n)
· refine' (H.def one_pos).mono fun x h₀' => _
- rw [Nat.cast_zero, MulZeroClass.zero_mul]
+ rw [Nat.cast_zero, zero_mul]
refine' h₀.elim (fun hf => (hf x).trans _) fun hg => hg x
rwa [one_mul] at h₀'
· have : (0 : ℝ) < n.succ := Nat.cast_pos.2 n.succ_pos
@@ -1255,7 +1255,7 @@ variable {g g' l}
@[simp]
theorem isBigOWith_zero_right_iff : (IsBigOWith c l f'' fun _x => (0 : F')) ↔ f'' =ᶠ[l] 0 := by
- simp only [IsBigOWith_def, exists_prop, true_and_iff, norm_zero, MulZeroClass.mul_zero,
+ simp only [IsBigOWith_def, exists_prop, true_and_iff, norm_zero, mul_zero,
norm_le_zero_iff, EventuallyEq, Pi.zero_apply]
#align asymptotics.is_O_with_zero_right_iff Asymptotics.isBigOWith_zero_right_iff
@@ -1319,7 +1319,7 @@ theorem isLittleO_top : f'' =o[⊤] g'' ↔ ∀ x, f'' x = 0 := by
simp only [isLittleO_iff, eventually_top]
refine' fun h x => norm_le_zero_iff.1 _
have : Tendsto (fun c : ℝ => c * ‖g'' x‖) (𝓝[>] 0) (𝓝 0) :=
- ((continuous_id.mul continuous_const).tendsto' _ _ (MulZeroClass.zero_mul _)).mono_left
+ ((continuous_id.mul continuous_const).tendsto' _ _ (zero_mul _)).mono_left
inf_le_left
exact
le_of_tendsto_of_tendsto tendsto_const_nhds this
@@ -1704,7 +1704,7 @@ theorem IsBigOWith.inv_rev {f : α → 𝕜} {g : α → 𝕜'} (h : IsBigOWith
(h₀ : ∀ᶠ x in l, f x = 0 → g x = 0) : IsBigOWith c l (fun x => (g x)⁻¹) fun x => (f x)⁻¹ := by
refine' IsBigOWith.of_bound (h.bound.mp (h₀.mono fun x h₀ hle => _))
cases' eq_or_ne (f x) 0 with hx hx
- · simp only [hx, h₀ hx, inv_zero, norm_zero, MulZeroClass.mul_zero]; rfl
+ · simp only [hx, h₀ hx, inv_zero, norm_zero, mul_zero]; rfl
· have hc : 0 < c := pos_of_mul_pos_left ((norm_pos_iff.2 hx).trans_le hle) (norm_nonneg _)
replace hle := inv_le_inv_of_le (norm_pos_iff.2 hx) hle
simpa only [norm_inv, mul_inv, ← div_eq_inv_mul, div_le_iff hc] using hle
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -55,9 +55,9 @@ namespace Asymptotics
set_option linter.uppercaseLean3 false
-variable {α : Type _} {β : Type _} {E : Type _} {F : Type _} {G : Type _} {E' : Type _}
- {F' : Type _} {G' : Type _} {E'' : Type _} {F'' : Type _} {G'' : Type _} {E''' : Type _}
- {R : Type _} {R' : Type _} {𝕜 : Type _} {𝕜' : Type _}
+variable {α : Type*} {β : Type*} {E : Type*} {F : Type*} {G : Type*} {E' : Type*}
+ {F' : Type*} {G' : Type*} {E'' : Type*} {F'' : Type*} {G'' : Type*} {E''' : Type*}
+ {R : Type*} {R' : Type*} {𝕜 : Type*} {𝕜' : Type*}
variable [Norm E] [Norm F] [Norm G]
@@ -1819,7 +1819,7 @@ end Smul
section Sum
-variable {ι : Type _} {A : ι → α → E'} {C : ι → ℝ} {s : Finset ι}
+variable {ι : Type*} {A : ι → α → E'} {C : ι → ℝ} {s : Finset ι}
theorem IsBigOWith.sum (h : ∀ i ∈ s, IsBigOWith (C i) l (A i) g) :
IsBigOWith (∑ i in s, C i) l (fun x => ∑ i in s, A i x) g := by
@@ -2019,7 +2019,7 @@ end ExistsMulEq
/-! ### Miscellaneous lemmas -/
-theorem div_isBoundedUnder_of_isBigO {α : Type _} {l : Filter α} {f g : α → 𝕜} (h : f =O[l] g) :
+theorem div_isBoundedUnder_of_isBigO {α : Type*} {l : Filter α} {f g : α → 𝕜} (h : f =O[l] g) :
IsBoundedUnder (· ≤ ·) l fun x => ‖f x / g x‖ := by
obtain ⟨c, h₀, hc⟩ := h.exists_nonneg
refine' ⟨c, eventually_map.2 (hc.bound.mono fun x hx => _)⟩
@@ -2027,7 +2027,7 @@ theorem div_isBoundedUnder_of_isBigO {α : Type _} {l : Filter α} {f g : α →
exact div_le_of_nonneg_of_le_mul (norm_nonneg _) h₀ hx
#align asymptotics.div_is_bounded_under_of_is_O Asymptotics.div_isBoundedUnder_of_isBigO
-theorem isBigO_iff_div_isBoundedUnder {α : Type _} {l : Filter α} {f g : α → 𝕜}
+theorem isBigO_iff_div_isBoundedUnder {α : Type*} {l : Filter α} {f g : α → 𝕜}
(hgf : ∀ᶠ x in l, g x = 0 → f x = 0) :
f =O[l] g ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x / g x‖ := by
refine' ⟨div_isBoundedUnder_of_isBigO, fun h => _⟩
@@ -2039,13 +2039,13 @@ theorem isBigO_iff_div_isBoundedUnder {α : Type _} {l : Filter α} {f g : α
· exact (div_le_iff (norm_pos_iff.2 hgx)).mp hx₂
#align asymptotics.is_O_iff_div_is_bounded_under Asymptotics.isBigO_iff_div_isBoundedUnder
-theorem isBigO_of_div_tendsto_nhds {α : Type _} {l : Filter α} {f g : α → 𝕜}
+theorem isBigO_of_div_tendsto_nhds {α : Type*} {l : Filter α} {f g : α → 𝕜}
(hgf : ∀ᶠ x in l, g x = 0 → f x = 0) (c : 𝕜) (H : Filter.Tendsto (f / g) l (𝓝 c)) :
f =O[l] g :=
(isBigO_iff_div_isBoundedUnder hgf).2 <| H.norm.isBoundedUnder_le
#align asymptotics.is_O_of_div_tendsto_nhds Asymptotics.isBigO_of_div_tendsto_nhds
-theorem IsLittleO.tendsto_zero_of_tendsto {α E 𝕜 : Type _} [NormedAddCommGroup E] [NormedField 𝕜]
+theorem IsLittleO.tendsto_zero_of_tendsto {α E 𝕜 : Type*} [NormedAddCommGroup E] [NormedField 𝕜]
{u : α → E} {v : α → 𝕜} {l : Filter α} {y : 𝕜} (huv : u =o[l] v) (hv : Tendsto v l (𝓝 y)) :
Tendsto u l (𝓝 0) := by
suffices h : u =o[l] fun _x => (1 : 𝕜)
@@ -2166,7 +2166,7 @@ theorem isBigO_one_nat_atTop_iff {f : ℕ → E''} :
simp only [norm_one, mul_one]
#align asymptotics.is_O_one_nat_at_top_iff Asymptotics.isBigO_one_nat_atTop_iff
-theorem isBigOWith_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, NormedAddCommGroup (E' i)]
+theorem isBigOWith_pi {ι : Type*} [Fintype ι] {E' : ι → Type*} [∀ i, NormedAddCommGroup (E' i)]
{f : α → ∀ i, E' i} {C : ℝ} (hC : 0 ≤ C) :
IsBigOWith C l f g' ↔ ∀ i, IsBigOWith C l (fun x => f x i) g' := by
have : ∀ x, 0 ≤ C * ‖g' x‖ := fun x => mul_nonneg hC (norm_nonneg _)
@@ -2174,34 +2174,34 @@ theorem isBigOWith_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, No
#align asymptotics.is_O_with_pi Asymptotics.isBigOWith_pi
@[simp]
-theorem isBigO_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, NormedAddCommGroup (E' i)]
+theorem isBigO_pi {ι : Type*} [Fintype ι] {E' : ι → Type*} [∀ i, NormedAddCommGroup (E' i)]
{f : α → ∀ i, E' i} : f =O[l] g' ↔ ∀ i, (fun x => f x i) =O[l] g' := by
simp only [isBigO_iff_eventually_isBigOWith, ← eventually_all]
exact eventually_congr (eventually_atTop.2 ⟨0, fun c => isBigOWith_pi⟩)
#align asymptotics.is_O_pi Asymptotics.isBigO_pi
@[simp]
-theorem isLittleO_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, NormedAddCommGroup (E' i)]
+theorem isLittleO_pi {ι : Type*} [Fintype ι] {E' : ι → Type*} [∀ i, NormedAddCommGroup (E' i)]
{f : α → ∀ i, E' i} : f =o[l] g' ↔ ∀ i, (fun x => f x i) =o[l] g' := by
simp (config := { contextual := true }) only [IsLittleO_def, isBigOWith_pi, le_of_lt]
exact ⟨fun h i c hc => h hc i, fun h c hc i => h i hc⟩
#align asymptotics.is_o_pi Asymptotics.isLittleO_pi
-theorem IsBigO.nat_cast_atTop {R : Type _} [StrictOrderedSemiring R] [Archimedean R]
+theorem IsBigO.nat_cast_atTop {R : Type*} [StrictOrderedSemiring R] [Archimedean R]
{f : R → E} {g : R → F} (h : f =O[atTop] g) :
(fun (n:ℕ) => f n) =O[atTop] (fun n => g n) :=
IsBigO.comp_tendsto h tendsto_nat_cast_atTop_atTop
-theorem IsLittleO.nat_cast_atTop {R : Type _} [StrictOrderedSemiring R] [Archimedean R]
+theorem IsLittleO.nat_cast_atTop {R : Type*} [StrictOrderedSemiring R] [Archimedean R]
{f : R → E} {g : R → F} (h : f =o[atTop] g) :
(fun (n:ℕ) => f n) =o[atTop] (fun n => g n) :=
IsLittleO.comp_tendsto h tendsto_nat_cast_atTop_atTop
-theorem isBigO_atTop_iff_eventually_exists {α : Type _} [SemilatticeSup α] [Nonempty α]
+theorem isBigO_atTop_iff_eventually_exists {α : Type*} [SemilatticeSup α] [Nonempty α]
{f : α → E} {g : α → F} : f =O[atTop] g ↔ ∀ᶠ n₀ in atTop, ∃ c, ∀ n ≥ n₀, ‖f n‖ ≤ c * ‖g n‖ := by
rw [isBigO_iff, exists_eventually_atTop]
-theorem isBigO_atTop_iff_eventually_exists_pos {α : Type _}
+theorem isBigO_atTop_iff_eventually_exists_pos {α : Type*}
[SemilatticeSup α] [Nonempty α] {f : α → G} {g : α → G'} :
f =O[atTop] g ↔ ∀ᶠ n₀ in atTop, ∃ c > 0, ∀ n ≥ n₀, c * ‖f n‖ ≤ ‖g n‖ := by
simp_rw [isBigO_iff'', ← exists_prop, Subtype.exists', exists_eventually_atTop]
@@ -2225,9 +2225,9 @@ set_option linter.uppercaseLean3 false in
namespace LocalHomeomorph
-variable {α : Type _} {β : Type _} [TopologicalSpace α] [TopologicalSpace β]
+variable {α : Type*} {β : Type*} [TopologicalSpace α] [TopologicalSpace β]
-variable {E : Type _} [Norm E] {F : Type _} [Norm F]
+variable {E : Type*} [Norm E] {F : Type*} [Norm F]
/-- Transfer `IsBigOWith` over a `LocalHomeomorph`. -/
theorem isBigOWith_congr (e : LocalHomeomorph α β) {b : β} (hb : b ∈ e.target) {f : β → E}
@@ -2263,9 +2263,9 @@ end LocalHomeomorph
namespace Homeomorph
-variable {α : Type _} {β : Type _} [TopologicalSpace α] [TopologicalSpace β]
+variable {α : Type*} {β : Type*} [TopologicalSpace α] [TopologicalSpace β]
-variable {E : Type _} [Norm E] {F : Type _} [Norm F]
+variable {E : Type*} [Norm E] {F : Type*} [Norm F]
open Asymptotics
IsBigO
along atTop
(#6198)
This PR adds a way to characterize IsBigO
along the atTop
filter, for cases where we want the constant to depend on a "starting point" n₀
.
It also adds the lemma tendsto_nhds_of_eventually_eq
.
@@ -2197,6 +2197,15 @@ theorem IsLittleO.nat_cast_atTop {R : Type _} [StrictOrderedSemiring R] [Archime
(fun (n:ℕ) => f n) =o[atTop] (fun n => g n) :=
IsLittleO.comp_tendsto h tendsto_nat_cast_atTop_atTop
+theorem isBigO_atTop_iff_eventually_exists {α : Type _} [SemilatticeSup α] [Nonempty α]
+ {f : α → E} {g : α → F} : f =O[atTop] g ↔ ∀ᶠ n₀ in atTop, ∃ c, ∀ n ≥ n₀, ‖f n‖ ≤ c * ‖g n‖ := by
+ rw [isBigO_iff, exists_eventually_atTop]
+
+theorem isBigO_atTop_iff_eventually_exists_pos {α : Type _}
+ [SemilatticeSup α] [Nonempty α] {f : α → G} {g : α → G'} :
+ f =O[atTop] g ↔ ∀ᶠ n₀ in atTop, ∃ c > 0, ∀ n ≥ n₀, c * ‖f n‖ ≤ ‖g n‖ := by
+ simp_rw [isBigO_iff'', ← exists_prop, Subtype.exists', exists_eventually_atTop]
+
end Asymptotics
open Asymptotics
protected
to *.insert
theorems (#6142)
Otherwise code like
theorem ContMDiffWithinAt.mythm (h : x ∈ insert y s) : _ = _
interprets insert
as ContMDiffWithinAt.insert
, not Insert.insert
.
@@ -700,8 +700,8 @@ theorem isBigOWith_insert [TopologicalSpace α] {x : α} {s : Set α} {C : ℝ}
simp_rw [IsBigOWith_def, nhdsWithin_insert, eventually_sup, eventually_pure, h, true_and_iff]
#align asymptotics.is_O_with_insert Asymptotics.isBigOWith_insert
-theorem IsBigOWith.insert [TopologicalSpace α] {x : α} {s : Set α} {C : ℝ} {g : α → E} {g' : α → F}
- (h1 : IsBigOWith C (𝓝[s] x) g g') (h2 : ‖g x‖ ≤ C * ‖g' x‖) :
+protected theorem IsBigOWith.insert [TopologicalSpace α] {x : α} {s : Set α} {C : ℝ} {g : α → E}
+ {g' : α → F} (h1 : IsBigOWith C (𝓝[s] x) g g') (h2 : ‖g x‖ ≤ C * ‖g' x‖) :
IsBigOWith C (𝓝[insert x s] x) g g' :=
(isBigOWith_insert h2).mpr h1
#align asymptotics.is_O_with.insert Asymptotics.IsBigOWith.insert
@@ -715,8 +715,8 @@ theorem isLittleO_insert [TopologicalSpace α] {x : α} {s : Set α} {g : α →
exact mul_nonneg hc.le (norm_nonneg _)
#align asymptotics.is_o_insert Asymptotics.isLittleO_insert
-theorem IsLittleO.insert [TopologicalSpace α] {x : α} {s : Set α} {g : α → E'} {g' : α → F'}
- (h1 : g =o[𝓝[s] x] g') (h2 : g x = 0) : g =o[𝓝[insert x s] x] g' :=
+protected theorem IsLittleO.insert [TopologicalSpace α] {x : α} {s : Set α} {g : α → E'}
+ {g' : α → F'} (h1 : g =o[𝓝[s] x] g') (h2 : g x = 0) : g =o[𝓝[insert x s] x] g' :=
(isLittleO_insert h2).mpr h1
#align asymptotics.is_o.insert Asymptotics.IsLittleO.insert
@@ -2,17 +2,14 @@
Copyright (c) 2019 Jeremy Avigad. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Jeremy Avigad, Yury Kudryashov
-
-! This file was ported from Lean 3 source module analysis.asymptotics.asymptotics
-! 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.Normed.Group.InfiniteSum
import Mathlib.Analysis.NormedSpace.Basic
import Mathlib.Topology.Algebra.Order.LiminfLimsup
import Mathlib.Topology.LocalHomeomorph
+#align_import analysis.asymptotics.asymptotics from "leanprover-community/mathlib"@"f2ce6086713c78a7f880485f7917ea547a215982"
+
/-!
# Asymptotics
@@ -59,13 +59,14 @@ namespace Asymptotics
set_option linter.uppercaseLean3 false
variable {α : Type _} {β : Type _} {E : Type _} {F : Type _} {G : Type _} {E' : Type _}
- {F' : Type _} {G' : Type _} {E'' : Type _} {F'' : Type _} {G'' : Type _} {R : Type _}
- {R' : Type _} {𝕜 : Type _} {𝕜' : Type _}
+ {F' : Type _} {G' : Type _} {E'' : Type _} {F'' : Type _} {G'' : Type _} {E''' : Type _}
+ {R : Type _} {R' : Type _} {𝕜 : Type _} {𝕜' : Type _}
variable [Norm E] [Norm F] [Norm G]
variable [SeminormedAddCommGroup E'] [SeminormedAddCommGroup F'] [SeminormedAddCommGroup G']
[NormedAddCommGroup E''] [NormedAddCommGroup F''] [NormedAddCommGroup G''] [SeminormedRing R]
+ [SeminormedAddGroup E''']
[SeminormedRing R']
variable [NormedField 𝕜] [NormedField 𝕜']
@@ -120,6 +121,40 @@ theorem isBigO_iff : f =O[l] g ↔ ∃ c : ℝ, ∀ᶠ x in l, ‖f x‖ ≤ c *
simp only [IsBigO_def, IsBigOWith_def]
#align asymptotics.is_O_iff Asymptotics.isBigO_iff
+/-- Definition of `IsBigO` in terms of filters, with a positive constant. -/
+theorem isBigO_iff' {g : α → E'''} :
+ f =O[l] g ↔ ∃ c > 0, ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖ := by
+ refine ⟨fun h => ?mp, fun h => ?mpr⟩
+ case mp =>
+ rw [isBigO_iff] at h
+ obtain ⟨c, hc⟩ := h
+ refine' ⟨max c 1, zero_lt_one.trans_le (le_max_right _ _), _⟩
+ filter_upwards [hc] with x hx
+ apply hx.trans
+ gcongr
+ exact le_max_left _ _
+ case mpr =>
+ rw [isBigO_iff]
+ obtain ⟨c, ⟨_, hc⟩⟩ := h
+ exact ⟨c, hc⟩
+
+/-- Definition of `IsBigO` in terms of filters, with the constant in the lower bound. -/
+theorem isBigO_iff'' {g : α → E'''} :
+ f =O[l] g ↔ ∃ c > 0, ∀ᶠ x in l, c * ‖f x‖ ≤ ‖g x‖ := by
+ refine ⟨fun h => ?mp, fun h => ?mpr⟩
+ case mp =>
+ rw [isBigO_iff'] at h
+ obtain ⟨c, ⟨hc_pos, hc⟩⟩ := h
+ refine ⟨c⁻¹, ⟨by positivity, ?_⟩⟩
+ filter_upwards [hc] with x hx
+ rwa [inv_mul_le_iff (by positivity)]
+ case mpr =>
+ rw [isBigO_iff']
+ obtain ⟨c, ⟨hc_pos, hc⟩⟩ := h
+ refine ⟨c⁻¹, ⟨by positivity, ?_⟩⟩
+ filter_upwards [hc] with x hx
+ rwa [←inv_inv c, inv_mul_le_iff (by positivity)] at hx
+
theorem IsBigO.of_bound (c : ℝ) (h : ∀ᶠ x in l, ‖f x‖ ≤ c * ‖g x‖) : f =O[l] g :=
isBigO_iff.2 ⟨c, h⟩
#align asymptotics.is_O.of_bound Asymptotics.IsBigO.of_bound
@@ -171,6 +206,9 @@ theorem IsLittleO.def' (h : f =o[l] g) (hc : 0 < c) : IsBigOWith c l f g :=
isBigOWith_iff.2 <| isLittleO_iff.1 h hc
#align asymptotics.is_o.def' Asymptotics.IsLittleO.def'
+theorem IsLittleO.eventuallyLE (h : f =o[l] g) : ∀ᶠ x in l, ‖f x‖ ≤ ‖g x‖ := by
+ simpa using h.def zero_lt_one
+
end Defs
/-! ### Conversions -/
@@ -2152,6 +2190,16 @@ theorem isLittleO_pi {ι : Type _} [Fintype ι] {E' : ι → Type _} [∀ i, Nor
exact ⟨fun h i c hc => h hc i, fun h c hc i => h i hc⟩
#align asymptotics.is_o_pi Asymptotics.isLittleO_pi
+theorem IsBigO.nat_cast_atTop {R : Type _} [StrictOrderedSemiring R] [Archimedean R]
+ {f : R → E} {g : R → F} (h : f =O[atTop] g) :
+ (fun (n:ℕ) => f n) =O[atTop] (fun n => g n) :=
+ IsBigO.comp_tendsto h tendsto_nat_cast_atTop_atTop
+
+theorem IsLittleO.nat_cast_atTop {R : Type _} [StrictOrderedSemiring R] [Archimedean R]
+ {f : R → E} {g : R → F} (h : f =o[atTop] g) :
+ (fun (n:ℕ) => f n) =o[atTop] (fun n => g n) :=
+ IsLittleO.comp_tendsto h tendsto_nat_cast_atTop_atTop
+
end Asymptotics
open Asymptotics
at
and goals (#5387)
Changes are of the form
some_tactic at h⊢
-> some_tactic at h ⊢
some_tactic at h
-> some_tactic at h
@@ -2072,7 +2072,7 @@ theorem IsBigOWith.right_le_sub_of_lt_1 {f₁ f₂ : α → E'} (h : IsBigOWith
IsBigOWith (1 / (1 - c)) l f₂ fun x => f₂ x - f₁ x :=
IsBigOWith.of_bound <|
mem_of_superset h.bound fun x hx => by
- simp only [mem_setOf_eq] at hx⊢
+ simp only [mem_setOf_eq] at hx ⊢
rw [mul_comm, one_div, ← div_eq_mul_inv, _root_.le_div_iff, mul_sub, mul_one, mul_comm]
· exact le_trans (sub_le_sub_left hx _) (norm_sub_norm_le _ _)
· exact sub_pos.2 hc
@@ -1404,7 +1404,7 @@ theorem isBigO_iff_isBoundedUnder_le_div (h : ∀ᶠ x in l, g'' x ≠ 0) :
eventually_congr <| h.mono fun x hx => (div_le_iff <| norm_pos_iff.2 hx).symm
#align asymptotics.is_O_iff_is_bounded_under_le_div Asymptotics.isBigO_iff_isBoundedUnder_le_div
-/-- `(λ x, c) =O[l] f` if and only if `f` is bounded away from zero. -/
+/-- `(fun x ↦ c) =O[l] f` if and only if `f` is bounded away from zero. -/
theorem isBigO_const_left_iff_pos_le_norm {c : E''} (hc : c ≠ 0) :
(fun _x => c) =O[l] f' ↔ ∃ b, 0 < b ∧ ∀ᶠ x in l, b ≤ ‖f' x‖ := by
constructor
@@ -1937,7 +1937,7 @@ theorem isBigOWith_of_eq_mul (φ : α → 𝕜) (hφ : ∀ᶠ x in l, ‖φ x‖
#align asymptotics.is_O_with_of_eq_mul Asymptotics.isBigOWith_of_eq_mul
theorem isBigOWith_iff_exists_eq_mul (hc : 0 ≤ c) :
- IsBigOWith c l u v ↔ ∃ (φ : α → 𝕜)(_hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v := by
+ IsBigOWith c l u v ↔ ∃ (φ : α → 𝕜) (_hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v := by
constructor
· intro h
use fun x => u x / v x
@@ -1948,12 +1948,12 @@ theorem isBigOWith_iff_exists_eq_mul (hc : 0 ≤ c) :
#align asymptotics.is_O_with_iff_exists_eq_mul Asymptotics.isBigOWith_iff_exists_eq_mul
theorem IsBigOWith.exists_eq_mul (h : IsBigOWith c l u v) (hc : 0 ≤ c) :
- ∃ (φ : α → 𝕜)(_hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v :=
+ ∃ (φ : α → 𝕜) (_hφ : ∀ᶠ x in l, ‖φ x‖ ≤ c), u =ᶠ[l] φ * v :=
(isBigOWith_iff_exists_eq_mul hc).mp h
#align asymptotics.is_O_with.exists_eq_mul Asymptotics.IsBigOWith.exists_eq_mul
theorem isBigO_iff_exists_eq_mul :
- u =O[l] v ↔ ∃ (φ : α → 𝕜)(_hφ : l.IsBoundedUnder (· ≤ ·) (norm ∘ φ)), u =ᶠ[l] φ * v := by
+ u =O[l] v ↔ ∃ (φ : α → 𝕜) (_hφ : l.IsBoundedUnder (· ≤ ·) (norm ∘ φ)), u =ᶠ[l] φ * v := by
constructor
· rintro h
rcases h.exists_nonneg with ⟨c, hnnc, hc⟩
@@ -1967,7 +1967,7 @@ alias isBigO_iff_exists_eq_mul ↔ IsBigO.exists_eq_mul _
#align asymptotics.is_O.exists_eq_mul Asymptotics.IsBigO.exists_eq_mul
theorem isLittleO_iff_exists_eq_mul :
- u =o[l] v ↔ ∃ (φ : α → 𝕜)(_hφ : Tendsto φ l (𝓝 0)), u =ᶠ[l] φ * v := by
+ u =o[l] v ↔ ∃ (φ : α → 𝕜) (_hφ : Tendsto φ l (𝓝 0)), u =ᶠ[l] φ * v := by
constructor
· exact fun h => ⟨fun x => u x / v x, h.tendsto_div_nhds_zero, h.eventually_mul_div_cancel.symm⟩
· simp only [IsLittleO_def]
@@ -1393,7 +1393,7 @@ theorem isBigO_const_iff {c : F''} : (f'' =O[l] fun _x => c) ↔
refine' ⟨fun h => ⟨fun hc => isBigO_zero_right_iff.1 (by rwa [← hc]), h.isBoundedUnder_le⟩, _⟩
rintro ⟨hcf, hf⟩
rcases eq_or_ne c 0 with (hc | hc)
- exacts[(hcf hc).trans_isBigO (isBigO_zero _ _), hf.isBigO_const hc]
+ exacts [(hcf hc).trans_isBigO (isBigO_zero _ _), hf.isBigO_const hc]
#align asymptotics.is_O_const_iff Asymptotics.isBigO_const_iff
theorem isBigO_iff_isBoundedUnder_le_div (h : ∀ᶠ x in l, g'' x ≠ 0) :
@@ -196,7 +196,7 @@ theorem IsBigOWith.weaken (h : IsBigOWith c l f g') (hc : c ≤ c') : IsBigOWith
mem_of_superset h.bound fun x hx =>
calc
‖f x‖ ≤ c * ‖g' x‖ := hx
- _ ≤ _ := mul_le_mul_of_nonneg_right hc (norm_nonneg _)
+ _ ≤ _ := by gcongr
#align asymptotics.is_O_with.weaken Asymptotics.IsBigOWith.weaken
theorem IsBigOWith.exists_pos (h : IsBigOWith c l f g') :
@@ -462,7 +462,7 @@ theorem IsBigOWith.trans (hfg : IsBigOWith c l f g) (hgk : IsBigOWith c' l g k)
filter_upwards [hfg, hgk]with x hx hx'
calc
‖f x‖ ≤ c * ‖g x‖ := hx
- _ ≤ c * (c' * ‖k x‖) := (mul_le_mul_of_nonneg_left hx' hc)
+ _ ≤ c * (c' * ‖k x‖) := by gcongr
_ = c * c' * ‖k x‖ := (mul_assoc _ _ _).symm
#align asymptotics.is_O_with.trans Asymptotics.IsBigOWith.trans
@@ -1631,8 +1631,7 @@ theorem IsBigOWith.of_pow {n : ℕ} {f : α → 𝕜} {g : α → R} (h : IsBigO
calc
‖f x‖ ^ n = ‖f x ^ n‖ := (norm_pow _ _).symm
_ ≤ c' ^ n * ‖g x ^ n‖ := hx
- _ ≤ c' ^ n * ‖g x‖ ^ n :=
- (mul_le_mul_of_nonneg_left (norm_pow_le' _ hn.bot_lt) (pow_nonneg hc' _))
+ _ ≤ c' ^ n * ‖g x‖ ^ n := by gcongr; exact norm_pow_le' _ hn.bot_lt
_ = (c' * ‖g x‖) ^ n := (mul_pow _ _ _).symm
#align asymptotics.is_O_with.of_pow Asymptotics.IsBigOWith.of_pow
@@ -1934,7 +1933,7 @@ theorem isBigOWith_of_eq_mul (φ : α → 𝕜) (hφ : ∀ᶠ x in l, ‖φ x‖
simp only [IsBigOWith_def]
refine' h.symm.rw (fun x a => ‖a‖ ≤ c * ‖v x‖) (hφ.mono fun x hx => _)
simp only [norm_mul, Pi.mul_apply]
- exact mul_le_mul_of_nonneg_right hx (norm_nonneg _)
+ gcongr
#align asymptotics.is_O_with_of_eq_mul Asymptotics.isBigOWith_of_eq_mul
theorem isBigOWith_iff_exists_eq_mul (hc : 0 ≤ c) :
I ran codespell Mathlib
and got tired halfway through the suggestions.
@@ -1982,7 +1982,7 @@ alias isLittleO_iff_exists_eq_mul ↔ IsLittleO.exists_eq_mul _
end ExistsMulEq
-/-! ### Miscellanous lemmas -/
+/-! ### Miscellaneous lemmas -/
theorem div_isBoundedUnder_of_isBigO {α : Type _} {l : Filter α} {f g : α → 𝕜} (h : f =O[l] g) :
by
s! (#3825)
This PR puts, with one exception, every single remaining by
that lies all by itself on its own line to the previous line, thus matching the current behaviour of start-port.sh
. The exception is when the by
begins the second or later argument to a tuple or anonymous constructor; see https://github.com/leanprover-community/mathlib4/pull/3825#discussion_r1186702599.
Essentially this is s/\n *by$/ by/g
, but with manual editing to satisfy the linter's max-100-char-line requirement. The Python style linter is also modified to catch these "isolated by
s".
@@ -660,8 +660,8 @@ theorem isLittleO_sup : f =o[l ⊔ l'] g ↔ f =o[l] g ∧ f =o[l'] g :=
#align asymptotics.is_o_sup Asymptotics.isLittleO_sup
theorem isBigOWith_insert [TopologicalSpace α] {x : α} {s : Set α} {C : ℝ} {g : α → E} {g' : α → F}
- (h : ‖g x‖ ≤ C * ‖g' x‖) : IsBigOWith C (𝓝[insert x s] x) g g' ↔ IsBigOWith C (𝓝[s] x) g g' :=
- by
+ (h : ‖g x‖ ≤ C * ‖g' x‖) : IsBigOWith C (𝓝[insert x s] x) g g' ↔
+ IsBigOWith C (𝓝[s] x) g g' := by
simp_rw [IsBigOWith_def, nhdsWithin_insert, eventually_sup, eventually_pure, h, true_and_iff]
#align asymptotics.is_O_with_insert Asymptotics.isBigOWith_insert
@@ -1326,8 +1326,8 @@ theorem isLittleO_one_iff : f' =o[l] (fun _x => 1 : α → F) ↔ Tendsto f' l (
#align asymptotics.is_o_one_iff Asymptotics.isLittleO_one_iff
@[simp]
-theorem isBigO_one_iff : f =O[l] (fun _x => 1 : α → F) ↔ IsBoundedUnder (· ≤ ·) l fun x => ‖f x‖ :=
- by
+theorem isBigO_one_iff : f =O[l] (fun _x => 1 : α → F) ↔
+ IsBoundedUnder (· ≤ ·) l fun x => ‖f x‖ := by
simp only [isBigO_iff, norm_one, mul_one]
rfl
#align asymptotics.is_O_one_iff Asymptotics.isBigO_one_iff
@@ -1388,9 +1388,8 @@ theorem isBigO_const_of_ne {c : F''} (hc : c ≠ 0) :
⟨fun h => h.isBoundedUnder_le, fun h => h.isBigO_const hc⟩
#align asymptotics.is_O_const_of_ne Asymptotics.isBigO_const_of_ne
-theorem isBigO_const_iff {c : F''} :
- (f'' =O[l] fun _x => c) ↔ (c = 0 → f'' =ᶠ[l] 0) ∧ IsBoundedUnder (· ≤ ·) l fun x => ‖f'' x‖ :=
- by
+theorem isBigO_const_iff {c : F''} : (f'' =O[l] fun _x => c) ↔
+ (c = 0 → f'' =ᶠ[l] 0) ∧ IsBoundedUnder (· ≤ ·) l fun x => ‖f'' x‖ := by
refine' ⟨fun h => ⟨fun hc => isBigO_zero_right_iff.1 (by rwa [← hc]), h.isBoundedUnder_le⟩, _⟩
rintro ⟨hcf, hf⟩
rcases eq_or_ne c 0 with (hc | hc)
This PR fixes two things:
align
statements for definitions and theorems and instances that are separated by two newlines from the relevant declaration (s/\n\n#align/\n#align
). This is often seen in the mathport output after ending calc
blocks.#align
statements. (This was needed for a script I wrote for #3630.)@@ -197,7 +197,6 @@ theorem IsBigOWith.weaken (h : IsBigOWith c l f g') (hc : c ≤ c') : IsBigOWith
calc
‖f x‖ ≤ c * ‖g' x‖ := hx
_ ≤ _ := mul_le_mul_of_nonneg_right hc (norm_nonneg _)
-
#align asymptotics.is_O_with.weaken Asymptotics.IsBigOWith.weaken
theorem IsBigOWith.exists_pos (h : IsBigOWith c l f g') :
@@ -465,7 +464,6 @@ theorem IsBigOWith.trans (hfg : IsBigOWith c l f g) (hgk : IsBigOWith c' l g k)
‖f x‖ ≤ c * ‖g x‖ := hx
_ ≤ c * (c' * ‖k x‖) := (mul_le_mul_of_nonneg_left hx' hc)
_ = c * c' * ‖k x‖ := (mul_assoc _ _ _).symm
-
#align asymptotics.is_O_with.trans Asymptotics.IsBigOWith.trans
@[trans]
@@ -1066,7 +1064,6 @@ theorem IsBigOWith.add (h₁ : IsBigOWith c₁ l f₁ g) (h₂ : IsBigOWith c₂
h₂]with x hx₁ hx₂ using calc
‖f₁ x + f₂ x‖ ≤ c₁ * ‖g x‖ + c₂ * ‖g x‖ := norm_add_le_of_le hx₁ hx₂
_ = (c₁ + c₂) * ‖g x‖ := (add_mul _ _ _).symm
-
#align asymptotics.is_O_with.add Asymptotics.IsBigOWith.add
theorem IsBigO.add (h₁ : f₁ =O[l] g) (h₂ : f₂ =O[l] g) : (fun x => f₁ x + f₂ x) =O[l] g :=
@@ -1269,7 +1266,6 @@ theorem isBigO_pure {x} : f'' =O[pure x] g'' ↔ g'' x = 0 → f'' x = 0 :=
calc
f'' =O[pure x] g'' ↔ (fun _y : α => f'' x) =O[pure x] fun _ => g'' x := isBigO_congr rfl rfl
_ ↔ g'' x = 0 → f'' x = 0 := isBigO_const_const_iff _
-
#align asymptotics.is_O_pure Asymptotics.isBigO_pure
end ZeroConst
@@ -1348,7 +1344,6 @@ theorem isLittleO_one_left_iff : (fun _x => 1 : α → F) =o[l] f ↔ Tendsto (f
simp only [norm_one, mul_one, true_imp_iff, mem_Ici]
_ ↔ Tendsto (fun x => ‖f x‖) l atTop :=
atTop_hasCountableBasis_of_archimedean.1.tendsto_right_iff.symm
-
#align asymptotics.is_o_one_left_iff Asymptotics.isLittleO_one_left_iff
theorem _root_.Filter.Tendsto.isBigO_one {c : E'} (h : Tendsto f' l (𝓝 c)) :
@@ -1640,7 +1635,6 @@ theorem IsBigOWith.of_pow {n : ℕ} {f : α → 𝕜} {g : α → R} (h : IsBigO
_ ≤ c' ^ n * ‖g x‖ ^ n :=
(mul_le_mul_of_nonneg_left (norm_pow_le' _ hn.bot_lt) (pow_nonneg hc' _))
_ = (c' * ‖g x‖) ^ n := (mul_pow _ _ _).symm
-
#align asymptotics.is_O_with.of_pow Asymptotics.IsBigOWith.of_pow
theorem IsBigO.pow {f : α → R} {g : α → 𝕜} (h : f =O[l] g) (n : ℕ) :
@@ -1882,7 +1876,6 @@ theorem isLittleO_pure {x} : f'' =o[pure x] g'' ↔ f'' x = 0 :=
calc
f'' =o[pure x] g'' ↔ (fun _y : α => f'' x) =o[pure x] fun _ => g'' x := isLittleO_congr rfl rfl
_ ↔ f'' x = 0 := isLittleO_const_const_iff
-
#align asymptotics.is_o_pure Asymptotics.isLittleO_pure
theorem isLittleO_const_id_comap_norm_atTop (c : F'') :
Because is_O_with
, is_O
and is_o
don't play well with the Lean 4 casing conventions for naming, we have opted for IsBigOWith
, IsBigO
and IsLittleO
in accordance with the Zulip poll
The unported dependencies are
algebra.order.module
init.core
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
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