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

tactic: let N := (⨅ i : ℕ, I ^ i • ⊤ : Submodule R M)
state_before: 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
hM : Module.Finite R M
x : M
⊢ (x ∈ ⨅ (i : ℕ), I ^ i • ⊤) ↔ ∃ r, ↑r • x = x

tactic: 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)
state_before: 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
hM : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
⊢ (x ∈ ⨅ (i : ℕ), I ^ i • ⊤) ↔ ∃ r, ↑r • x = x

tactic: constructor
state_before: 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
hM : 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

tactic: simp
state_before: 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
hM : Module.Finite R M
x : M
N : Submodule R M := ⨅ (i : ℕ), I ^ i • ⊤
k : ℕ
⊢ I ^ k • ⊤ = Filtration.N (stableFiltration I ⊤) k

tactic: haveI := isNoetherian_of_fg_of_noetherian' hM.out
state_before: 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
hM : 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

tactic: 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)
state_before: 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
hM : 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

tactic: intro H
state_before: 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
hM : 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

tactic: exact ⟨⟨r, hr₁⟩, hr₂ _ H⟩
state_before: 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
hM : 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

tactic: obtain ⟨k, hk⟩ := (I.stableFiltration_stable ⊤).inter_right (I.trivialFiltration N)
state_before: 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
hM : 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

tactic: have := hk k (le_refl _)
state_before: 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
hM : 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

tactic: rw [hN, hN] at this
state_before: 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
hM : 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

tactic: exact le_of_eq this.symm
state_before: 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
hM : 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

tactic: rintro ⟨r, eq⟩
state_before: 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
hM : 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 • ⊤

tactic: rw [Submodule.mem_iInf]
state_before: 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
hM : 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 • ⊤

tactic: intro i
state_before: 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
hM : 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 • ⊤

tactic: induction' i with i hi
state_before: 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
hM : 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 • ⊤

tactic: simp
state_before: 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
hM : 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 • ⊤

tactic: rw [Nat.succ_eq_one_add, pow_add, ← smul_smul, pow_one, ← eq]
state_before: 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
hM : 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 • ⊤

tactic: exact Submodule.smul_mem_smul r.prop hi
state_before: 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
hM : 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 • ⊤