File: Mathlib/RingTheory/Filtration.lean

full_name: Ideal.Filtration.mono
code: /-- An `I`-filtration on the module `M` is a sequence of decreasing submodules `N i` such that
`I • (N i) ≤ N (i + 1)`. Note that we do not require the filtration to start from `⊤`. -/
@[ext]
structure Ideal.Filtration (M : Type u) [AddCommGroup M] [Module R M] where
  N : ℕ → Submodule R M
  mono : ∀ i, N (i + 1) ≤ N i
  smul_le : ∀ i, I • N i ≤ N (i + 1)
goal: self.N (i + 1) ≤ self.N i

full_name: Ideal.Filtration.N
code: /-- An `I`-filtration on the module `M` is a sequence of decreasing submodules `N i` such that
`I • (N i) ≤ N (i + 1)`. Note that we do not require the filtration to start from `⊤`. -/
@[ext]
structure Ideal.Filtration (M : Type u) [AddCommGroup M] [Module R M] where
  N : ℕ → Submodule R M
  mono : ∀ i, N (i + 1) ≤ N i
  smul_le : ∀ i, I • N i ≤ N (i + 1)
goal: ℕ → Submodule R M

full_name: Ideal.Filtration
code: /-- An `I`-filtration on the module `M` is a sequence of decreasing submodules `N i` such that
`I • (N i) ≤ N (i + 1)`. Note that we do not require the filtration to start from `⊤`. -/
@[ext]
structure Ideal.Filtration (M : Type u) [AddCommGroup M] [Module R M] where
  N : ℕ → Submodule R M
  mono : ∀ i, N (i + 1) ≤ N i
  smul_le : ∀ i, I • N i ≤ N (i + 1)
goal: Type u

full_name: Ideal.Filtration.smul_le
code: /-- An `I`-filtration on the module `M` is a sequence of decreasing submodules `N i` such that
`I • (N i) ≤ N (i + 1)`. Note that we do not require the filtration to start from `⊤`. -/
@[ext]
structure Ideal.Filtration (M : Type u) [AddCommGroup M] [Module R M] where
  N : ℕ → Submodule R M
  mono : ∀ i, N (i + 1) ≤ N i
  smul_le : ∀ i, I • N i ≤ N (i + 1)
goal: I • self.N i ≤ self.N (i + 1)

full_name: Ideal.Filtration.pow_smul_le
code: theorem pow_smul_le (i j : ℕ) : I ^ i • F.N j ≤ F.N (i + j) 
goal: I ^ i • F.N j ≤ F.N (i + j)

full_name: Ideal.Filtration.pow_smul_le_pow_smul
code: theorem pow_smul_le_pow_smul (i j k : ℕ) : I ^ (i + k) • F.N j ≤ I ^ k • F.N (i + j) 
goal: I ^ (i + k) • F.N j ≤ I ^ k • F.N (i + j)

full_name: Ideal.Filtration.antitone
code: protected theorem antitone : Antitone F.N 
goal: Antitone F.N

full_name: Ideal.trivialFiltration
code: /-- The trivial `I`-filtration of `N`. -/
@[simps]
def _root_.Ideal.trivialFiltration (I : Ideal R) (N : Submodule R M) : I.Filtration M 
goal: I.Filtration M

full_name: Ideal.trivialFiltration_N
code: /-- The trivial `I`-filtration of `N`. -/
@[simps]
def _root_.Ideal.trivialFiltration (I : Ideal R) (N : Submodule R M) : I.Filtration M 
goal: ∀ (x : ℕ), (I.trivialFiltration N).N x = N

full_name: Ideal.Filtration.instSup
code: /-- The `sup` of two `I.Filtration`s is an `I.Filtration`. -/
instance : Sup (I.Filtration M) 
goal: Sup (I.Filtration M)

full_name: Ideal.Filtration.instSupSet
code: /-- The `sSup` of a family of `I.Filtration`s is an `I.Filtration`. -/
instance : SupSet (I.Filtration M) 
goal: SupSet (I.Filtration M)

full_name: Ideal.Filtration.instInf
code: /-- The `inf` of two `I.Filtration`s is an `I.Filtration`. -/
instance : Inf (I.Filtration M) 
goal: Inf (I.Filtration M)

full_name: Ideal.Filtration.instInfSet
code: /-- The `sInf` of a family of `I.Filtration`s is an `I.Filtration`. -/
instance : InfSet (I.Filtration M) 
goal: InfSet (I.Filtration M)

full_name: Ideal.Filtration.instTop
code: instance : Top (I.Filtration M) 
goal: Top (I.Filtration M)

full_name: Ideal.Filtration.instBot
code: instance : Bot (I.Filtration M) 
goal: Bot (I.Filtration M)

full_name: Ideal.Filtration.sup_N
code: @[simp]
theorem sup_N : (F ⊔ F').N = F.N ⊔ F'.N 
goal: (F ⊔ F').N = F.N ⊔ F'.N

full_name: Ideal.Filtration.sSup_N
code: @[simp]
theorem sSup_N (S : Set (I.Filtration M)) : (sSup S).N = sSup (Ideal.Filtration.N '' S) 
goal: (sSup S).N = sSup (Ideal.Filtration.N '' S)

full_name: Ideal.Filtration.inf_N
code: @[simp]
theorem inf_N : (F ⊓ F').N = F.N ⊓ F'.N 
goal: (F ⊓ F').N = F.N ⊓ F'.N

full_name: Ideal.Filtration.sInf_N
code: @[simp]
theorem sInf_N (S : Set (I.Filtration M)) : (sInf S).N = sInf (Ideal.Filtration.N '' S) 
goal: (sInf S).N = sInf (Ideal.Filtration.N '' S)

full_name: Ideal.Filtration.top_N
code: @[simp]
theorem top_N : (⊤ : I.Filtration M).N = ⊤ 
goal: ⊤.N = ⊤

full_name: Ideal.Filtration.bot_N
code: @[simp]
theorem bot_N : (⊥ : I.Filtration M).N = ⊥ 
goal: ⊥.N = ⊥

full_name: Ideal.Filtration.iSup_N
code: @[simp]
theorem iSup_N {ι : Sort*} (f : ι → I.Filtration M) : (iSup f).N = ⨆ i, (f i).N 
goal: (iSup f).N = ⨆ i, (f i).N

full_name: Ideal.Filtration.iInf_N
code: @[simp]
theorem iInf_N {ι : Sort*} (f : ι → I.Filtration M) : (iInf f).N = ⨅ i, (f i).N 
goal: (iInf f).N = ⨅ i, (f i).N

full_name: Ideal.Filtration.instCompleteLattice
code: instance : CompleteLattice (I.Filtration M) 
goal: CompleteLattice (I.Filtration M)

full_name: Ideal.Filtration.instInhabited
code: instance : Inhabited (I.Filtration M) 
goal: Inhabited (I.Filtration M)

full_name: Ideal.Filtration.Stable
code: /-- An `I` filtration is stable if `I • F.N n = F.N (n+1)` for large enough `n`. -/
def Stable : Prop 
goal: Prop

full_name: Ideal.stableFiltration_N
code: /-- The trivial stable `I`-filtration of `N`. -/
@[simps]
def _root_.Ideal.stableFiltration (I : Ideal R) (N : Submodule R M) : I.Filtration M 
goal: (I.stableFiltration N).N i = I ^ i • N

full_name: Ideal.stableFiltration
code: /-- The trivial stable `I`-filtration of `N`. -/
@[simps]
def _root_.Ideal.stableFiltration (I : Ideal R) (N : Submodule R M) : I.Filtration M 
goal: I.Filtration M

full_name: Ideal.stableFiltration_stable
code: theorem _root_.Ideal.stableFiltration_stable (I : Ideal R) (N : Submodule R M) :
    (I.stableFiltration N).Stable 
goal: (I.stableFiltration N).Stable

full_name: Ideal.Filtration.Stable.exists_pow_smul_eq
code: theorem Stable.exists_pow_smul_eq : ∃ n₀, ∀ k, F.N (n₀ + k) = I ^ k • F.N n₀ 
goal: ∃ n₀, ∀ (k : ℕ), F.N (n₀ + k) = I ^ k • F.N n₀

full_name: Ideal.Filtration.Stable.exists_pow_smul_eq_of_ge
code: theorem Stable.exists_pow_smul_eq_of_ge : ∃ n₀, ∀ n ≥ n₀, F.N n = I ^ (n - n₀) • F.N n₀ 
goal: ∃ n₀, ∀ n ≥ n₀, F.N n = I ^ (n - n₀) • F.N n₀

full_name: Ideal.Filtration.stable_iff_exists_pow_smul_eq_of_ge
code: theorem stable_iff_exists_pow_smul_eq_of_ge :
    F.Stable ↔ ∃ n₀, ∀ n ≥ n₀, F.N n = I ^ (n - n₀) • F.N n₀ 
goal: F.Stable ↔ ∃ n₀, ∀ n ≥ n₀, F.N n = I ^ (n - n₀) • F.N n₀

full_name: Ideal.Filtration.Stable.exists_forall_le
code: theorem Stable.exists_forall_le (h : F.Stable) (e : F.N 0 ≤ F'.N 0) :
    ∃ n₀, ∀ n, F.N (n + n₀) ≤ F'.N n 
goal: ∃ n₀, ∀ (n : ℕ), F.N (n + n₀) ≤ F'.N n

full_name: Ideal.Filtration.Stable.bounded_difference
code: theorem Stable.bounded_difference (h : F.Stable) (h' : F'.Stable) (e : F.N 0 = F'.N 0) :
    ∃ n₀, ∀ n, F.N (n + n₀) ≤ F'.N n ∧ F'.N (n + n₀) ≤ F.N n 
goal: ∃ n₀, ∀ (n : ℕ), F.N (n + n₀) ≤ F'.N n ∧ F'.N (n + n₀) ≤ F.N n

full_name: Ideal.Filtration.submodule
code: /-- The `R[IX]`-submodule of `M[X]` associated with an `I`-filtration. -/
protected def submodule : Submodule (reesAlgebra I) (PolynomialModule R M) 
goal: Submodule (↥(reesAlgebra I)) (PolynomialModule R M)

full_name: Ideal.Filtration.mem_submodule
code: @[simp]
theorem mem_submodule (f : PolynomialModule R M) : f ∈ F.submodule ↔ ∀ i, f i ∈ F.N i 
goal: f ∈ F.submodule ↔ ∀ (i : ℕ), f i ∈ F.N i

full_name: Ideal.Filtration.inf_submodule
code: theorem inf_submodule : (F ⊓ F').submodule = F.submodule ⊓ F'.submodule 
goal: (F ⊓ F').submodule = F.submodule ⊓ F'.submodule

full_name: Ideal.Filtration.submoduleInfHom
code: /-- `Ideal.Filtration.submodule` as an `InfHom`. -/
def submoduleInfHom :
    InfHom (I.Filtration M) (Submodule (reesAlgebra I) (PolynomialModule R M)) 
goal: InfHom (I.Filtration M) (Submodule (↥(reesAlgebra I)) (PolynomialModule R M))

full_name: Ideal.Filtration.submodule_closure_single
code: theorem submodule_closure_single :
    AddSubmonoid.closure (⋃ i, single R i '' (F.N i : Set M)) = F.submodule.toAddSubmonoid 
goal: AddSubmonoid.closure (⋃ i, ⇑(PolynomialModule.single R i) '' ↑(F.N i)) = F.submodule.toAddSubmonoid

full_name: Ideal.Filtration.submodule_span_single
code: theorem submodule_span_single :
    Submodule.span (reesAlgebra I) (⋃ i, single R i '' (F.N i : Set M)) = F.submodule 
goal: Submodule.span (↥(reesAlgebra I)) (⋃ i, ⇑(PolynomialModule.single R i) '' ↑(F.N i)) = F.submodule

full_name: Ideal.Filtration.submodule_eq_span_le_iff_stable_ge
code: theorem submodule_eq_span_le_iff_stable_ge (n₀ : ℕ) :
    F.submodule = Submodule.span _ (⋃ i ≤ n₀, single R i '' (F.N i : Set M)) ↔
      ∀ n ≥ n₀, I • F.N n = F.N (n + 1) 
goal: F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(PolynomialModule.single R i) '' ↑(F.N i)) ↔
  ∀ n ≥ n₀, I • F.N n = F.N (n + 1)

full_name: Ideal.Filtration.submodule_fg_iff_stable
code: /-- If the components of a filtration are finitely generated, then the filtration is stable iff
its associated submodule of is finitely generated. -/
theorem submodule_fg_iff_stable (hF' : ∀ i, (F.N i).FG) : F.submodule.FG ↔ F.Stable 
goal: F.submodule.FG ↔ F.Stable

full_name: Ideal.Filtration.Stable.of_le
code: theorem Stable.of_le [IsNoetherianRing R] [Module.Finite R M] (hF : F.Stable)
    {F' : I.Filtration M} (hf : F' ≤ F) : F'.Stable 
goal: F'.Stable

full_name: Ideal.Filtration.Stable.inter_right
code: theorem Stable.inter_right [IsNoetherianRing R] [Module.Finite R M] (hF : F.Stable) :
    (F ⊓ F').Stable 
goal: (F ⊓ F').Stable

full_name: Ideal.Filtration.Stable.inter_left
code: theorem Stable.inter_left [IsNoetherianRing R] [Module.Finite R M] (hF : F.Stable) :
    (F' ⊓ F).Stable 
goal: (F' ⊓ F).Stable

full_name: Ideal.exists_pow_inf_eq_pow_smul
code: /-- **Artin-Rees lemma** -/
theorem Ideal.exists_pow_inf_eq_pow_smul [IsNoetherianRing R] [Module.Finite R M]
    (N : Submodule R M) : ∃ k : ℕ, ∀ n ≥ k, I ^ n • ⊤ ⊓ N = I ^ (n - k) • (I ^ k • ⊤ ⊓ N) 
goal: ∃ k, ∀ n ≥ k, I ^ n • ⊤ ⊓ N = I ^ (n - k) • (I ^ k • ⊤ ⊓ N)

full_name: Ideal.mem_iInf_smul_pow_eq_bot_iff
code: theorem Ideal.mem_iInf_smul_pow_eq_bot_iff [IsNoetherianRing R] [Module.Finite R M] (x : M) :
    x ∈ (⨅ i : ℕ, I ^ i • ⊤ : Submodule R M) ↔ ∃ r : I, (r : R) • x = x 
goal: x ∈ ⨅ i, I ^ i • ⊤ ↔ ∃ r, ↑r • x = x

full_name: Ideal.iInf_pow_smul_eq_bot_of_localRing
code: theorem Ideal.iInf_pow_smul_eq_bot_of_localRing [IsNoetherianRing R] [LocalRing R]
    [Module.Finite R M] (h : I ≠ ⊤) : (⨅ i : ℕ, I ^ i • ⊤ : Submodule R M) = ⊥ 
goal: ⨅ i, I ^ i • ⊤ = ⊥

full_name: Ideal.iInf_pow_eq_bot_of_localRing
code: /-- **Krull's intersection theorem** for noetherian local rings. -/
theorem Ideal.iInf_pow_eq_bot_of_localRing [IsNoetherianRing R] [LocalRing R] (h : I ≠ ⊤) :
    ⨅ i : ℕ, I ^ i = ⊥ 
goal: ⨅ i, I ^ i = ⊥

full_name: Ideal.isIdempotentElem_iff_eq_bot_or_top_of_localRing
code: /-- Also see `Ideal.isIdempotentElem_iff_eq_bot_or_top` for integral domains. -/
theorem Ideal.isIdempotentElem_iff_eq_bot_or_top_of_localRing {R} [CommRing R]
    [IsNoetherianRing R] [LocalRing R] (I : Ideal R) :
    IsIdempotentElem I ↔ I = ⊥ ∨ I = ⊤ 
goal: IsIdempotentElem I ↔ I = ⊥ ∨ I = ⊤

full_name: Ideal.iInf_pow_eq_bot_of_isDomain
code: /-- **Krull's intersection theorem** for noetherian domains. -/
theorem Ideal.iInf_pow_eq_bot_of_isDomain [IsNoetherianRing R] [IsDomain R] (h : I ≠ ⊤) :
    ⨅ i : ℕ, I ^ i = ⊥ 
goal: ⨅ i, I ^ i = ⊥