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.

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.

    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
      theorem LinearGrowth.linearGrowthInf_const_mul_self {a : EReal} :
      (linearGrowthInf fun (n : โ„•) => a * โ†‘n) = a
      theorem LinearGrowth.linearGrowthSup_const_mul_self {a : EReal} :
      (linearGrowthSup fun (n : โ„•) => a * โ†‘n) = a
      theorem LinearGrowth.linearGrowthInf_natCast_nonneg (v : โ„• โ†’ โ„•) :
      0 โ‰ค linearGrowthInf fun (n : โ„•) => โ†‘(v n)

      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.

      Affine bounds #

      Infimum and supremum #

      noncomputable def LinearGrowth.linearGrowthInfTopHom :
      InfTopHom (โ„• โ†’ EReal) EReal

      Lower linear growth as an InfTopHom.

      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)
        noncomputable def LinearGrowth.linearGrowthSupBotHom :
        SupBotHom (โ„• โ†’ EReal) EReal

        Upper linear growth as a SupBotHom.

        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.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) :
          (linearGrowthInf fun (n : โ„•) => โ†‘(v n)) * linearGrowthInf u โ‰ค linearGrowthInf (u โˆ˜ v)
          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 LinearGrowth.linearGrowthInf_comp_nonneg {u : โ„• โ†’ EReal} {v : โ„• โ†’ โ„•} (h : Monotone u) (h' : u โ‰  โŠฅ) (hv : Filter.Tendsto v Filter.atTop Filter.atTop) :
          0 โ‰ค linearGrowthInf (u โˆ˜ v)
          theorem LinearGrowth.linearGrowthSup_comp_nonneg {u : โ„• โ†’ EReal} {v : โ„• โ†’ โ„•} (h : Monotone u) (h' : u โ‰  โŠฅ) (hv : Filter.Tendsto v Filter.atTop Filter.atTop) :
          0 โ‰ค linearGrowthSup (u โˆ˜ v)
          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.le_linearGrowthSup_comp {u : โ„• โ†’ EReal} {v : โ„• โ†’ โ„•} (h : Monotone u) (hv : (LinearGrowth.linearGrowthInf fun (n : โ„•) => โ†‘(v n)) โ‰  0) :
          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) :
          (LinearGrowth.linearGrowthInf fun (n : โ„•) => u (m * n)) = โ†‘m * LinearGrowth.linearGrowthInf u
          theorem Monotone.linearGrowthSup_comp_mul {u : โ„• โ†’ EReal} {m : โ„•} (h : Monotone u) (hm : m โ‰  0) :
          (LinearGrowth.linearGrowthSup fun (n : โ„•) => u (m * n)) = โ†‘m * LinearGrowth.linearGrowthSup u