Theorem: biUnion_associatedPrimes_eq_zero_divisors
File: Mathlib/RingTheory/Ideal/AssociatedPrime.lean

tactic: simp_rw [← Submodule.mem_annihilator_span_singleton]
state_before: R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
⊢ ⋃ p ∈ associatedPrimes R M, ↑p = {r | ∃ x, x ≠ 0 ∧ r • x = 0}
state_after: R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
⊢ ⋃ p ∈ associatedPrimes R M, ↑p = {r | ∃ x, x ≠ 0 ∧ r ∈ (Submodule.span R {x}).annihilator}

tactic: refine subset_antisymm (Set.iUnion₂_subset ?_) ?_
state_before: R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
⊢ ⋃ p ∈ associatedPrimes R M, ↑p = {r | ∃ x, x ≠ 0 ∧ r ∈ (Submodule.span R {x}).annihilator}
state_after: case refine_1
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
⊢ ∀ i ∈ associatedPrimes R M, ↑i ⊆ {r | ∃ x, x ≠ 0 ∧ r ∈ (Submodule.span R {x}).annihilator}

case refine_2
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
⊢ {r | ∃ x, x ≠ 0 ∧ r ∈ (Submodule.span R {x}).annihilator} ⊆ ⋃ p ∈ associatedPrimes R M, ↑p

tactic: rintro _ ⟨h, x, ⟨⟩⟩ r h'
state_before: case refine_1
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
⊢ ∀ i ∈ associatedPrimes R M, ↑i ⊆ {r | ∃ x, x ≠ 0 ∧ r ∈ (Submodule.span R {x}).annihilator}
state_after: case refine_1.intro.intro.refl
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
x : M
h : (Submodule.span R {x}).annihilator.IsPrime
r : R
h' : r ∈ ↑(Submodule.span R {x}).annihilator
⊢ r ∈ {r | ∃ x, x ≠ 0 ∧ r ∈ (Submodule.span R {x}).annihilator}

tactic: refine ⟨x, ne_of_eq_of_ne (one_smul R x).symm ?_, h'⟩
state_before: case refine_1.intro.intro.refl
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
x : M
h : (Submodule.span R {x}).annihilator.IsPrime
r : R
h' : r ∈ ↑(Submodule.span R {x}).annihilator
⊢ r ∈ {r | ∃ x, x ≠ 0 ∧ r ∈ (Submodule.span R {x}).annihilator}
state_after: case refine_1.intro.intro.refl
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
x : M
h : (Submodule.span R {x}).annihilator.IsPrime
r : R
h' : r ∈ ↑(Submodule.span R {x}).annihilator
⊢ 1 • x ≠ 0

tactic: refine mt (Submodule.mem_annihilator_span_singleton _ _).mpr ?_
state_before: case refine_1.intro.intro.refl
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
x : M
h : (Submodule.span R {x}).annihilator.IsPrime
r : R
h' : r ∈ ↑(Submodule.span R {x}).annihilator
⊢ 1 • x ≠ 0
state_after: case refine_1.intro.intro.refl
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
x : M
h : (Submodule.span R {x}).annihilator.IsPrime
r : R
h' : r ∈ ↑(Submodule.span R {x}).annihilator
⊢ 1 ∉ (Submodule.span R {x}).annihilator

tactic: exact (Ideal.ne_top_iff_one _).mp h.ne_top
state_before: case refine_1.intro.intro.refl
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
x : M
h : (Submodule.span R {x}).annihilator.IsPrime
r : R
h' : r ∈ ↑(Submodule.span R {x}).annihilator
⊢ 1 ∉ (Submodule.span R {x}).annihilator
state_after: no goals

tactic: intro r ⟨x, h, h'⟩
state_before: case refine_2
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
⊢ {r | ∃ x, x ≠ 0 ∧ r ∈ (Submodule.span R {x}).annihilator} ⊆ ⋃ p ∈ associatedPrimes R M, ↑p
state_after: case refine_2
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
r : R
x : M
h : x ≠ 0
h' : r ∈ (Submodule.span R {x}).annihilator
⊢ r ∈ ⋃ p ∈ associatedPrimes R M, ↑p

tactic: obtain ⟨P, hP, hx⟩ := exists_le_isAssociatedPrime_of_isNoetherianRing R x h
state_before: case refine_2
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
r : R
x : M
h : x ≠ 0
h' : r ∈ (Submodule.span R {x}).annihilator
⊢ r ∈ ⋃ p ∈ associatedPrimes R M, ↑p
state_after: case refine_2.intro.intro
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
r : R
x : M
h : x ≠ 0
h' : r ∈ (Submodule.span R {x}).annihilator
P : Ideal R
hP : IsAssociatedPrime P M
hx : (Submodule.span R {x}).annihilator ≤ P
⊢ r ∈ ⋃ p ∈ associatedPrimes R M, ↑p

tactic: exact Set.mem_biUnion hP (hx h')
state_before: case refine_2.intro.intro
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type u_2
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type u_3
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
r : R
x : M
h : x ≠ 0
h' : r ∈ (Submodule.span R {x}).annihilator
P : Ideal R
hP : IsAssociatedPrime P M
hx : (Submodule.span R {x}).annihilator ≤ P
⊢ r ∈ ⋃ p ∈ associatedPrimes R M, ↑p
state_after: no goals