Theorem: Ideal.Filtration.submodule_closure_single
File: Mathlib/RingTheory/Filtration.lean

tactic: apply le_antisymm
state_before: R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h : Stable F
⊢ AddSubmonoid.closure (⋃ (i : ℕ), ↑(single R i) '' ↑(N F i)) = (Filtration.submodule F).toAddSubmonoid

tactic: rw [AddSubmonoid.closure_le, Set.iUnion_subset_iff]
state_before: case a
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h : Stable F
⊢ AddSubmonoid.closure (⋃ (i : ℕ), ↑(single R i) '' ↑(N F i)) ≤ (Filtration.submodule F).toAddSubmonoid

tactic: rintro i _ ⟨m, hm, rfl⟩ j
state_before: case a
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h : Stable F
⊢ ∀ (i : ℕ), ↑(single R i) '' ↑(N F i) ⊆ ↑(Filtration.submodule F).toAddSubmonoid

tactic: rw [single_apply]
state_before: case a.intro.intro
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h : Stable F
i : ℕ
m : M
hm : m ∈ ↑(N F i)
j : ℕ
⊢ ↑(↑(single R i) m) j ∈ N F j

tactic: split_ifs with h
state_before: case a.intro.intro
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h : Stable F
i : ℕ
m : M
hm : m ∈ ↑(N F i)
j : ℕ
⊢ (if i = j then m else 0) ∈ N F j

tactic: rwa [← h]
state_before: case a.intro.intro.inl
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h✝ : Stable F
i : ℕ
m : M
hm : m ∈ ↑(N F i)
j : ℕ
h : i = j
⊢ m ∈ N F j

tactic: exact (F.N j).zero_mem
state_before: case a.intro.intro.inr
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h✝ : Stable F
i : ℕ
m : M
hm : m ∈ ↑(N F i)
j : ℕ
h : ¬i = j
⊢ 0 ∈ N F j

tactic: intro f hf
state_before: case a
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h : Stable F
⊢ (Filtration.submodule F).toAddSubmonoid ≤ AddSubmonoid.closure (⋃ (i : ℕ), ↑(single R i) '' ↑(N F i))

tactic: rw [← f.sum_single]
state_before: case a
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h : Stable F
f : PolynomialModule R M
hf : f ∈ (Filtration.submodule F).toAddSubmonoid
⊢ f ∈ AddSubmonoid.closure (⋃ (i : ℕ), ↑(single R i) '' ↑(N F i))

tactic: apply AddSubmonoid.sum_mem _ _
state_before: case a
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h : Stable F
f : PolynomialModule R M
hf : f ∈ (Filtration.submodule F).toAddSubmonoid
⊢ Finsupp.sum f Finsupp.single ∈ AddSubmonoid.closure (⋃ (i : ℕ), ↑(single R i) '' ↑(N F i))

tactic: rintro c -
state_before: R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h : Stable F
f : PolynomialModule R M
hf : f ∈ (Filtration.submodule F).toAddSubmonoid
⊢ ∀ (c : ℕ), c ∈ f.support → Finsupp.single c (↑f c) ∈ AddSubmonoid.closure (⋃ (i : ℕ), ↑(single R i) '' ↑(N F i))

tactic: exact AddSubmonoid.subset_closure (Set.subset_iUnion _ c <| Set.mem_image_of_mem _ (hf c))
state_before: R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h : Stable F
f : PolynomialModule R M
hf : f ∈ (Filtration.submodule F).toAddSubmonoid
c : ℕ
⊢ Finsupp.single c (↑f c) ∈ AddSubmonoid.closure (⋃ (i : ℕ), ↑(single R i) '' ↑(N F i))