Theorem: Ideal.jacobson_eq_iff_jacobson_quotient_eq_bot
File: Mathlib/RingTheory/JacobsonIdeal.lean

tactic: have hf : Function.Surjective (Ideal.Quotient.mk I) := Submodule.Quotient.mk_surjective I
state_before: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
⊢ I.jacobson = I ↔ ⊥.jacobson = ⊥
state_after: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
⊢ I.jacobson = I ↔ ⊥.jacobson = ⊥

tactic: constructor
state_before: R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
⊢ I.jacobson = I ↔ ⊥.jacobson = ⊥
state_after: case mp
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
⊢ I.jacobson = I → ⊥.jacobson = ⊥

case mpr
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
⊢ ⊥.jacobson = ⊥ → I.jacobson = I

tactic: intro h
state_before: case mp
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
⊢ I.jacobson = I → ⊥.jacobson = ⊥
state_after: case mp
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
h : I.jacobson = I
⊢ ⊥.jacobson = ⊥

tactic: replace h := congr_arg (Ideal.map (Ideal.Quotient.mk I)) h
state_before: case mp
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
h : I.jacobson = I
⊢ ⊥.jacobson = ⊥
state_after: case mp
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
h : map (Quotient.mk I) I.jacobson = map (Quotient.mk I) I
⊢ ⊥.jacobson = ⊥

tactic: rw [map_jacobson_of_surjective hf (le_of_eq mk_ker)] at h
state_before: case mp
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
h : map (Quotient.mk I) I.jacobson = map (Quotient.mk I) I
⊢ ⊥.jacobson = ⊥
state_after: case mp
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
h : (map (Quotient.mk I) I).jacobson = map (Quotient.mk I) I
⊢ ⊥.jacobson = ⊥

tactic: simpa using h
state_before: case mp
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
h : (map (Quotient.mk I) I).jacobson = map (Quotient.mk I) I
⊢ ⊥.jacobson = ⊥
state_after: no goals

tactic: intro h
state_before: case mpr
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
⊢ ⊥.jacobson = ⊥ → I.jacobson = I
state_after: case mpr
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
h : ⊥.jacobson = ⊥
⊢ I.jacobson = I

tactic: replace h := congr_arg (comap (Ideal.Quotient.mk I)) h
state_before: case mpr
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
h : ⊥.jacobson = ⊥
⊢ I.jacobson = I
state_after: case mpr
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
h : comap (Quotient.mk I) ⊥.jacobson = comap (Quotient.mk I) ⊥
⊢ I.jacobson = I

tactic: rw [comap_jacobson_of_surjective hf, ← RingHom.ker_eq_comap_bot (Ideal.Quotient.mk I)] at h
state_before: case mpr
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
h : comap (Quotient.mk I) ⊥.jacobson = comap (Quotient.mk I) ⊥
⊢ I.jacobson = I
state_after: case mpr
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
h : (RingHom.ker (Quotient.mk I)).jacobson = RingHom.ker (Quotient.mk I)
⊢ I.jacobson = I

tactic: simpa using h
state_before: case mpr
R : Type u
S : Type v
inst✝¹ : CommRing R
inst✝ : CommRing S
I : Ideal R
hf : Function.Surjective ⇑(Quotient.mk I)
h : (RingHom.ker (Quotient.mk I)).jacobson = RingHom.ker (Quotient.mk I)
⊢ I.jacobson = I
state_after: no goals