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

Proof steps:
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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
⊢ ∃ P, IsAssociatedPrime P M ∧ (Submodule.span R {x}).annihilator ≤ P
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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
⊢ ∃ P, IsAssociatedPrime P M ∧ (Submodule.span R {x}).annihilator ≤ P
tactic: have : (R ∙ x).annihilator ≠ ⊤ := by
    rwa [Ne, Ideal.eq_top_iff_one, Submodule.mem_annihilator_span_singleton, one_smul]
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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
⊢ ∃ P, IsAssociatedPrime P M ∧ (Submodule.span R {x}).annihilator ≤ P
state_after: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
⊢ ∃ P, IsAssociatedPrime P M ∧ (Submodule.span R {x}).annihilator ≤ P
tactic: obtain ⟨P, ⟨l, h₁, y, rfl⟩, h₃⟩ :=
    set_has_maximal_iff_noetherian.mpr H
      { P | (R ∙ x).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y : M, P = (R ∙ y).annihilator }
      ⟨(R ∙ x).annihilator, rfl.le, this, x, rfl⟩
state_before: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
⊢ ∃ P, IsAssociatedPrime P M ∧ (Submodule.span R {x}).annihilator ≤ P
state_after: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
⊢ ∀ {x y_1 : R},
    x * y_1 ∈ (Submodule.span R {y}).annihilator →
      x ∈ (Submodule.span R {y}).annihilator ∨ y_1 ∈ (Submodule.span R {y}).annihilator
tactic: refine ⟨_, ⟨⟨h₁, ?_⟩, y, rfl⟩, l⟩
state_before: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
⊢ ∀ {x y_1 : R},
    x * y_1 ∈ (Submodule.span R {y}).annihilator →
      x ∈ (Submodule.span R {y}).annihilator ∨ y_1 ∈ (Submodule.span R {y}).annihilator
state_after: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
a b : R
hab : a * b ∈ (Submodule.span R {y}).annihilator
⊢ a ∈ (Submodule.span R {y}).annihilator ∨ b ∈ (Submodule.span R {y}).annihilator
tactic: intro a b hab
state_before: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
a b : R
hab : a * b ∈ (Submodule.span R {y}).annihilator
⊢ a ∈ (Submodule.span R {y}).annihilator ∨ b ∈ (Submodule.span R {y}).annihilator
state_after: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
a b : R
hab : a * b ∈ (Submodule.span R {y}).annihilator
⊢ a ∉ (Submodule.span R {y}).annihilator → b ∈ (Submodule.span R {y}).annihilator
tactic: rw [or_iff_not_imp_left]
state_before: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
a b : R
hab : a * b ∈ (Submodule.span R {y}).annihilator
⊢ a ∉ (Submodule.span R {y}).annihilator → b ∈ (Submodule.span R {y}).annihilator
state_after: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
a b : R
hab : a * b ∈ (Submodule.span R {y}).annihilator
ha : a ∉ (Submodule.span R {y}).annihilator
⊢ b ∈ (Submodule.span R {y}).annihilator
tactic: intro ha
state_before: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
a b : R
hab : a * b ∈ (Submodule.span R {y}).annihilator
ha : a ∉ (Submodule.span R {y}).annihilator
⊢ b ∈ (Submodule.span R {y}).annihilator
state_after: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
a b : R
hab : (a * b) • y = 0
ha : ¬a • y = 0
⊢ b ∈ (Submodule.span R {y}).annihilator
tactic: rw [Submodule.mem_annihilator_span_singleton] at ha hab
state_before: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
a b : R
hab : (a * b) • y = 0
ha : ¬a • y = 0
⊢ b ∈ (Submodule.span R {y}).annihilator
state_after: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
a b : R
hab : (a * b) • y = 0
ha : ¬a • y = 0
H₁ : (Submodule.span R {y}).annihilator ≤ (Submodule.span R {a • y}).annihilator
⊢ b ∈ (Submodule.span R {y}).annihilator
tactic: have H₁ : (R ∙ y).annihilator ≤ (R ∙ a • y).annihilator := by
    intro c hc
    rw [Submodule.mem_annihilator_span_singleton] at hc ⊢
    rw [smul_comm, hc, smul_zero]
state_before: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
a b : R
hab : (a * b) • y = 0
ha : ¬a • y = 0
H₁ : (Submodule.span R {y}).annihilator ≤ (Submodule.span R {a • y}).annihilator
⊢ b ∈ (Submodule.span R {y}).annihilator
state_after: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
a b : R
hab : (a * b) • y = 0
ha : ¬a • y = 0
H₁ : (Submodule.span R {y}).annihilator ≤ (Submodule.span R {a • y}).annihilator
H₂ : (Submodule.span R {a • y}).annihilator ≠ ⊤
⊢ b ∈ (Submodule.span R {y}).annihilator
tactic: have H₂ : (Submodule.span R {a • y}).annihilator ≠ ⊤ := by
    rwa [Ne, Submodule.annihilator_eq_top_iff, Submodule.span_singleton_eq_bot]
state_before: case intro.intro.intro.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'
H : IsNoetherianRing R
x : M
hx : x ≠ 0
this : (Submodule.span R {x}).annihilator ≠ ⊤
y : M
h₃ :
  ∀ I ∈ {P | (Submodule.span R {x}).annihilator ≤ P ∧ P ≠ ⊤ ∧ ∃ y, P = (Submodule.span R {y}).annihilator},
    ¬(Submodule.span R {y}).annihilator < I
l : (Submodule.span R {x}).annihilator ≤ (Submodule.span R {y}).annihilator
h₁ : (Submodule.span R {y}).annihilator ≠ ⊤
a b : R
hab : (a * b) • y = 0
ha : ¬a • y = 0
H₁ : (Submodule.span R {y}).annihilator ≤ (Submodule.span R {a • y}).annihilator
H₂ : (Submodule.span R {a • y}).annihilator ≠ ⊤
⊢ b ∈ (Submodule.span R {y}).annihilator
state_after: no goals
tactic: rwa [H₁.eq_of_not_lt (h₃ (R ∙ a • y).annihilator ⟨l.trans H₁, H₂, _, rfl⟩),
    Submodule.mem_annihilator_span_singleton, smul_comm, smul_smul]