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' : I.Filtration M
h : F.Stable
⊢ AddSubmonoid.closure (⋃ i, ⇑(single R i) '' ↑(F.N i)) = F.submodule.toAddSubmonoid
state_after: case a
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : I.Filtration M
h : F.Stable
⊢ AddSubmonoid.closure (⋃ i, ⇑(single R i) '' ↑(F.N i)) ≤ F.submodule.toAddSubmonoid

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

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' : I.Filtration M
h : F.Stable
⊢ AddSubmonoid.closure (⋃ i, ⇑(single R i) '' ↑(F.N i)) ≤ F.submodule.toAddSubmonoid
state_after: case a
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : I.Filtration M
h : F.Stable
⊢ ∀ (i : ℕ), ⇑(single R i) '' ↑(F.N i) ⊆ ↑F.submodule.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' : I.Filtration M
h : F.Stable
⊢ ∀ (i : ℕ), ⇑(single R i) '' ↑(F.N i) ⊆ ↑F.submodule.toAddSubmonoid
state_after: case a.intro.intro
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : I.Filtration M
h : F.Stable
i : ℕ
m : M
hm : m ∈ ↑(F.N i)
j : ℕ
⊢ ((single R i) m) j ∈ F.N j

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' : I.Filtration M
h : F.Stable
i : ℕ
m : M
hm : m ∈ ↑(F.N i)
j : ℕ
⊢ ((single R i) m) j ∈ F.N j
state_after: case a.intro.intro
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : I.Filtration M
h : F.Stable
i : ℕ
m : M
hm : m ∈ ↑(F.N i)
j : ℕ
⊢ (if i = j then m else 0) ∈ F.N 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' : I.Filtration M
h : F.Stable
i : ℕ
m : M
hm : m ∈ ↑(F.N i)
j : ℕ
⊢ (if i = j then m else 0) ∈ F.N j
state_after: case pos
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : I.Filtration M
h✝ : F.Stable
i : ℕ
m : M
hm : m ∈ ↑(F.N i)
j : ℕ
h : i = j
⊢ m ∈ F.N j

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

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

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

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' : I.Filtration M
h : F.Stable
⊢ F.submodule.toAddSubmonoid ≤ AddSubmonoid.closure (⋃ i, ⇑(single R i) '' ↑(F.N i))
state_after: case a
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : I.Filtration M
h : F.Stable
f : PolynomialModule R M
hf : f ∈ F.submodule.toAddSubmonoid
⊢ f ∈ AddSubmonoid.closure (⋃ i, ⇑(single R i) '' ↑(F.N 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' : I.Filtration M
h : F.Stable
f : PolynomialModule R M
hf : f ∈ F.submodule.toAddSubmonoid
⊢ f ∈ AddSubmonoid.closure (⋃ i, ⇑(single R i) '' ↑(F.N i))
state_after: case a
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : I.Filtration M
h : F.Stable
f : PolynomialModule R M
hf : f ∈ F.submodule.toAddSubmonoid
⊢ Finsupp.sum f Finsupp.single ∈ AddSubmonoid.closure (⋃ i, ⇑(single R i) '' ↑(F.N 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' : I.Filtration M
h : F.Stable
f : PolynomialModule R M
hf : f ∈ F.submodule.toAddSubmonoid
⊢ Finsupp.sum f Finsupp.single ∈ AddSubmonoid.closure (⋃ i, ⇑(single R i) '' ↑(F.N i))
state_after: R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : I.Filtration M
h : F.Stable
f : PolynomialModule R M
hf : f ∈ F.submodule.toAddSubmonoid
⊢ ∀ c ∈ f.support, Finsupp.single c (f c) ∈ AddSubmonoid.closure (⋃ i, ⇑(single R i) '' ↑(F.N 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' : I.Filtration M
h : F.Stable
f : PolynomialModule R M
hf : f ∈ F.submodule.toAddSubmonoid
⊢ ∀ c ∈ f.support, Finsupp.single c (f c) ∈ AddSubmonoid.closure (⋃ i, ⇑(single R i) '' ↑(F.N i))
state_after: R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : I.Filtration M
h : F.Stable
f : PolynomialModule R M
hf : f ∈ F.submodule.toAddSubmonoid
c : ℕ
⊢ Finsupp.single c (f c) ∈ AddSubmonoid.closure (⋃ i, ⇑(single R i) '' ↑(F.N 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' : I.Filtration M
h : F.Stable
f : PolynomialModule R M
hf : f ∈ F.submodule.toAddSubmonoid
c : ℕ
⊢ Finsupp.single c (f c) ∈ AddSubmonoid.closure (⋃ i, ⇑(single R i) '' ↑(F.N i))
state_after: no goals