Theorem: PowerBasis.toMatrix_isIntegral
File: Mathlib/RingTheory/Adjoin/PowerBasis.lean

Proof steps:
state_before: K : Type u_1
S : Type u_2
inst✝¹⁰ : Field K
inst✝⁹ : CommRing S
inst✝⁸ : Algebra K S
R : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R K
inst✝⁴ : IsScalarTower R K S
A : Type u_4
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : Algebra S A
inst✝ : IsScalarTower R S A
B✝ : PowerBasis S A
hB✝ : IsIntegral R B✝.gen
B B' : PowerBasis K S
P : R[X]
h : (aeval B.gen) P = B'.gen
hB : IsIntegral R B.gen
hmin : minpoly K B.gen = Polynomial.map (algebraMap R K) (minpoly R B.gen)
⊢ ∀ (i : Fin B.dim) (j : Fin B'.dim), IsIntegral R (B.basis.toMatrix (⇑B'.basis) i j)
state_after: K : Type u_1
S : Type u_2
inst✝¹⁰ : Field K
inst✝⁹ : CommRing S
inst✝⁸ : Algebra K S
R : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R K
inst✝⁴ : IsScalarTower R K S
A : Type u_4
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : Algebra S A
inst✝ : IsScalarTower R S A
B✝ : PowerBasis S A
hB✝ : IsIntegral R B✝.gen
B B' : PowerBasis K S
P : R[X]
h : (aeval B.gen) P = B'.gen
hB : IsIntegral R B.gen
hmin : minpoly K B.gen = Polynomial.map (algebraMap R K) (minpoly R B.gen)
i : Fin B.dim
j : Fin B'.dim
⊢ IsIntegral R (B.basis.toMatrix (⇑B'.basis) i j)
tactic: intro i j
state_before: K : Type u_1
S : Type u_2
inst✝¹⁰ : Field K
inst✝⁹ : CommRing S
inst✝⁸ : Algebra K S
R : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R K
inst✝⁴ : IsScalarTower R K S
A : Type u_4
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : Algebra S A
inst✝ : IsScalarTower R S A
B✝ : PowerBasis S A
hB✝ : IsIntegral R B✝.gen
B B' : PowerBasis K S
P : R[X]
h : (aeval B.gen) P = B'.gen
hB : IsIntegral R B.gen
hmin : minpoly K B.gen = Polynomial.map (algebraMap R K) (minpoly R B.gen)
i : Fin B.dim
j : Fin B'.dim
⊢ IsIntegral R (B.basis.toMatrix (⇑B'.basis) i j)
state_after: K : Type u_1
S : Type u_2
inst✝¹⁰ : Field K
inst✝⁹ : CommRing S
inst✝⁸ : Algebra K S
R : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R K
inst✝⁴ : IsScalarTower R K S
A : Type u_4
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : Algebra S A
inst✝ : IsScalarTower R S A
B✝ : PowerBasis S A
hB✝ : IsIntegral R B✝.gen
B B' : PowerBasis K S
P : R[X]
h : (aeval B.gen) P = B'.gen
hB : IsIntegral R B.gen
hmin : minpoly K B.gen = Polynomial.map (algebraMap R K) (minpoly R B.gen)
i : Fin B.dim
j : Fin B'.dim
⊢ IsIntegral R ((B.basis.repr ((fun i => B'.gen ^ ↑i) j)) i)
tactic: rw [B.basis.toMatrix_apply, B'.coe_basis]
state_before: K : Type u_1
S : Type u_2
inst✝¹⁰ : Field K
inst✝⁹ : CommRing S
inst✝⁸ : Algebra K S
R : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R K
inst✝⁴ : IsScalarTower R K S
A : Type u_4
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : Algebra S A
inst✝ : IsScalarTower R S A
B✝ : PowerBasis S A
hB✝ : IsIntegral R B✝.gen
B B' : PowerBasis K S
P : R[X]
h : (aeval B.gen) P = B'.gen
hB : IsIntegral R B.gen
hmin : minpoly K B.gen = Polynomial.map (algebraMap R K) (minpoly R B.gen)
i : Fin B.dim
j : Fin B'.dim
⊢ IsIntegral R ((B.basis.repr ((fun i => B'.gen ^ ↑i) j)) i)
state_after: K : Type u_1
S : Type u_2
inst✝¹⁰ : Field K
inst✝⁹ : CommRing S
inst✝⁸ : Algebra K S
R : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R K
inst✝⁴ : IsScalarTower R K S
A : Type u_4
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : Algebra S A
inst✝ : IsScalarTower R S A
B✝ : PowerBasis S A
hB✝ : IsIntegral R B✝.gen
B B' : PowerBasis K S
P : R[X]
h : (aeval B.gen) P = B'.gen
hB : IsIntegral R B.gen
hmin : minpoly K B.gen = Polynomial.map (algebraMap R K) (minpoly R B.gen)
i✝ : Fin B.dim
j : Fin B'.dim
i : Fin B.dim
⊢ IsIntegral R ((B.basis.repr B'.gen) i)
tactic: refine repr_pow_isIntegral hB (fun i => ?_) hmin _ _
state_before: K : Type u_1
S : Type u_2
inst✝¹⁰ : Field K
inst✝⁹ : CommRing S
inst✝⁸ : Algebra K S
R : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R K
inst✝⁴ : IsScalarTower R K S
A : Type u_4
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : Algebra S A
inst✝ : IsScalarTower R S A
B✝ : PowerBasis S A
hB✝ : IsIntegral R B✝.gen
B B' : PowerBasis K S
P : R[X]
h : (aeval B.gen) P = B'.gen
hB : IsIntegral R B.gen
hmin : minpoly K B.gen = Polynomial.map (algebraMap R K) (minpoly R B.gen)
i✝ : Fin B.dim
j : Fin B'.dim
i : Fin B.dim
⊢ IsIntegral R ((B.basis.repr B'.gen) i)
state_after: K : Type u_1
S : Type u_2
inst✝¹⁰ : Field K
inst✝⁹ : CommRing S
inst✝⁸ : Algebra K S
R : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R K
inst✝⁴ : IsScalarTower R K S
A : Type u_4
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : Algebra S A
inst✝ : IsScalarTower R S A
B✝ : PowerBasis S A
hB✝ : IsIntegral R B✝.gen
B B' : PowerBasis K S
P : R[X]
h : (aeval B.gen) P = B'.gen
hB : IsIntegral R B.gen
hmin : minpoly K B.gen = Polynomial.map (algebraMap R K) (minpoly R B.gen)
i✝ : Fin B.dim
j : Fin B'.dim
i : Fin B.dim
⊢ IsIntegral R (∑ k ∈ Finset.range (P.natDegree + 1), (B.basis.repr (P.coeff k • B.gen ^ k)) i)
tactic: rw [← h, aeval_eq_sum_range, map_sum, Finset.sum_apply']
state_before: K : Type u_1
S : Type u_2
inst✝¹⁰ : Field K
inst✝⁹ : CommRing S
inst✝⁸ : Algebra K S
R : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R K
inst✝⁴ : IsScalarTower R K S
A : Type u_4
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : Algebra S A
inst✝ : IsScalarTower R S A
B✝ : PowerBasis S A
hB✝ : IsIntegral R B✝.gen
B B' : PowerBasis K S
P : R[X]
h : (aeval B.gen) P = B'.gen
hB : IsIntegral R B.gen
hmin : minpoly K B.gen = Polynomial.map (algebraMap R K) (minpoly R B.gen)
i✝ : Fin B.dim
j : Fin B'.dim
i : Fin B.dim
⊢ IsIntegral R (∑ k ∈ Finset.range (P.natDegree + 1), (B.basis.repr (P.coeff k • B.gen ^ k)) i)
state_after: K : Type u_1
S : Type u_2
inst✝¹⁰ : Field K
inst✝⁹ : CommRing S
inst✝⁸ : Algebra K S
R : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R K
inst✝⁴ : IsScalarTower R K S
A : Type u_4
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : Algebra S A
inst✝ : IsScalarTower R S A
B✝ : PowerBasis S A
hB✝ : IsIntegral R B✝.gen
B B' : PowerBasis K S
P : R[X]
h : (aeval B.gen) P = B'.gen
hB : IsIntegral R B.gen
hmin : minpoly K B.gen = Polynomial.map (algebraMap R K) (minpoly R B.gen)
i✝ : Fin B.dim
j : Fin B'.dim
i : Fin B.dim
n : ℕ
x✝ : n ∈ Finset.range (P.natDegree + 1)
⊢ IsIntegral R ((B.basis.repr (P.coeff n • B.gen ^ n)) i)
tactic: refine IsIntegral.sum _ fun n _ => ?_
state_before: K : Type u_1
S : Type u_2
inst✝¹⁰ : Field K
inst✝⁹ : CommRing S
inst✝⁸ : Algebra K S
R : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R K
inst✝⁴ : IsScalarTower R K S
A : Type u_4
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : Algebra S A
inst✝ : IsScalarTower R S A
B✝ : PowerBasis S A
hB✝ : IsIntegral R B✝.gen
B B' : PowerBasis K S
P : R[X]
h : (aeval B.gen) P = B'.gen
hB : IsIntegral R B.gen
hmin : minpoly K B.gen = Polynomial.map (algebraMap R K) (minpoly R B.gen)
i✝ : Fin B.dim
j : Fin B'.dim
i : Fin B.dim
n : ℕ
x✝ : n ∈ Finset.range (P.natDegree + 1)
⊢ IsIntegral R ((B.basis.repr (P.coeff n • B.gen ^ n)) i)
state_after: K : Type u_1
S : Type u_2
inst✝¹⁰ : Field K
inst✝⁹ : CommRing S
inst✝⁸ : Algebra K S
R : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R K
inst✝⁴ : IsScalarTower R K S
A : Type u_4
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : Algebra S A
inst✝ : IsScalarTower R S A
B✝ : PowerBasis S A
hB✝ : IsIntegral R B✝.gen
B B' : PowerBasis K S
P : R[X]
h : (aeval B.gen) P = B'.gen
hB : IsIntegral R B.gen
hmin : minpoly K B.gen = Polynomial.map (algebraMap R K) (minpoly R B.gen)
i✝ : Fin B.dim
j : Fin B'.dim
i : Fin B.dim
n : ℕ
x✝ : n ∈ Finset.range (P.natDegree + 1)
⊢ IsIntegral R ((P.coeff n • B.basis.repr (B.gen ^ n)) i)
tactic: rw [Algebra.smul_def, IsScalarTower.algebraMap_apply R K S, ← Algebra.smul_def,
    LinearEquiv.map_smul, algebraMap_smul]
state_before: K : Type u_1
S : Type u_2
inst✝¹⁰ : Field K
inst✝⁹ : CommRing S
inst✝⁸ : Algebra K S
R : Type u_3
inst✝⁷ : CommRing R
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R K
inst✝⁴ : IsScalarTower R K S
A : Type u_4
inst✝³ : CommRing A
inst✝² : Algebra R A
inst✝¹ : Algebra S A
inst✝ : IsScalarTower R S A
B✝ : PowerBasis S A
hB✝ : IsIntegral R B✝.gen
B B' : PowerBasis K S
P : R[X]
h : (aeval B.gen) P = B'.gen
hB : IsIntegral R B.gen
hmin : minpoly K B.gen = Polynomial.map (algebraMap R K) (minpoly R B.gen)
i✝ : Fin B.dim
j : Fin B'.dim
i : Fin B.dim
n : ℕ
x✝ : n ∈ Finset.range (P.natDegree + 1)
⊢ IsIntegral R ((P.coeff n • B.basis.repr (B.gen ^ n)) i)
state_after: no goals
tactic: exact (repr_gen_pow_isIntegral hB hmin _ _).smul _