[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
i j : ℕ
⊢ I ^ i • N F j ≤ N F (i + j)
[PROOFSTEP]
induction' i with _ ih
[GOAL]
case zero
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
j : ℕ
⊢ I ^ Nat.zero • N F j ≤ N F (Nat.zero + j)
[PROOFSTEP]
simp
[GOAL]
case succ
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
j n✝ : ℕ
ih : I ^ n✝ • N F j ≤ N F (n✝ + j)
⊢ I ^ Nat.succ n✝ • N F j ≤ N F (Nat.succ n✝ + j)
[PROOFSTEP]
rw [pow_succ, mul_smul, Nat.succ_eq_add_one, add_assoc, add_comm 1, ← add_assoc]
[GOAL]
case succ
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
j n✝ : ℕ
ih : I ^ n✝ • N F j ≤ N F (n✝ + j)
⊢ I • I ^ n✝ • N F j ≤ N F (n✝ + j + 1)
[PROOFSTEP]
exact (Submodule.smul_mono_right ih).trans (F.smul_le _)
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
i j k : ℕ
⊢ I ^ (i + k) • N F j ≤ I ^ k • N F (i + j)
[PROOFSTEP]
rw [add_comm, pow_add, mul_smul]
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
i j k : ℕ
⊢ I ^ k • I ^ i • N F j ≤ I ^ k • N F (i + j)
[PROOFSTEP]
exact Submodule.smul_mono_right (F.pow_smul_le i j)
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
S : Set (Filtration I M)
i : ℕ
⊢ sSup (N '' S) (i + 1) ≤ sSup (N '' S) i
[PROOFSTEP]
apply sSup_le_sSup_of_forall_exists_le _
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
S : Set (Filtration I M)
i : ℕ
⊢ ∀ (x : Submodule R M), (x ∈ Set.range fun f => ↑f (i + 1)) → ∃ y, (y ∈ Set.range fun f => ↑f i) ∧ x ≤ y
[PROOFSTEP]
rintro _ ⟨⟨_, F, hF, rfl⟩, rfl⟩
[GOAL]
case intro.mk.intro.intro
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F✝ F' : Filtration I M
S : Set (Filtration I M)
i : ℕ
F : Filtration I M
hF : F ∈ S
⊢ ∃ y,
    (y ∈ Set.range fun f => ↑f i) ∧ (fun f => ↑f (i + 1)) { val := F.N, property := (_ : ∃ a, a ∈ S ∧ a.N = F.N) } ≤ y
[PROOFSTEP]
exact ⟨_, ⟨⟨_, F, hF, rfl⟩, rfl⟩, F.mono i⟩
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
S : Set (Filtration I M)
i : ℕ
⊢ I • sSup (N '' S) i ≤ sSup (N '' S) (i + 1)
[PROOFSTEP]
rw [sSup_eq_iSup', iSup_apply, Submodule.smul_iSup, iSup_apply]
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
S : Set (Filtration I M)
i : ℕ
⊢ ⨆ (i_1 : ↑(N '' S)), I • ↑i_1 i ≤ ⨆ (i_1 : ↑(N '' S)), ↑i_1 (i + 1)
[PROOFSTEP]
apply iSup_mono _
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
S : Set (Filtration I M)
i : ℕ
⊢ ∀ (i_1 : ↑(N '' S)), I • ↑i_1 i ≤ ↑i_1 (i + 1)
[PROOFSTEP]
rintro ⟨_, F, hF, rfl⟩
[GOAL]
case mk.intro.intro
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F✝ F' : Filtration I M
S : Set (Filtration I M)
i : ℕ
F : Filtration I M
hF : F ∈ S
⊢ I • ↑{ val := F.N, property := (_ : ∃ a, a ∈ S ∧ a.N = F.N) } i ≤
    ↑{ val := F.N, property := (_ : ∃ a, a ∈ S ∧ a.N = F.N) } (i + 1)
[PROOFSTEP]
exact F.smul_le i
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
S : Set (Filtration I M)
i : ℕ
⊢ sInf (N '' S) (i + 1) ≤ sInf (N '' S) i
[PROOFSTEP]
apply sInf_le_sInf_of_forall_exists_le _
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
S : Set (Filtration I M)
i : ℕ
⊢ ∀ (x : Submodule R M), (x ∈ Set.range fun f => ↑f i) → ∃ y, (y ∈ Set.range fun f => ↑f (i + 1)) ∧ y ≤ x
[PROOFSTEP]
rintro _ ⟨⟨_, F, hF, rfl⟩, rfl⟩
[GOAL]
case intro.mk.intro.intro
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F✝ F' : Filtration I M
S : Set (Filtration I M)
i : ℕ
F : Filtration I M
hF : F ∈ S
⊢ ∃ y,
    (y ∈ Set.range fun f => ↑f (i + 1)) ∧ y ≤ (fun f => ↑f i) { val := F.N, property := (_ : ∃ a, a ∈ S ∧ a.N = F.N) }
[PROOFSTEP]
exact ⟨_, ⟨⟨_, F, hF, rfl⟩, rfl⟩, F.mono i⟩
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
S : Set (Filtration I M)
i : ℕ
⊢ I • sInf (N '' S) i ≤ sInf (N '' S) (i + 1)
[PROOFSTEP]
rw [sInf_eq_iInf', iInf_apply, iInf_apply]
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
S : Set (Filtration I M)
i : ℕ
⊢ I • ⨅ (i_1 : ↑(N '' S)), ↑i_1 i ≤ ⨅ (i_1 : ↑(N '' S)), ↑i_1 (i + 1)
[PROOFSTEP]
refine' Submodule.smul_iInf_le.trans _
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
S : Set (Filtration I M)
i : ℕ
⊢ ⨅ (i_1 : ↑(N '' S)), I • ↑i_1 i ≤ ⨅ (i_1 : ↑(N '' S)), ↑i_1 (i + 1)
[PROOFSTEP]
apply iInf_mono _
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
S : Set (Filtration I M)
i : ℕ
⊢ ∀ (i_1 : ↑(N '' S)), I • ↑i_1 i ≤ ↑i_1 (i + 1)
[PROOFSTEP]
rintro ⟨_, F, hF, rfl⟩
[GOAL]
case mk.intro.intro
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F✝ F' : Filtration I M
S : Set (Filtration I M)
i : ℕ
F : Filtration I M
hF : F ∈ S
⊢ I • ↑{ val := F.N, property := (_ : ∃ a, a ∈ S ∧ a.N = F.N) } i ≤
    ↑{ val := F.N, property := (_ : ∃ a, a ∈ S ∧ a.N = F.N) } (i + 1)
[PROOFSTEP]
exact F.smul_le i
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ : Ideal R
F F' : Filtration I✝ M
I : Ideal R
N : Submodule R M
i : ℕ
⊢ (fun i => I ^ i • N) (i + 1) ≤ (fun i => I ^ i • N) i
[PROOFSTEP]
dsimp only
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ : Ideal R
F F' : Filtration I✝ M
I : Ideal R
N : Submodule R M
i : ℕ
⊢ I ^ (i + 1) • N ≤ I ^ i • N
[PROOFSTEP]
rw [add_comm, pow_add, mul_smul]
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ : Ideal R
F F' : Filtration I✝ M
I : Ideal R
N : Submodule R M
i : ℕ
⊢ I ^ 1 • I ^ i • N ≤ I ^ i • N
[PROOFSTEP]
exact Submodule.smul_le_right
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ : Ideal R
F F' : Filtration I✝ M
I : Ideal R
N : Submodule R M
i : ℕ
⊢ I • (fun i => I ^ i • N) i ≤ (fun i => I ^ i • N) (i + 1)
[PROOFSTEP]
dsimp only
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ : Ideal R
F F' : Filtration I✝ M
I : Ideal R
N : Submodule R M
i : ℕ
⊢ I • I ^ i • N ≤ I ^ (i + 1) • N
[PROOFSTEP]
rw [add_comm, pow_add, mul_smul, pow_one]
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ : Ideal R
F F' : Filtration I✝ M
I : Ideal R
N : Submodule R M
⊢ Stable (stableFiltration I N)
[PROOFSTEP]
use 0
[GOAL]
case h
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ : Ideal R
F F' : Filtration I✝ M
I : Ideal R
N : Submodule R M
⊢ ∀ (n : ℕ), n ≥ 0 → I • Ideal.Filtration.N (stableFiltration I N) n = Ideal.Filtration.N (stableFiltration I N) (n + 1)
[PROOFSTEP]
intro n _
[GOAL]
case h
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ : Ideal R
F F' : Filtration I✝ M
I : Ideal R
N : Submodule R M
n : ℕ
a✝ : n ≥ 0
⊢ I • Ideal.Filtration.N (stableFiltration I N) n = Ideal.Filtration.N (stableFiltration I N) (n + 1)
[PROOFSTEP]
dsimp
[GOAL]
case h
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I✝ : Ideal R
F F' : Filtration I✝ M
I : Ideal R
N : Submodule R M
n : ℕ
a✝ : n ≥ 0
⊢ I • I ^ n • N = I ^ (n + 1) • N
[PROOFSTEP]
rw [add_comm, pow_add, mul_smul, pow_one]
[GOAL]
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
⊢ ∃ n₀, ∀ (k : ℕ), N F (n₀ + k) = I ^ k • N F n₀
[PROOFSTEP]
obtain ⟨n₀, hn⟩ := h
[GOAL]
case intro
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
n₀ : ℕ
hn : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
⊢ ∃ n₀, ∀ (k : ℕ), N F (n₀ + k) = I ^ k • N F n₀
[PROOFSTEP]
use n₀
[GOAL]
case h
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
n₀ : ℕ
hn : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
⊢ ∀ (k : ℕ), N F (n₀ + k) = I ^ k • N F n₀
[PROOFSTEP]
intro k
[GOAL]
case h
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
n₀ : ℕ
hn : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
k : ℕ
⊢ N F (n₀ + k) = I ^ k • N F n₀
[PROOFSTEP]
induction' k with _ ih
[GOAL]
case h.zero
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
n₀ : ℕ
hn : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
⊢ N F (n₀ + Nat.zero) = I ^ Nat.zero • N F n₀
[PROOFSTEP]
simp
[GOAL]
case h.succ
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
n₀ : ℕ
hn : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
n✝ : ℕ
ih : N F (n₀ + n✝) = I ^ n✝ • N F n₀
⊢ N F (n₀ + Nat.succ n✝) = I ^ Nat.succ n✝ • N F n₀
[PROOFSTEP]
rw [Nat.succ_eq_add_one, ← add_assoc, ← hn, ih, add_comm, pow_add, mul_smul, pow_one]
[GOAL]
case h.succ.a
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
n₀ : ℕ
hn : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
n✝ : ℕ
ih : N F (n₀ + n✝) = I ^ n✝ • N F n₀
⊢ n₀ + n✝ ≥ n₀
[PROOFSTEP]
linarith
[GOAL]
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
⊢ ∃ n₀, ∀ (n : ℕ), n ≥ n₀ → N F n = I ^ (n - n₀) • N F n₀
[PROOFSTEP]
obtain ⟨n₀, hn₀⟩ := h.exists_pow_smul_eq
[GOAL]
case 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
n₀ : ℕ
hn₀ : ∀ (k : ℕ), N F (n₀ + k) = I ^ k • N F n₀
⊢ ∃ n₀, ∀ (n : ℕ), n ≥ n₀ → N F n = I ^ (n - n₀) • N F n₀
[PROOFSTEP]
use n₀
[GOAL]
case h
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
n₀ : ℕ
hn₀ : ∀ (k : ℕ), N F (n₀ + k) = I ^ k • N F n₀
⊢ ∀ (n : ℕ), n ≥ n₀ → N F n = I ^ (n - n₀) • N F n₀
[PROOFSTEP]
intro n hn
[GOAL]
case h
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
n₀ : ℕ
hn₀ : ∀ (k : ℕ), N F (n₀ + k) = I ^ k • N F n₀
n : ℕ
hn : n ≥ n₀
⊢ N F n = I ^ (n - n₀) • N F n₀
[PROOFSTEP]
convert hn₀ (n - n₀)
[GOAL]
case h.e'_2.h.e'_8
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
n₀ : ℕ
hn₀ : ∀ (k : ℕ), N F (n₀ + k) = I ^ k • N F n₀
n : ℕ
hn : n ≥ n₀
⊢ n = n₀ + (n - n₀)
[PROOFSTEP]
rw [add_comm, tsub_add_cancel_of_le hn]
[GOAL]
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
⊢ Stable F ↔ ∃ n₀, ∀ (n : ℕ), n ≥ n₀ → N F n = I ^ (n - n₀) • N F n₀
[PROOFSTEP]
refine' ⟨Stable.exists_pow_smul_eq_of_ge, fun h => ⟨h.choose, fun n hn => _⟩⟩
[GOAL]
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
h : ∃ n₀, ∀ (n : ℕ), n ≥ n₀ → N F n = I ^ (n - n₀) • N F n₀
n : ℕ
hn : n ≥ Exists.choose h
⊢ I • N F n = N F (n + 1)
[PROOFSTEP]
rw [h.choose_spec n hn, h.choose_spec (n + 1) (by linarith), smul_smul, ← pow_succ, tsub_add_eq_add_tsub hn]
[GOAL]
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
h : ∃ n₀, ∀ (n : ℕ), n ≥ n₀ → N F n = I ^ (n - n₀) • N F n₀
n : ℕ
hn : n ≥ Exists.choose h
⊢ n + 1 ≥ Exists.choose h
[PROOFSTEP]
linarith
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h✝ h : Stable F
e : N F 0 ≤ N F' 0
⊢ ∃ n₀, ∀ (n : ℕ), N F (n + n₀) ≤ N F' n
[PROOFSTEP]
obtain ⟨n₀, hF⟩ := h
[GOAL]
case 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
e : N F 0 ≤ N F' 0
n₀ : ℕ
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
⊢ ∃ n₀, ∀ (n : ℕ), N F (n + n₀) ≤ N F' n
[PROOFSTEP]
use n₀
[GOAL]
case h
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
e : N F 0 ≤ N F' 0
n₀ : ℕ
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
⊢ ∀ (n : ℕ), N F (n + n₀) ≤ N F' n
[PROOFSTEP]
intro n
[GOAL]
case h
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
e : N F 0 ≤ N F' 0
n₀ : ℕ
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
n : ℕ
⊢ N F (n + n₀) ≤ N F' n
[PROOFSTEP]
induction' n with n hn
[GOAL]
case h.zero
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
e : N F 0 ≤ N F' 0
n₀ : ℕ
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
⊢ N F (Nat.zero + n₀) ≤ N F' Nat.zero
[PROOFSTEP]
refine' (F.antitone _).trans e
[GOAL]
case h.zero
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
e : N F 0 ≤ N F' 0
n₀ : ℕ
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
⊢ 0 ≤ Nat.zero + n₀
[PROOFSTEP]
simp
[GOAL]
case h.succ
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
e : N F 0 ≤ N F' 0
n₀ : ℕ
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
n : ℕ
hn : N F (n + n₀) ≤ N F' n
⊢ N F (Nat.succ n + n₀) ≤ N F' (Nat.succ n)
[PROOFSTEP]
rw [Nat.succ_eq_one_add, add_assoc, add_comm, add_comm 1 n, ← hF]
[GOAL]
case h.succ
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
e : N F 0 ≤ N F' 0
n₀ : ℕ
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
n : ℕ
hn : N F (n + n₀) ≤ N F' n
⊢ I • N F (n + n₀) ≤ N F' (n + 1)
case h.succ.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
e : N F 0 ≤ N F' 0
n₀ : ℕ
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
n : ℕ
hn : N F (n + n₀) ≤ N F' n
⊢ n + n₀ ≥ n₀
[PROOFSTEP]
exact (Submodule.smul_mono_right hn).trans (F'.smul_le _)
[GOAL]
case h.succ.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
e : N F 0 ≤ N F' 0
n₀ : ℕ
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
n : ℕ
hn : N F (n + n₀) ≤ N F' n
⊢ n + n₀ ≥ n₀
[PROOFSTEP]
simp
[GOAL]
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h✝ h : Stable F
h' : Stable F'
e : N F 0 = N F' 0
⊢ ∃ n₀, ∀ (n : ℕ), N F (n + n₀) ≤ N F' n ∧ N F' (n + n₀) ≤ N F n
[PROOFSTEP]
obtain ⟨n₁, h₁⟩ := h.exists_forall_le (le_of_eq e)
[GOAL]
case intro
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h✝ h : Stable F
h' : Stable F'
e : N F 0 = N F' 0
n₁ : ℕ
h₁ : ∀ (n : ℕ), N F (n + n₁) ≤ N F' n
⊢ ∃ n₀, ∀ (n : ℕ), N F (n + n₀) ≤ N F' n ∧ N F' (n + n₀) ≤ N F n
[PROOFSTEP]
obtain ⟨n₂, h₂⟩ := h'.exists_forall_le (le_of_eq e.symm)
[GOAL]
case 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✝ h : Stable F
h' : Stable F'
e : N F 0 = N F' 0
n₁ : ℕ
h₁ : ∀ (n : ℕ), N F (n + n₁) ≤ N F' n
n₂ : ℕ
h₂ : ∀ (n : ℕ), N F' (n + n₂) ≤ N F n
⊢ ∃ n₀, ∀ (n : ℕ), N F (n + n₀) ≤ N F' n ∧ N F' (n + n₀) ≤ N F n
[PROOFSTEP]
use max n₁ n₂
[GOAL]
case h
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h✝ h : Stable F
h' : Stable F'
e : N F 0 = N F' 0
n₁ : ℕ
h₁ : ∀ (n : ℕ), N F (n + n₁) ≤ N F' n
n₂ : ℕ
h₂ : ∀ (n : ℕ), N F' (n + n₂) ≤ N F n
⊢ ∀ (n : ℕ), N F (n + max n₁ n₂) ≤ N F' n ∧ N F' (n + max n₁ n₂) ≤ N F n
[PROOFSTEP]
intro n
[GOAL]
case h
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h✝ h : Stable F
h' : Stable F'
e : N F 0 = N F' 0
n₁ : ℕ
h₁ : ∀ (n : ℕ), N F (n + n₁) ≤ N F' n
n₂ : ℕ
h₂ : ∀ (n : ℕ), N F' (n + n₂) ≤ N F n
n : ℕ
⊢ N F (n + max n₁ n₂) ≤ N F' n ∧ N F' (n + max n₁ n₂) ≤ N F n
[PROOFSTEP]
refine' ⟨(F.antitone _).trans (h₁ n), (F'.antitone _).trans (h₂ n)⟩
[GOAL]
case h.refine'_1
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h✝ h : Stable F
h' : Stable F'
e : N F 0 = N F' 0
n₁ : ℕ
h₁ : ∀ (n : ℕ), N F (n + n₁) ≤ N F' n
n₂ : ℕ
h₂ : ∀ (n : ℕ), N F' (n + n₂) ≤ N F n
n : ℕ
⊢ n + n₁ ≤ n + max n₁ n₂
[PROOFSTEP]
simp
[GOAL]
case h.refine'_2
R M : Type u
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
I : Ideal R
F F' : Filtration I M
h✝ h : Stable F
h' : Stable F'
e : N F 0 = N F' 0
n₁ : ℕ
h₁ : ∀ (n : ℕ), N F (n + n₁) ≤ N F' n
n₂ : ℕ
h₂ : ∀ (n : ℕ), N F' (n + n₂) ≤ N F n
n : ℕ
⊢ n + n₂ ≤ n + max n₁ n₂
[PROOFSTEP]
simp
[GOAL]
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
r : { x // x ∈ reesAlgebra I }
f : PolynomialModule R M
hf :
  f ∈
    {
          toAddSubsemigroup :=
            { carrier := {f | ∀ (i : ℕ), ↑f i ∈ N F i},
              add_mem' :=
                (_ :
                  ∀ {a b : PolynomialModule R M},
                    a ∈ {f | ∀ (i : ℕ), ↑f i ∈ N F i} →
                      b ∈ {f | ∀ (i : ℕ), ↑f i ∈ N F i} → ∀ (i : ℕ), ↑a i + ↑b i ∈ N F i) },
          zero_mem' := (_ : ∀ (i : ℕ), 0 ∈ N F i) }.toAddSubsemigroup.carrier
i : ℕ
⊢ ↑(r • f) i ∈ N F i
[PROOFSTEP]
rw [Subalgebra.smul_def, PolynomialModule.smul_apply]
[GOAL]
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
r : { x // x ∈ reesAlgebra I }
f : PolynomialModule R M
hf :
  f ∈
    {
          toAddSubsemigroup :=
            { carrier := {f | ∀ (i : ℕ), ↑f i ∈ N F i},
              add_mem' :=
                (_ :
                  ∀ {a b : PolynomialModule R M},
                    a ∈ {f | ∀ (i : ℕ), ↑f i ∈ N F i} →
                      b ∈ {f | ∀ (i : ℕ), ↑f i ∈ N F i} → ∀ (i : ℕ), ↑a i + ↑b i ∈ N F i) },
          zero_mem' := (_ : ∀ (i : ℕ), 0 ∈ N F i) }.toAddSubsemigroup.carrier
i : ℕ
⊢ ∑ x in Finset.Nat.antidiagonal i, coeff (↑r) x.fst • ↑f x.snd ∈ N F i
[PROOFSTEP]
apply Submodule.sum_mem
[GOAL]
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
r : { x // x ∈ reesAlgebra I }
f : PolynomialModule R M
hf :
  f ∈
    {
          toAddSubsemigroup :=
            { carrier := {f | ∀ (i : ℕ), ↑f i ∈ N F i},
              add_mem' :=
                (_ :
                  ∀ {a b : PolynomialModule R M},
                    a ∈ {f | ∀ (i : ℕ), ↑f i ∈ N F i} →
                      b ∈ {f | ∀ (i : ℕ), ↑f i ∈ N F i} → ∀ (i : ℕ), ↑a i + ↑b i ∈ N F i) },
          zero_mem' := (_ : ∀ (i : ℕ), 0 ∈ N F i) }.toAddSubsemigroup.carrier
i : ℕ
⊢ ∀ (c : ℕ × ℕ), c ∈ Finset.Nat.antidiagonal i → coeff (↑r) c.fst • ↑f c.snd ∈ N F i
[PROOFSTEP]
rintro ⟨j, k⟩ e
[GOAL]
case a.mk
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
r : { x // x ∈ reesAlgebra I }
f : PolynomialModule R M
hf :
  f ∈
    {
          toAddSubsemigroup :=
            { carrier := {f | ∀ (i : ℕ), ↑f i ∈ N F i},
              add_mem' :=
                (_ :
                  ∀ {a b : PolynomialModule R M},
                    a ∈ {f | ∀ (i : ℕ), ↑f i ∈ N F i} →
                      b ∈ {f | ∀ (i : ℕ), ↑f i ∈ N F i} → ∀ (i : ℕ), ↑a i + ↑b i ∈ N F i) },
          zero_mem' := (_ : ∀ (i : ℕ), 0 ∈ N F i) }.toAddSubsemigroup.carrier
i j k : ℕ
e : (j, k) ∈ Finset.Nat.antidiagonal i
⊢ coeff ↑r (j, k).fst • ↑f (j, k).snd ∈ N F i
[PROOFSTEP]
rw [Finset.Nat.mem_antidiagonal] at e
[GOAL]
case a.mk
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
r : { x // x ∈ reesAlgebra I }
f : PolynomialModule R M
hf :
  f ∈
    {
          toAddSubsemigroup :=
            { carrier := {f | ∀ (i : ℕ), ↑f i ∈ N F i},
              add_mem' :=
                (_ :
                  ∀ {a b : PolynomialModule R M},
                    a ∈ {f | ∀ (i : ℕ), ↑f i ∈ N F i} →
                      b ∈ {f | ∀ (i : ℕ), ↑f i ∈ N F i} → ∀ (i : ℕ), ↑a i + ↑b i ∈ N F i) },
          zero_mem' := (_ : ∀ (i : ℕ), 0 ∈ N F i) }.toAddSubsemigroup.carrier
i j k : ℕ
e : (j, k).fst + (j, k).snd = i
⊢ coeff ↑r (j, k).fst • ↑f (j, k).snd ∈ N F i
[PROOFSTEP]
subst e
[GOAL]
case a.mk
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
r : { x // x ∈ reesAlgebra I }
f : PolynomialModule R M
hf :
  f ∈
    {
          toAddSubsemigroup :=
            { carrier := {f | ∀ (i : ℕ), ↑f i ∈ N F i},
              add_mem' :=
                (_ :
                  ∀ {a b : PolynomialModule R M},
                    a ∈ {f | ∀ (i : ℕ), ↑f i ∈ N F i} →
                      b ∈ {f | ∀ (i : ℕ), ↑f i ∈ N F i} → ∀ (i : ℕ), ↑a i + ↑b i ∈ N F i) },
          zero_mem' := (_ : ∀ (i : ℕ), 0 ∈ N F i) }.toAddSubsemigroup.carrier
j k : ℕ
⊢ coeff ↑r (j, k).fst • ↑f (j, k).snd ∈ N F ((j, k).fst + (j, k).snd)
[PROOFSTEP]
exact F.pow_smul_le j k (Submodule.smul_mem_smul (r.2 j) (hf k))
[GOAL]
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 ⊓ F') = Filtration.submodule F ⊓ Filtration.submodule F'
[PROOFSTEP]
ext
[GOAL]
case h
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
x✝ : PolynomialModule R M
⊢ x✝ ∈ Filtration.submodule (F ⊓ F') ↔ x✝ ∈ Filtration.submodule F ⊓ Filtration.submodule F'
[PROOFSTEP]
exact forall_and
[GOAL]
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
[PROOFSTEP]
apply le_antisymm
[GOAL]
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
[PROOFSTEP]
rw [AddSubmonoid.closure_le, Set.iUnion_subset_iff]
[GOAL]
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
[PROOFSTEP]
rintro i _ ⟨m, hm, rfl⟩ j
[GOAL]
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
[PROOFSTEP]
rw [single_apply]
[GOAL]
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
[PROOFSTEP]
split_ifs with h
[GOAL]
case pos
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
[PROOFSTEP]
rwa [← h]
[GOAL]
case neg
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
[PROOFSTEP]
exact (F.N j).zero_mem
[GOAL]
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))
[PROOFSTEP]
intro f hf
[GOAL]
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))
[PROOFSTEP]
rw [← f.sum_single]
[GOAL]
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))
[PROOFSTEP]
apply AddSubmonoid.sum_mem _ _
[GOAL]
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))
[PROOFSTEP]
rintro c -
[GOAL]
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))
[PROOFSTEP]
exact AddSubmonoid.subset_closure (Set.subset_iUnion _ c <| Set.mem_image_of_mem _ (hf c))
[GOAL]
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
⊢ Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ), ↑(single R i) '' ↑(N F i)) = Filtration.submodule F
[PROOFSTEP]
rw [← Submodule.span_closure, submodule_closure_single, Submodule.coe_toAddSubmonoid]
[GOAL]
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
⊢ Submodule.span { x // x ∈ reesAlgebra I } ↑(Filtration.submodule F) = Filtration.submodule F
[PROOFSTEP]
exact Submodule.span_eq (Filtration.submodule F)
[GOAL]
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
n₀ : ℕ
⊢ Filtration.submodule F =
      Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) ↔
    ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
[PROOFSTEP]
rw [← submodule_span_single, ← LE.le.le_iff_eq, Submodule.span_le, Set.iUnion_subset_iff]
[GOAL]
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
n₀ : ℕ
⊢ (∀ (i : ℕ),
      ↑(single R i) '' ↑(N F i) ⊆
        ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))) ↔
    ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
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
n₀ : ℕ
⊢ Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) ≤
    Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ), ↑(single R i) '' ↑(N F i))
[PROOFSTEP]
swap
[GOAL]
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
n₀ : ℕ
⊢ Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) ≤
    Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ), ↑(single R i) '' ↑(N F i))
[PROOFSTEP]
exact Submodule.span_mono (Set.iUnion₂_subset_iUnion _ _)
[GOAL]
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
n₀ : ℕ
⊢ (∀ (i : ℕ),
      ↑(single R i) '' ↑(N F i) ⊆
        ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))) ↔
    ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
[PROOFSTEP]
constructor
[GOAL]
case mp
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
n₀ : ℕ
⊢ (∀ (i : ℕ),
      ↑(single R i) '' ↑(N F i) ⊆
        ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))) →
    ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
[PROOFSTEP]
intro H n hn
[GOAL]
case mp
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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
⊢ I • N F n = N F (n + 1)
[PROOFSTEP]
refine' (F.smul_le n).antisymm _
[GOAL]
case mp
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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
⊢ N F (n + 1) ≤ I • N F n
[PROOFSTEP]
intro x hx
[GOAL]
case mp
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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
x : M
hx : x ∈ N F (n + 1)
⊢ x ∈ I • N F n
[PROOFSTEP]
obtain ⟨l, hl⟩ := (Finsupp.mem_span_iff_total _ _ _).mp (H _ ⟨x, hx, rfl⟩)
[GOAL]
case mp.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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
x : M
hx : x ∈ N F (n + 1)
l : ↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) →₀ { x // x ∈ reesAlgebra I }
hl :
  ↑(Finsupp.total (↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) (PolynomialModule R M)
          { x // x ∈ reesAlgebra I } Subtype.val)
      l =
    ↑(single R (n + 1)) x
⊢ x ∈ I • N F n
[PROOFSTEP]
replace hl := congr_arg (fun f : ℕ →₀ M => f (n + 1)) hl
[GOAL]
case mp.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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
x : M
hx : x ∈ N F (n + 1)
l : ↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) →₀ { x // x ∈ reesAlgebra I }
hl :
  (fun f => ↑f (n + 1))
      (↑(Finsupp.total (↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) (PolynomialModule R M)
            { x // x ∈ reesAlgebra I } Subtype.val)
        l) =
    (fun f => ↑f (n + 1)) (↑(single R (n + 1)) x)
⊢ x ∈ I • N F n
[PROOFSTEP]
dsimp only at hl
[GOAL]
case mp.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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
x : M
hx : x ∈ N F (n + 1)
l : ↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) →₀ { x // x ∈ reesAlgebra I }
hl :
  ↑(↑(Finsupp.total (↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) (PolynomialModule R M)
              { x // x ∈ reesAlgebra I } Subtype.val)
          l)
      (n + 1) =
    ↑(↑(single R (n + 1)) x) (n + 1)
⊢ x ∈ I • N F n
[PROOFSTEP]
erw [Finsupp.single_eq_same] at hl
[GOAL]
case mp.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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
x : M
hx : x ∈ N F (n + 1)
l : ↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) →₀ { x // x ∈ reesAlgebra I }
hl :
  ↑(↑(Finsupp.total (↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) (PolynomialModule R M)
              { x // x ∈ reesAlgebra I } Subtype.val)
          l)
      (n + 1) =
    x
⊢ x ∈ I • N F n
[PROOFSTEP]
rw [← hl, Finsupp.total_apply, Finsupp.sum_apply]
[GOAL]
case mp.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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
x : M
hx : x ∈ N F (n + 1)
l : ↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) →₀ { x // x ∈ reesAlgebra I }
hl :
  ↑(↑(Finsupp.total (↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) (PolynomialModule R M)
              { x // x ∈ reesAlgebra I } Subtype.val)
          l)
      (n + 1) =
    x
⊢ (Finsupp.sum l fun a₁ b => ↑(b • ↑a₁) (n + 1)) ∈ I • N F n
[PROOFSTEP]
apply Submodule.sum_mem _ _
[GOAL]
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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
x : M
hx : x ∈ N F (n + 1)
l : ↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) →₀ { x // x ∈ reesAlgebra I }
hl :
  ↑(↑(Finsupp.total (↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) (PolynomialModule R M)
              { x // x ∈ reesAlgebra I } Subtype.val)
          l)
      (n + 1) =
    x
⊢ ∀ (c : ↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))),
    c ∈ l.support → (fun a₁ b => ↑(b • ↑a₁) (n + 1)) c (↑l c) ∈ I • N F n
[PROOFSTEP]
rintro ⟨_, _, ⟨n', rfl⟩, _, ⟨hn', rfl⟩, m, hm, rfl⟩ -
[GOAL]
case mk.intro.intro.intro.intro.intro.intro.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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
x : M
hx : x ∈ N F (n + 1)
l : ↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) →₀ { x // x ∈ reesAlgebra I }
hl :
  ↑(↑(Finsupp.total (↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) (PolynomialModule R M)
              { x // x ∈ reesAlgebra I } Subtype.val)
          l)
      (n + 1) =
    x
n' : ℕ
hn' : n' ≤ n₀
m : M
hm : m ∈ ↑(N F n')
⊢ (fun a₁ b => ↑(b • ↑a₁) (n + 1))
      { val := ↑(single R n') m,
        property :=
          (_ : ∃ t, (t ∈ Set.range fun i => ⋃ (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) ∧ ↑(single R n') m ∈ t) }
      (↑l
        { val := ↑(single R n') m,
          property :=
            (_ : ∃ t, (t ∈ Set.range fun i => ⋃ (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) ∧ ↑(single R n') m ∈ t) }) ∈
    I • N F n
[PROOFSTEP]
dsimp only [Subtype.coe_mk]
[GOAL]
case mk.intro.intro.intro.intro.intro.intro.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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
x : M
hx : x ∈ N F (n + 1)
l : ↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) →₀ { x // x ∈ reesAlgebra I }
hl :
  ↑(↑(Finsupp.total (↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) (PolynomialModule R M)
              { x // x ∈ reesAlgebra I } Subtype.val)
          l)
      (n + 1) =
    x
n' : ℕ
hn' : n' ≤ n₀
m : M
hm : m ∈ ↑(N F n')
⊢ ↑(↑l
            { val := ↑(single R n') m,
              property :=
                (_ : ∃ t, (t ∈ Set.range fun i => ⋃ (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) ∧ ↑(single R n') m ∈ t) } •
          ↑(single R n') m)
      (n + 1) ∈
    I • N F n
[PROOFSTEP]
rw [Subalgebra.smul_def, smul_single_apply, if_pos (show n' ≤ n + 1 by linarith)]
[GOAL]
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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
x : M
hx : x ∈ N F (n + 1)
l : ↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) →₀ { x // x ∈ reesAlgebra I }
hl :
  ↑(↑(Finsupp.total (↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) (PolynomialModule R M)
              { x // x ∈ reesAlgebra I } Subtype.val)
          l)
      (n + 1) =
    x
n' : ℕ
hn' : n' ≤ n₀
m : M
hm : m ∈ ↑(N F n')
⊢ n' ≤ n + 1
[PROOFSTEP]
linarith
[GOAL]
case mk.intro.intro.intro.intro.intro.intro.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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
x : M
hx : x ∈ N F (n + 1)
l : ↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) →₀ { x // x ∈ reesAlgebra I }
hl :
  ↑(↑(Finsupp.total (↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) (PolynomialModule R M)
              { x // x ∈ reesAlgebra I } Subtype.val)
          l)
      (n + 1) =
    x
n' : ℕ
hn' : n' ≤ n₀
m : M
hm : m ∈ ↑(N F n')
⊢ coeff
        (↑(↑l
            { val := ↑(single R n') m,
              property :=
                (_ : ∃ t, (t ∈ Set.range fun i => ⋃ (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) ∧ ↑(single R n') m ∈ t) }))
        (n + 1 - n') •
      m ∈
    I • N F n
[PROOFSTEP]
have e : n' ≤ n := by linarith
[GOAL]
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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
x : M
hx : x ∈ N F (n + 1)
l : ↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) →₀ { x // x ∈ reesAlgebra I }
hl :
  ↑(↑(Finsupp.total (↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) (PolynomialModule R M)
              { x // x ∈ reesAlgebra I } Subtype.val)
          l)
      (n + 1) =
    x
n' : ℕ
hn' : n' ≤ n₀
m : M
hm : m ∈ ↑(N F n')
⊢ n' ≤ n
[PROOFSTEP]
linarith
[GOAL]
case mk.intro.intro.intro.intro.intro.intro.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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
x : M
hx : x ∈ N F (n + 1)
l : ↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) →₀ { x // x ∈ reesAlgebra I }
hl :
  ↑(↑(Finsupp.total (↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) (PolynomialModule R M)
              { x // x ∈ reesAlgebra I } Subtype.val)
          l)
      (n + 1) =
    x
n' : ℕ
hn' : n' ≤ n₀
m : M
hm : m ∈ ↑(N F n')
e : n' ≤ n
⊢ coeff
        (↑(↑l
            { val := ↑(single R n') m,
              property :=
                (_ : ∃ t, (t ∈ Set.range fun i => ⋃ (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) ∧ ↑(single R n') m ∈ t) }))
        (n + 1 - n') •
      m ∈
    I • N F n
[PROOFSTEP]
have := F.pow_smul_le_pow_smul (n - n') n' 1
[GOAL]
case mk.intro.intro.intro.intro.intro.intro.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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
x : M
hx : x ∈ N F (n + 1)
l : ↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) →₀ { x // x ∈ reesAlgebra I }
hl :
  ↑(↑(Finsupp.total (↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) (PolynomialModule R M)
              { x // x ∈ reesAlgebra I } Subtype.val)
          l)
      (n + 1) =
    x
n' : ℕ
hn' : n' ≤ n₀
m : M
hm : m ∈ ↑(N F n')
e : n' ≤ n
this : I ^ (n - n' + 1) • N F n' ≤ I ^ 1 • N F (n - n' + n')
⊢ coeff
        (↑(↑l
            { val := ↑(single R n') m,
              property :=
                (_ : ∃ t, (t ∈ Set.range fun i => ⋃ (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) ∧ ↑(single R n') m ∈ t) }))
        (n + 1 - n') •
      m ∈
    I • N F n
[PROOFSTEP]
rw [tsub_add_cancel_of_le e, pow_one, add_comm _ 1, ← add_tsub_assoc_of_le e, add_comm] at this
[GOAL]
case mk.intro.intro.intro.intro.intro.intro.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
n₀ : ℕ
H :
  ∀ (i : ℕ),
    ↑(single R i) '' ↑(N F i) ⊆
      ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
n : ℕ
hn : n ≥ n₀
x : M
hx : x ∈ N F (n + 1)
l : ↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) →₀ { x // x ∈ reesAlgebra I }
hl :
  ↑(↑(Finsupp.total (↑(⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) (PolynomialModule R M)
              { x // x ∈ reesAlgebra I } Subtype.val)
          l)
      (n + 1) =
    x
n' : ℕ
hn' : n' ≤ n₀
m : M
hm : m ∈ ↑(N F n')
e : n' ≤ n
this : I ^ (n + 1 - n') • N F n' ≤ I • N F n
⊢ coeff
        (↑(↑l
            { val := ↑(single R n') m,
              property :=
                (_ : ∃ t, (t ∈ Set.range fun i => ⋃ (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) ∧ ↑(single R n') m ∈ t) }))
        (n + 1 - n') •
      m ∈
    I • N F n
[PROOFSTEP]
exact this (Submodule.smul_mem_smul ((l _).2 <| n + 1 - n') hm)
[GOAL]
case mpr
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
n₀ : ℕ
⊢ (∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)) →
    ∀ (i : ℕ),
      ↑(single R i) '' ↑(N F i) ⊆
        ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
[PROOFSTEP]
let F' := Submodule.span (reesAlgebra I) (⋃ i ≤ n₀, single R i '' (F.N i : Set M))
[GOAL]
case mpr
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
⊢ (∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)) →
    ∀ (i : ℕ),
      ↑(single R i) '' ↑(N F i) ⊆
        ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
[PROOFSTEP]
intro hF i
[GOAL]
case mpr
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
i : ℕ
⊢ ↑(single R i) '' ↑(N F i) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
[PROOFSTEP]
have : ∀ i ≤ n₀, single R i '' (F.N i : Set M) ⊆ F' := by
  -- Porting note: Original proof was
        -- `fun i hi => Set.Subset.trans (Set.subset_iUnion₂ i hi) Submodule.subset_span`
  intro i hi
  refine Set.Subset.trans ?_ Submodule.subset_span
  refine @Set.subset_iUnion₂ _ _ _ (fun i => fun _ => ↑((single R i) '' ((N F i) : Set M))) i ?_
  exact hi
[GOAL]
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
i : ℕ
⊢ ∀ (i : ℕ), i ≤ n₀ → ↑(single R i) '' ↑(N F i) ⊆ ↑F'
[PROOFSTEP]
intro i hi
[GOAL]
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
i✝ i : ℕ
hi : i ≤ n₀
⊢ ↑(single R i) '' ↑(N F i) ⊆ ↑F'
[PROOFSTEP]
refine Set.Subset.trans ?_ Submodule.subset_span
[GOAL]
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
i✝ i : ℕ
hi : i ≤ n₀
⊢ ↑(single R i) '' ↑(N F i) ⊆ ⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)
[PROOFSTEP]
refine @Set.subset_iUnion₂ _ _ _ (fun i => fun _ => ↑((single R i) '' ((N F i) : Set M))) i ?_
[GOAL]
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
i✝ i : ℕ
hi : i ≤ n₀
⊢ i ≤ n₀
[PROOFSTEP]
exact hi
[GOAL]
case mpr
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
i : ℕ
this : ∀ (i : ℕ), i ≤ n₀ → ↑(single R i) '' ↑(N F i) ⊆ ↑F'
⊢ ↑(single R i) '' ↑(N F i) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
[PROOFSTEP]
induction' i with j hj
[GOAL]
case mpr.zero
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
this : ∀ (i : ℕ), i ≤ n₀ → ↑(single R i) '' ↑(N F i) ⊆ ↑F'
⊢ ↑(single R Nat.zero) '' ↑(N F Nat.zero) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
[PROOFSTEP]
exact this _ (zero_le _)
[GOAL]
case mpr.succ
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
this : ∀ (i : ℕ), i ≤ n₀ → ↑(single R i) '' ↑(N F i) ⊆ ↑F'
j : ℕ
hj :
  ↑(single R j) '' ↑(N F j) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
⊢ ↑(single R (Nat.succ j)) '' ↑(N F (Nat.succ j)) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
[PROOFSTEP]
by_cases hj' : j.succ ≤ n₀
[GOAL]
case pos
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
this : ∀ (i : ℕ), i ≤ n₀ → ↑(single R i) '' ↑(N F i) ⊆ ↑F'
j : ℕ
hj :
  ↑(single R j) '' ↑(N F j) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
hj' : Nat.succ j ≤ n₀
⊢ ↑(single R (Nat.succ j)) '' ↑(N F (Nat.succ j)) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
[PROOFSTEP]
exact this _ hj'
[GOAL]
case neg
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
this : ∀ (i : ℕ), i ≤ n₀ → ↑(single R i) '' ↑(N F i) ⊆ ↑F'
j : ℕ
hj :
  ↑(single R j) '' ↑(N F j) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
hj' : ¬Nat.succ j ≤ n₀
⊢ ↑(single R (Nat.succ j)) '' ↑(N F (Nat.succ j)) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
[PROOFSTEP]
simp only [not_le, Nat.lt_succ_iff] at hj'
[GOAL]
case neg
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
this : ∀ (i : ℕ), i ≤ n₀ → ↑(single R i) '' ↑(N F i) ⊆ ↑F'
j : ℕ
hj :
  ↑(single R j) '' ↑(N F j) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
hj' : n₀ ≤ j
⊢ ↑(single R (Nat.succ j)) '' ↑(N F (Nat.succ j)) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
[PROOFSTEP]
rw [Nat.succ_eq_add_one, ← hF _ hj']
[GOAL]
case neg
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
this : ∀ (i : ℕ), i ≤ n₀ → ↑(single R i) '' ↑(N F i) ⊆ ↑F'
j : ℕ
hj :
  ↑(single R j) '' ↑(N F j) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
hj' : n₀ ≤ j
⊢ ↑(single R (j + 1)) '' ↑(I • N F j) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
[PROOFSTEP]
rintro _ ⟨m, hm, rfl⟩
[GOAL]
case neg.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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
this : ∀ (i : ℕ), i ≤ n₀ → ↑(single R i) '' ↑(N F i) ⊆ ↑F'
j : ℕ
hj :
  ↑(single R j) '' ↑(N F j) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
hj' : n₀ ≤ j
m : M
hm : m ∈ ↑(I • N F j)
⊢ ↑(single R (j + 1)) m ∈
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
[PROOFSTEP]
refine' Submodule.smul_induction_on hm (fun r hr m' hm' => _) (fun x y hx hy => _)
[GOAL]
case neg.intro.intro.refine'_1
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
this : ∀ (i : ℕ), i ≤ n₀ → ↑(single R i) '' ↑(N F i) ⊆ ↑F'
j : ℕ
hj :
  ↑(single R j) '' ↑(N F j) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
hj' : n₀ ≤ j
m : M
hm : m ∈ ↑(I • N F j)
r : R
hr : r ∈ I
m' : M
hm' : m' ∈ N F j
⊢ ↑(single R (j + 1)) (r • m') ∈
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
[PROOFSTEP]
rw [add_comm, ← monomial_smul_single]
[GOAL]
case neg.intro.intro.refine'_1
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
this : ∀ (i : ℕ), i ≤ n₀ → ↑(single R i) '' ↑(N F i) ⊆ ↑F'
j : ℕ
hj :
  ↑(single R j) '' ↑(N F j) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
hj' : n₀ ≤ j
m : M
hm : m ∈ ↑(I • N F j)
r : R
hr : r ∈ I
m' : M
hm' : m' ∈ N F j
⊢ ↑(monomial 1) r • ↑(single R j) m' ∈
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
[PROOFSTEP]
exact F'.smul_mem ⟨_, reesAlgebra.monomial_mem.mpr (by rwa [pow_one])⟩ (hj <| Set.mem_image_of_mem _ hm')
[GOAL]
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
this : ∀ (i : ℕ), i ≤ n₀ → ↑(single R i) '' ↑(N F i) ⊆ ↑F'
j : ℕ
hj :
  ↑(single R j) '' ↑(N F j) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
hj' : n₀ ≤ j
m : M
hm : m ∈ ↑(I • N F j)
r : R
hr : r ∈ I
m' : M
hm' : m' ∈ N F j
⊢ r ∈ I ^ 1
[PROOFSTEP]
rwa [pow_one]
[GOAL]
case neg.intro.intro.refine'_2
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
this : ∀ (i : ℕ), i ≤ n₀ → ↑(single R i) '' ↑(N F i) ⊆ ↑F'
j : ℕ
hj :
  ↑(single R j) '' ↑(N F j) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
hj' : n₀ ≤ j
m : M
hm : m ∈ ↑(I • N F j)
x y : M
hx :
  ↑(single R (j + 1)) x ∈
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
hy :
  ↑(single R (j + 1)) y ∈
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
⊢ ↑(single R (j + 1)) (x + y) ∈
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
[PROOFSTEP]
rw [map_add]
[GOAL]
case neg.intro.intro.refine'_2
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
n₀ : ℕ
F' : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M) :=
  Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
hF : ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
this : ∀ (i : ℕ), i ≤ n₀ → ↑(single R i) '' ↑(N F i) ⊆ ↑F'
j : ℕ
hj :
  ↑(single R j) '' ↑(N F j) ⊆
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
hj' : n₀ ≤ j
m : M
hm : m ∈ ↑(I • N F j)
x y : M
hx :
  ↑(single R (j + 1)) x ∈
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
hy :
  ↑(single R (j + 1)) y ∈
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
⊢ ↑(single R (j + 1)) x + ↑(single R (j + 1)) y ∈
    ↑(Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
[PROOFSTEP]
exact F'.add_mem hx hy
[GOAL]
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
⊢ Submodule.FG (Filtration.submodule F) ↔ Stable F
[PROOFSTEP]
classical
delta Ideal.Filtration.Stable
simp_rw [← F.submodule_eq_span_le_iff_stable_ge]
constructor
· rintro H
  refine H.stablizes_of_iSup_eq ⟨fun n₀ => Submodule.span _ (⋃ (i : ℕ) (_ : i ≤ n₀), single R i '' ↑(F.N i)), ?_⟩ ?_
  · intro n m e
    rw [Submodule.span_le, Set.iUnion₂_subset_iff]
    intro i hi
    refine Set.Subset.trans ?_ Submodule.subset_span
    refine @Set.subset_iUnion₂ _ _ _ (fun i => fun _ => ↑((single R i) '' ((N F i) : Set M))) i ?_
    exact hi.trans e
  · dsimp
    rw [← Submodule.span_iUnion, ← submodule_span_single]
    congr 1
    ext
    simp only [Set.mem_iUnion, Set.mem_image, SetLike.mem_coe, exists_prop]
    constructor
    · rintro ⟨-, i, -, e⟩; exact ⟨i, e⟩
    · rintro ⟨i, e⟩; exact ⟨i, i, le_refl i, e⟩
· rintro ⟨n, hn⟩
  rw [hn]
  simp_rw [Submodule.span_iUnion₂, ← Finset.mem_range_succ_iff, iSup_subtype']
  apply Submodule.fg_iSup
  rintro ⟨i, hi⟩
  obtain ⟨s, hs⟩ := hF' i
  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
  rw [Subtype.coe_mk, ← this]
  exact ⟨_, rfl⟩
[GOAL]
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
⊢ Submodule.FG (Filtration.submodule F) ↔ Stable F
[PROOFSTEP]
delta Ideal.Filtration.Stable
[GOAL]
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
⊢ Submodule.FG (Filtration.submodule F) ↔ ∃ n₀, ∀ (n : ℕ), n ≥ n₀ → I • N F n = N F (n + 1)
[PROOFSTEP]
simp_rw [← F.submodule_eq_span_le_iff_stable_ge]
[GOAL]
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
⊢ Submodule.FG (Filtration.submodule F) ↔
    ∃ n₀,
      Filtration.submodule F =
        Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), (fun a => ↑(single R i) a) '' ↑(N F i))
[PROOFSTEP]
constructor
[GOAL]
case mp
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
⊢ Submodule.FG (Filtration.submodule F) →
    ∃ n₀,
      Filtration.submodule F =
        Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), (fun a => ↑(single R i) a) '' ↑(N F i))
[PROOFSTEP]
rintro H
[GOAL]
case mp
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
⊢ ∃ n₀,
    Filtration.submodule F =
      Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), (fun a => ↑(single R i) a) '' ↑(N F i))
[PROOFSTEP]
refine H.stablizes_of_iSup_eq ⟨fun n₀ => Submodule.span _ (⋃ (i : ℕ) (_ : i ≤ n₀), single R i '' ↑(F.N i)), ?_⟩ ?_
[GOAL]
case mp.refine_1
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
⊢ Monotone fun n₀ => Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))
[PROOFSTEP]
intro n m e
[GOAL]
case mp.refine_1
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
n m : ℕ
e : n ≤ m
⊢ (fun n₀ => Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) n ≤
    (fun n₀ => Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) m
[PROOFSTEP]
rw [Submodule.span_le, Set.iUnion₂_subset_iff]
[GOAL]
case mp.refine_1
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
n m : ℕ
e : n ≤ m
⊢ ∀ (i : ℕ),
    i ≤ n →
      ↑(single R i) '' ↑(N F i) ⊆
        ↑((fun n₀ => Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) m)
[PROOFSTEP]
intro i hi
[GOAL]
case mp.refine_1
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
n m : ℕ
e : n ≤ m
i : ℕ
hi : i ≤ n
⊢ ↑(single R i) '' ↑(N F i) ⊆
    ↑((fun n₀ => Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i))) m)
[PROOFSTEP]
refine Set.Subset.trans ?_ Submodule.subset_span
[GOAL]
case mp.refine_1
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
n m : ℕ
e : n ≤ m
i : ℕ
hi : i ≤ n
⊢ ↑(single R i) '' ↑(N F i) ⊆ ⋃ (i : ℕ) (_ : i ≤ m), ↑(single R i) '' ↑(N F i)
[PROOFSTEP]
refine @Set.subset_iUnion₂ _ _ _ (fun i => fun _ => ↑((single R i) '' ((N F i) : Set M))) i ?_
[GOAL]
case mp.refine_1
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
n m : ℕ
e : n ≤ m
i : ℕ
hi : i ≤ n
⊢ i ≤ m
[PROOFSTEP]
exact hi.trans e
[GOAL]
case mp.refine_2
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
⊢ iSup
      ↑{
          toFun := fun n₀ =>
            Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)),
          monotone' :=
            (_ :
              ∀ ⦃n m : ℕ⦄,
                n ≤ m →
                  (fun n₀ =>
                        Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
                      n ≤
                    (fun n₀ =>
                        Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)))
                      m) } =
    Filtration.submodule F
[PROOFSTEP]
dsimp
[GOAL]
case mp.refine_2
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
⊢ ⨆ (n₀ : ℕ), Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), ↑(single R i) '' ↑(N F i)) =
    Filtration.submodule F
[PROOFSTEP]
rw [← Submodule.span_iUnion, ← submodule_span_single]
[GOAL]
case mp.refine_2
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
⊢ Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (i_1 : ℕ) (_ : i_1 ≤ i), ↑(single R i_1) '' ↑(N F i_1)) =
    Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ), ↑(single R i) '' ↑(N F i))
[PROOFSTEP]
congr 1
[GOAL]
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' : Filtration I M
h : Stable F
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
⊢ ⋃ (i : ℕ) (i_1 : ℕ) (_ : i_1 ≤ i), ↑(single R i_1) '' ↑(N F i_1) = ⋃ (i : ℕ), ↑(single R i) '' ↑(N F i)
[PROOFSTEP]
ext
[GOAL]
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' : Filtration I M
h : Stable F
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
x✝ : PolynomialModule R M
⊢ x✝ ∈ ⋃ (i : ℕ) (i_1 : ℕ) (_ : i_1 ≤ i), ↑(single R i_1) '' ↑(N F i_1) ↔ x✝ ∈ ⋃ (i : ℕ), ↑(single R i) '' ↑(N F i)
[PROOFSTEP]
simp only [Set.mem_iUnion, Set.mem_image, SetLike.mem_coe, exists_prop]
[GOAL]
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' : Filtration I M
h : Stable F
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
x✝ : PolynomialModule R M
⊢ (∃ i i_1, i_1 ≤ i ∧ ∃ x, x ∈ N F i_1 ∧ ↑(single R i_1) x = x✝) ↔ ∃ i x, x ∈ N F i ∧ ↑(single R i) x = x✝
[PROOFSTEP]
constructor
[GOAL]
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' : Filtration I M
h : Stable F
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
x✝ : PolynomialModule R M
⊢ (∃ i i_1, i_1 ≤ i ∧ ∃ x, x ∈ N F i_1 ∧ ↑(single R i_1) x = x✝) → ∃ i x, x ∈ N F i ∧ ↑(single R i) x = x✝
[PROOFSTEP]
rintro ⟨-, i, -, e⟩
[GOAL]
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' : Filtration I M
h : Stable F
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
x✝ : PolynomialModule R M
i : ℕ
e : ∃ x, x ∈ N F i ∧ ↑(single R i) x = x✝
⊢ ∃ i x, x ∈ N F i ∧ ↑(single R i) x = x✝
[PROOFSTEP]
exact ⟨i, e⟩
[GOAL]
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' : Filtration I M
h : Stable F
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
x✝ : PolynomialModule R M
⊢ (∃ i x, x ∈ N F i ∧ ↑(single R i) x = x✝) → ∃ i i_1, i_1 ≤ i ∧ ∃ x, x ∈ N F i_1 ∧ ↑(single R i_1) x = x✝
[PROOFSTEP]
rintro ⟨i, e⟩
[GOAL]
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' : Filtration I M
h : Stable F
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
H : Submodule.FG (Filtration.submodule F)
x✝ : PolynomialModule R M
i : ℕ
e : ∃ x, x ∈ N F i ∧ ↑(single R i) x = x✝
⊢ ∃ i i_1, i_1 ≤ i ∧ ∃ x, x ∈ N F i_1 ∧ ↑(single R i_1) x = x✝
[PROOFSTEP]
exact ⟨i, i, le_refl i, e⟩
[GOAL]
case mpr
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
⊢ (∃ n₀,
      Filtration.submodule F =
        Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n₀), (fun a => ↑(single R i) a) '' ↑(N F i))) →
    Submodule.FG (Filtration.submodule F)
[PROOFSTEP]
rintro ⟨n, hn⟩
[GOAL]
case mpr.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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
n : ℕ
hn :
  Filtration.submodule F =
    Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n), (fun a => ↑(single R i) a) '' ↑(N F i))
⊢ Submodule.FG (Filtration.submodule F)
[PROOFSTEP]
rw [hn]
[GOAL]
case mpr.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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
n : ℕ
hn :
  Filtration.submodule F =
    Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n), (fun a => ↑(single R i) a) '' ↑(N F i))
⊢ Submodule.FG
    (Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n), (fun a => ↑(single R i) a) '' ↑(N F i)))
[PROOFSTEP]
simp_rw [Submodule.span_iUnion₂, ← Finset.mem_range_succ_iff, iSup_subtype']
[GOAL]
case mpr.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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
n : ℕ
hn :
  Filtration.submodule F =
    Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n), (fun a => ↑(single R i) a) '' ↑(N F i))
⊢ Submodule.FG
    (⨆ (x : { i // i ∈ Finset.range (Nat.succ n) }),
      Submodule.span { x // x ∈ reesAlgebra I } ((fun a => ↑(single R ↑x) a) '' ↑(N F ↑x)))
[PROOFSTEP]
apply Submodule.fg_iSup
[GOAL]
case mpr.intro.h
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
n : ℕ
hn :
  Filtration.submodule F =
    Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n), (fun a => ↑(single R i) a) '' ↑(N F i))
⊢ ∀ (i : { i // i ∈ Finset.range (Nat.succ n) }),
    Submodule.FG (Submodule.span { x // x ∈ reesAlgebra I } ((fun a => ↑(single R ↑i) a) '' ↑(N F ↑i)))
[PROOFSTEP]
rintro ⟨i, hi⟩
[GOAL]
case mpr.intro.h.mk
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
n : ℕ
hn :
  Filtration.submodule F =
    Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n), (fun a => ↑(single R i) a) '' ↑(N F i))
i : ℕ
hi : i ∈ Finset.range (Nat.succ n)
⊢ Submodule.FG
    (Submodule.span { x // x ∈ reesAlgebra I }
      ((fun a => ↑(single R ↑{ val := i, property := hi }) a) '' ↑(N F ↑{ val := i, property := hi })))
[PROOFSTEP]
obtain ⟨s, hs⟩ := hF' i
[GOAL]
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' : Filtration I M
h : Stable F
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
n : ℕ
hn :
  Filtration.submodule F =
    Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n), (fun a => ↑(single R i) a) '' ↑(N F i))
i : ℕ
hi : i ∈ Finset.range (Nat.succ n)
s : Finset M
hs : Submodule.span R ↑s = N F i
⊢ Submodule.FG
    (Submodule.span { x // x ∈ reesAlgebra I }
      ((fun a => ↑(single R ↑{ val := i, property := hi }) a) '' ↑(N F ↑{ val := i, property := hi })))
[PROOFSTEP]
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
[GOAL]
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
n : ℕ
hn :
  Filtration.submodule F =
    Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n), (fun a => ↑(single R i) a) '' ↑(N F i))
i : ℕ
hi : i ∈ Finset.range (Nat.succ n)
s : Finset M
hs : Submodule.span R ↑s = N F i
⊢ Submodule.span { x // x ∈ reesAlgebra I } ↑(Finset.image (↑(lsingle R i)) s) =
    Submodule.span { x // x ∈ reesAlgebra I } (↑(single R i) '' ↑(N F i))
[PROOFSTEP]
rw [Finset.coe_image, ← Submodule.span_span_of_tower R, ← Submodule.map_span, hs]
[GOAL]
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
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
n : ℕ
hn :
  Filtration.submodule F =
    Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n), (fun a => ↑(single R i) a) '' ↑(N F i))
i : ℕ
hi : i ∈ Finset.range (Nat.succ n)
s : Finset M
hs : Submodule.span R ↑s = N F i
⊢ Submodule.span { x // x ∈ reesAlgebra I } ↑(Submodule.map (lsingle R i) (N F i)) =
    Submodule.span { x // x ∈ reesAlgebra I } (↑(single R i) '' ↑(N F i))
[PROOFSTEP]
rfl
[GOAL]
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' : Filtration I M
h : Stable F
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
n : ℕ
hn :
  Filtration.submodule F =
    Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n), (fun a => ↑(single R i) a) '' ↑(N F i))
i : ℕ
hi : i ∈ Finset.range (Nat.succ n)
s : Finset M
hs : Submodule.span R ↑s = N F i
this :
  Submodule.span { x // x ∈ reesAlgebra I } ↑(Finset.image (↑(lsingle R i)) s) =
    Submodule.span { x // x ∈ reesAlgebra I } (↑(single R i) '' ↑(N F i))
⊢ Submodule.FG
    (Submodule.span { x // x ∈ reesAlgebra I }
      ((fun a => ↑(single R ↑{ val := i, property := hi }) a) '' ↑(N F ↑{ val := i, property := hi })))
[PROOFSTEP]
rw [Subtype.coe_mk, ← this]
[GOAL]
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' : Filtration I M
h : Stable F
hF' : ∀ (i : ℕ), Submodule.FG (N F i)
n : ℕ
hn :
  Filtration.submodule F =
    Submodule.span { x // x ∈ reesAlgebra I } (⋃ (i : ℕ) (_ : i ≤ n), (fun a => ↑(single R i) a) '' ↑(N F i))
i : ℕ
hi : i ∈ Finset.range (Nat.succ n)
s : Finset M
hs : Submodule.span R ↑s = N F i
this :
  Submodule.span { x // x ∈ reesAlgebra I } ↑(Finset.image (↑(lsingle R i)) s) =
    Submodule.span { x // x ∈ reesAlgebra I } (↑(single R i) '' ↑(N F i))
⊢ Submodule.FG (Submodule.span { x // x ∈ reesAlgebra I } ↑(Finset.image (↑(lsingle R i)) s))
[PROOFSTEP]
exact ⟨_, rfl⟩
[GOAL]
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
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
hF : Stable F
F' : Filtration I M
hf : F' ≤ F
⊢ Stable F'
[PROOFSTEP]
have := isNoetherian_of_isNoetherianRing_of_finite R M
[GOAL]
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
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
hF : Stable F
F' : Filtration I M
hf : F' ≤ F
this : IsNoetherian R M
⊢ Stable F'
[PROOFSTEP]
rw [← submodule_fg_iff_stable] at hF ⊢
[GOAL]
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
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
hF : Submodule.FG (Filtration.submodule F)
F' : Filtration I M
hf : F' ≤ F
this : IsNoetherian R M
⊢ Submodule.FG (Filtration.submodule F')
case hF'
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
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
hF : Submodule.FG (Filtration.submodule F)
F' : Filtration I M
hf : F' ≤ F
this : IsNoetherian R M
⊢ ∀ (i : ℕ), Submodule.FG (N F' i)
case hF'
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
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
hF : Stable F
F' : Filtration I M
hf : F' ≤ F
this : IsNoetherian R M
⊢ ∀ (i : ℕ), Submodule.FG (N F i)
[PROOFSTEP]
any_goals intro i; exact IsNoetherian.noetherian _
[GOAL]
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
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
hF : Submodule.FG (Filtration.submodule F)
F' : Filtration I M
hf : F' ≤ F
this : IsNoetherian R M
⊢ Submodule.FG (Filtration.submodule F')
[PROOFSTEP]
intro i
[GOAL]
case hF'
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
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
hF : Submodule.FG (Filtration.submodule F)
F' : Filtration I M
hf : F' ≤ F
this : IsNoetherian R M
⊢ ∀ (i : ℕ), Submodule.FG (N F' i)
[PROOFSTEP]
intro i
[GOAL]
case hF'
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
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
hF : Submodule.FG (Filtration.submodule F)
F' : Filtration I M
hf : F' ≤ F
this : IsNoetherian R M
i : ℕ
⊢ Submodule.FG (N F' i)
[PROOFSTEP]
exact IsNoetherian.noetherian _
[GOAL]
case hF'
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
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
hF : Stable F
F' : Filtration I M
hf : F' ≤ F
this : IsNoetherian R M
⊢ ∀ (i : ℕ), Submodule.FG (N F i)
[PROOFSTEP]
intro i
[GOAL]
case hF'
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
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
hF : Stable F
F' : Filtration I M
hf : F' ≤ F
this : IsNoetherian R M
i : ℕ
⊢ Submodule.FG (N F i)
[PROOFSTEP]
exact IsNoetherian.noetherian _
[GOAL]
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
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
hF : Submodule.FG (Filtration.submodule F)
F' : Filtration I M
hf : F' ≤ F
this : IsNoetherian R M
⊢ Submodule.FG (Filtration.submodule F')
[PROOFSTEP]
have := isNoetherian_of_fg_of_noetherian _ hF
[GOAL]
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
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
hF : Submodule.FG (Filtration.submodule F)
F' : Filtration I M
hf : F' ≤ F
this✝ : IsNoetherian R M
this : IsNoetherian { x // x ∈ reesAlgebra I } { x // x ∈ Filtration.submodule F }
⊢ Submodule.FG (Filtration.submodule F')
[PROOFSTEP]
rw [isNoetherian_submodule] at this
[GOAL]
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
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
hF : Submodule.FG (Filtration.submodule F)
F' : Filtration I M
hf : F' ≤ F
this✝ : IsNoetherian R M
this : ∀ (s : Submodule { x // x ∈ reesAlgebra I } (PolynomialModule R M)), s ≤ Filtration.submodule F → Submodule.FG s
⊢ Submodule.FG (Filtration.submodule F')
[PROOFSTEP]
exact this _ (OrderHomClass.mono (submoduleInfHom M I) hf)
[GOAL]
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
⊢ x ∈ ⨅ (i : ℕ), I ^ i • ⊤ ↔ ∃ r, ↑r • x = x
[PROOFSTEP]
let N := (⨅ i : ℕ, I ^ i • ⊤ : Submodule R M)
[GOAL]
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
⊢ x ∈ ⨅ (i : ℕ), I ^ i • ⊤ ↔ ∃ r, ↑r • x = x
[PROOFSTEP]
have hN : ∀ k, (I.stableFiltration ⊤ ⊓ I.trivialFiltration N).N k = N := fun k =>
  inf_eq_right.mpr ((iInf_le _ k).trans <| le_of_eq <| by simp)
[GOAL]
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
k : ℕ
⊢ I ^ k • ⊤ = Filtration.N (stableFiltration I ⊤) k
[PROOFSTEP]
simp
[GOAL]
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
⊢ x ∈ ⨅ (i : ℕ), I ^ i • ⊤ ↔ ∃ r, ↑r • x = x
[PROOFSTEP]
constructor
[GOAL]
case mp
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
⊢ x ∈ ⨅ (i : ℕ), I ^ i • ⊤ → ∃ r, ↑r • x = x
[PROOFSTEP]
have := isNoetherian_of_isNoetherianRing_of_finite R M
[GOAL]
case mp
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
this : IsNoetherian R M
⊢ x ∈ ⨅ (i : ℕ), I ^ i • ⊤ → ∃ r, ↑r • x = x
[PROOFSTEP]
obtain ⟨r, hr₁, hr₂⟩ :=
  Submodule.exists_mem_and_smul_eq_self_of_fg_of_le_smul I N (IsNoetherian.noetherian N)
    (by
      obtain ⟨k, hk⟩ := (I.stableFiltration_stable ⊤).inter_right (I.trivialFiltration N)
      have := hk k (le_refl _)
      rw [hN, hN] at this
      exact le_of_eq this.symm)
[GOAL]
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
this : IsNoetherian R M
⊢ N ≤ I • N
[PROOFSTEP]
obtain ⟨k, hk⟩ := (I.stableFiltration_stable ⊤).inter_right (I.trivialFiltration N)
[GOAL]
case intro
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
this : IsNoetherian R M
k : ℕ
hk :
  ∀ (n : ℕ),
    n ≥ k →
      I • Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) n =
        Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) (n + 1)
⊢ N ≤ I • N
[PROOFSTEP]
have := hk k (le_refl _)
[GOAL]
case intro
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
this✝ : IsNoetherian R M
k : ℕ
hk :
  ∀ (n : ℕ),
    n ≥ k →
      I • Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) n =
        Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) (n + 1)
this :
  I • Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k =
    Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) (k + 1)
⊢ N ≤ I • N
[PROOFSTEP]
rw [hN, hN] at this
[GOAL]
case intro
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
this✝ : IsNoetherian R M
k : ℕ
hk :
  ∀ (n : ℕ),
    n ≥ k →
      I • Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) n =
        Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) (n + 1)
this : I • N = N
⊢ N ≤ I • N
[PROOFSTEP]
exact le_of_eq this.symm
[GOAL]
case mp.intro.intro
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
this : IsNoetherian R M
r : R
hr₁ : r ∈ I
hr₂ : ∀ (n : M), n ∈ N → r • n = n
⊢ x ∈ ⨅ (i : ℕ), I ^ i • ⊤ → ∃ r, ↑r • x = x
[PROOFSTEP]
intro H
[GOAL]
case mp.intro.intro
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
this : IsNoetherian R M
r : R
hr₁ : r ∈ I
hr₂ : ∀ (n : M), n ∈ N → r • n = n
H : x ∈ ⨅ (i : ℕ), I ^ i • ⊤
⊢ ∃ r, ↑r • x = x
[PROOFSTEP]
exact ⟨⟨r, hr₁⟩, hr₂ _ H⟩
[GOAL]
case mpr
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
⊢ (∃ r, ↑r • x = x) → x ∈ ⨅ (i : ℕ), I ^ i • ⊤
[PROOFSTEP]
rintro ⟨r, eq⟩
[GOAL]
case mpr.intro
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
r : { x // x ∈ I }
eq : ↑r • x = x
⊢ x ∈ ⨅ (i : ℕ), I ^ i • ⊤
[PROOFSTEP]
rw [Submodule.mem_iInf]
[GOAL]
case mpr.intro
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
r : { x // x ∈ I }
eq : ↑r • x = x
⊢ ∀ (i : ℕ), x ∈ I ^ i • ⊤
[PROOFSTEP]
intro i
[GOAL]
case mpr.intro
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
r : { x // x ∈ I }
eq : ↑r • x = x
i : ℕ
⊢ x ∈ I ^ i • ⊤
[PROOFSTEP]
induction' i with i hi
[GOAL]
case mpr.intro.zero
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
r : { x // x ∈ I }
eq : ↑r • x = x
⊢ x ∈ I ^ Nat.zero • ⊤
[PROOFSTEP]
simp
[GOAL]
case mpr.intro.succ
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
r : { x // x ∈ I }
eq : ↑r • x = x
i : ℕ
hi : x ∈ I ^ i • ⊤
⊢ x ∈ I ^ Nat.succ i • ⊤
[PROOFSTEP]
rw [Nat.succ_eq_one_add, pow_add, ← smul_smul, pow_one, ← eq]
[GOAL]
case mpr.intro.succ
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
hN : ∀ (k : ℕ), Filtration.N (stableFiltration I ⊤ ⊓ trivialFiltration I N) k = N
r : { x // x ∈ I }
eq : ↑r • x = x
i : ℕ
hi : x ∈ I ^ i • ⊤
⊢ ↑r • x ∈ I • I ^ i • ⊤
[PROOFSTEP]
exact Submodule.smul_mem_smul r.prop hi
[GOAL]
R M : Type u
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
I : Ideal R
F F' : Filtration I M
inst✝² : IsNoetherianRing R
inst✝¹ : LocalRing R
inst✝ : Module.Finite R M
h : I ≠ ⊤
⊢ ⨅ (i : ℕ), I ^ i • ⊤ = ⊥
[PROOFSTEP]
rw [eq_bot_iff]
[GOAL]
R M : Type u
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
I : Ideal R
F F' : Filtration I M
inst✝² : IsNoetherianRing R
inst✝¹ : LocalRing R
inst✝ : Module.Finite R M
h : I ≠ ⊤
⊢ ⨅ (i : ℕ), I ^ i • ⊤ ≤ ⊥
[PROOFSTEP]
intro x hx
[GOAL]
R M : Type u
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
I : Ideal R
F F' : Filtration I M
inst✝² : IsNoetherianRing R
inst✝¹ : LocalRing R
inst✝ : Module.Finite R M
h : I ≠ ⊤
x : M
hx : x ∈ ⨅ (i : ℕ), I ^ i • ⊤
⊢ x ∈ ⊥
[PROOFSTEP]
obtain ⟨r, hr⟩ := (I.mem_iInf_smul_pow_eq_bot_iff x).mp hx
[GOAL]
case intro
R M : Type u
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
I : Ideal R
F F' : Filtration I M
inst✝² : IsNoetherianRing R
inst✝¹ : LocalRing R
inst✝ : Module.Finite R M
h : I ≠ ⊤
x : M
hx : x ∈ ⨅ (i : ℕ), I ^ i • ⊤
r : { x // x ∈ I }
hr : ↑r • x = x
⊢ x ∈ ⊥
[PROOFSTEP]
have := LocalRing.isUnit_one_sub_self_of_mem_nonunits _ (LocalRing.le_maximalIdeal h r.prop)
[GOAL]
case intro
R M : Type u
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
I : Ideal R
F F' : Filtration I M
inst✝² : IsNoetherianRing R
inst✝¹ : LocalRing R
inst✝ : Module.Finite R M
h : I ≠ ⊤
x : M
hx : x ∈ ⨅ (i : ℕ), I ^ i • ⊤
r : { x // x ∈ I }
hr : ↑r • x = x
this : IsUnit (1 - ↑r)
⊢ x ∈ ⊥
[PROOFSTEP]
apply this.smul_left_cancel.mp
[GOAL]
case intro
R M : Type u
inst✝⁵ : CommRing R
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
I : Ideal R
F F' : Filtration I M
inst✝² : IsNoetherianRing R
inst✝¹ : LocalRing R
inst✝ : Module.Finite R M
h : I ≠ ⊤
x : M
hx : x ∈ ⨅ (i : ℕ), I ^ i • ⊤
r : { x // x ∈ I }
hr : ↑r • x = x
this : IsUnit (1 - ↑r)
⊢ (1 - ↑r) • x = (1 - ↑r) • 0
[PROOFSTEP]
simp [sub_smul, hr]
[GOAL]
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
h : I ≠ ⊤
⊢ ⨅ (i : ℕ), I ^ i = ⊥
[PROOFSTEP]
convert I.iInf_pow_smul_eq_bot_of_localRing (M := R) h
[GOAL]
case h.e'_2.h.e'_4.h
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
h : I ≠ ⊤
x✝ : ℕ
⊢ I ^ x✝ = I ^ x✝ • ⊤
[PROOFSTEP]
ext i
[GOAL]
case h.e'_2.h.e'_4.h.h
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
h : I ≠ ⊤
x✝ : ℕ
i : R
⊢ i ∈ I ^ x✝ ↔ i ∈ I ^ x✝ • ⊤
[PROOFSTEP]
rw [smul_eq_mul, ← Ideal.one_eq_top, mul_one]
[GOAL]
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : IsDomain R
h : I ≠ ⊤
⊢ ⨅ (i : ℕ), I ^ i = ⊥
[PROOFSTEP]
rw [eq_bot_iff]
[GOAL]
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : IsDomain R
h : I ≠ ⊤
⊢ ⨅ (i : ℕ), I ^ i ≤ ⊥
[PROOFSTEP]
intro x hx
[GOAL]
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : IsDomain R
h : I ≠ ⊤
x : R
hx : x ∈ ⨅ (i : ℕ), I ^ i
⊢ x ∈ ⊥
[PROOFSTEP]
by_contra hx'
[GOAL]
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : IsDomain R
h : I ≠ ⊤
x : R
hx : x ∈ ⨅ (i : ℕ), I ^ i
hx' : ¬x ∈ ⊥
⊢ False
[PROOFSTEP]
have := Ideal.mem_iInf_smul_pow_eq_bot_iff I x
[GOAL]
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : IsDomain R
h : I ≠ ⊤
x : R
hx : x ∈ ⨅ (i : ℕ), I ^ i
hx' : ¬x ∈ ⊥
this : x ∈ ⨅ (i : ℕ), I ^ i • ⊤ ↔ ∃ r, ↑r • x = x
⊢ False
[PROOFSTEP]
simp_rw [smul_eq_mul, ← Ideal.one_eq_top, mul_one] at this
[GOAL]
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : IsDomain R
h : I ≠ ⊤
x : R
hx : x ∈ ⨅ (i : ℕ), I ^ i
hx' : ¬x ∈ ⊥
this : x ∈ ⨅ (i : ℕ), I ^ i ↔ ∃ r, ↑r * x = x
⊢ False
[PROOFSTEP]
obtain ⟨r, hr⟩ := this.mp hx
[GOAL]
case intro
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : IsDomain R
h : I ≠ ⊤
x : R
hx : x ∈ ⨅ (i : ℕ), I ^ i
hx' : ¬x ∈ ⊥
this : x ∈ ⨅ (i : ℕ), I ^ i ↔ ∃ r, ↑r * x = x
r : { x // x ∈ I }
hr : ↑r * x = x
⊢ False
[PROOFSTEP]
have := mul_right_cancel₀ hx' (hr.trans (one_mul x).symm)
[GOAL]
case intro
R M : Type u
inst✝⁴ : CommRing R
inst✝³ : AddCommGroup M
inst✝² : Module R M
I : Ideal R
F F' : Filtration I M
inst✝¹ : IsNoetherianRing R
inst✝ : IsDomain R
h : I ≠ ⊤
x : R
hx : x ∈ ⨅ (i : ℕ), I ^ i
hx' : ¬x ∈ ⊥
this✝ : x ∈ ⨅ (i : ℕ), I ^ i ↔ ∃ r, ↑r * x = x
r : { x // x ∈ I }
hr : ↑r * x = x
this : ↑r = 1
⊢ False
[PROOFSTEP]
exact I.eq_top_iff_one.not.mp h (this ▸ r.prop)


[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : ConditionallyCompleteLattice α
s✝ t : Set α
a✝ b : α
s : Finset β
hs : Finset.Nonempty s
f : β → α
a : α
⊢ sup' s hs f ≤ a ↔ sSup (f '' ↑s) ≤ a
[PROOFSTEP]
simp [csSup_le_iff (s.finite_toSet.image f).bddAbove (hs.to_set.image f)]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : ConditionallyCompleteLattice α
s✝ t : Set α
a b : α
s : Finset α
hs : Finset.Nonempty s
⊢ sup' s hs id = sSup ↑s
[PROOFSTEP]
rw [hs.sup'_eq_cSup_image, Set.image_id]
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t : Set α
a b : α
s : Finset α
h : Finset.Nonempty s
⊢ sSup ↑s ∈ s
[PROOFSTEP]
rw [h.cSup_eq_max']
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : ConditionallyCompleteLinearOrder α
s✝ t : Set α
a b : α
s : Finset α
h : Finset.Nonempty s
⊢ max' s h ∈ s
[PROOFSTEP]
exact s.max'_mem _
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : ConditionallyCompleteLinearOrder α
s t : Set α
a b : α
h : Set.Nonempty s
hs : Set.Finite s
⊢ sSup s ∈ s
[PROOFSTEP]
lift s to Finset α using hs
[GOAL]
case intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : ConditionallyCompleteLinearOrder α
t : Set α
a b : α
s : Finset α
h : Set.Nonempty ↑s
⊢ sSup ↑s ∈ ↑s
[PROOFSTEP]
exact Finset.Nonempty.cSup_mem h
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : ConditionallyCompleteLattice β
s : Finset α
H : Finset.Nonempty s
f : α → β
⊢ sup' s H f = sSup (f '' ↑s)
[PROOFSTEP]
apply le_antisymm
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : ConditionallyCompleteLattice β
s : Finset α
H : Finset.Nonempty s
f : α → β
⊢ sup' s H f ≤ sSup (f '' ↑s)
[PROOFSTEP]
refine' Finset.sup'_le _ _ fun a ha => _
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : ConditionallyCompleteLattice β
s : Finset α
H : Finset.Nonempty s
f : α → β
a : α
ha : a ∈ s
⊢ f a ≤ sSup (f '' ↑s)
[PROOFSTEP]
refine' le_csSup ⟨s.sup' H f, _⟩ ⟨a, ha, rfl⟩
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : ConditionallyCompleteLattice β
s : Finset α
H : Finset.Nonempty s
f : α → β
a : α
ha : a ∈ s
⊢ sup' s H f ∈ upperBounds (f '' ↑s)
[PROOFSTEP]
rintro i ⟨j, hj, rfl⟩
[GOAL]
case a.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : ConditionallyCompleteLattice β
s : Finset α
H : Finset.Nonempty s
f : α → β
a : α
ha : a ∈ s
j : α
hj : j ∈ ↑s
⊢ f j ≤ sup' s H f
[PROOFSTEP]
exact Finset.le_sup' _ hj
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : ConditionallyCompleteLattice β
s : Finset α
H : Finset.Nonempty s
f : α → β
⊢ sSup (f '' ↑s) ≤ sup' s H f
[PROOFSTEP]
apply csSup_le ((coe_nonempty.mpr H).image _)
[GOAL]
case a
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : ConditionallyCompleteLattice β
s : Finset α
H : Finset.Nonempty s
f : α → β
⊢ ∀ (b : β), b ∈ f '' ↑s → b ≤ sup' s H f
[PROOFSTEP]
rintro _ ⟨a, ha, rfl⟩
[GOAL]
case a.intro.intro
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : ConditionallyCompleteLattice β
s : Finset α
H : Finset.Nonempty s
f : α → β
a : α
ha : a ∈ ↑s
⊢ f a ≤ sup' s H f
[PROOFSTEP]
exact Finset.le_sup' _ ha
[GOAL]
α : Type u_1
β : Type u_2
γ : Type u_3
inst✝ : ConditionallyCompleteLattice α
s : Finset α
H : Finset.Nonempty s
⊢ sup' s H id = sSup ↑s
[PROOFSTEP]
rw [sup'_eq_csSup_image s H, Set.image_id]


[GOAL]
C : Type u_1
D : Type u_2
inst✝² : Category.{?u.65, u_1} C
inst✝¹ : Category.{?u.69, u_2} D
L : C ⥤ D
W : MorphismProperty C
E : Type u_3
inst✝ : Category.{?u.118, u_3} E
h : StrictUniversalPropertyFixedTarget L W Eᵒᵖ
F : Cᵒᵖ ⥤ E
hF : MorphismProperty.IsInvertedBy (MorphismProperty.op W) F
⊢ L.op ⋙ (fun F hF => (lift h F.rightOp (_ : MorphismProperty.IsInvertedBy W F.rightOp)).leftOp) F hF = F
[PROOFSTEP]
convert congr_arg Functor.leftOp (h.fac F.rightOp hF.rightOp)
[GOAL]
C : Type u_1
D : Type u_2
inst✝² : Category.{?u.65, u_1} C
inst✝¹ : Category.{?u.69, u_2} D
L : C ⥤ D
W : MorphismProperty C
E : Type u_3
inst✝ : Category.{?u.118, u_3} E
h : StrictUniversalPropertyFixedTarget L W Eᵒᵖ
F₁ F₂ : Dᵒᵖ ⥤ E
eq : L.op ⋙ F₁ = L.op ⋙ F₂
⊢ F₁ = F₂
[PROOFSTEP]
suffices F₁.rightOp = F₂.rightOp by rw [← F₁.rightOp_leftOp_eq, ← F₂.rightOp_leftOp_eq, this]
[GOAL]
C : Type u_1
D : Type u_2
inst✝² : Category.{?u.65, u_1} C
inst✝¹ : Category.{?u.69, u_2} D
L : C ⥤ D
W : MorphismProperty C
E : Type u_3
inst✝ : Category.{?u.118, u_3} E
h : StrictUniversalPropertyFixedTarget L W Eᵒᵖ
F₁ F₂ : Dᵒᵖ ⥤ E
eq : L.op ⋙ F₁ = L.op ⋙ F₂
this : F₁.rightOp = F₂.rightOp
⊢ F₁ = F₂
[PROOFSTEP]
rw [← F₁.rightOp_leftOp_eq, ← F₂.rightOp_leftOp_eq, this]
[GOAL]
C : Type u_1
D : Type u_2
inst✝² : Category.{?u.65, u_1} C
inst✝¹ : Category.{?u.69, u_2} D
L : C ⥤ D
W : MorphismProperty C
E : Type u_3
inst✝ : Category.{?u.118, u_3} E
h : StrictUniversalPropertyFixedTarget L W Eᵒᵖ
F₁ F₂ : Dᵒᵖ ⥤ E
eq : L.op ⋙ F₁ = L.op ⋙ F₂
⊢ F₁.rightOp = F₂.rightOp
[PROOFSTEP]
have eq' := congr_arg Functor.rightOp eq
[GOAL]
C : Type u_1
D : Type u_2
inst✝² : Category.{?u.65, u_1} C
inst✝¹ : Category.{?u.69, u_2} D
L : C ⥤ D
W : MorphismProperty C
E : Type u_3
inst✝ : Category.{?u.118, u_3} E
h : StrictUniversalPropertyFixedTarget L W Eᵒᵖ
F₁ F₂ : Dᵒᵖ ⥤ E
eq : L.op ⋙ F₁ = L.op ⋙ F₂
eq' : (L.op ⋙ F₁).rightOp = (L.op ⋙ F₂).rightOp
⊢ F₁.rightOp = F₂.rightOp
[PROOFSTEP]
exact h.uniq _ _ eq'