Theorem: associatedPrimes.eq_singleton_of_isPrimary
File: Mathlib/RingTheory/Ideal/AssociatedPrime.lean

tactic: ext J
state_before: R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type ?u.81481
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type ?u.82014
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
hI : Ideal.IsPrimary I
⊢ associatedPrimes R (R ⧸ I) = {Ideal.radical I}

tactic: rw [Set.mem_singleton_iff]
state_before: case h
R : Type u_1
inst✝⁵ : CommRing R
I J✝ : Ideal R
M : Type ?u.81481
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type ?u.82014
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
hI : Ideal.IsPrimary I
J : Ideal R
⊢ J ∈ associatedPrimes R (R ⧸ I) ↔ J ∈ {Ideal.radical I}

tactic: refine' ⟨IsAssociatedPrime.eq_radical hI, _⟩
state_before: case h
R : Type u_1
inst✝⁵ : CommRing R
I J✝ : Ideal R
M : Type ?u.81481
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type ?u.82014
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
hI : Ideal.IsPrimary I
J : Ideal R
⊢ J ∈ associatedPrimes R (R ⧸ I) ↔ J = Ideal.radical I

tactic: rintro rfl
state_before: case h
R : Type u_1
inst✝⁵ : CommRing R
I J✝ : Ideal R
M : Type ?u.81481
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type ?u.82014
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
hI : Ideal.IsPrimary I
J : Ideal R
⊢ J = Ideal.radical I → J ∈ associatedPrimes R (R ⧸ I)

tactic: haveI : Nontrivial (R ⧸ I) := by
  refine ⟨(Ideal.Quotient.mk I : _) 1, (Ideal.Quotient.mk I : _) 0, ?_⟩
  rw [Ne.def, Ideal.Quotient.eq, sub_zero, ← Ideal.eq_top_iff_one]
  exact hI.1
state_before: case h
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type ?u.81481
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type ?u.82014
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
hI : Ideal.IsPrimary I
⊢ Ideal.radical I ∈ associatedPrimes R (R ⧸ I)

tactic: obtain ⟨a, ha⟩ := associatedPrimes.nonempty R (R ⧸ I)
state_before: case h
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type ?u.81481
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type ?u.82014
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
hI : Ideal.IsPrimary I
this : Nontrivial (R ⧸ I)
⊢ Ideal.radical I ∈ associatedPrimes R (R ⧸ I)

tactic: exact ha.eq_radical hI ▸ ha
state_before: case h.intro
R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type ?u.81481
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type ?u.82014
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
hI : Ideal.IsPrimary I
this : Nontrivial (R ⧸ I)
a : Ideal R
ha : a ∈ associatedPrimes R (R ⧸ I)
⊢ Ideal.radical I ∈ associatedPrimes R (R ⧸ I)

tactic: refine ⟨(Ideal.Quotient.mk I : _) 1, (Ideal.Quotient.mk I : _) 0, ?_⟩
state_before: R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type ?u.81481
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type ?u.82014
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
hI : Ideal.IsPrimary I
⊢ Nontrivial (R ⧸ I)

tactic: rw [Ne.def, Ideal.Quotient.eq, sub_zero, ← Ideal.eq_top_iff_one]
state_before: R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type ?u.81481
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type ?u.82014
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
hI : Ideal.IsPrimary I
⊢ ↑(Ideal.Quotient.mk I) 1 ≠ ↑(Ideal.Quotient.mk I) 0

tactic: exact hI.1
state_before: R : Type u_1
inst✝⁵ : CommRing R
I J : Ideal R
M : Type ?u.81481
inst✝⁴ : AddCommGroup M
inst✝³ : Module R M
M' : Type ?u.82014
inst✝² : AddCommGroup M'
inst✝¹ : Module R M'
f : M →ₗ[R] M'
inst✝ : IsNoetherianRing R
hI : Ideal.IsPrimary I
⊢ ¬I = ⊤