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

Proof steps:
state_before: R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ (comap f I).minimalPrimes
⊢ ∃ p', p'.IsPrime ∧ I ≤ p' ∧ comap f p' = p
state_after: R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ (comap f I).minimalPrimes
this : p.IsPrime
⊢ ∃ p', p'.IsPrime ∧ I ≤ p' ∧ comap f p' = p
tactic: have := H.1.1
state_before: R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ (comap f I).minimalPrimes
this : p.IsPrime
⊢ ∃ p', p'.IsPrime ∧ I ≤ p' ∧ comap f p' = p
state_after: R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ (comap f I).minimalPrimes
this : p.IsPrime
f' : R →+* S ⧸ I := (Quotient.mk I).comp f
⊢ ∃ p', p'.IsPrime ∧ I ≤ p' ∧ comap f p' = p
tactic: let f' := (Ideal.Quotient.mk I).comp f
state_before: R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ (comap f I).minimalPrimes
this : p.IsPrime
f' : R →+* S ⧸ I := (Quotient.mk I).comp f
⊢ ∃ p', p'.IsPrime ∧ I ≤ p' ∧ comap f p' = p
state_after: R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ (comap f I).minimalPrimes
this : p.IsPrime
f' : R →+* S ⧸ I := (Quotient.mk I).comp f
e : RingHom.ker f' = comap f I
⊢ ∃ p', p'.IsPrime ∧ I ≤ p' ∧ comap f p' = p
tactic: have e : RingHom.ker f' = I.comap f := by
    ext1
    exact Submodule.Quotient.mk_eq_zero _
state_before: R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ (comap f I).minimalPrimes
this : p.IsPrime
f' : R →+* S ⧸ I := (Quotient.mk I).comp f
e : RingHom.ker f' = comap f I
⊢ ∃ p', p'.IsPrime ∧ I ≤ p' ∧ comap f p' = p
state_after: R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ (comap f I).minimalPrimes
this✝ : p.IsPrime
f' : R →+* S ⧸ I := (Quotient.mk I).comp f
e : RingHom.ker f' = comap f I
this : RingHom.ker (Quotient.mk (RingHom.ker f')) ≤ p
⊢ ∃ p', p'.IsPrime ∧ I ≤ p' ∧ comap f p' = p
tactic: have : RingHom.ker (Ideal.Quotient.mk <| RingHom.ker f') ≤ p := by
    rw [Ideal.mk_ker, e]
    exact H.1.2
state_before: R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ (comap f I).minimalPrimes
this✝ : p.IsPrime
f' : R →+* S ⧸ I := (Quotient.mk I).comp f
e : RingHom.ker f' = comap f I
this : RingHom.ker (Quotient.mk (RingHom.ker f')) ≤ p
⊢ map (Quotient.mk (RingHom.ker f')) p ∈ minimalPrimes (R ⧸ RingHom.ker f')
state_after: case refine_1
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ (comap f I).minimalPrimes
this✝ : p.IsPrime
f' : R →+* S ⧸ I := (Quotient.mk I).comp f
e : RingHom.ker f' = comap f I
this : RingHom.ker (Quotient.mk (RingHom.ker f')) ≤ p
⊢ (map (Quotient.mk (RingHom.ker f')) p).IsPrime

case refine_2
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I✝ J : Ideal R
I : Ideal S
f : R →+* S
p : Ideal R
H : p ∈ (comap f I).minimalPrimes
this✝ : p.IsPrime
f' : R →+* S ⧸ I := (Quotient.mk I).comp f
e : RingHom.ker f' = comap f I
this : RingHom.ker (Quotient.mk (RingHom.ker f')) ≤ p
⊢ ∀ ⦃b : Ideal (R ⧸ RingHom.ker f')⦄,
    b ∈ {p | p.IsPrime ∧ ⊥ ≤ p} →
      (fun x x_1 => x ≤ x_1) b (map (Quotient.mk (RingHom.ker f')) p) →
        (fun x x_1 => x ≤ x_1) (map (Quotient.mk (RingHom.ker f')) p) b
tactic: refine ⟨⟨?_, bot_le⟩, ?_⟩