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

tactic: delta Ideal.Filtration.Stable
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
hF' : ∀ (i : ℕ), (F.N i).FG
⊢ F.submodule.FG ↔ F.Stable
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
hF' : ∀ (i : ℕ), (F.N i).FG
⊢ F.submodule.FG ↔ ∃ n₀, ∀ n ≥ n₀, I • F.N n = F.N (n + 1)

tactic: simp_rw [← F.submodule_eq_span_le_iff_stable_ge]
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
hF' : ∀ (i : ℕ), (F.N i).FG
⊢ F.submodule.FG ↔ ∃ n₀, ∀ n ≥ n₀, I • F.N n = F.N (n + 1)
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
hF' : ∀ (i : ℕ), (F.N i).FG
⊢ F.submodule.FG ↔
    ∃ n₀, F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))

tactic: constructor
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
hF' : ∀ (i : ℕ), (F.N i).FG
⊢ F.submodule.FG ↔
    ∃ n₀, F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))
state_after: case mp
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
hF' : ∀ (i : ℕ), (F.N i).FG
⊢ F.submodule.FG →
    ∃ n₀, F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))

case mpr
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
hF' : ∀ (i : ℕ), (F.N i).FG
⊢ (∃ n₀, F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))) →
    F.submodule.FG

tactic: rintro H
state_before: case mp
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
hF' : ∀ (i : ℕ), (F.N i).FG
⊢ F.submodule.FG →
    ∃ n₀, F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))
state_after: case mp
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
⊢ ∃ n₀, F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))

tactic: refine H.stabilizes_of_iSup_eq
    ⟨fun n₀ => Submodule.span _ (⋃ (i : ℕ) (_ : i ≤ n₀), single R i '' ↑(F.N i)), ?_⟩ ?_
state_before: case mp
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
⊢ ∃ n₀, F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))
state_after: case mp.refine_1
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
⊢ Monotone fun n₀ => Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))

case mp.refine_2
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
⊢ iSup
      ⇑{ toFun := fun n₀ => Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i)),
          monotone' := ?mp.refine_1 } =
    F.submodule

tactic: intro n m e
state_before: case mp.refine_1
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
⊢ Monotone fun n₀ => Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))
state_after: case mp.refine_1
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
n m : ℕ
e : n ≤ m
⊢ (fun n₀ => Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))) n ≤
    (fun n₀ => Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))) m

tactic: rw [Submodule.span_le, Set.iUnion₂_subset_iff]
state_before: case mp.refine_1
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
n m : ℕ
e : n ≤ m
⊢ (fun n₀ => Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))) n ≤
    (fun n₀ => Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))) m
state_after: case mp.refine_1
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
n m : ℕ
e : n ≤ m
⊢ ∀ i ≤ n,
    ⇑(single R i) '' ↑(F.N i) ⊆
      ↑((fun n₀ => Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))) m)

tactic: intro i hi
state_before: case mp.refine_1
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
n m : ℕ
e : n ≤ m
⊢ ∀ i ≤ n,
    ⇑(single R i) '' ↑(F.N i) ⊆
      ↑((fun n₀ => Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))) m)
state_after: case mp.refine_1
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
n m : ℕ
e : n ≤ m
i : ℕ
hi : i ≤ n
⊢ ⇑(single R i) '' ↑(F.N i) ⊆
    ↑((fun n₀ => Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))) m)

tactic: refine Set.Subset.trans ?_ Submodule.subset_span
state_before: case mp.refine_1
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
n m : ℕ
e : n ≤ m
i : ℕ
hi : i ≤ n
⊢ ⇑(single R i) '' ↑(F.N i) ⊆
    ↑((fun n₀ => Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))) m)
state_after: case mp.refine_1
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
n m : ℕ
e : n ≤ m
i : ℕ
hi : i ≤ n
⊢ ⇑(single R i) '' ↑(F.N i) ⊆ ⋃ i, ⋃ (_ : i ≤ m), ⇑(single R i) '' ↑(F.N i)

tactic: refine @Set.subset_iUnion₂ _ _ _ (fun i => fun _ => ↑((single R i) '' ((N F i) : Set M))) i ?_
state_before: case mp.refine_1
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
n m : ℕ
e : n ≤ m
i : ℕ
hi : i ≤ n
⊢ ⇑(single R i) '' ↑(F.N i) ⊆ ⋃ i, ⋃ (_ : i ≤ m), ⇑(single R i) '' ↑(F.N i)
state_after: case mp.refine_1
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
n m : ℕ
e : n ≤ m
i : ℕ
hi : i ≤ n
⊢ i ≤ m

tactic: exact hi.trans e
state_before: case mp.refine_1
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
n m : ℕ
e : n ≤ m
i : ℕ
hi : i ≤ n
⊢ i ≤ m
state_after: no goals

tactic: dsimp
state_before: case mp.refine_2
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
⊢ iSup
      ⇑{ toFun := fun n₀ => Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i)),
          monotone' := ⋯ } =
    F.submodule
state_after: case mp.refine_2
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
⊢ ⨆ n₀, Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i)) = F.submodule

tactic: rw [← Submodule.span_iUnion, ← submodule_span_single]
state_before: case mp.refine_2
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
⊢ ⨆ n₀, Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i)) = F.submodule
state_after: case mp.refine_2
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
⊢ Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ i_1, ⋃ (_ : i_1 ≤ i), ⇑(single R i_1) '' ↑(F.N i_1)) =
    Submodule.span (↥(reesAlgebra I)) (⋃ i, ⇑(single R i) '' ↑(F.N i))

tactic: congr 1
state_before: case mp.refine_2
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
⊢ Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ i_1, ⋃ (_ : i_1 ≤ i), ⇑(single R i_1) '' ↑(F.N i_1)) =
    Submodule.span (↥(reesAlgebra I)) (⋃ i, ⇑(single R i) '' ↑(F.N i))
state_after: case mp.refine_2.e_s
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
⊢ ⋃ i, ⋃ i_1, ⋃ (_ : i_1 ≤ i), ⇑(single R i_1) '' ↑(F.N i_1) = ⋃ i, ⇑(single R i) '' ↑(F.N i)

tactic: ext
state_before: case mp.refine_2.e_s
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
⊢ ⋃ i, ⋃ i_1, ⋃ (_ : i_1 ≤ i), ⇑(single R i_1) '' ↑(F.N i_1) = ⋃ i, ⇑(single R i) '' ↑(F.N i)
state_after: case mp.refine_2.e_s.h
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
x✝ : PolynomialModule R M
⊢ x✝ ∈ ⋃ i, ⋃ i_1, ⋃ (_ : i_1 ≤ i), ⇑(single R i_1) '' ↑(F.N i_1) ↔ x✝ ∈ ⋃ i, ⇑(single R i) '' ↑(F.N i)

tactic: simp only [Set.mem_iUnion, Set.mem_image, SetLike.mem_coe, exists_prop]
state_before: case mp.refine_2.e_s.h
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
x✝ : PolynomialModule R M
⊢ x✝ ∈ ⋃ i, ⋃ i_1, ⋃ (_ : i_1 ≤ i), ⇑(single R i_1) '' ↑(F.N i_1) ↔ x✝ ∈ ⋃ i, ⇑(single R i) '' ↑(F.N i)
state_after: case mp.refine_2.e_s.h
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
x✝ : PolynomialModule R M
⊢ (∃ i, ∃ i_1 ≤ i, ∃ x ∈ F.N i_1, (single R i_1) x = x✝) ↔ ∃ i, ∃ x ∈ F.N i, (single R i) x = x✝

tactic: constructor
state_before: case mp.refine_2.e_s.h
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
x✝ : PolynomialModule R M
⊢ (∃ i, ∃ i_1 ≤ i, ∃ x ∈ F.N i_1, (single R i_1) x = x✝) ↔ ∃ i, ∃ x ∈ F.N i, (single R i) x = x✝
state_after: case mp.refine_2.e_s.h.mp
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
x✝ : PolynomialModule R M
⊢ (∃ i, ∃ i_1 ≤ i, ∃ x ∈ F.N i_1, (single R i_1) x = x✝) → ∃ i, ∃ x ∈ F.N i, (single R i) x = x✝

case mp.refine_2.e_s.h.mpr
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
x✝ : PolynomialModule R M
⊢ (∃ i, ∃ x ∈ F.N i, (single R i) x = x✝) → ∃ i, ∃ i_1 ≤ i, ∃ x ∈ F.N i_1, (single R i_1) x = x✝

tactic: rintro ⟨-, i, -, e⟩
state_before: case mp.refine_2.e_s.h.mp
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
x✝ : PolynomialModule R M
⊢ (∃ i, ∃ i_1 ≤ i, ∃ x ∈ F.N i_1, (single R i_1) x = x✝) → ∃ i, ∃ x ∈ F.N i, (single R i) x = x✝
state_after: case mp.refine_2.e_s.h.mp.intro.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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
x✝ : PolynomialModule R M
i : ℕ
e : ∃ x ∈ F.N i, (single R i) x = x✝
⊢ ∃ i, ∃ x ∈ F.N i, (single R i) x = x✝

tactic: exact ⟨i, e⟩
state_before: case mp.refine_2.e_s.h.mp.intro.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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
x✝ : PolynomialModule R M
i : ℕ
e : ∃ x ∈ F.N i, (single R i) x = x✝
⊢ ∃ i, ∃ x ∈ F.N i, (single R i) x = x✝
state_after: no goals

tactic: rintro ⟨i, e⟩
state_before: case mp.refine_2.e_s.h.mpr
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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
x✝ : PolynomialModule R M
⊢ (∃ i, ∃ x ∈ F.N i, (single R i) x = x✝) → ∃ i, ∃ i_1 ≤ i, ∃ x ∈ F.N i_1, (single R i_1) x = x✝
state_after: case mp.refine_2.e_s.h.mpr.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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
x✝ : PolynomialModule R M
i : ℕ
e : ∃ x ∈ F.N i, (single R i) x = x✝
⊢ ∃ i, ∃ i_1 ≤ i, ∃ x ∈ F.N i_1, (single R i_1) x = x✝

tactic: exact ⟨i, i, le_refl i, e⟩
state_before: case mp.refine_2.e_s.h.mpr.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
hF' : ∀ (i : ℕ), (F.N i).FG
H : F.submodule.FG
x✝ : PolynomialModule R M
i : ℕ
e : ∃ x ∈ F.N i, (single R i) x = x✝
⊢ ∃ i, ∃ i_1 ≤ i, ∃ x ∈ F.N i_1, (single R i_1) x = x✝
state_after: no goals

tactic: rintro ⟨n, hn⟩
state_before: case mpr
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
hF' : ∀ (i : ℕ), (F.N i).FG
⊢ (∃ n₀, F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n₀), ⇑(single R i) '' ↑(F.N i))) →
    F.submodule.FG
state_after: case mpr.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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
⊢ F.submodule.FG

tactic: rw [hn]
state_before: case mpr.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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
⊢ F.submodule.FG
state_after: case mpr.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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
⊢ (Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))).FG

tactic: simp_rw [Submodule.span_iUnion₂, ← Finset.mem_range_succ_iff, iSup_subtype']
state_before: case mpr.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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
⊢ (Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))).FG
state_after: case mpr.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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
⊢ (⨆ x, Submodule.span (↥(reesAlgebra I)) (⇑(single R ↑x) '' ↑(F.N ↑x))).FG

tactic: apply Submodule.fg_iSup
state_before: case mpr.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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
⊢ (⨆ x, Submodule.span (↥(reesAlgebra I)) (⇑(single R ↑x) '' ↑(F.N ↑x))).FG
state_after: case mpr.intro.h
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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
⊢ ∀ (i : { i // i ∈ Finset.range n.succ }), (Submodule.span (↥(reesAlgebra I)) (⇑(single R ↑i) '' ↑(F.N ↑i))).FG

tactic: rintro ⟨i, hi⟩
state_before: case mpr.intro.h
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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
⊢ ∀ (i : { i // i ∈ Finset.range n.succ }), (Submodule.span (↥(reesAlgebra I)) (⇑(single R ↑i) '' ↑(F.N ↑i))).FG
state_after: case mpr.intro.h.mk
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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
i : ℕ
hi : i ∈ Finset.range n.succ
⊢ (Submodule.span (↥(reesAlgebra I)) (⇑(single R ↑⟨i, hi⟩) '' ↑(F.N ↑⟨i, hi⟩))).FG

tactic: obtain ⟨s, hs⟩ := hF' i
state_before: case mpr.intro.h.mk
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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
i : ℕ
hi : i ∈ Finset.range n.succ
⊢ (Submodule.span (↥(reesAlgebra I)) (⇑(single R ↑⟨i, hi⟩) '' ↑(F.N ↑⟨i, hi⟩))).FG
state_after: case mpr.intro.h.mk.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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
i : ℕ
hi : i ∈ Finset.range n.succ
s : Finset M
hs : Submodule.span R ↑s = F.N i
⊢ (Submodule.span (↥(reesAlgebra I)) (⇑(single R ↑⟨i, hi⟩) '' ↑(F.N ↑⟨i, hi⟩))).FG

tactic: have : Submodule.span (reesAlgebra I) (s.image (lsingle R i) : Set (PolynomialModule R M)) =
    Submodule.span _ (single R i '' (F.N i : Set M)) := by
  rw [Finset.coe_image, ← Submodule.span_span_of_tower R, ← Submodule.map_span, hs]; rfl
state_before: case mpr.intro.h.mk.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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
i : ℕ
hi : i ∈ Finset.range n.succ
s : Finset M
hs : Submodule.span R ↑s = F.N i
⊢ (Submodule.span (↥(reesAlgebra I)) (⇑(single R ↑⟨i, hi⟩) '' ↑(F.N ↑⟨i, hi⟩))).FG
state_after: case mpr.intro.h.mk.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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
i : ℕ
hi : i ∈ Finset.range n.succ
s : Finset M
hs : Submodule.span R ↑s = F.N i
this :
  Submodule.span ↥(reesAlgebra I) ↑(Finset.image (⇑(lsingle R i)) s) =
    Submodule.span (↥(reesAlgebra I)) (⇑(single R i) '' ↑(F.N i))
⊢ (Submodule.span (↥(reesAlgebra I)) (⇑(single R ↑⟨i, hi⟩) '' ↑(F.N ↑⟨i, hi⟩))).FG

tactic: rw [Subtype.coe_mk, ← this]
state_before: case mpr.intro.h.mk.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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
i : ℕ
hi : i ∈ Finset.range n.succ
s : Finset M
hs : Submodule.span R ↑s = F.N i
this :
  Submodule.span ↥(reesAlgebra I) ↑(Finset.image (⇑(lsingle R i)) s) =
    Submodule.span (↥(reesAlgebra I)) (⇑(single R i) '' ↑(F.N i))
⊢ (Submodule.span (↥(reesAlgebra I)) (⇑(single R ↑⟨i, hi⟩) '' ↑(F.N ↑⟨i, hi⟩))).FG
state_after: case mpr.intro.h.mk.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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
i : ℕ
hi : i ∈ Finset.range n.succ
s : Finset M
hs : Submodule.span R ↑s = F.N i
this :
  Submodule.span ↥(reesAlgebra I) ↑(Finset.image (⇑(lsingle R i)) s) =
    Submodule.span (↥(reesAlgebra I)) (⇑(single R i) '' ↑(F.N i))
⊢ (Submodule.span ↥(reesAlgebra I) ↑(Finset.image (⇑(lsingle R i)) s)).FG

tactic: exact ⟨_, rfl⟩
state_before: case mpr.intro.h.mk.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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
i : ℕ
hi : i ∈ Finset.range n.succ
s : Finset M
hs : Submodule.span R ↑s = F.N i
this :
  Submodule.span ↥(reesAlgebra I) ↑(Finset.image (⇑(lsingle R i)) s) =
    Submodule.span (↥(reesAlgebra I)) (⇑(single R i) '' ↑(F.N i))
⊢ (Submodule.span ↥(reesAlgebra I) ↑(Finset.image (⇑(lsingle R i)) s)).FG
state_after: no goals

tactic: rw [Finset.coe_image, ← Submodule.span_span_of_tower R, ← Submodule.map_span, hs]
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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
i : ℕ
hi : i ∈ Finset.range n.succ
s : Finset M
hs : Submodule.span R ↑s = F.N i
⊢ Submodule.span ↥(reesAlgebra I) ↑(Finset.image (⇑(lsingle R i)) s) =
    Submodule.span (↥(reesAlgebra 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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
i : ℕ
hi : i ∈ Finset.range n.succ
s : Finset M
hs : Submodule.span R ↑s = F.N i
⊢ Submodule.span ↥(reesAlgebra I) ↑(Submodule.map (lsingle R i) (F.N i)) =
    Submodule.span (↥(reesAlgebra I)) (⇑(single R i) '' ↑(F.N i))

tactic: rfl
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
hF' : ∀ (i : ℕ), (F.N i).FG
n : ℕ
hn : F.submodule = Submodule.span (↥(reesAlgebra I)) (⋃ i, ⋃ (_ : i ≤ n), ⇑(single R i) '' ↑(F.N i))
i : ℕ
hi : i ∈ Finset.range n.succ
s : Finset M
hs : Submodule.span R ↑s = F.N i
⊢ Submodule.span ↥(reesAlgebra I) ↑(Submodule.map (lsingle R i) (F.N i)) =
    Submodule.span (↥(reesAlgebra I)) (⇑(single R i) '' ↑(F.N i))
state_after: no goals