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

tactic: constructor
state_before: R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
⊢ IsIdempotentElem I ↔ I = ⊥ ∨ I = ⊤
state_after: case mp
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
⊢ IsIdempotentElem I → I = ⊥ ∨ I = ⊤

case mpr
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
⊢ I = ⊥ ∨ I = ⊤ → IsIdempotentElem I

tactic: intro H
state_before: case mp
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
⊢ IsIdempotentElem I → I = ⊥ ∨ I = ⊤
state_after: case mp
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
H : IsIdempotentElem I
⊢ I = ⊥ ∨ I = ⊤

tactic: by_cases I = ⊤
state_before: case mp
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
H : IsIdempotentElem I
⊢ I = ⊥ ∨ I = ⊤
state_after: case pos
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
H : IsIdempotentElem I
h✝ : I = ⊤
⊢ I = ⊥ ∨ I = ⊤

case neg
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
H : IsIdempotentElem I
h✝ : ¬I = ⊤
⊢ I = ⊥ ∨ I = ⊤

tactic: refine Or.inl (eq_bot_iff.mpr ?_)
state_before: case neg
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
H : IsIdempotentElem I
h✝ : ¬I = ⊤
⊢ I = ⊥ ∨ I = ⊤
state_after: case neg
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
H : IsIdempotentElem I
h✝ : ¬I = ⊤
⊢ I ≤ ⊥

tactic: rw [← Ideal.iInf_pow_eq_bot_of_localRing I ‹_›]
state_before: case neg
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
H : IsIdempotentElem I
h✝ : ¬I = ⊤
⊢ I ≤ ⊥
state_after: case neg
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
H : IsIdempotentElem I
h✝ : ¬I = ⊤
⊢ I ≤ ⨅ i, I ^ i

tactic: apply le_iInf
state_before: case neg
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
H : IsIdempotentElem I
h✝ : ¬I = ⊤
⊢ I ≤ ⨅ i, I ^ i
state_after: case neg.h
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
H : IsIdempotentElem I
h✝ : ¬I = ⊤
⊢ ∀ (i : ℕ), I ≤ I ^ i

tactic: rintro (_|n) <;> simp [H.pow_succ_eq]
state_before: case neg.h
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
H : IsIdempotentElem I
h✝ : ¬I = ⊤
⊢ ∀ (i : ℕ), I ≤ I ^ i
state_after: no goals

tactic: exact Or.inr ‹_›
state_before: case pos
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
H : IsIdempotentElem I
h✝ : I = ⊤
⊢ I = ⊥ ∨ I = ⊤
state_after: no goals

tactic: rintro (rfl | rfl) <;> simp [IsIdempotentElem]
state_before: case mpr
R✝ M : Type u
inst✝⁵ : CommRing R✝
inst✝⁴ : AddCommGroup M
inst✝³ : Module R✝ M
I✝ : Ideal R✝
F F' : I✝.Filtration M
R : Type u_1
inst✝² : CommRing R
inst✝¹ : IsNoetherianRing R
inst✝ : LocalRing R
I : Ideal R
⊢ I = ⊥ ∨ I = ⊤ → IsIdempotentElem I
state_after: no goals