Documentation

Mathlib.Analysis.Asymptotics.LinearGrowth

Linear growth #

This file defines the linear growth of a sequence u : ℕ → R. This notion comes in two versions, using a liminf and a limsup respectively. Most properties are developped for R = EReal.

Main definitions #

TODO #

Generalize statements from EReal to ENNReal (or others). This may need additional typeclasses.

Lemma about coercion from ENNReal to EReal. This needs additional lemmas about ENNReal.toEReal.

Definition #

noncomputable def LinearGrowth.linearGrowthInf {R : Type u_1} [ConditionallyCompleteLattice R] [Div R] [NatCast R] (u : R) :
R

Lower linear growth of a sequence.

Equations
noncomputable def LinearGrowth.linearGrowthSup {R : Type u_1} [ConditionallyCompleteLattice R] [Div R] [NatCast R] (u : R) :
R

Upper linear growth of a sequence.

Equations

Basic properties #

theorem LinearGrowth.linearGrowthInf_le_linearGrowthSup {R : Type u_1} [ConditionallyCompleteLattice R] [Div R] [NatCast R] {u : R} (h : Filter.IsBoundedUnder (fun (x1 x2 : R) => x1 x2) Filter.atTop fun (n : ) => u n / n := by isBoundedDefault) (h' : Filter.IsBoundedUnder (fun (x1 x2 : R) => x1 x2) Filter.atTop fun (n : ) => u n / n := by isBoundedDefault) :
theorem LinearGrowth.linearGrowthInf_le_iff {u : EReal} {a : EReal} :
linearGrowthInf u a b > a, ∃ᶠ (n : ) in Filter.atTop, u n b * n
theorem LinearGrowth.le_linearGrowthInf_iff {u : EReal} {a : EReal} :
a linearGrowthInf u b < a, ∀ᶠ (n : ) in Filter.atTop, b * n u n
theorem LinearGrowth.linearGrowthSup_le_iff {u : EReal} {a : EReal} :
linearGrowthSup u a b > a, ∀ᶠ (n : ) in Filter.atTop, u n b * n
theorem LinearGrowth.le_linearGrowthSup_iff {u : EReal} {a : EReal} :
a linearGrowthSup u b < a, ∃ᶠ (n : ) in Filter.atTop, b * n u n
theorem LinearGrowth.frequently_le_mul {u : EReal} {a : EReal} (h : linearGrowthInf u < a) :
∃ᶠ (n : ) in Filter.atTop, u n a * n
theorem LinearGrowth.eventually_mul_le {u : EReal} {a : EReal} (h : a < linearGrowthInf u) :
∀ᶠ (n : ) in Filter.atTop, a * n u n
theorem LinearGrowth.eventually_le_mul {u : EReal} {a : EReal} (h : linearGrowthSup u < a) :
∀ᶠ (n : ) in Filter.atTop, u n a * n
theorem LinearGrowth.frequently_mul_le {u : EReal} {a : EReal} (h : a < linearGrowthSup u) :
∃ᶠ (n : ) in Filter.atTop, a * n u n

Special cases #

theorem LinearGrowth.linearGrowthInf_const {b : EReal} (h : b ) (h' : b ) :
(linearGrowthInf fun (x : ) => b) = 0
theorem LinearGrowth.linearGrowthSup_const {b : EReal} (h : b ) (h' : b ) :
(linearGrowthSup fun (x : ) => b) = 0

Addition and negation #

See le_linearGrowthSup_add' for a version with swapped argument u and v.

See le_linearGrowthSup_add for a version with swapped argument u and v.

Affine bounds #

Infimum and supremum #

theorem LinearGrowth.linearGrowthInf_biInf {α : Type u_1} (u : αEReal) {s : Set α} (hs : s.Finite) :
linearGrowthInf (⨅ xs, u x) = xs, linearGrowthInf (u x)
theorem LinearGrowth.linearGrowthInf_iInf {ι : Type u_1} [Finite ι] (u : ιEReal) :
linearGrowthInf (⨅ (i : ι), u i) = ⨅ (i : ι), linearGrowthInf (u i)
theorem LinearGrowth.linearGrowthSup_biSup {α : Type u_1} (u : αEReal) {s : Set α} (hs : s.Finite) :
linearGrowthSup (⨆ xs, u x) = xs, linearGrowthSup (u x)
theorem LinearGrowth.linearGrowthSup_iSup {ι : Type u_1} [Finite ι] (u : ιEReal) :
linearGrowthSup (⨆ (i : ι), u i) = ⨆ (i : ι), linearGrowthSup (u i)

Composition #

theorem LinearGrowth.Real.eventually_atTop_exists_int_between {a b : } (h : a < b) :
∀ᶠ (x : ) in Filter.atTop, ∃ (n : ), a * x n n b * x
theorem LinearGrowth.Real.eventually_atTop_exists_nat_between {a b : } (h : a < b) (hb : 0 b) :
∀ᶠ (x : ) in Filter.atTop, ∃ (n : ), a * x n n b * x
theorem LinearGrowth.EReal.eventually_atTop_exists_nat_between {a b : EReal} (h : a < b) (hb : 0 b) :
∀ᶠ (n : ) in Filter.atTop, ∃ (m : ), a * n m m b * n
theorem LinearGrowth.linearGrowthSup_comp_le {u : EReal} {v : } (hu : ∃ᶠ (n : ) in Filter.atTop, 0 u n) (hv₀ : (linearGrowthSup fun (n : ) => (v n)) 0) (hv₁ : (linearGrowthSup fun (n : ) => (v n)) ) (hv₂ : Filter.Tendsto v Filter.atTop Filter.atTop) :
linearGrowthSup (u v) (linearGrowthSup fun (n : ) => (v n)) * linearGrowthSup u

Monotone sequences #

theorem Monotone.linearGrowthInf_comp_le {u : EReal} {v : } (h : Monotone u) (hv₀ : (LinearGrowth.linearGrowthSup fun (n : ) => (v n)) 0) (hv₁ : (LinearGrowth.linearGrowthSup fun (n : ) => (v n)) ) :
theorem Monotone.linearGrowthInf_comp {u : EReal} {v : } {a : EReal} (h : Monotone u) (hv : Filter.Tendsto (fun (n : ) => (v n) / n) Filter.atTop (nhds a)) (ha : a 0) (ha' : a ) :
theorem Monotone.linearGrowthSup_comp {u : EReal} {v : } {a : EReal} (h : Monotone u) (hv : Filter.Tendsto (fun (n : ) => (v n) / n) Filter.atTop (nhds a)) (ha : a 0) (ha' : a ) :
theorem Monotone.linearGrowthInf_comp_mul {u : EReal} {m : } (h : Monotone u) (hm : m 0) :
theorem Monotone.linearGrowthSup_comp_mul {u : EReal} {m : } (h : Monotone u) (hm : m 0) :