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 developed 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
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_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 #

      Lower linear growth as an InfTopHom.

      Equations
      Instances For
        theorem LinearGrowth.linearGrowthInf_biInf {α : Type u_1} (u : α → ℕ → EReal) {s : Set α} (hs : s.Finite) :
        linearGrowthInf (⨅ x ∈ s, u x) = ⨅ x ∈ s, linearGrowthInf (u x)
        theorem LinearGrowth.linearGrowthInf_iInf {ι : Type u_1} [Finite ι] (u : ι → ℕ → EReal) :
        linearGrowthInf (⨅ (i : ι), u i) = ⨅ (i : ι), linearGrowthInf (u i)

        Upper linear growth as a SupBotHom.

        Equations
        Instances For
          theorem LinearGrowth.linearGrowthSup_biSup {α : Type u_1} (u : α → ℕ → EReal) {s : Set α} (hs : s.Finite) :
          linearGrowthSup (⨆ x ∈ s, u x) = ⨆ x ∈ s, 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) :