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 developed for
R = EReal
.
Main definitions #
linearGrowthInf
,linearGrowthSup
: respectively,liminf
andlimsup
of(u n) / n
.linearGrowthInfTopHom
,linearGrowthSupBotHom
: the functionslinearGrowthInf
,linearGrowthSup
as homomorphisms preserving finitaryInf
/Sup
respectively.
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
Instances For
noncomputable def
LinearGrowth.linearGrowthSup
{R : Type u_1}
[ConditionallyCompleteLattice R]
[Div R]
[NatCast R]
(u : ℕ → R)
:
R
Upper linear growth of a sequence.
Equations
Instances For
Basic properties #
theorem
LinearGrowth.linearGrowthInf_congr
{R : Type u_1}
[ConditionallyCompleteLattice R]
[Div R]
[NatCast R]
{u v : ℕ → R}
(h : u =ᶠ[Filter.atTop] v)
:
theorem
LinearGrowth.linearGrowthSup_congr
{R : Type u_1}
[ConditionallyCompleteLattice R]
[Div R]
[NatCast R]
{u v : ℕ → R}
(h : u =ᶠ[Filter.atTop] v)
:
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_eventually_monotone
{u v : ℕ → EReal}
(h : u ≤ᶠ[Filter.atTop] v)
:
theorem
LinearGrowth.linearGrowthSup_eventually_monotone
{u v : ℕ → EReal}
(h : u ≤ᶠ[Filter.atTop] v)
:
theorem
LinearGrowth.linearGrowthInf_le_linearGrowthSup_of_frequently_le
{u v : ℕ → EReal}
(h : ∃ᶠ (n : ℕ) in Filter.atTop, u n ≤ v n)
:
Special cases #
theorem
LinearGrowth.tendsto_atTop_of_linearGrowthInf_pos
{u : ℕ → EReal}
(h : 0 < linearGrowthInf u)
:
Addition and negation #
theorem
LinearGrowth.linearGrowthInf_add_le
{u v : ℕ → EReal}
(h : linearGrowthSup u ≠ ⊥ ∨ linearGrowthInf v ≠ ⊤)
(h' : linearGrowthSup u ≠ ⊤ ∨ linearGrowthInf v ≠ ⊥)
:
See linearGrowthInf_add_le'
for a version with swapped argument u
and v
.
theorem
LinearGrowth.linearGrowthInf_add_le'
{u v : ℕ → EReal}
(h : linearGrowthInf u ≠ ⊥ ∨ linearGrowthSup v ≠ ⊤)
(h' : linearGrowthInf u ≠ ⊤ ∨ linearGrowthSup v ≠ ⊥)
:
See linearGrowthInf_add_le
for a version with swapped argument u
and v
.
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
.
theorem
LinearGrowth.linearGrowthSup_add_le
{u v : ℕ → EReal}
(h : linearGrowthSup u ≠ ⊥ ∨ linearGrowthSup v ≠ ⊤)
(h' : linearGrowthSup u ≠ ⊤ ∨ linearGrowthSup v ≠ ⊥)
:
Affine bounds #
Infimum and supremum #
Composition #
theorem
LinearGrowth.tendsto_atTop_of_linearGrowthInf_natCast_pos
{v : ℕ → ℕ}
(h : (linearGrowthInf fun (n : ℕ) => ↑(v n)) ≠ 0)
:
theorem
LinearGrowth.le_linearGrowthInf_comp
{u : ℕ → EReal}
{v : ℕ → ℕ}
(hu : 0 ≤ᶠ[Filter.atTop] u)
(hv : Filter.Tendsto v Filter.atTop Filter.atTop)
:
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)
:
Monotone sequences #
theorem
LinearGrowth.linearGrowthInf_comp_nonneg
{u : ℕ → EReal}
{v : ℕ → ℕ}
(h : Monotone u)
(h' : u ≠ ⊥)
(hv : Filter.Tendsto v Filter.atTop Filter.atTop)
:
theorem
LinearGrowth.linearGrowthSup_comp_nonneg
{u : ℕ → EReal}
{v : ℕ → ℕ}
(h : Monotone u)
(h' : u ≠ ⊥)
(hv : Filter.Tendsto v Filter.atTop Filter.atTop)
:
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)) ≠ ⊤)
:
LinearGrowth.linearGrowthInf (u ∘ v) ≤ (LinearGrowth.linearGrowthSup fun (n : ℕ) => ↑(v n)) * LinearGrowth.linearGrowthInf u
theorem
Monotone.le_linearGrowthSup_comp
{u : ℕ → EReal}
{v : ℕ → ℕ}
(h : Monotone u)
(hv : (LinearGrowth.linearGrowthInf fun (n : ℕ) => ↑(v n)) ≠ 0)
:
(LinearGrowth.linearGrowthInf fun (n : ℕ) => ↑(v n)) * LinearGrowth.linearGrowthSup u ≤ LinearGrowth.linearGrowthSup (u ∘ v)
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 ≠ ⊤)
: