Theorem: IsAssociatedPrime.eq_radical
File: Mathlib/RingTheory/Ideal/AssociatedPrime.lean

tactic: obtain ⟨hJ, x, e⟩ := h
state_before: R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type ?u.74241
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type ?u.74774
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hI : Ideal.IsPrimary I
h : IsAssociatedPrime J (R ⧸ I)
⊢ J = Ideal.radical I

tactic: have : x ≠ 0 := by
  rintro rfl
  apply hJ.1
  rwa [Submodule.span_singleton_eq_bot.mpr rfl, Submodule.annihilator_bot] at e
state_before: case intro.intro
R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type ?u.74241
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type ?u.74774
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hI : Ideal.IsPrimary I
hJ : Ideal.IsPrime J
x : R ⧸ I
e : J = Submodule.annihilator (Submodule.span R {x})
⊢ J = Ideal.radical I

tactic: obtain ⟨x, rfl⟩ := Ideal.Quotient.mkₐ_surjective R _ x
state_before: case intro.intro
R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type ?u.74241
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type ?u.74774
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hI : Ideal.IsPrimary I
hJ : Ideal.IsPrime J
x : R ⧸ I
e : J = Submodule.annihilator (Submodule.span R {x})
this : x ≠ 0
⊢ J = Ideal.radical I

tactic: replace e : ∀ {y}, y ∈ J ↔ x * y ∈ I
state_before: case intro.intro.intro
R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type ?u.74241
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type ?u.74774
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hI : Ideal.IsPrimary I
hJ : Ideal.IsPrime J
x : R
e : J = Submodule.annihilator (Submodule.span R {↑(Ideal.Quotient.mkₐ R I) x})
this : ↑(Ideal.Quotient.mkₐ R I) x ≠ 0
⊢ J = Ideal.radical I

tactic: apply le_antisymm
state_before: case intro.intro.intro
R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type ?u.74241
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type ?u.74774
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hI : Ideal.IsPrimary I
hJ : Ideal.IsPrime J
x : R
this : ↑(Ideal.Quotient.mkₐ R I) x ≠ 0
e : ∀ {y : R}, y ∈ J ↔ x * y ∈ I
⊢ J = Ideal.radical I

tactic: rintro rfl
state_before: R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type ?u.74241
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type ?u.74774
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hI : Ideal.IsPrimary I
hJ : Ideal.IsPrime J
x : R ⧸ I
e : J = Submodule.annihilator (Submodule.span R {x})
⊢ x ≠ 0

tactic: apply hJ.1
state_before: R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type ?u.74241
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type ?u.74774
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hI : Ideal.IsPrimary I
hJ : Ideal.IsPrime J
e : J = Submodule.annihilator (Submodule.span R {0})
⊢ False

tactic: rwa [Submodule.span_singleton_eq_bot.mpr rfl, Submodule.annihilator_bot] at e
state_before: R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type ?u.74241
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type ?u.74774
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hI : Ideal.IsPrimary I
hJ : Ideal.IsPrime J
e : J = Submodule.annihilator (Submodule.span R {0})
⊢ J = ⊤

tactic: intro y
state_before: case e
R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type ?u.74241
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type ?u.74774
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hI : Ideal.IsPrimary I
hJ : Ideal.IsPrime J
x : R
e : J = Submodule.annihilator (Submodule.span R {↑(Ideal.Quotient.mkₐ R I) x})
this : ↑(Ideal.Quotient.mkₐ R I) x ≠ 0
⊢ ∀ {y : R}, y ∈ J ↔ x * y ∈ I

tactic: rw [e, Submodule.mem_annihilator_span_singleton, ← map_smul, smul_eq_mul, mul_comm,
  Ideal.Quotient.mkₐ_eq_mk, ← Ideal.Quotient.mk_eq_mk, Submodule.Quotient.mk_eq_zero]
state_before: case e
R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type ?u.74241
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type ?u.74774
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hI : Ideal.IsPrimary I
hJ : Ideal.IsPrime J
x : R
e : J = Submodule.annihilator (Submodule.span R {↑(Ideal.Quotient.mkₐ R I) x})
this : ↑(Ideal.Quotient.mkₐ R I) x ≠ 0
y : R
⊢ y ∈ J ↔ x * y ∈ I

tactic: intro y hy
state_before: case intro.intro.intro.a
R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type ?u.74241
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type ?u.74774
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hI : Ideal.IsPrimary I
hJ : Ideal.IsPrime J
x : R
this : ↑(Ideal.Quotient.mkₐ R I) x ≠ 0
e : ∀ {y : R}, y ∈ J ↔ x * y ∈ I
⊢ J ≤ Ideal.radical I

tactic: exact (hI.2 <| e.mp hy).resolve_left ((Submodule.Quotient.mk_eq_zero I).not.mp this)
state_before: case intro.intro.intro.a
R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type ?u.74241
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type ?u.74774
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hI : Ideal.IsPrimary I
hJ : Ideal.IsPrime J
x : R
this : ↑(Ideal.Quotient.mkₐ R I) x ≠ 0
e : ∀ {y : R}, y ∈ J ↔ x * y ∈ I
y : R
hy : y ∈ J
⊢ y ∈ Ideal.radical I

tactic: rw [hJ.radical_le_iff]
state_before: case intro.intro.intro.a
R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type ?u.74241
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type ?u.74774
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hI : Ideal.IsPrimary I
hJ : Ideal.IsPrime J
x : R
this : ↑(Ideal.Quotient.mkₐ R I) x ≠ 0
e : ∀ {y : R}, y ∈ J ↔ x * y ∈ I
⊢ Ideal.radical I ≤ J

tactic: intro y hy
state_before: case intro.intro.intro.a
R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type ?u.74241
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type ?u.74774
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hI : Ideal.IsPrimary I
hJ : Ideal.IsPrime J
x : R
this : ↑(Ideal.Quotient.mkₐ R I) x ≠ 0
e : ∀ {y : R}, y ∈ J ↔ x * y ∈ I
⊢ I ≤ J

tactic: exact e.mpr (I.mul_mem_left x hy)
state_before: case intro.intro.intro.a
R : Type u_1
inst✝⁴ : CommRing R
I J : Ideal R
M : Type ?u.74241
inst✝³ : AddCommGroup M
inst✝² : Module R M
M' : Type ?u.74774
inst✝¹ : AddCommGroup M'
inst✝ : Module R M'
f : M →ₗ[R] M'
hI : Ideal.IsPrimary I
hJ : Ideal.IsPrime J
x : R
this : ↑(Ideal.Quotient.mkₐ R I) x ≠ 0
e : ∀ {y : R}, y ∈ J ↔ x * y ∈ I
y : R
hy : y ∈ I
⊢ y ∈ J