Theorem: RingHom.IsIntegral.quotient
File: Mathlib/RingTheory/IntegralClosure/IsIntegralClosure/Basic.lean

Proof steps:
state_before: R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
T : Type u_5
inst✝⁸ : CommRing R
inst✝⁷ : CommRing A
inst✝⁶ : Ring B
inst✝⁵ : CommRing S
inst✝⁴ : CommRing T
inst✝³ : Algebra A B
inst✝² : Algebra R B
f : R →+* S
g : S →+* T
inst✝¹ : Algebra R A
inst✝ : IsScalarTower R A B
I : Ideal S
hf : f.IsIntegral
⊢ (Ideal.quotientMap I f ⋯).IsIntegral
state_after: case mk
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
T : Type u_5
inst✝⁸ : CommRing R
inst✝⁷ : CommRing A
inst✝⁶ : Ring B
inst✝⁵ : CommRing S
inst✝⁴ : CommRing T
inst✝³ : Algebra A B
inst✝² : Algebra R B
f : R →+* S
g : S →+* T
inst✝¹ : Algebra R A
inst✝ : IsScalarTower R A B
I : Ideal S
hf : f.IsIntegral
x✝ : S ⧸ I
x : S
⊢ (Ideal.quotientMap I f ⋯).IsIntegralElem (Quot.mk Setoid.r x)
tactic: rintro ⟨x⟩
state_before: case mk
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
T : Type u_5
inst✝⁸ : CommRing R
inst✝⁷ : CommRing A
inst✝⁶ : Ring B
inst✝⁵ : CommRing S
inst✝⁴ : CommRing T
inst✝³ : Algebra A B
inst✝² : Algebra R B
f : R →+* S
g : S →+* T
inst✝¹ : Algebra R A
inst✝ : IsScalarTower R A B
I : Ideal S
hf : f.IsIntegral
x✝ : S ⧸ I
x : S
⊢ (Ideal.quotientMap I f ⋯).IsIntegralElem (Quot.mk Setoid.r x)
state_after: case mk.intro.intro
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
T : Type u_5
inst✝⁸ : CommRing R
inst✝⁷ : CommRing A
inst✝⁶ : Ring B
inst✝⁵ : CommRing S
inst✝⁴ : CommRing T
inst✝³ : Algebra A B
inst✝² : Algebra R B
f : R →+* S
g : S →+* T
inst✝¹ : Algebra R A
inst✝ : IsScalarTower R A B
I : Ideal S
hf : f.IsIntegral
x✝ : S ⧸ I
x : S
p : R[X]
p_monic : p.Monic
hpx : eval₂ f x p = 0
⊢ (Ideal.quotientMap I f ⋯).IsIntegralElem (Quot.mk Setoid.r x)
tactic: obtain ⟨p, p_monic, hpx⟩ := hf x
state_before: case mk.intro.intro
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
T : Type u_5
inst✝⁸ : CommRing R
inst✝⁷ : CommRing A
inst✝⁶ : Ring B
inst✝⁵ : CommRing S
inst✝⁴ : CommRing T
inst✝³ : Algebra A B
inst✝² : Algebra R B
f : R →+* S
g : S →+* T
inst✝¹ : Algebra R A
inst✝ : IsScalarTower R A B
I : Ideal S
hf : f.IsIntegral
x✝ : S ⧸ I
x : S
p : R[X]
p_monic : p.Monic
hpx : eval₂ f x p = 0
⊢ (Ideal.quotientMap I f ⋯).IsIntegralElem (Quot.mk Setoid.r x)
state_after: case mk.intro.intro
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
T : Type u_5
inst✝⁸ : CommRing R
inst✝⁷ : CommRing A
inst✝⁶ : Ring B
inst✝⁵ : CommRing S
inst✝⁴ : CommRing T
inst✝³ : Algebra A B
inst✝² : Algebra R B
f : R →+* S
g : S →+* T
inst✝¹ : Algebra R A
inst✝ : IsScalarTower R A B
I : Ideal S
hf : f.IsIntegral
x✝ : S ⧸ I
x : S
p : R[X]
p_monic : p.Monic
hpx : eval₂ f x p = 0
⊢ eval₂ (Ideal.quotientMap I f ⋯) (Quot.mk Setoid.r x) (Polynomial.map (Ideal.Quotient.mk (Ideal.comap f I)) p) = 0
tactic: refine ⟨p.map (Ideal.Quotient.mk _), p_monic.map _, ?_⟩
state_before: case mk.intro.intro
R : Type u_1
A : Type u_2
B : Type u_3
S : Type u_4
T : Type u_5
inst✝⁸ : CommRing R
inst✝⁷ : CommRing A
inst✝⁶ : Ring B
inst✝⁵ : CommRing S
inst✝⁴ : CommRing T
inst✝³ : Algebra A B
inst✝² : Algebra R B
f : R →+* S
g : S →+* T
inst✝¹ : Algebra R A
inst✝ : IsScalarTower R A B
I : Ideal S
hf : f.IsIntegral
x✝ : S ⧸ I
x : S
p : R[X]
p_monic : p.Monic
hpx : eval₂ f x p = 0
⊢ eval₂ (Ideal.quotientMap I f ⋯) (Quot.mk Setoid.r x) (Polynomial.map (Ideal.Quotient.mk (Ideal.comap f I)) p) = 0
state_after: no goals
tactic: simpa only [hom_eval₂, eval₂_map] using congr_arg (Ideal.Quotient.mk I) hpx