Theorem: Algebra.isIntegral_norm
File: Mathlib/RingTheory/Norm.lean

tactic: have hx' : IsIntegral K x := hx.tower_top
state_before: R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
⊢ IsIntegral R ((norm K) x)
state_after: R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
⊢ IsIntegral R ((norm K) x)

tactic: rw [← isIntegral_algebraMap_iff (algebraMap K (AlgebraicClosure L)).injective, norm_eq_prod_roots]
state_before: R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
⊢ IsIntegral R ((norm K) x)
state_after: R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
⊢ IsIntegral R (((minpoly K x).aroots (AlgebraicClosure L)).prod ^ finrank (↥K⟮x⟯) L)

case hF
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
⊢ Splits (algebraMap K (AlgebraicClosure L)) (minpoly K x)

tactic: refine (IsIntegral.multiset_prod fun y hy => ?_).pow _
state_before: R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
⊢ IsIntegral R (((minpoly K x).aroots (AlgebraicClosure L)).prod ^ finrank (↥K⟮x⟯) L)
state_after: R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
y : AlgebraicClosure L
hy : y ∈ (minpoly K x).aroots (AlgebraicClosure L)
⊢ IsIntegral R y

tactic: rw [mem_roots_map (minpoly.ne_zero hx')] at hy
state_before: R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
y : AlgebraicClosure L
hy : y ∈ (minpoly K x).aroots (AlgebraicClosure L)
⊢ IsIntegral R y
state_after: R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
y : AlgebraicClosure L
hy : eval₂ (algebraMap K (AlgebraicClosure L)) y (minpoly K x) = 0
⊢ IsIntegral R y

tactic: use minpoly R x, minpoly.monic hx
state_before: R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
y : AlgebraicClosure L
hy : eval₂ (algebraMap K (AlgebraicClosure L)) y (minpoly K x) = 0
⊢ IsIntegral R y
state_after: case right
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
y : AlgebraicClosure L
hy : eval₂ (algebraMap K (AlgebraicClosure L)) y (minpoly K x) = 0
⊢ eval₂ (algebraMap R (AlgebraicClosure L)) y (minpoly R x) = 0

tactic: rw [← aeval_def] at hy ⊢
state_before: case right
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
y : AlgebraicClosure L
hy : eval₂ (algebraMap K (AlgebraicClosure L)) y (minpoly K x) = 0
⊢ eval₂ (algebraMap R (AlgebraicClosure L)) y (minpoly R x) = 0
state_after: case right
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
y : AlgebraicClosure L
hy : (aeval y) (minpoly K x) = 0
⊢ (aeval y) (minpoly R x) = 0

tactic: exact minpoly.aeval_of_isScalarTower R x y hy
state_before: case right
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
y : AlgebraicClosure L
hy : (aeval y) (minpoly K x) = 0
⊢ (aeval y) (minpoly R x) = 0
state_after: no goals

tactic: apply IsAlgClosed.splits_codomain
state_before: case hF
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : Ring S
inst✝¹² : Algebra R S
K : Type u_4
L : Type u_5
F : Type u_6
inst✝¹¹ : Field K
inst✝¹⁰ : Field L
inst✝⁹ : Field F
inst✝⁸ : Algebra K L
inst✝⁷ : Algebra K F
ι : Type w
E : Type u_7
inst✝⁶ : Field E
inst✝⁵ : Algebra K E
inst✝⁴ : Algebra R L
inst✝³ : Algebra R K
inst✝² : IsScalarTower R K L
inst✝¹ : IsSeparable K L
inst✝ : FiniteDimensional K L
x : L
hx : IsIntegral R x
hx' : IsIntegral K x
⊢ Splits (algebraMap K (AlgebraicClosure L)) (minpoly K x)
state_after: no goals