Theorem: Ideal.isJacobson_of_surjective
File: Mathlib/RingTheory/Jacobson.lean

tactic: rintro ⟨f, hf⟩
state_before: R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
H : IsJacobson R
⊢ (∃ f, Function.Surjective ⇑f) → IsJacobson S
state_after: case intro
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
H : IsJacobson R
f : R →+* S
hf : Function.Surjective ⇑f
⊢ IsJacobson S

tactic: rw [isJacobson_iff_sInf_maximal]
state_before: case intro
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
H : IsJacobson R
f : R →+* S
hf : Function.Surjective ⇑f
⊢ IsJacobson S
state_after: case intro
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
H : IsJacobson R
f : R →+* S
hf : Function.Surjective ⇑f
⊢ ∀ {I : Ideal S}, I.IsPrime → ∃ M, (∀ J ∈ M, J.IsMaximal ∨ J = ⊤) ∧ I = sInf M

tactic: intro p hp
state_before: case intro
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
H : IsJacobson R
f : R →+* S
hf : Function.Surjective ⇑f
⊢ ∀ {I : Ideal S}, I.IsPrime → ∃ M, (∀ J ∈ M, J.IsMaximal ∨ J = ⊤) ∧ I = sInf M
state_after: case intro
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
H : IsJacobson R
f : R →+* S
hf : Function.Surjective ⇑f
p : Ideal S
hp : p.IsPrime
⊢ ∃ M, (∀ J ∈ M, J.IsMaximal ∨ J = ⊤) ∧ p = sInf M

tactic: use map f '' { J : Ideal R | comap f p ≤ J ∧ J.IsMaximal }
state_before: case intro
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
H : IsJacobson R
f : R →+* S
hf : Function.Surjective ⇑f
p : Ideal S
hp : p.IsPrime
⊢ ∃ M, (∀ J ∈ M, J.IsMaximal ∨ J = ⊤) ∧ p = sInf M
state_after: case h
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
H : IsJacobson R
f : R →+* S
hf : Function.Surjective ⇑f
p : Ideal S
hp : p.IsPrime
⊢ (∀ J ∈ map f '' {J | comap f p ≤ J ∧ J.IsMaximal}, J.IsMaximal ∨ J = ⊤) ∧
    p = sInf (map f '' {J | comap f p ≤ J ∧ J.IsMaximal})

tactic: use fun j ⟨J, hJ, hmap⟩ => hmap ▸ (map_eq_top_or_isMaximal_of_surjective f hf hJ.right).symm
state_before: case h
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
H : IsJacobson R
f : R →+* S
hf : Function.Surjective ⇑f
p : Ideal S
hp : p.IsPrime
⊢ (∀ J ∈ map f '' {J | comap f p ≤ J ∧ J.IsMaximal}, J.IsMaximal ∨ J = ⊤) ∧
    p = sInf (map f '' {J | comap f p ≤ J ∧ J.IsMaximal})
state_after: case right
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
H : IsJacobson R
f : R →+* S
hf : Function.Surjective ⇑f
p : Ideal S
hp : p.IsPrime
⊢ p = sInf (map f '' {J | comap f p ≤ J ∧ J.IsMaximal})

tactic: have : p = map f (comap f p).jacobson :=
  (IsJacobson.out' _ <| hp.isRadical.comap f).symm ▸ (map_comap_of_surjective f hf p).symm
state_before: case right
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
H : IsJacobson R
f : R →+* S
hf : Function.Surjective ⇑f
p : Ideal S
hp : p.IsPrime
⊢ p = sInf (map f '' {J | comap f p ≤ J ∧ J.IsMaximal})
state_after: case right
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
H : IsJacobson R
f : R →+* S
hf : Function.Surjective ⇑f
p : Ideal S
hp : p.IsPrime
this : p = map f (comap f p).jacobson
⊢ p = sInf (map f '' {J | comap f p ≤ J ∧ J.IsMaximal})

tactic: exact this.trans (map_sInf hf fun J ⟨hJ, _⟩ => le_trans (Ideal.ker_le_comap f) hJ)
state_before: case right
R : Type u_1
S : Type u_2
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
H : IsJacobson R
f : R →+* S
hf : Function.Surjective ⇑f
p : Ideal S
hp : p.IsPrime
this : p = map f (comap f p).jacobson
⊢ p = sInf (map f '' {J | comap f p ≤ J ∧ J.IsMaximal})
state_after: no goals