Theorem: PrimeSpectrum.exists_primeSpectrum_prod_le
File: Mathlib/RingTheory/PrimeSpectrum.lean

Proof steps:
state_before: R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I : Ideal R
⊢ ∃ Z, (Multiset.map asIdeal Z).prod ≤ I
state_after: R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M
tactic: refine IsNoetherian.induction
    (P := fun I => ∃ Z : Multiset (PrimeSpectrum R), Multiset.prod (Z.map asIdeal) ≤ I)
    (fun (M : Ideal R) hgt => ?_) I
state_before: R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M
state_after: case pos
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : M.IsPrime
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M

case neg
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M
tactic: by_cases h_prM : M.IsPrime
state_before: case neg
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M
state_after: case pos
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : M = ⊤
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M

case neg
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M
tactic: by_cases htop : M = ⊤
state_before: case neg
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M
state_after: case neg
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M
tactic: have lt_add : ∀ z ∉ M, M < M + span R {z} := by
    intro z hz
    refine lt_of_le_of_ne le_sup_left fun m_eq => hz ?_
    rw [m_eq]
    exact Ideal.mem_sup_right (mem_span_singleton_self z)
state_before: case neg
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M
state_after: case neg.intro.intro.intro.intro
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M
tactic: obtain ⟨x, hx, y, hy, hxy⟩ := (Ideal.not_isPrime_iff.mp h_prM).resolve_left htop
state_before: case neg.intro.intro.intro.intro
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M
state_after: case neg.intro.intro.intro.intro.intro
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M
tactic: obtain ⟨Wx, h_Wx⟩ := hgt (M + span R {x}) (lt_add _ hx)
state_before: case neg.intro.intro.intro.intro.intro
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M
state_after: case neg.intro.intro.intro.intro.intro.intro
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M
tactic: obtain ⟨Wy, h_Wy⟩ := hgt (M + span R {y}) (lt_add _ hy)
state_before: case neg.intro.intro.intro.intro.intro.intro
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) M
state_after: case h
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ (Multiset.map asIdeal (Wx + Wy)).prod ≤ M
tactic: use Wx + Wy
state_before: case h
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ (Multiset.map asIdeal (Wx + Wy)).prod ≤ M
state_after: case h
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ (Multiset.map asIdeal Wx).prod * (Multiset.map asIdeal Wy).prod ≤ M
tactic: rw [Multiset.map_add, Multiset.prod_add]
state_before: case h
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ (Multiset.map asIdeal Wx).prod * (Multiset.map asIdeal Wy).prod ≤ M
state_after: case h
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ (M + span R {x}) * (M + span R {y}) ≤ M
tactic: apply le_trans (Submodule.mul_le_mul h_Wx h_Wy)
state_before: case h
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ (M + span R {x}) * (M + span R {y}) ≤ M
state_after: case h
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ M * (M + span R {y}) + span R {x} * (M + span R {y}) ≤ M
tactic: rw [add_mul]
state_before: case h
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ M * (M + span R {y}) + span R {x} * (M + span R {y}) ≤ M
state_after: case h
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ span R {x} * (M + span R {y}) ≤ M
tactic: apply sup_le (show M * (M + span R {y}) ≤ M from Ideal.mul_le_right)
state_before: case h
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ span R {x} * (M + span R {y}) ≤ M
state_after: case h
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ span R {x} * M + span R {x} * span R {y} ≤ M
tactic: rw [mul_add]
state_before: case h
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ span R {x} * M + span R {x} * span R {y} ≤ M
state_after: case h
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ span R {x} * span R {y} ≤ M
tactic: apply sup_le (show span R {x} * M ≤ M from Ideal.mul_le_left)
state_before: case h
R✝ : Type u
S : Type v
inst✝⁶ : CommSemiring R✝
inst✝⁵ : CommSemiring S
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsNoetherianRing R
A : Type u
inst✝² : CommRing A
inst✝¹ : IsDomain A
inst✝ : IsNoetherianRing A
I M : Ideal R
hgt : ∀ J > M, (fun I => ∃ Z, (Multiset.map asIdeal Z).prod ≤ I) J
h_prM : ¬M.IsPrime
htop : ¬M = ⊤
lt_add : ∀ z ∉ M, M < M + span R {z}
x : R
hx : x ∉ M
y : R
hy : y ∉ M
hxy : x * y ∈ M
Wx : Multiset (PrimeSpectrum R)
h_Wx : (Multiset.map asIdeal Wx).prod ≤ M + span R {x}
Wy : Multiset (PrimeSpectrum R)
h_Wy : (Multiset.map asIdeal Wy).prod ≤ M + span R {y}
⊢ span R {x} * span R {y} ≤ M
state_after: no goals
tactic: rwa [span_mul_span, Set.singleton_mul_singleton, span_singleton_le_iff_mem]