Theorem: isIntegral_trans
File: Mathlib/RingTheory/IntegralClosure.lean

tactic: rcases hx with ⟨p, pmonic, hp⟩
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
inst✝ : Algebra.IsIntegral R A
x : B
hx : IsIntegral A x
⊢ IsIntegral R x
state_after: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
⊢ IsIntegral R x

tactic: let S := adjoin R (p.coeffs : Set A)
state_before: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
⊢ IsIntegral R x
state_after: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
⊢ IsIntegral R x

tactic: have : Module.Finite R S := ⟨(Subalgebra.toSubmodule S).fg_top.mpr <|
  fg_adjoin_of_finite p.coeffs.finite_toSet fun a _ ↦ Algebra.IsIntegral.isIntegral a⟩
state_before: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
⊢ IsIntegral R x
state_after: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this : Module.Finite R ↥S
⊢ IsIntegral R x

tactic: let p' : S[X] := p.toSubring S.toSubring subset_adjoin
state_before: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this : Module.Finite R ↥S
⊢ IsIntegral R x
state_after: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
⊢ IsIntegral R x

tactic: have hSx : IsIntegral S x := ⟨p', (p.monic_toSubring _ _).mpr pmonic, by
  rw [IsScalarTower.algebraMap_eq S A B, ← eval₂_map]
  convert hp; apply p.map_toSubring S.toSubring⟩
state_before: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
⊢ IsIntegral R x
state_after: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
⊢ IsIntegral R x

tactic: let Sx := Subalgebra.toSubmodule (adjoin S {x})
state_before: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
⊢ IsIntegral R x
state_after: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
Sx : Submodule (↥S) B := Subalgebra.toSubmodule (adjoin ↥S {x})
⊢ IsIntegral R x

tactic: let MSx : Module S Sx := SMulMemClass.toModule _
state_before: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
Sx : Submodule (↥S) B := Subalgebra.toSubmodule (adjoin ↥S {x})
⊢ IsIntegral R x
state_after: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
Sx : Submodule (↥S) B := Subalgebra.toSubmodule (adjoin ↥S {x})
MSx : Module ↥S ↥Sx := SMulMemClass.toModule Sx
⊢ IsIntegral R x

tactic: have : Module.Finite S Sx := ⟨(Submodule.fg_top _).mpr hSx.fg_adjoin_singleton⟩
state_before: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
Sx : Submodule (↥S) B := Subalgebra.toSubmodule (adjoin ↥S {x})
MSx : Module ↥S ↥Sx := SMulMemClass.toModule Sx
⊢ IsIntegral R x
state_after: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this✝ : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
Sx : Submodule (↥S) B := Subalgebra.toSubmodule (adjoin ↥S {x})
MSx : Module ↥S ↥Sx := SMulMemClass.toModule Sx
this : Module.Finite ↥S ↥Sx
⊢ IsIntegral R x

tactic: refine .of_mem_of_fg ((adjoin S {x}).restrictScalars R) ?_ _
  ((Subalgebra.mem_restrictScalars R).mpr <| subset_adjoin rfl)
state_before: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this✝ : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
Sx : Submodule (↥S) B := Subalgebra.toSubmodule (adjoin ↥S {x})
MSx : Module ↥S ↥Sx := SMulMemClass.toModule Sx
this : Module.Finite ↥S ↥Sx
⊢ IsIntegral R x
state_after: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this✝ : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
Sx : Submodule (↥S) B := Subalgebra.toSubmodule (adjoin ↥S {x})
MSx : Module ↥S ↥Sx := SMulMemClass.toModule Sx
this : Module.Finite ↥S ↥Sx
⊢ (Subalgebra.toSubmodule (Subalgebra.restrictScalars R (adjoin ↥S {x}))).FG

tactic: rw [← Submodule.fg_top, ← Module.finite_def]
state_before: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this✝ : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
Sx : Submodule (↥S) B := Subalgebra.toSubmodule (adjoin ↥S {x})
MSx : Module ↥S ↥Sx := SMulMemClass.toModule Sx
this : Module.Finite ↥S ↥Sx
⊢ (Subalgebra.toSubmodule (Subalgebra.restrictScalars R (adjoin ↥S {x}))).FG
state_after: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this✝ : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
Sx : Submodule (↥S) B := Subalgebra.toSubmodule (adjoin ↥S {x})
MSx : Module ↥S ↥Sx := SMulMemClass.toModule Sx
this : Module.Finite ↥S ↥Sx
⊢ Module.Finite R ↥(Subalgebra.toSubmodule (Subalgebra.restrictScalars R (adjoin ↥S {x})))

tactic: letI : SMul S Sx := { MSx with }
state_before: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this✝ : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
Sx : Submodule (↥S) B := Subalgebra.toSubmodule (adjoin ↥S {x})
MSx : Module ↥S ↥Sx := SMulMemClass.toModule Sx
this : Module.Finite ↥S ↥Sx
⊢ Module.Finite R ↥(Subalgebra.toSubmodule (Subalgebra.restrictScalars R (adjoin ↥S {x})))
state_after: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this✝¹ : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
Sx : Submodule (↥S) B := Subalgebra.toSubmodule (adjoin ↥S {x})
MSx : Module ↥S ↥Sx := SMulMemClass.toModule Sx
this✝ : Module.Finite ↥S ↥Sx
this : SMul ↥S ↥Sx := { smul := SMul.smul }
⊢ Module.Finite R ↥(Subalgebra.toSubmodule (Subalgebra.restrictScalars R (adjoin ↥S {x})))

tactic: have : IsScalarTower R S Sx :=
  Submodule.isScalarTower Sx
state_before: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this✝¹ : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
Sx : Submodule (↥S) B := Subalgebra.toSubmodule (adjoin ↥S {x})
MSx : Module ↥S ↥Sx := SMulMemClass.toModule Sx
this✝ : Module.Finite ↥S ↥Sx
this : SMul ↥S ↥Sx := { smul := SMul.smul }
⊢ Module.Finite R ↥(Subalgebra.toSubmodule (Subalgebra.restrictScalars R (adjoin ↥S {x})))
state_after: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this✝² : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
Sx : Submodule (↥S) B := Subalgebra.toSubmodule (adjoin ↥S {x})
MSx : Module ↥S ↥Sx := SMulMemClass.toModule Sx
this✝¹ : Module.Finite ↥S ↥Sx
this✝ : SMul ↥S ↥Sx := { smul := SMul.smul }
this : IsScalarTower R ↥S ↥Sx
⊢ Module.Finite R ↥(Subalgebra.toSubmodule (Subalgebra.restrictScalars R (adjoin ↥S {x})))

tactic: exact Module.Finite.trans S Sx
state_before: case 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this✝² : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
hSx : IsIntegral (↥S) x
Sx : Submodule (↥S) B := Subalgebra.toSubmodule (adjoin ↥S {x})
MSx : Module ↥S ↥Sx := SMulMemClass.toModule Sx
this✝¹ : Module.Finite ↥S ↥Sx
this✝ : SMul ↥S ↥Sx := { smul := SMul.smul }
this : IsScalarTower R ↥S ↥Sx
⊢ Module.Finite R ↥(Subalgebra.toSubmodule (Subalgebra.restrictScalars R (adjoin ↥S {x})))
state_after: no goals

tactic: rw [IsScalarTower.algebraMap_eq S A B, ← eval₂_map]
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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
⊢ eval₂ (algebraMap (↥S) B) x p' = 0
state_after: 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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
⊢ eval₂ (algebraMap A B) x (Polynomial.map (algebraMap (↥S) A) p') = 0

tactic: convert hp
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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
⊢ eval₂ (algebraMap A B) x (Polynomial.map (algebraMap (↥S) A) p') = 0
state_after: case h.e'_2.h.e'_7
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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
⊢ Polynomial.map (algebraMap (↥S) A) p' = p

tactic: apply p.map_toSubring S.toSubring
state_before: case h.e'_2.h.e'_7
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
inst✝ : Algebra.IsIntegral R A
x : B
p : A[X]
pmonic : p.Monic
hp : eval₂ (algebraMap A B) x p = 0
S : Subalgebra R A := adjoin R ↑p.coeffs
this : Module.Finite R ↥S
p' : (↥S)[X] := p.toSubring S.toSubring ⋯
⊢ Polynomial.map (algebraMap (↥S) A) p' = p
state_after: no goals