Theorem: Ideal.radical_minimalPrimes
File: Mathlib/RingTheory/Ideal/MinimalPrime.lean

tactic: rw [Ideal.minimalPrimes, Ideal.minimalPrimes]
state_before: R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J : Ideal R
⊢ I.radical.minimalPrimes = I.minimalPrimes
state_after: R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J : Ideal R
⊢ minimals (fun x x_1 => x ≤ x_1) {p | p.IsPrime ∧ I.radical ≤ p} =
    minimals (fun x x_1 => x ≤ x_1) {p | p.IsPrime ∧ I ≤ p}

tactic: ext p
state_before: R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J : Ideal R
⊢ minimals (fun x x_1 => x ≤ x_1) {p | p.IsPrime ∧ I.radical ≤ p} =
    minimals (fun x x_1 => x ≤ x_1) {p | p.IsPrime ∧ I ≤ p}
state_after: case h
R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J p : Ideal R
⊢ p ∈ minimals (fun x x_1 => x ≤ x_1) {p | p.IsPrime ∧ I.radical ≤ p} ↔
    p ∈ minimals (fun x x_1 => x ≤ x_1) {p | p.IsPrime ∧ I ≤ p}

tactic: refine ⟨?_, ?_⟩ <;> rintro ⟨⟨a, ha⟩, b⟩
state_before: case h
R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J p : Ideal R
⊢ p ∈ minimals (fun x x_1 => x ≤ x_1) {p | p.IsPrime ∧ I.radical ≤ p} ↔
    p ∈ minimals (fun x x_1 => x ≤ x_1) {p | p.IsPrime ∧ I ≤ p}
state_after: case h.refine_1.intro.intro
R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J p : Ideal R
b : ∀ ⦃b : Ideal R⦄, b ∈ {p | p.IsPrime ∧ I.radical ≤ p} → (fun x x_1 => x ≤ x_1) b p → (fun x x_1 => x ≤ x_1) p b
a : p.IsPrime
ha : I.radical ≤ p
⊢ p ∈ minimals (fun x x_1 => x ≤ x_1) {p | p.IsPrime ∧ I ≤ p}

case h.refine_2.intro.intro
R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J p : Ideal R
b : ∀ ⦃b : Ideal R⦄, b ∈ {p | p.IsPrime ∧ I ≤ p} → (fun x x_1 => x ≤ x_1) b p → (fun x x_1 => x ≤ x_1) p b
a : p.IsPrime
ha : I ≤ p
⊢ p ∈ minimals (fun x x_1 => x ≤ x_1) {p | p.IsPrime ∧ I.radical ≤ p}

tactic: refine ⟨⟨a, a.radical_le_iff.1 ha⟩, ?_⟩
state_before: case h.refine_1.intro.intro
R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J p : Ideal R
b : ∀ ⦃b : Ideal R⦄, b ∈ {p | p.IsPrime ∧ I.radical ≤ p} → (fun x x_1 => x ≤ x_1) b p → (fun x x_1 => x ≤ x_1) p b
a : p.IsPrime
ha : I.radical ≤ p
⊢ p ∈ minimals (fun x x_1 => x ≤ x_1) {p | p.IsPrime ∧ I ≤ p}
state_after: case h.refine_1.intro.intro
R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J p : Ideal R
b : ∀ ⦃b : Ideal R⦄, b ∈ {p | p.IsPrime ∧ I.radical ≤ p} → (fun x x_1 => x ≤ x_1) b p → (fun x x_1 => x ≤ x_1) p b
a : p.IsPrime
ha : I.radical ≤ p
⊢ ∀ ⦃b : Ideal R⦄, b ∈ {p | p.IsPrime ∧ I ≤ p} → (fun x x_1 => x ≤ x_1) b p → (fun x x_1 => x ≤ x_1) p b

tactic: simp only [Set.mem_setOf_eq, and_imp] at *
state_before: case h.refine_1.intro.intro
R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J p : Ideal R
b : ∀ ⦃b : Ideal R⦄, b ∈ {p | p.IsPrime ∧ I.radical ≤ p} → (fun x x_1 => x ≤ x_1) b p → (fun x x_1 => x ≤ x_1) p b
a : p.IsPrime
ha : I.radical ≤ p
⊢ ∀ ⦃b : Ideal R⦄, b ∈ {p | p.IsPrime ∧ I ≤ p} → (fun x x_1 => x ≤ x_1) b p → (fun x x_1 => x ≤ x_1) p b
state_after: case h.refine_1.intro.intro
R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J p : Ideal R
a : p.IsPrime
ha : I.radical ≤ p
b : ∀ ⦃b : Ideal R⦄, b.IsPrime → I.radical ≤ b → b ≤ p → p ≤ b
⊢ ∀ ⦃b : Ideal R⦄, b.IsPrime → I ≤ b → b ≤ p → p ≤ b

tactic: exact fun _ h2 h3 h4 => b h2 (h2.radical_le_iff.2 h3) h4
state_before: case h.refine_1.intro.intro
R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J p : Ideal R
a : p.IsPrime
ha : I.radical ≤ p
b : ∀ ⦃b : Ideal R⦄, b.IsPrime → I.radical ≤ b → b ≤ p → p ≤ b
⊢ ∀ ⦃b : Ideal R⦄, b.IsPrime → I ≤ b → b ≤ p → p ≤ b
state_after: no goals

tactic: refine ⟨⟨a, a.radical_le_iff.2 ha⟩, ?_⟩
state_before: case h.refine_2.intro.intro
R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J p : Ideal R
b : ∀ ⦃b : Ideal R⦄, b ∈ {p | p.IsPrime ∧ I ≤ p} → (fun x x_1 => x ≤ x_1) b p → (fun x x_1 => x ≤ x_1) p b
a : p.IsPrime
ha : I ≤ p
⊢ p ∈ minimals (fun x x_1 => x ≤ x_1) {p | p.IsPrime ∧ I.radical ≤ p}
state_after: case h.refine_2.intro.intro
R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J p : Ideal R
b : ∀ ⦃b : Ideal R⦄, b ∈ {p | p.IsPrime ∧ I ≤ p} → (fun x x_1 => x ≤ x_1) b p → (fun x x_1 => x ≤ x_1) p b
a : p.IsPrime
ha : I ≤ p
⊢ ∀ ⦃b : Ideal R⦄, b ∈ {p | p.IsPrime ∧ I.radical ≤ p} → (fun x x_1 => x ≤ x_1) b p → (fun x x_1 => x ≤ x_1) p b

tactic: simp only [Set.mem_setOf_eq, and_imp] at *
state_before: case h.refine_2.intro.intro
R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J p : Ideal R
b : ∀ ⦃b : Ideal R⦄, b ∈ {p | p.IsPrime ∧ I ≤ p} → (fun x x_1 => x ≤ x_1) b p → (fun x x_1 => x ≤ x_1) p b
a : p.IsPrime
ha : I ≤ p
⊢ ∀ ⦃b : Ideal R⦄, b ∈ {p | p.IsPrime ∧ I.radical ≤ p} → (fun x x_1 => x ≤ x_1) b p → (fun x x_1 => x ≤ x_1) p b
state_after: case h.refine_2.intro.intro
R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J p : Ideal R
a : p.IsPrime
ha : I ≤ p
b : ∀ ⦃b : Ideal R⦄, b.IsPrime → I ≤ b → b ≤ p → p ≤ b
⊢ ∀ ⦃b : Ideal R⦄, b.IsPrime → I.radical ≤ b → b ≤ p → p ≤ b

tactic: exact fun _ h2 h3 h4 => b h2 (h2.radical_le_iff.1 h3) h4
state_before: case h.refine_2.intro.intro
R : Type u_1
S : Type u_2
inst✝¹ : CommSemiring R
inst✝ : CommSemiring S
I J p : Ideal R
a : p.IsPrime
ha : I ≤ p
b : ∀ ⦃b : Ideal R⦄, b.IsPrime → I ≤ b → b ≤ p → p ≤ b
⊢ ∀ ⦃b : Ideal R⦄, b.IsPrime → I.radical ≤ b → b ≤ p → p ≤ b
state_after: no goals