Documentation

Mathlib.Analysis.Asymptotics.Ring

Ring and field operations on asymptotic relations #

This file develops the behavior of IsBigOWith, IsBigO, and IsLittleO under multiplication by constants, multiplication of functions, powers, inversion, and division.

Multiplication by a constant #

theorem Asymptotics.isBigOWith_const_mul_self {α : Type u_1} {R : Type u_4} [SeminormedRing R] (c : R) (f : αR) (l : Filter α) :
IsBigOWith c l (fun (x : α) => c * f x) f
theorem Asymptotics.isBigO_const_mul_self {α : Type u_1} {R : Type u_4} [SeminormedRing R] (c : R) (f : αR) (l : Filter α) :
(fun (x : α) => c * f x) =O[l] f
theorem Asymptotics.IsBigOWith.const_mul_left {α : Type u_1} {F : Type u_3} {R : Type u_4} [Norm F] [SeminormedRing R] {c : } {g : αF} {l : Filter α} {f : αR} (h : IsBigOWith c l f g) (c' : R) :
IsBigOWith (c' * c) l (fun (x : α) => c' * f x) g
theorem Asymptotics.IsBigO.const_mul_left {α : Type u_1} {F : Type u_3} {R : Type u_4} [Norm F] [SeminormedRing R] {g : αF} {l : Filter α} {f : αR} (h : f =O[l] g) (c' : R) :
(fun (x : α) => c' * f x) =O[l] g
theorem Asymptotics.isBigOWith_self_const_mul' {α : Type u_1} {R : Type u_4} [SeminormedRing R] (u : Rˣ) (f : αR) (l : Filter α) :
IsBigOWith u⁻¹ l f fun (x : α) => u * f x
theorem Asymptotics.isBigOWith_self_const_mul {α : Type u_1} {S : Type u_7} [NormedRing S] [NormMulClass S] {c : S} (hc : c 0) (f : αS) (l : Filter α) :
IsBigOWith c⁻¹ l f fun (x : α) => c * f x
theorem Asymptotics.isBigO_self_const_mul' {α : Type u_1} {R : Type u_4} [SeminormedRing R] {c : R} (hc : IsUnit c) (f : αR) (l : Filter α) :
f =O[l] fun (x : α) => c * f x
theorem Asymptotics.isBigO_self_const_mul {α : Type u_1} {S : Type u_7} [NormedRing S] [NormMulClass S] {c : S} (hc : c 0) (f : αS) (l : Filter α) :
f =O[l] fun (x : α) => c * f x
theorem Asymptotics.isBigO_const_mul_left_iff' {α : Type u_1} {F : Type u_3} {R : Type u_4} [Norm F] [SeminormedRing R] {g : αF} {l : Filter α} {f : αR} {c : R} (hc : IsUnit c) :
(fun (x : α) => c * f x) =O[l] g f =O[l] g
theorem Asymptotics.isBigO_const_mul_left_iff {α : Type u_1} {F : Type u_3} [Norm F] {S : Type u_7} [NormedRing S] [NormMulClass S] {g : αF} {l : Filter α} {f : αS} {c : S} (hc : c 0) :
(fun (x : α) => c * f x) =O[l] g f =O[l] g
theorem Asymptotics.IsLittleO.const_mul_left {α : Type u_1} {F : Type u_3} {R : Type u_4} [Norm F] [SeminormedRing R] {g : αF} {l : Filter α} {f : αR} (h : f =o[l] g) (c : R) :
(fun (x : α) => c * f x) =o[l] g
theorem Asymptotics.isLittleO_const_mul_left_iff' {α : Type u_1} {F : Type u_3} {R : Type u_4} [Norm F] [SeminormedRing R] {g : αF} {l : Filter α} {f : αR} {c : R} (hc : IsUnit c) :
(fun (x : α) => c * f x) =o[l] g f =o[l] g
theorem Asymptotics.isLittleO_const_mul_left_iff {α : Type u_1} {F : Type u_3} [Norm F] {S : Type u_7} [NormedRing S] [NormMulClass S] {g : αF} {l : Filter α} {f : αS} {c : S} (hc : c 0) :
(fun (x : α) => c * f x) =o[l] g f =o[l] g
theorem Asymptotics.IsBigOWith.of_const_mul_right {α : Type u_1} {E : Type u_2} {R : Type u_4} [Norm E] [SeminormedRing R] {c' : } {f : αE} {l : Filter α} {g : αR} {c : R} (hc' : 0 c') (h : IsBigOWith c' l f fun (x : α) => c * g x) :
IsBigOWith (c' * c) l f g
theorem Asymptotics.IsBigO.of_const_mul_right {α : Type u_1} {E : Type u_2} {R : Type u_4} [Norm E] [SeminormedRing R] {f : αE} {l : Filter α} {g : αR} {c : R} (h : f =O[l] fun (x : α) => c * g x) :
f =O[l] g
theorem Asymptotics.IsBigOWith.const_mul_right' {α : Type u_1} {E : Type u_2} {R : Type u_4} [Norm E] [SeminormedRing R] {f : αE} {l : Filter α} {g : αR} {u : Rˣ} {c' : } (hc' : 0 c') (h : IsBigOWith c' l f g) :
IsBigOWith (c' * u⁻¹) l f fun (x : α) => u * g x
theorem Asymptotics.IsBigOWith.const_mul_right {α : Type u_1} {E : Type u_2} [Norm E] {S : Type u_7} [NormedRing S] [NormMulClass S] {f : αE} {l : Filter α} {g : αS} {c : S} (hc : c 0) {c' : } (hc' : 0 c') (h : IsBigOWith c' l f g) :
IsBigOWith (c' * c⁻¹) l f fun (x : α) => c * g x
theorem Asymptotics.IsBigO.const_mul_right' {α : Type u_1} {E : Type u_2} {R : Type u_4} [Norm E] [SeminormedRing R] {f : αE} {l : Filter α} {g : αR} {c : R} (hc : IsUnit c) (h : f =O[l] g) :
f =O[l] fun (x : α) => c * g x
theorem Asymptotics.IsBigO.const_mul_right {α : Type u_1} {E : Type u_2} [Norm E] {S : Type u_7} [NormedRing S] [NormMulClass S] {f : αE} {l : Filter α} {g : αS} {c : S} (hc : c 0) (h : f =O[l] g) :
f =O[l] fun (x : α) => c * g x
theorem Asymptotics.isBigO_const_mul_right_iff' {α : Type u_1} {E : Type u_2} {R : Type u_4} [Norm E] [SeminormedRing R] {f : αE} {l : Filter α} {g : αR} {c : R} (hc : IsUnit c) :
(f =O[l] fun (x : α) => c * g x) f =O[l] g
theorem Asymptotics.isBigO_const_mul_right_iff {α : Type u_1} {E : Type u_2} [Norm E] {S : Type u_7} [NormedRing S] [NormMulClass S] {f : αE} {l : Filter α} {g : αS} {c : S} (hc : c 0) :
(f =O[l] fun (x : α) => c * g x) f =O[l] g
theorem Asymptotics.IsLittleO.of_const_mul_right {α : Type u_1} {E : Type u_2} {R : Type u_4} [Norm E] [SeminormedRing R] {f : αE} {l : Filter α} {g : αR} {c : R} (h : f =o[l] fun (x : α) => c * g x) :
f =o[l] g
theorem Asymptotics.IsLittleO.const_mul_right' {α : Type u_1} {E : Type u_2} {R : Type u_4} [Norm E] [SeminormedRing R] {f : αE} {l : Filter α} {g : αR} {c : R} (hc : IsUnit c) (h : f =o[l] g) :
f =o[l] fun (x : α) => c * g x
theorem Asymptotics.IsLittleO.const_mul_right {α : Type u_1} {E : Type u_2} [Norm E] {S : Type u_7} [NormedRing S] [NormMulClass S] {f : αE} {l : Filter α} {g : αS} {c : S} (hc : c 0) (h : f =o[l] g) :
f =o[l] fun (x : α) => c * g x
theorem Asymptotics.isLittleO_const_mul_right_iff' {α : Type u_1} {E : Type u_2} {R : Type u_4} [Norm E] [SeminormedRing R] {f : αE} {l : Filter α} {g : αR} {c : R} (hc : IsUnit c) :
(f =o[l] fun (x : α) => c * g x) f =o[l] g
theorem Asymptotics.isLittleO_const_mul_right_iff {α : Type u_1} {E : Type u_2} [Norm E] {S : Type u_7} [NormedRing S] [NormMulClass S] {f : αE} {l : Filter α} {g : αS} {c : S} (hc : c 0) :
(f =o[l] fun (x : α) => c * g x) f =o[l] g

Multiplication #

theorem Asymptotics.IsBigOWith.mul {α : Type u_1} {R : Type u_4} [SeminormedRing R] {S : Type u_7} [NormedRing S] [NormMulClass S] {l : Filter α} {f₁ f₂ : αR} {g₁ g₂ : αS} {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
theorem Asymptotics.IsBigO.mul {α : Type u_1} {R : Type u_4} [SeminormedRing R] {S : Type u_7} [NormedRing S] [NormMulClass S] {l : Filter α} {f₁ f₂ : αR} {g₁ g₂ : αS} (h₁ : f₁ =O[l] g₁) (h₂ : f₂ =O[l] g₂) :
(fun (x : α) => f₁ x * f₂ x) =O[l] fun (x : α) => g₁ x * g₂ x
theorem Asymptotics.IsBigO.mul_isLittleO {α : Type u_1} {R : Type u_4} [SeminormedRing R] {S : Type u_7} [NormedRing S] [NormMulClass S] {l : Filter α} {f₁ f₂ : αR} {g₁ g₂ : αS} (h₁ : f₁ =O[l] g₁) (h₂ : f₂ =o[l] g₂) :
(fun (x : α) => f₁ x * f₂ x) =o[l] fun (x : α) => g₁ x * g₂ x
theorem Asymptotics.IsLittleO.mul_isBigO {α : Type u_1} {R : Type u_4} [SeminormedRing R] {S : Type u_7} [NormedRing S] [NormMulClass S] {l : Filter α} {f₁ f₂ : αR} {g₁ g₂ : αS} (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =O[l] g₂) :
(fun (x : α) => f₁ x * f₂ x) =o[l] fun (x : α) => g₁ x * g₂ x
theorem Asymptotics.IsLittleO.mul {α : Type u_1} {R : Type u_4} [SeminormedRing R] {S : Type u_7} [NormedRing S] [NormMulClass S] {l : Filter α} {f₁ f₂ : αR} {g₁ g₂ : αS} (h₁ : f₁ =o[l] g₁) (h₂ : f₂ =o[l] g₂) :
(fun (x : α) => f₁ x * f₂ x) =o[l] fun (x : α) => g₁ x * g₂ x
theorem Asymptotics.IsBigOWith.pow' {α : Type u_1} {R : Type u_4} [SeminormedRing R] {S : Type u_7} [NormedRing S] [NormMulClass S] {c : } {l : Filter α} [NormOneClass S] {f : αR} {g : αS} (h : IsBigOWith c l f g) (n : ) :
IsBigOWith (Nat.casesOn n 1 fun (n : ) => c ^ (n + 1)) l (fun (x : α) => f x ^ n) fun (x : α) => g x ^ n
theorem Asymptotics.IsBigOWith.pow {α : Type u_1} {R : Type u_4} [SeminormedRing R] {S : Type u_7} [NormedRing S] [NormMulClass S] {c : } {l : Filter α} [NormOneClass R] [NormOneClass S] {f : αR} {g : αS} (h : IsBigOWith c l f g) (n : ) :
IsBigOWith (c ^ n) l (fun (x : α) => f x ^ n) fun (x : α) => g x ^ n
theorem Asymptotics.IsBigOWith.of_pow {α : Type u_1} {R : Type u_4} [SeminormedRing R] {S : Type u_7} [NormedRing S] [NormMulClass S] {c c' : } {l : Filter α} [NormOneClass S] {n : } {f : αS} {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
theorem Asymptotics.IsBigO.pow {α : Type u_1} {R : Type u_4} [SeminormedRing R] {S : Type u_7} [NormedRing S] [NormMulClass S] {l : Filter α} [NormOneClass S] {f : αR} {g : αS} (h : f =O[l] g) (n : ) :
(fun (x : α) => f x ^ n) =O[l] fun (x : α) => g x ^ n
theorem Asymptotics.IsLittleO.pow {α : Type u_1} {R : Type u_4} [SeminormedRing R] {S : Type u_7} [NormedRing S] [NormMulClass S] {l : Filter α} {f : αR} {g : αS} (h : f =o[l] g) {n : } (hn : 0 < n) :
(fun (x : α) => f x ^ n) =o[l] fun (x : α) => g x ^ n
theorem Asymptotics.IsLittleO.of_pow {α : Type u_1} {R : Type u_4} [SeminormedRing R] {S : Type u_7} [NormedRing S] [NormMulClass S] {l : Filter α} [NormOneClass S] {f : αS} {g : αR} {n : } (h : (f ^ n) =o[l] (g ^ n)) (hn : n 0) :
f =o[l] g

Inverse #

theorem Asymptotics.IsBigOWith.inv_rev {α : Type u_1} {𝕜 : Type u_5} {𝕜' : Type u_6} [NormedDivisionRing 𝕜] [NormedDivisionRing 𝕜'] {c : } {l : Filter α} {f : α𝕜} {g : α𝕜'} (h : IsBigOWith c l f g) (h₀ : ∀ᶠ (x : α) in l, f x = 0g x = 0) :
IsBigOWith c l (fun (x : α) => (g x)⁻¹) fun (x : α) => (f x)⁻¹
theorem Asymptotics.IsBigO.inv_rev {α : Type u_1} {𝕜 : Type u_5} {𝕜' : Type u_6} [NormedDivisionRing 𝕜] [NormedDivisionRing 𝕜'] {l : Filter α} {f : α𝕜} {g : α𝕜'} (h : f =O[l] g) (h₀ : ∀ᶠ (x : α) in l, f x = 0g x = 0) :
(fun (x : α) => (g x)⁻¹) =O[l] fun (x : α) => (f x)⁻¹
theorem Asymptotics.IsLittleO.inv_rev {α : Type u_1} {𝕜 : Type u_5} {𝕜' : Type u_6} [NormedDivisionRing 𝕜] [NormedDivisionRing 𝕜'] {l : Filter α} {f : α𝕜} {g : α𝕜'} (h : f =o[l] g) (h₀ : ∀ᶠ (x : α) in l, f x = 0g x = 0) :
(fun (x : α) => (g x)⁻¹) =o[l] fun (x : α) => (f x)⁻¹

Eventually (u / v) * v = u #

If u and v are linked by an IsBigOWith relation, then we eventually have (u / v) * v = u, even if v vanishes.

theorem Asymptotics.IsBigOWith.eventually_mul_div_cancel {α : Type u_1} {𝕜 : Type u_5} [NormedDivisionRing 𝕜] {c : } {l : Filter α} {u v : α𝕜} (h : IsBigOWith c l u v) :
u / v * v =ᶠ[l] u
theorem Asymptotics.IsBigO.eventually_mul_div_cancel {α : Type u_1} {𝕜 : Type u_5} [NormedDivisionRing 𝕜] {l : Filter α} {u v : α𝕜} (h : u =O[l] v) :
u / v * v =ᶠ[l] u

If u = O(v) along l, then (u / v) * v = u eventually at l.

theorem Asymptotics.IsLittleO.eventually_mul_div_cancel {α : Type u_1} {𝕜 : Type u_5} [NormedDivisionRing 𝕜] {l : Filter α} {u v : α𝕜} (h : u =o[l] v) :
u / v * v =ᶠ[l] u

If u = o(v) along l, then (u / v) * v = u eventually at l.