[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
h : ¬∃ s, Nonempty (Basis { x // x ∈ s } R S)
⊢ trace R S = 0
[PROOFSTEP]
ext s
[GOAL]
case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
h : ¬∃ s, Nonempty (Basis { x // x ∈ s } R S)
s : S
⊢ ↑(trace R S) s = ↑0 s
[PROOFSTEP]
simp [trace_apply, LinearMap.trace, h]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : CommRing S
inst✝⁷ : CommRing T
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Algebra K L
ι κ : Type w
inst✝¹ : Fintype ι
b✝ : Basis ι R S
inst✝ : DecidableEq ι
b : Basis ι R S
s : S
⊢ ↑(trace R S) s = Matrix.trace (↑(leftMulMatrix b) s)
[PROOFSTEP]
rw [trace_apply, LinearMap.trace_eq_matrix_trace _ b, ← toMatrix_lmul_eq]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : CommRing S
inst✝⁷ : CommRing T
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Algebra K L
ι κ : Type w
inst✝¹ : Fintype ι
b✝ : Basis ι R S
inst✝ : DecidableEq ι
b : Basis ι R S
s : S
⊢ Matrix.trace (↑(toMatrix b b) (↑(lmul R S) s)) = Matrix.trace (↑(toMatrix b b) (mulLeft R s))
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
⊢ ↑(trace R S) (↑(algebraMap R S) x) = Fintype.card ι • x
[PROOFSTEP]
haveI := Classical.decEq ι
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
this : DecidableEq ι
⊢ ↑(trace R S) (↑(algebraMap R S) x) = Fintype.card ι • x
[PROOFSTEP]
rw [trace_apply, LinearMap.trace_eq_matrix_trace R b, Matrix.trace]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
this : DecidableEq ι
⊢ ∑ i : ι, Matrix.diag (↑(toMatrix b b) (↑(lmul R S) (↑(algebraMap R S) x))) i = Fintype.card ι • x
[PROOFSTEP]
convert Finset.sum_const x
[GOAL]
case h.e'_2.a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : R
this : DecidableEq ι
x✝ : ι
a✝ : x✝ ∈ Finset.univ
⊢ Matrix.diag (↑(toMatrix b b) (↑(lmul R S) (↑(algebraMap R S) x))) x✝ = x
[PROOFSTEP]
simp only [AlgHom.commutes, toMatrix_algebraMap, diag_apply, Matrix.scalar_apply_eq]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : K
⊢ ↑(trace K L) (↑(algebraMap K L) x) = finrank K L • x
[PROOFSTEP]
by_cases H : ∃ s : Finset L, Nonempty (Basis s K L)
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : K
H : ∃ s, Nonempty (Basis { x // x ∈ s } K L)
⊢ ↑(trace K L) (↑(algebraMap K L) x) = finrank K L • x
[PROOFSTEP]
rw [trace_algebraMap_of_basis H.choose_spec.some, finrank_eq_card_basis H.choose_spec.some]
[GOAL]
case neg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
x : K
H : ¬∃ s, Nonempty (Basis { x // x ∈ s } K L)
⊢ ↑(trace K L) (↑(algebraMap K L) x) = finrank K L • x
[PROOFSTEP]
simp [trace_eq_zero_of_not_exists_basis K H, finrank_eq_zero_of_not_exists_basis_finset H]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_6
κ : Type u_7
inst✝¹ : Finite ι
inst✝ : Finite κ
b : Basis ι R S
c : Basis κ S T
x : T
⊢ ↑(trace R S) (↑(trace S T) x) = ↑(trace R T) x
[PROOFSTEP]
haveI := Classical.decEq ι
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_6
κ : Type u_7
inst✝¹ : Finite ι
inst✝ : Finite κ
b : Basis ι R S
c : Basis κ S T
x : T
this : DecidableEq ι
⊢ ↑(trace R S) (↑(trace S T) x) = ↑(trace R T) x
[PROOFSTEP]
haveI := Classical.decEq κ
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_6
κ : Type u_7
inst✝¹ : Finite ι
inst✝ : Finite κ
b : Basis ι R S
c : Basis κ S T
x : T
this✝ : DecidableEq ι
this : DecidableEq κ
⊢ ↑(trace R S) (↑(trace S T) x) = ↑(trace R T) x
[PROOFSTEP]
cases nonempty_fintype ι
[GOAL]
case intro
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_6
κ : Type u_7
inst✝¹ : Finite ι
inst✝ : Finite κ
b : Basis ι R S
c : Basis κ S T
x : T
this✝ : DecidableEq ι
this : DecidableEq κ
val✝ : Fintype ι
⊢ ↑(trace R S) (↑(trace S T) x) = ↑(trace R T) x
[PROOFSTEP]
cases nonempty_fintype κ
[GOAL]
case intro.intro
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_6
κ : Type u_7
inst✝¹ : Finite ι
inst✝ : Finite κ
b : Basis ι R S
c : Basis κ S T
x : T
this✝ : DecidableEq ι
this : DecidableEq κ
val✝¹ : Fintype ι
val✝ : Fintype κ
⊢ ↑(trace R S) (↑(trace S T) x) = ↑(trace R T) x
[PROOFSTEP]
rw [trace_eq_matrix_trace (b.smul c), trace_eq_matrix_trace b, trace_eq_matrix_trace c, Matrix.trace, Matrix.trace,
  Matrix.trace, ← Finset.univ_product_univ, Finset.sum_product]
[GOAL]
case intro.intro
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_6
κ : Type u_7
inst✝¹ : Finite ι
inst✝ : Finite κ
b : Basis ι R S
c : Basis κ S T
x : T
this✝ : DecidableEq ι
this : DecidableEq κ
val✝¹ : Fintype ι
val✝ : Fintype κ
⊢ ∑ i : ι, Matrix.diag (↑(leftMulMatrix b) (∑ i : κ, Matrix.diag (↑(leftMulMatrix c) x) i)) i =
    ∑ x_1 : ι, ∑ y : κ, Matrix.diag (↑(leftMulMatrix (Basis.smul b c)) x) (x_1, y)
[PROOFSTEP]
refine' Finset.sum_congr rfl fun i _ => _
[GOAL]
case intro.intro
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_6
κ : Type u_7
inst✝¹ : Finite ι
inst✝ : Finite κ
b : Basis ι R S
c : Basis κ S T
x : T
this✝ : DecidableEq ι
this : DecidableEq κ
val✝¹ : Fintype ι
val✝ : Fintype κ
i : ι
x✝ : i ∈ Finset.univ
⊢ Matrix.diag (↑(leftMulMatrix b) (∑ i : κ, Matrix.diag (↑(leftMulMatrix c) x) i)) i =
    ∑ y : κ, Matrix.diag (↑(leftMulMatrix (Basis.smul b c)) x) (i, y)
[PROOFSTEP]
simp only [AlgHom.map_sum, smul_leftMulMatrix, Finset.sum_apply, Matrix.diag]
  -- Porting note: the `rw` was inside `simp only`, but it doesn't work anymore.
[GOAL]
case intro.intro
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_6
κ : Type u_7
inst✝¹ : Finite ι
inst✝ : Finite κ
b : Basis ι R S
c : Basis κ S T
x : T
this✝ : DecidableEq ι
this : DecidableEq κ
val✝¹ : Fintype ι
val✝ : Fintype κ
i : ι
x✝ : i ∈ Finset.univ
⊢ Finset.sum Finset.univ (fun x_1 => ↑(leftMulMatrix b) (↑(leftMulMatrix c) x x_1 x_1)) i i =
    ∑ x_1 : κ, ↑(leftMulMatrix b) (↑(leftMulMatrix c) x x_1 x_1) i i
[PROOFSTEP]
rw [Finset.sum_apply i (Finset.univ : Finset κ) fun y => leftMulMatrix b (leftMulMatrix c x y y)]
[GOAL]
case intro.intro
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_6
κ : Type u_7
inst✝¹ : Finite ι
inst✝ : Finite κ
b : Basis ι R S
c : Basis κ S T
x : T
this✝ : DecidableEq ι
this : DecidableEq κ
val✝¹ : Fintype ι
val✝ : Fintype κ
i : ι
x✝ : i ∈ Finset.univ
⊢ Finset.sum Finset.univ (fun c_1 => ↑(leftMulMatrix b) (↑(leftMulMatrix c) x c_1 c_1) i) i =
    ∑ x_1 : κ, ↑(leftMulMatrix b) (↑(leftMulMatrix c) x x_1 x_1) i i
[PROOFSTEP]
apply Finset.sum_apply
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_6
κ : Type u_7
inst✝¹ : Finite ι
inst✝ : Fintype κ
b : Basis ι R S
c : Basis κ S T
⊢ comp (trace R S) (↑R (trace S T)) = trace R T
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_6
κ : Type u_7
inst✝¹ : Finite ι
inst✝ : Fintype κ
b : Basis ι R S
c : Basis κ S T
x✝ : T
⊢ ↑(comp (trace R S) (↑R (trace S T))) x✝ = ↑(trace R T) x✝
[PROOFSTEP]
rw [LinearMap.comp_apply, LinearMap.restrictScalars_apply, trace_trace_of_basis b c]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹³ : CommRing R
inst✝¹² : CommRing S
inst✝¹¹ : CommRing T
inst✝¹⁰ : Algebra R S
inst✝⁹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Algebra K L
ι κ : Type w
inst✝⁵ : Fintype ι
b : Basis ι R S
inst✝⁴ : Algebra K T
inst✝³ : Algebra L T
inst✝² : IsScalarTower K L T
inst✝¹ : FiniteDimensional K L
inst✝ : FiniteDimensional L T
⊢ comp (trace K L) (↑K (trace L T)) = trace K T
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹³ : CommRing R
inst✝¹² : CommRing S
inst✝¹¹ : CommRing T
inst✝¹⁰ : Algebra R S
inst✝⁹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁸ : Field K
inst✝⁷ : Field L
inst✝⁶ : Algebra K L
ι κ : Type w
inst✝⁵ : Fintype ι
b : Basis ι R S
inst✝⁴ : Algebra K T
inst✝³ : Algebra L T
inst✝² : IsScalarTower K L T
inst✝¹ : FiniteDimensional K L
inst✝ : FiniteDimensional L T
x✝ : T
⊢ ↑(comp (trace K L) (↑K (trace L T))) x✝ = ↑(trace K T) x✝
[PROOFSTEP]
rw [LinearMap.comp_apply, LinearMap.restrictScalars_apply, trace_trace]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
b : Basis ι R S
inst✝³ : Module.Free R S
inst✝² : Module.Free R T
inst✝¹ : Module.Finite R S
inst✝ : Module.Finite R T
x : S × T
⊢ ↑(trace R (S × T)) x = ↑(trace R S) x.fst + ↑(trace R T) x.snd
[PROOFSTEP]
nontriviality R
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
b : Basis ι R S
inst✝³ : Module.Free R S
inst✝² : Module.Free R T
inst✝¹ : Module.Finite R S
inst✝ : Module.Finite R T
x : S × T
✝ : Nontrivial R
⊢ ↑(trace R (S × T)) x = ↑(trace R S) x.fst + ↑(trace R T) x.snd
[PROOFSTEP]
let f := (lmul R S).toLinearMap.prodMap (lmul R T).toLinearMap
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
b : Basis ι R S
inst✝³ : Module.Free R S
inst✝² : Module.Free R T
inst✝¹ : Module.Finite R S
inst✝ : Module.Finite R T
x : S × T
✝ : Nontrivial R
f : S × T →ₗ[R] Module.End R S × Module.End R T :=
  prodMap (AlgHom.toLinearMap (lmul R S)) (AlgHom.toLinearMap (lmul R T))
⊢ ↑(trace R (S × T)) x = ↑(trace R S) x.fst + ↑(trace R T) x.snd
[PROOFSTEP]
have : (lmul R (S × T)).toLinearMap = (prodMapLinear R S T S T R).comp f := LinearMap.ext₂ Prod.mul_def
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
b : Basis ι R S
inst✝³ : Module.Free R S
inst✝² : Module.Free R T
inst✝¹ : Module.Finite R S
inst✝ : Module.Finite R T
x : S × T
✝ : Nontrivial R
f : S × T →ₗ[R] Module.End R S × Module.End R T :=
  prodMap (AlgHom.toLinearMap (lmul R S)) (AlgHom.toLinearMap (lmul R T))
this : AlgHom.toLinearMap (lmul R (S × T)) = comp (prodMapLinear R S T S T R) f
⊢ ↑(trace R (S × T)) x = ↑(trace R S) x.fst + ↑(trace R T) x.snd
[PROOFSTEP]
simp_rw [trace, this]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
b : Basis ι R S
inst✝³ : Module.Free R S
inst✝² : Module.Free R T
inst✝¹ : Module.Finite R S
inst✝ : Module.Finite R T
x : S × T
✝ : Nontrivial R
f : S × T →ₗ[R] Module.End R S × Module.End R T :=
  prodMap (AlgHom.toLinearMap (lmul R S)) (AlgHom.toLinearMap (lmul R T))
this : AlgHom.toLinearMap (lmul R (S × T)) = comp (prodMapLinear R S T S T R) f
⊢ ↑(comp (LinearMap.trace R (S × T))
          (comp (prodMapLinear R S T S T R) (prodMap (AlgHom.toLinearMap (lmul R S)) (AlgHom.toLinearMap (lmul R T)))))
      x =
    ↑(comp (LinearMap.trace R S) (AlgHom.toLinearMap (lmul R S))) x.fst +
      ↑(comp (LinearMap.trace R T) (AlgHom.toLinearMap (lmul R T))) x.snd
[PROOFSTEP]
exact trace_prodMap' _ _
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
b : Basis ι R S
inst✝³ : Module.Free R S
inst✝² : Module.Free R T
inst✝¹ : Module.Finite R S
inst✝ : Module.Finite R T
p : S × T
⊢ ↑(trace R (S × T)) p = ↑(coprod (trace R S) (trace R T)) p
[PROOFSTEP]
rw [coprod_apply, trace_prod_apply]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁹ : CommRing R
inst✝⁸ : CommRing S
inst✝⁷ : CommRing T
inst✝⁶ : Algebra R S
inst✝⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁴ : Field K
inst✝³ : Field L
inst✝² : Algebra K L
ι κ : Type w
inst✝¹ : Fintype ι
b : Basis ι R S
inst✝ : DecidableEq ι
i j : ι
⊢ ↑(BilinForm.toMatrix b) (traceForm R S) i j = ↑(trace R S) (↑b i * ↑b j)
[PROOFSTEP]
rw [BilinForm.toMatrix_apply, traceForm_apply]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
h : PowerBasis R S
⊢ ↑(BilinForm.toMatrix h.basis) (traceForm R S) = ↑of fun i j => ↑(trace R S) (h.gen ^ (↑i + ↑j))
[PROOFSTEP]
ext
[GOAL]
case a.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : CommRing T
inst✝⁵ : Algebra R S
inst✝⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Algebra K L
ι κ : Type w
inst✝ : Fintype ι
b : Basis ι R S
h : PowerBasis R S
i✝ x✝ : Fin h.dim
⊢ ↑(BilinForm.toMatrix h.basis) (traceForm R S) i✝ x✝ = ↑of (fun i j => ↑(trace R S) (h.gen ^ (↑i + ↑j))) i✝ x✝
[PROOFSTEP]
rw [traceForm_toMatrix, of_apply, pow_add, h.basis_eq_pow, h.basis_eq_pow]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
F : Type u_6
inst✝³ : Field F
inst✝² : Algebra K S
inst✝¹ : Algebra K F
inst✝ : Nontrivial S
pb : PowerBasis K S
⊢ ↑(Algebra.trace K S) pb.gen = -nextCoeff (minpoly K pb.gen)
[PROOFSTEP]
have d_pos : 0 < pb.dim := PowerBasis.dim_pos pb
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
F : Type u_6
inst✝³ : Field F
inst✝² : Algebra K S
inst✝¹ : Algebra K F
inst✝ : Nontrivial S
pb : PowerBasis K S
d_pos : 0 < pb.dim
⊢ ↑(Algebra.trace K S) pb.gen = -nextCoeff (minpoly K pb.gen)
[PROOFSTEP]
have d_pos' : 0 < (minpoly K pb.gen).natDegree := by simpa
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
F : Type u_6
inst✝³ : Field F
inst✝² : Algebra K S
inst✝¹ : Algebra K F
inst✝ : Nontrivial S
pb : PowerBasis K S
d_pos : 0 < pb.dim
⊢ 0 < natDegree (minpoly K pb.gen)
[PROOFSTEP]
simpa
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
F : Type u_6
inst✝³ : Field F
inst✝² : Algebra K S
inst✝¹ : Algebra K F
inst✝ : Nontrivial S
pb : PowerBasis K S
d_pos : 0 < pb.dim
d_pos' : 0 < natDegree (minpoly K pb.gen)
⊢ ↑(Algebra.trace K S) pb.gen = -nextCoeff (minpoly K pb.gen)
[PROOFSTEP]
haveI : Nonempty (Fin pb.dim) := ⟨⟨0, d_pos⟩⟩
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
F : Type u_6
inst✝³ : Field F
inst✝² : Algebra K S
inst✝¹ : Algebra K F
inst✝ : Nontrivial S
pb : PowerBasis K S
d_pos : 0 < pb.dim
d_pos' : 0 < natDegree (minpoly K pb.gen)
this : Nonempty (Fin pb.dim)
⊢ ↑(Algebra.trace K S) pb.gen = -nextCoeff (minpoly K pb.gen)
[PROOFSTEP]
rw [trace_eq_matrix_trace pb.basis, trace_eq_neg_charpoly_coeff, charpoly_leftMulMatrix, ← pb.natDegree_minpoly,
  Fintype.card_fin, ← nextCoeff_of_pos_natDegree _ d_pos']
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
F : Type u_6
inst✝³ : Field F
inst✝² : Algebra K S
inst✝¹ : Algebra K F
inst✝ : Nontrivial S
pb : PowerBasis K S
hf : Splits (algebraMap K F) (minpoly K pb.gen)
⊢ ↑(algebraMap K F) (↑(Algebra.trace K S) pb.gen) =
    Multiset.sum (roots (Polynomial.map (algebraMap K F) (minpoly K pb.gen)))
[PROOFSTEP]
rw [PowerBasis.trace_gen_eq_nextCoeff_minpoly, RingHom.map_neg, ← nextCoeff_map (algebraMap K F).injective,
  sum_roots_eq_nextCoeff_of_monic_of_split ((minpoly.monic (PowerBasis.isIntegral_gen _)).map _)
    ((splits_id_iff_splits _).2 hf),
  neg_neg]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hx : ¬IsIntegral K x
⊢ ↑(Algebra.trace K { x_1 // x_1 ∈ K⟮x⟯ }) (gen K x) = 0
[PROOFSTEP]
rw [trace_eq_zero_of_not_exists_basis, LinearMap.zero_apply]
[GOAL]
case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hx : ¬IsIntegral K x
⊢ ¬∃ s, Nonempty (Basis { x_1 // x_1 ∈ s } K { x_1 // x_1 ∈ K⟮x⟯ })
[PROOFSTEP]
contrapose! hx
[GOAL]
case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hx : ∃ s, Nonempty (Basis { x_1 // x_1 ∈ s } K { x_1 // x_1 ∈ K⟮x⟯ })
⊢ IsIntegral K x
[PROOFSTEP]
obtain ⟨s, ⟨b⟩⟩ := hx
[GOAL]
case h.intro.intro
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
s : Finset { x_1 // x_1 ∈ K⟮x⟯ }
b : Basis { x_1 // x_1 ∈ s } K { x_1 // x_1 ∈ K⟮x⟯ }
⊢ IsIntegral K x
[PROOFSTEP]
refine' isIntegral_of_mem_of_FG K⟮x⟯.toSubalgebra _ x _
[GOAL]
case h.intro.intro.refine'_1
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
s : Finset { x_1 // x_1 ∈ K⟮x⟯ }
b : Basis { x_1 // x_1 ∈ s } K { x_1 // x_1 ∈ K⟮x⟯ }
⊢ Submodule.FG (↑Subalgebra.toSubmodule K⟮x⟯.toSubalgebra)
[PROOFSTEP]
exact (Submodule.fg_iff_finiteDimensional _).mpr (FiniteDimensional.of_fintype_basis b)
[GOAL]
case h.intro.intro.refine'_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
s : Finset { x_1 // x_1 ∈ K⟮x⟯ }
b : Basis { x_1 // x_1 ∈ s } K { x_1 // x_1 ∈ K⟮x⟯ }
⊢ x ∈ K⟮x⟯.toSubalgebra
[PROOFSTEP]
exact subset_adjoin K _ (Set.mem_singleton x)
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
⊢ ↑(algebraMap K F) (↑(Algebra.trace K { x_1 // x_1 ∈ K⟮x⟯ }) (gen K x)) =
    Multiset.sum (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
[PROOFSTEP]
have injKxL := (algebraMap K⟮x⟯ L).injective
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
⊢ ↑(algebraMap K F) (↑(Algebra.trace K { x_1 // x_1 ∈ K⟮x⟯ }) (gen K x)) =
    Multiset.sum (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
[PROOFSTEP]
by_cases hx : IsIntegral K x
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
⊢ ↑(algebraMap K F) (↑(Algebra.trace K { x_1 // x_1 ∈ K⟮x⟯ }) (gen K x)) =
    Multiset.sum (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
case neg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : ¬IsIntegral K x
⊢ ↑(algebraMap K F) (↑(Algebra.trace K { x_1 // x_1 ∈ K⟮x⟯ }) (gen K x)) =
    Multiset.sum (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
[PROOFSTEP]
swap
[GOAL]
case neg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : ¬IsIntegral K x
⊢ ↑(algebraMap K F) (↑(Algebra.trace K { x_1 // x_1 ∈ K⟮x⟯ }) (gen K x)) =
    Multiset.sum (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
[PROOFSTEP]
simp [minpoly.eq_zero hx, trace_gen_eq_zero hx]
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
⊢ ↑(algebraMap K F) (↑(Algebra.trace K { x_1 // x_1 ∈ K⟮x⟯ }) (gen K x)) =
    Multiset.sum (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
[PROOFSTEP]
have hx' : IsIntegral K (AdjoinSimple.gen K x) := by
  rwa [← isIntegral_algebraMap_iff injKxL, AdjoinSimple.algebraMap_gen]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
⊢ IsIntegral K (gen K x)
[PROOFSTEP]
rwa [← isIntegral_algebraMap_iff injKxL, AdjoinSimple.algebraMap_gen]
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (gen K x)
⊢ ↑(algebraMap K F) (↑(Algebra.trace K { x_1 // x_1 ∈ K⟮x⟯ }) (gen K x)) =
    Multiset.sum (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
[PROOFSTEP]
rw [← adjoin.powerBasis_gen hx, (adjoin.powerBasis hx).trace_gen_eq_sum_roots]
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (gen K x)
⊢ Multiset.sum (roots (Polynomial.map (algebraMap K F) (minpoly K (adjoin.powerBasis hx).gen))) =
    Multiset.sum (roots (Polynomial.map (algebraMap K F) (minpoly K x)))
[PROOFSTEP]
rw [adjoin.powerBasis_gen hx, minpoly.eq_of_algebraMap_eq injKxL hx']
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (gen K x)
⊢ Splits (algebraMap K F) (minpoly K (adjoin.powerBasis hx).gen)
[PROOFSTEP]
rw [adjoin.powerBasis_gen hx, minpoly.eq_of_algebraMap_eq injKxL hx']
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (gen K x)
⊢ x = ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L) (gen K x)
[PROOFSTEP]
try simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (gen K x)
⊢ x = ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L) (gen K x)
[PROOFSTEP]
simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (gen K x)
⊢ Splits (algebraMap K F) (minpoly K ?m.547142)
[PROOFSTEP]
try simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (gen K x)
⊢ Splits (algebraMap K F) (minpoly K ?m.547142)
[PROOFSTEP]
simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (gen K x)
⊢ ?m.547142 = ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L) (gen K x)
[PROOFSTEP]
try simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (gen K x)
⊢ ?m.547142 = ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L) (gen K x)
[PROOFSTEP]
simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (gen K x)
⊢ L
[PROOFSTEP]
try simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (gen K x)
⊢ L
[PROOFSTEP]
simp only [AdjoinSimple.algebraMap_gen _ _]
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (gen K x)
⊢ Splits (algebraMap K F) (minpoly K ?m.547142)
[PROOFSTEP]
exact hf
[GOAL]
case pos
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹¹ : CommRing R
inst✝¹⁰ : CommRing S
inst✝⁹ : CommRing T
inst✝⁸ : Algebra R S
inst✝⁷ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁶ : Field K
inst✝⁵ : Field L
inst✝⁴ : Algebra K L
ι κ : Type w
inst✝³ : Fintype ι
F : Type u_6
inst✝² : Field F
inst✝¹ : Algebra K S
inst✝ : Algebra K F
x : L
hf : Splits (algebraMap K F) (minpoly K x)
injKxL : Function.Injective ↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L)
hx : IsIntegral K x
hx' : IsIntegral K (gen K x)
⊢ x = x
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
F : Type u_6
inst✝³ : Field F
inst✝² : Algebra K S
inst✝¹ : Algebra K F
inst✝ : FiniteDimensional K L
x : L
⊢ ↑(Algebra.trace K L) x =
    finrank { x_1 // x_1 ∈ K⟮x⟯ } L • ↑(Algebra.trace K { x_1 // x_1 ∈ K⟮x⟯ }) (AdjoinSimple.gen K x)
[PROOFSTEP]
conv =>
  lhs
  rw [← IntermediateField.AdjoinSimple.algebraMap_gen K x]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
F : Type u_6
inst✝³ : Field F
inst✝² : Algebra K S
inst✝¹ : Algebra K F
inst✝ : FiniteDimensional K L
x : L
| ↑(Algebra.trace K L) x =
    finrank { x_1 // x_1 ∈ K⟮x⟯ } L • ↑(Algebra.trace K { x_1 // x_1 ∈ K⟮x⟯ }) (AdjoinSimple.gen K x)
[PROOFSTEP]
  lhs
  rw [← IntermediateField.AdjoinSimple.algebraMap_gen K x]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
F : Type u_6
inst✝³ : Field F
inst✝² : Algebra K S
inst✝¹ : Algebra K F
inst✝ : FiniteDimensional K L
x : L
| ↑(Algebra.trace K L) x =
    finrank { x_1 // x_1 ∈ K⟮x⟯ } L • ↑(Algebra.trace K { x_1 // x_1 ∈ K⟮x⟯ }) (AdjoinSimple.gen K x)
[PROOFSTEP]
  lhs
  rw [← IntermediateField.AdjoinSimple.algebraMap_gen K x]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
F : Type u_6
inst✝³ : Field F
inst✝² : Algebra K S
inst✝¹ : Algebra K F
inst✝ : FiniteDimensional K L
x : L
| ↑(Algebra.trace K L) x =
    finrank { x_1 // x_1 ∈ K⟮x⟯ } L • ↑(Algebra.trace K { x_1 // x_1 ∈ K⟮x⟯ }) (AdjoinSimple.gen K x)
[PROOFSTEP]
lhs
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
F : Type u_6
inst✝³ : Field F
inst✝² : Algebra K S
inst✝¹ : Algebra K F
inst✝ : FiniteDimensional K L
x : L
| ↑(Algebra.trace K L) x
[PROOFSTEP]
rw [← IntermediateField.AdjoinSimple.algebraMap_gen K x]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
F : Type u_6
inst✝³ : Field F
inst✝² : Algebra K S
inst✝¹ : Algebra K F
inst✝ : FiniteDimensional K L
x : L
⊢ ↑(Algebra.trace K L) (↑(algebraMap { x_1 // x_1 ∈ K⟮x⟯ } L) (AdjoinSimple.gen K x)) =
    finrank { x_1 // x_1 ∈ K⟮x⟯ } L • ↑(Algebra.trace K { x_1 // x_1 ∈ K⟮x⟯ }) (AdjoinSimple.gen K x)
[PROOFSTEP]
rw [← @trace_trace _ _ K K⟮x⟯ _ _ _ _ _ _ _ _ _, trace_algebraMap, LinearMap.map_smul_of_tower]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
F : Type u_6
inst✝³ : Field F
inst✝² : Algebra K S
inst✝¹ : Algebra K F
inst✝ : FiniteDimensional K L
x : L
hF : Splits (algebraMap K F) (minpoly K x)
⊢ ↑(algebraMap K F) (↑(Algebra.trace K L) x) =
    finrank { x_1 // x_1 ∈ K⟮x⟯ } L •
      Multiset.sum (roots (Polynomial.map (algebraMap K ((fun x => F) (↑(Algebra.trace K L) x))) (minpoly K x)))
[PROOFSTEP]
rw [trace_eq_trace_adjoin K x, Algebra.smul_def, RingHom.map_mul, ← Algebra.smul_def,
  IntermediateField.AdjoinSimple.trace_gen_eq_sum_roots _ hF]
  -- Porting note: last `simp` was `IsScalarTower.algebraMap_smul` inside the `rw`.
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹² : CommRing R
inst✝¹¹ : CommRing S
inst✝¹⁰ : CommRing T
inst✝⁹ : Algebra R S
inst✝⁸ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁷ : Field K
inst✝⁶ : Field L
inst✝⁵ : Algebra K L
ι κ : Type w
inst✝⁴ : Fintype ι
F : Type u_6
inst✝³ : Field F
inst✝² : Algebra K S
inst✝¹ : Algebra K F
inst✝ : FiniteDimensional K L
x : L
hF : Splits (algebraMap K F) (minpoly K x)
⊢ ↑(algebraMap K F) (↑(algebraMap ℕ ((fun x => K) (AdjoinSimple.gen K x))) (finrank { x_1 // x_1 ∈ K⟮x⟯ } L)) *
      Multiset.sum (roots (Polynomial.map (algebraMap K F) (minpoly K x))) =
    finrank { x_1 // x_1 ∈ K⟮x⟯ } L •
      Multiset.sum
        (roots
          (Polynomial.map
            (algebraMap K
              ((fun x => F)
                (finrank { x_1 // x_1 ∈ K⟮x⟯ } L • ↑(Algebra.trace K { x_1 // x_1 ∈ K⟮x⟯ }) (AdjoinSimple.gen K x))))
            (minpoly K x)))
[PROOFSTEP]
simp only [eq_natCast, map_natCast, nsmul_eq_mul]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
inst✝ : FiniteDimensional L F
x : F
hx : IsIntegral R x
⊢ IsIntegral R (↑(trace L F) x)
[PROOFSTEP]
have hx' : IsIntegral L x := isIntegral_of_isScalarTower hx
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
inst✝ : FiniteDimensional L F
x : F
hx : IsIntegral R x
hx' : IsIntegral L x
⊢ IsIntegral R (↑(trace L F) x)
[PROOFSTEP]
rw [← isIntegral_algebraMap_iff (algebraMap L (AlgebraicClosure F)).injective, trace_eq_sum_roots]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
inst✝ : FiniteDimensional L F
x : F
hx : IsIntegral R x
hx' : IsIntegral L x
⊢ IsIntegral R
    (finrank { x_1 // x_1 ∈ L⟮x⟯ } F •
      Multiset.sum
        (roots (Polynomial.map (algebraMap L ((fun x => AlgebraicClosure F) (↑(trace L F) x))) (minpoly L x))))
[PROOFSTEP]
refine' (IsIntegral.multiset_sum _).nsmul _
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
inst✝ : FiniteDimensional L F
x : F
hx : IsIntegral R x
hx' : IsIntegral L x
⊢ ∀ (x_1 : (fun x => AlgebraicClosure F) (↑(trace L F) x)),
    x_1 ∈ roots (Polynomial.map (algebraMap L ((fun x => AlgebraicClosure F) (↑(trace L F) x))) (minpoly L x)) →
      IsIntegral R x_1
[PROOFSTEP]
intro y hy
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
inst✝ : FiniteDimensional L F
x : F
hx : IsIntegral R x
hx' : IsIntegral L x
y : (fun x => AlgebraicClosure F) (↑(trace L F) x)
hy : y ∈ roots (Polynomial.map (algebraMap L ((fun x => AlgebraicClosure F) (↑(trace L F) x))) (minpoly L x))
⊢ IsIntegral R y
[PROOFSTEP]
rw [mem_roots_map (minpoly.ne_zero hx')] at hy 
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
inst✝ : FiniteDimensional L F
x : F
hx : IsIntegral R x
hx' : IsIntegral L x
y : (fun x => AlgebraicClosure F) (↑(trace L F) x)
hy : eval₂ (algebraMap L ((fun x => AlgebraicClosure F) (↑(trace L F) x))) y (minpoly L x) = 0
⊢ IsIntegral R y
[PROOFSTEP]
use minpoly R x, minpoly.monic hx
[GOAL]
case right
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
inst✝ : FiniteDimensional L F
x : F
hx : IsIntegral R x
hx' : IsIntegral L x
y : (fun x => AlgebraicClosure F) (↑(trace L F) x)
hy : eval₂ (algebraMap L ((fun x => AlgebraicClosure F) (↑(trace L F) x))) y (minpoly L x) = 0
⊢ eval₂ (algebraMap R ((fun x => AlgebraicClosure F) (↑(trace L F) x))) y (minpoly R x) = 0
[PROOFSTEP]
rw [← aeval_def] at hy ⊢
[GOAL]
case right
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
inst✝ : FiniteDimensional L F
x : F
hx : IsIntegral R x
hx' : IsIntegral L x
y : (fun x => AlgebraicClosure F) (↑(trace L F) x)
hy : ↑(aeval y) (minpoly L x) = 0
⊢ ↑(aeval y) (minpoly R x) = 0
[PROOFSTEP]
exact minpoly.aeval_of_isScalarTower R x y hy
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
inst✝ : FiniteDimensional L F
x : F
hx : IsIntegral R x
hx' : IsIntegral L x
⊢ Splits (algebraMap L (AlgebraicClosure F)) (minpoly L x)
[PROOFSTEP]
apply IsAlgClosed.splits_codomain
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁷ : CommRing R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : CommRing T
inst✝¹⁴ : Algebra R S
inst✝¹³ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra K L
ι κ : Type w
inst✝⁹ : Fintype ι
F : Type u_6
inst✝⁸ : Field F
inst✝⁷ : Algebra R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : Separable (minpoly K pb.gen)
⊢ ↑(algebraMap K E) (↑(Algebra.trace K L) pb.gen) = ∑ σ : L →ₐ[K] E, ↑σ pb.gen
[PROOFSTEP]
letI := Classical.decEq E
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁷ : CommRing R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : CommRing T
inst✝¹⁴ : Algebra R S
inst✝¹³ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra K L
ι κ : Type w
inst✝⁹ : Fintype ι
F : Type u_6
inst✝⁸ : Field F
inst✝⁷ : Algebra R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : Separable (minpoly K pb.gen)
this : DecidableEq E := Classical.decEq E
⊢ ↑(algebraMap K E) (↑(Algebra.trace K L) pb.gen) = ∑ σ : L →ₐ[K] E, ↑σ pb.gen
[PROOFSTEP]
letI : Fintype (L →ₐ[K] E) := (PowerBasis.AlgHom.fintype pb)
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁷ : CommRing R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : CommRing T
inst✝¹⁴ : Algebra R S
inst✝¹³ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra K L
ι κ : Type w
inst✝⁹ : Fintype ι
F : Type u_6
inst✝⁸ : Field F
inst✝⁷ : Algebra R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : Separable (minpoly K pb.gen)
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ ↑(algebraMap K E) (↑(Algebra.trace K L) pb.gen) = ∑ σ : L →ₐ[K] E, ↑σ pb.gen
[PROOFSTEP]
rw [pb.trace_gen_eq_sum_roots hE, Fintype.sum_equiv pb.liftEquiv', Finset.sum_mem_multiset, Finset.sum_eq_multiset_sum,
  Multiset.toFinset_val, Multiset.dedup_eq_self.mpr _, Multiset.map_id]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁷ : CommRing R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : CommRing T
inst✝¹⁴ : Algebra R S
inst✝¹³ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra K L
ι κ : Type w
inst✝⁹ : Fintype ι
F : Type u_6
inst✝⁸ : Field F
inst✝⁷ : Algebra R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : Separable (minpoly K pb.gen)
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ Multiset.Nodup (roots (Polynomial.map (algebraMap K E) (minpoly K pb.gen)))
[PROOFSTEP]
exact
  nodup_roots
    ((separable_map _).mpr hfx)
      -- Porting note: the following goal does not exist in mathlib3.
[GOAL]
case f
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁷ : CommRing R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : CommRing T
inst✝¹⁴ : Algebra R S
inst✝¹³ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra K L
ι κ : Type w
inst✝⁹ : Fintype ι
F : Type u_6
inst✝⁸ : Field F
inst✝⁷ : Algebra R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : Separable (minpoly K pb.gen)
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ { x // x ∈ roots (Polynomial.map (algebraMap K E) (minpoly K pb.gen)) } → (fun x => E) pb.gen
[PROOFSTEP]
exact (fun x => x.1)
[GOAL]
case hfg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁷ : CommRing R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : CommRing T
inst✝¹⁴ : Algebra R S
inst✝¹³ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra K L
ι κ : Type w
inst✝⁹ : Fintype ι
F : Type u_6
inst✝⁸ : Field F
inst✝⁷ : Algebra R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : Separable (minpoly K pb.gen)
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ ∀ (x : { x // x ∈ roots (Polynomial.map (algebraMap K E) (minpoly K pb.gen)) }), ↑x = _root_.id ↑x
[PROOFSTEP]
intro x
[GOAL]
case hfg
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁷ : CommRing R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : CommRing T
inst✝¹⁴ : Algebra R S
inst✝¹³ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra K L
ι κ : Type w
inst✝⁹ : Fintype ι
F : Type u_6
inst✝⁸ : Field F
inst✝⁷ : Algebra R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : Separable (minpoly K pb.gen)
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
x : { x // x ∈ roots (Polynomial.map (algebraMap K E) (minpoly K pb.gen)) }
⊢ ↑x = _root_.id ↑x
[PROOFSTEP]
rfl
[GOAL]
case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁷ : CommRing R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : CommRing T
inst✝¹⁴ : Algebra R S
inst✝¹³ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra K L
ι κ : Type w
inst✝⁹ : Fintype ι
F : Type u_6
inst✝⁸ : Field F
inst✝⁷ : Algebra R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : Separable (minpoly K pb.gen)
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ ∀ (x : L →ₐ[K] E), ↑x pb.gen = ↑(↑(PowerBasis.liftEquiv' pb) x)
[PROOFSTEP]
intro σ
[GOAL]
case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁷ : CommRing R
inst✝¹⁶ : CommRing S
inst✝¹⁵ : CommRing T
inst✝¹⁴ : Algebra R S
inst✝¹³ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹² : Field K
inst✝¹¹ : Field L
inst✝¹⁰ : Algebra K L
ι κ : Type w
inst✝⁹ : Fintype ι
F : Type u_6
inst✝⁸ : Field F
inst✝⁷ : Algebra R L
inst✝⁶ : Algebra L F
inst✝⁵ : Algebra R F
inst✝⁴ : IsScalarTower R L F
inst✝³ : Algebra K F
inst✝² : IsScalarTower K L F
E : Type u_7
inst✝¹ : Field E
inst✝ : Algebra K E
pb : PowerBasis K L
hE : Splits (algebraMap K E) (minpoly K pb.gen)
hfx : Separable (minpoly K pb.gen)
this✝ : DecidableEq E := Classical.decEq E
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
σ : L →ₐ[K] E
⊢ ↑σ pb.gen = ↑(↑(PowerBasis.liftEquiv' pb) σ)
[PROOFSTEP]
rw [PowerBasis.liftEquiv'_apply_coe]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
⊢ ∑ σ : F →ₐ[K] E, ↑σ (↑(algebraMap L F) pb.gen) = finrank L F • ∑ σ : L →ₐ[K] E, ↑σ pb.gen
[PROOFSTEP]
haveI : FiniteDimensional L F := FiniteDimensional.right K L F
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this : FiniteDimensional L F
⊢ ∑ σ : F →ₐ[K] E, ↑σ (↑(algebraMap L F) pb.gen) = finrank L F • ∑ σ : L →ₐ[K] E, ↑σ pb.gen
[PROOFSTEP]
haveI : IsSeparable L F := isSeparable_tower_top_of_isSeparable K L F
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this✝ : FiniteDimensional L F
this : IsSeparable L F
⊢ ∑ σ : F →ₐ[K] E, ↑σ (↑(algebraMap L F) pb.gen) = finrank L F • ∑ σ : L →ₐ[K] E, ↑σ pb.gen
[PROOFSTEP]
letI : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this✝¹ : FiniteDimensional L F
this✝ : IsSeparable L F
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ ∑ σ : F →ₐ[K] E, ↑σ (↑(algebraMap L F) pb.gen) = finrank L F • ∑ σ : L →ₐ[K] E, ↑σ pb.gen
[PROOFSTEP]
letI : ∀ f : L →ₐ[K] E, Fintype (@AlgHom L F E _ _ _ _ f.toRingHom.toAlgebra) := ?_
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this✝² : FiniteDimensional L F
this✝¹ : IsSeparable L F
this✝ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := ?refine_1
⊢ ∑ σ : F →ₐ[K] E, ↑σ (↑(algebraMap L F) pb.gen) = finrank L F • ∑ σ : L →ₐ[K] E, ↑σ pb.gen
case refine_1
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this✝¹ : FiniteDimensional L F
this✝ : IsSeparable L F
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E)
[PROOFSTEP]
rw [Fintype.sum_equiv algHomEquivSigma (fun σ : F →ₐ[K] E => _) fun σ => σ.1 pb.gen, ← Finset.univ_sigma_univ,
  Finset.sum_sigma, ← Finset.sum_nsmul]
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this✝² : FiniteDimensional L F
this✝¹ : IsSeparable L F
this✝ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := ?refine_1
⊢ ∑ a : L →ₐ[K] E, ∑ s : F →ₐ[L] E, ↑{ fst := a, snd := s }.fst pb.gen = ∑ x : L →ₐ[K] E, finrank L F • ↑x pb.gen
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this✝² : FiniteDimensional L F
this✝¹ : IsSeparable L F
this✝ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := ?refine_1
⊢ ∀ (x : F →ₐ[K] E), ↑x (↑(algebraMap L F) pb.gen) = ↑(↑algHomEquivSigma x).fst pb.gen
case refine_1
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this✝¹ : FiniteDimensional L F
this✝ : IsSeparable L F
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E)
[PROOFSTEP]
refine' Finset.sum_congr rfl fun σ _ => _
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this✝² : FiniteDimensional L F
this✝¹ : IsSeparable L F
this✝ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := ?refine_1
σ : L →ₐ[K] E
x✝ : σ ∈ Finset.univ
⊢ ∑ s : F →ₐ[L] E, ↑{ fst := σ, snd := s }.fst pb.gen = finrank L F • ↑σ pb.gen
[PROOFSTEP]
letI : Algebra L E := σ.toRingHom.toAlgebra
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this✝³ : FiniteDimensional L F
this✝² : IsSeparable L F
this✝¹ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this✝ : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := ?refine_1
σ : L →ₐ[K] E
x✝ : σ ∈ Finset.univ
this : Algebra L E := RingHom.toAlgebra ↑σ
⊢ ∑ s : F →ₐ[L] E, ↑{ fst := σ, snd := s }.fst pb.gen = finrank L F • ↑σ pb.gen
[PROOFSTEP]
simp only [Finset.sum_const]
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this✝³ : FiniteDimensional L F
this✝² : IsSeparable L F
this✝¹ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this✝ : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := ?refine_1
σ : L →ₐ[K] E
x✝ : σ ∈ Finset.univ
this : Algebra L E := RingHom.toAlgebra ↑σ
⊢ Finset.card Finset.univ • ↑σ pb.gen = finrank L F • ↑σ pb.gen
[PROOFSTEP]
congr
[GOAL]
case refine_2.e_a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this✝³ : FiniteDimensional L F
this✝² : IsSeparable L F
this✝¹ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this✝ : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := ?refine_1
σ : L →ₐ[K] E
x✝ : σ ∈ Finset.univ
this : Algebra L E := RingHom.toAlgebra ↑σ
⊢ Finset.card Finset.univ = finrank L F
[PROOFSTEP]
rw [← AlgHom.card L F E]
[GOAL]
case refine_2.e_a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this✝³ : FiniteDimensional L F
this✝² : IsSeparable L F
this✝¹ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this✝ : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := ?refine_1
σ : L →ₐ[K] E
x✝ : σ ∈ Finset.univ
this : Algebra L E := RingHom.toAlgebra ↑σ
⊢ Finset.card Finset.univ = Fintype.card (F →ₐ[L] E)
case refine_1
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this✝¹ : FiniteDimensional L F
this✝ : IsSeparable L F
this : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
⊢ (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E)
[PROOFSTEP]
exact Finset.card_univ (α := F →ₐ[L] E)
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this✝² : FiniteDimensional L F
this✝¹ : IsSeparable L F
this✝ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := fun σ => minpoly.AlgHom.fintype L F E
⊢ ∀ (x : F →ₐ[K] E), ↑x (↑(algebraMap L F) pb.gen) = ↑(↑algHomEquivSigma x).fst pb.gen
[PROOFSTEP]
intro σ
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K F
inst✝ : IsSeparable K F
pb : PowerBasis K L
this✝² : FiniteDimensional L F
this✝¹ : IsSeparable L F
this✝ : Fintype (L →ₐ[K] E) := PowerBasis.AlgHom.fintype pb
this : (f : L →ₐ[K] E) → Fintype (F →ₐ[L] E) := fun σ => minpoly.AlgHom.fintype L F E
σ : F →ₐ[K] E
⊢ ↑σ (↑(algebraMap L F) pb.gen) = ↑(↑algHomEquivSigma σ).fst pb.gen
[PROOFSTEP]
simp only [algHomEquivSigma, Equiv.coe_fn_mk, AlgHom.restrictDomain, AlgHom.comp_apply, IsScalarTower.coe_toAlgHom']
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K L
inst✝ : IsSeparable K L
x : L
⊢ ↑(algebraMap K E) (↑(Algebra.trace K L) x) = ∑ σ : L →ₐ[K] E, ↑σ x
[PROOFSTEP]
have hx := IsSeparable.isIntegral K x
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K L
inst✝ : IsSeparable K L
x : L
hx : IsIntegral K x
⊢ ↑(algebraMap K E) (↑(Algebra.trace K L) x) = ∑ σ : L →ₐ[K] E, ↑σ x
[PROOFSTEP]
let pb := (adjoin.powerBasis hx)
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K L
inst✝ : IsSeparable K L
x : L
hx : IsIntegral K x
pb : PowerBasis K { x_1 // x_1 ∈ K⟮x⟯ } := adjoin.powerBasis hx
⊢ ↑(algebraMap K E) (↑(Algebra.trace K L) x) = ∑ σ : L →ₐ[K] E, ↑σ x
[PROOFSTEP]
rw [trace_eq_trace_adjoin K x, Algebra.smul_def, RingHom.map_mul, ← adjoin.powerBasis_gen hx,
  trace_eq_sum_embeddings_gen E pb (IsAlgClosed.splits_codomain _)]
  -- Porting note: the following `convert` was `exact`, with `← algebra.smul_def, algebra_map_smul`
  -- in the previous `rw`.
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K L
inst✝ : IsSeparable K L
x : L
hx : IsIntegral K x
pb : PowerBasis K { x_1 // x_1 ∈ K⟮x⟯ } := adjoin.powerBasis hx
⊢ ↑(algebraMap K E) (↑(algebraMap ℕ ((fun x => K) (adjoin.powerBasis hx).gen)) (finrank { x_1 // x_1 ∈ K⟮x⟯ } L)) *
      ∑ σ : { x_1 // x_1 ∈ K⟮x⟯ } →ₐ[K] E, ↑σ pb.gen =
    ∑ σ : L →ₐ[K] E, ↑σ x
[PROOFSTEP]
convert (sum_embeddings_eq_finrank_mul L E pb).symm
[GOAL]
case h.e'_2.h.e
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K L
inst✝ : IsSeparable K L
x : L
hx : IsIntegral K x
pb : PowerBasis K { x_1 // x_1 ∈ K⟮x⟯ } := adjoin.powerBasis hx
⊢ HMul.hMul
      (↑(algebraMap K E)
        (↑(algebraMap ℕ ((fun x => K) (adjoin.powerBasis hx).gen)) (finrank { x_1 // x_1 ∈ K⟮x⟯ } L))) =
    HSMul.hSMul (finrank { x_1 // x_1 ∈ K⟮x⟯ } L)
[PROOFSTEP]
ext
[GOAL]
case h.e'_2.h.e.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K L
inst✝ : IsSeparable K L
x : L
hx : IsIntegral K x
pb : PowerBasis K { x_1 // x_1 ∈ K⟮x⟯ } := adjoin.powerBasis hx
x✝ : (fun x => E) (↑(Algebra.trace K { x_1 // x_1 ∈ K⟮x⟯ }) (adjoin.powerBasis hx).gen)
⊢ ↑(algebraMap K E) (↑(algebraMap ℕ ((fun x => K) (adjoin.powerBasis hx).gen)) (finrank { x_1 // x_1 ∈ K⟮x⟯ } L)) * x✝ =
    finrank { x_1 // x_1 ∈ K⟮x⟯ } L • x✝
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K L
inst✝ : IsSeparable K L
x : L
hx : IsIntegral K x
pb : PowerBasis K { x_1 // x_1 ∈ K⟮x⟯ } := adjoin.powerBasis hx
⊢ Separable (minpoly K pb.gen)
[PROOFSTEP]
haveI := isSeparable_tower_bot_of_isSeparable K K⟮x⟯ L
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
inst✝¹ : FiniteDimensional K L
inst✝ : IsSeparable K L
x : L
hx : IsIntegral K x
pb : PowerBasis K { x_1 // x_1 ∈ K⟮x⟯ } := adjoin.powerBasis hx
this : IsSeparable K { x_1 // x_1 ∈ K⟮x⟯ }
⊢ Separable (minpoly K pb.gen)
[PROOFSTEP]
exact IsSeparable.separable K _
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
x : L
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
⊢ ↑(algebraMap K L) (↑(Algebra.trace K L) x) = ∑ σ : L ≃ₐ[K] L, ↑σ x
[PROOFSTEP]
apply NoZeroSMulDivisors.algebraMap_injective L (AlgebraicClosure L)
[GOAL]
case a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
x : L
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
⊢ ↑(algebraMap L (AlgebraicClosure L)) (↑(algebraMap K L) (↑(Algebra.trace K L) x)) =
    ↑(algebraMap L (AlgebraicClosure L)) (∑ σ : L ≃ₐ[K] L, ↑σ x)
[PROOFSTEP]
rw [_root_.map_sum (algebraMap L (AlgebraicClosure L))]
[GOAL]
case a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
x : L
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
⊢ ↑(algebraMap L (AlgebraicClosure L)) (↑(algebraMap K L) (↑(Algebra.trace K L) x)) =
    ∑ x_1 : L ≃ₐ[K] L, ↑(algebraMap L (AlgebraicClosure L)) (↑x_1 x)
[PROOFSTEP]
rw [← Fintype.sum_equiv (Normal.algHomEquivAut K (AlgebraicClosure L) L)]
[GOAL]
case a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
x : L
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
⊢ ↑(algebraMap L (AlgebraicClosure L)) (↑(algebraMap K L) (↑(Algebra.trace K L) x)) =
    ∑ x : L →ₐ[K] AlgebraicClosure L, ?a.f✝ x
[PROOFSTEP]
rw [← trace_eq_sum_embeddings (AlgebraicClosure L)]
[GOAL]
case a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
x : L
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
⊢ ↑(algebraMap L (AlgebraicClosure L)) (↑(algebraMap K L) (↑(Algebra.trace K L) x)) =
    ↑(algebraMap K (AlgebraicClosure L)) (↑(Algebra.trace K L) ?m.943761)
[PROOFSTEP]
simp only [algebraMap_eq_smul_one]
  -- Porting note: `smul_one_smul` was in the `simp only`.
[GOAL]
case a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
x : L
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
⊢ (↑(Algebra.trace K L) x • 1) • 1 = ↑(Algebra.trace K L) ?m.943761 • 1
[PROOFSTEP]
apply smul_one_smul
[GOAL]
case a.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
x : L
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
⊢ ∀ (x_1 : L →ₐ[K] AlgebraicClosure L),
    ↑x_1 x = ↑(algebraMap L (AlgebraicClosure L)) (↑(↑(Normal.algHomEquivAut K (AlgebraicClosure L) L) x_1) x)
[PROOFSTEP]
intro σ
[GOAL]
case a.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
inst✝⁶ : Algebra K F
inst✝⁵ : IsScalarTower K L F
E : Type u_7
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : IsAlgClosed E
x : L
inst✝¹ : FiniteDimensional K L
inst✝ : IsGalois K L
σ : L →ₐ[K] AlgebraicClosure L
⊢ ↑σ x = ↑(algebraMap L (AlgebraicClosure L)) (↑(↑(Normal.algHomEquivAut K (AlgebraicClosure L) L) σ) x)
[PROOFSTEP]
simp only [Normal.algHomEquivAut, AlgHom.restrictNormal', Equiv.coe_fn_mk, AlgEquiv.coe_ofBijective,
  AlgHom.restrictNormal_commutes, id.map_eq_id, RingHom.id_apply]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
κ' : Type u_7
b : Basis κ A B
f : κ ≃ κ'
⊢ traceMatrix A ↑(Basis.reindex b f) = ↑(reindex f f) (traceMatrix A ↑b)
[PROOFSTEP]
ext (x y)
[GOAL]
case a.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
κ' : Type u_7
b : Basis κ A B
f : κ ≃ κ'
x y : κ'
⊢ traceMatrix A (↑(Basis.reindex b f)) x y = ↑(reindex f f) (traceMatrix A ↑b) x y
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁹ : CommRing R
inst✝¹⁸ : CommRing S
inst✝¹⁷ : CommRing T
inst✝¹⁶ : Algebra R S
inst✝¹⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra K L
ι κ : Type w
inst✝¹¹ : Fintype ι
F : Type u_6
inst✝¹⁰ : Field F
inst✝⁹ : Algebra R L
inst✝⁸ : Algebra L F
inst✝⁷ : Algebra R F
inst✝⁶ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : CommRing C
inst✝¹ : Algebra A C
inst✝ : Fintype κ
b : κ → B
P : Matrix κ κ A
⊢ traceMatrix A (vecMul b (Matrix.map P ↑(algebraMap A B))) = Pᵀ * traceMatrix A b * P
[PROOFSTEP]
ext (α β)
[GOAL]
case a.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁹ : CommRing R
inst✝¹⁸ : CommRing S
inst✝¹⁷ : CommRing T
inst✝¹⁶ : Algebra R S
inst✝¹⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra K L
ι κ : Type w
inst✝¹¹ : Fintype ι
F : Type u_6
inst✝¹⁰ : Field F
inst✝⁹ : Algebra R L
inst✝⁸ : Algebra L F
inst✝⁷ : Algebra R F
inst✝⁶ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : CommRing C
inst✝¹ : Algebra A C
inst✝ : Fintype κ
b : κ → B
P : Matrix κ κ A
α β : κ
⊢ traceMatrix A (vecMul b (Matrix.map P ↑(algebraMap A B))) α β = (Pᵀ * traceMatrix A b * P) α β
[PROOFSTEP]
rw [traceMatrix_apply, vecMul, dotProduct, vecMul, dotProduct, Matrix.mul_apply, BilinForm.sum_left,
  Fintype.sum_congr _ _ fun i : κ =>
    @BilinForm.sum_right _ _ _ _ _ _ _ _ (b i * P.map (algebraMap A B) i α) fun y : κ =>
      b y * P.map (algebraMap A B) y β,
  sum_comm]
[GOAL]
case a.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁹ : CommRing R
inst✝¹⁸ : CommRing S
inst✝¹⁷ : CommRing T
inst✝¹⁶ : Algebra R S
inst✝¹⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra K L
ι κ : Type w
inst✝¹¹ : Fintype ι
F : Type u_6
inst✝¹⁰ : Field F
inst✝⁹ : Algebra R L
inst✝⁸ : Algebra L F
inst✝⁷ : Algebra R F
inst✝⁶ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : CommRing C
inst✝¹ : Algebra A C
inst✝ : Fintype κ
b : κ → B
P : Matrix κ κ A
α β : κ
⊢ ∑ y : κ,
      ∑ x : κ,
        BilinForm.bilin (traceForm A B) (b x * Matrix.map P (↑(algebraMap A B)) x α)
          (b y * Matrix.map P (↑(algebraMap A B)) y β) =
    ∑ j : κ, (Pᵀ * traceMatrix A b) α j * P j β
[PROOFSTEP]
congr
[GOAL]
case a.h.e_f
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁹ : CommRing R
inst✝¹⁸ : CommRing S
inst✝¹⁷ : CommRing T
inst✝¹⁶ : Algebra R S
inst✝¹⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra K L
ι κ : Type w
inst✝¹¹ : Fintype ι
F : Type u_6
inst✝¹⁰ : Field F
inst✝⁹ : Algebra R L
inst✝⁸ : Algebra L F
inst✝⁷ : Algebra R F
inst✝⁶ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : CommRing C
inst✝¹ : Algebra A C
inst✝ : Fintype κ
b : κ → B
P : Matrix κ κ A
α β : κ
⊢ (fun y =>
      ∑ x : κ,
        BilinForm.bilin (traceForm A B) (b x * Matrix.map P (↑(algebraMap A B)) x α)
          (b y * Matrix.map P (↑(algebraMap A B)) y β)) =
    fun j => (Pᵀ * traceMatrix A b) α j * P j β
[PROOFSTEP]
ext x
[GOAL]
case a.h.e_f.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁹ : CommRing R
inst✝¹⁸ : CommRing S
inst✝¹⁷ : CommRing T
inst✝¹⁶ : Algebra R S
inst✝¹⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra K L
ι κ : Type w
inst✝¹¹ : Fintype ι
F : Type u_6
inst✝¹⁰ : Field F
inst✝⁹ : Algebra R L
inst✝⁸ : Algebra L F
inst✝⁷ : Algebra R F
inst✝⁶ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : CommRing C
inst✝¹ : Algebra A C
inst✝ : Fintype κ
b : κ → B
P : Matrix κ κ A
α β x : κ
⊢ ∑ x_1 : κ,
      BilinForm.bilin (traceForm A B) (b x_1 * Matrix.map P (↑(algebraMap A B)) x_1 α)
        (b x * Matrix.map P (↑(algebraMap A B)) x β) =
    (Pᵀ * traceMatrix A b) α x * P x β
[PROOFSTEP]
rw [Matrix.mul_apply, sum_mul]
[GOAL]
case a.h.e_f.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁹ : CommRing R
inst✝¹⁸ : CommRing S
inst✝¹⁷ : CommRing T
inst✝¹⁶ : Algebra R S
inst✝¹⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra K L
ι κ : Type w
inst✝¹¹ : Fintype ι
F : Type u_6
inst✝¹⁰ : Field F
inst✝⁹ : Algebra R L
inst✝⁸ : Algebra L F
inst✝⁷ : Algebra R F
inst✝⁶ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : CommRing C
inst✝¹ : Algebra A C
inst✝ : Fintype κ
b : κ → B
P : Matrix κ κ A
α β x : κ
⊢ ∑ x_1 : κ,
      BilinForm.bilin (traceForm A B) (b x_1 * Matrix.map P (↑(algebraMap A B)) x_1 α)
        (b x * Matrix.map P (↑(algebraMap A B)) x β) =
    ∑ x_1 : κ, Pᵀ α x_1 * traceMatrix A b x_1 x * P x β
[PROOFSTEP]
congr
[GOAL]
case a.h.e_f.h.e_f
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁹ : CommRing R
inst✝¹⁸ : CommRing S
inst✝¹⁷ : CommRing T
inst✝¹⁶ : Algebra R S
inst✝¹⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra K L
ι κ : Type w
inst✝¹¹ : Fintype ι
F : Type u_6
inst✝¹⁰ : Field F
inst✝⁹ : Algebra R L
inst✝⁸ : Algebra L F
inst✝⁷ : Algebra R F
inst✝⁶ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : CommRing C
inst✝¹ : Algebra A C
inst✝ : Fintype κ
b : κ → B
P : Matrix κ κ A
α β x : κ
⊢ (fun x_1 =>
      BilinForm.bilin (traceForm A B) (b x_1 * Matrix.map P (↑(algebraMap A B)) x_1 α)
        (b x * Matrix.map P (↑(algebraMap A B)) x β)) =
    fun x_1 => Pᵀ α x_1 * traceMatrix A b x_1 x * P x β
[PROOFSTEP]
ext y
[GOAL]
case a.h.e_f.h.e_f.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁹ : CommRing R
inst✝¹⁸ : CommRing S
inst✝¹⁷ : CommRing T
inst✝¹⁶ : Algebra R S
inst✝¹⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra K L
ι κ : Type w
inst✝¹¹ : Fintype ι
F : Type u_6
inst✝¹⁰ : Field F
inst✝⁹ : Algebra R L
inst✝⁸ : Algebra L F
inst✝⁷ : Algebra R F
inst✝⁶ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : CommRing C
inst✝¹ : Algebra A C
inst✝ : Fintype κ
b : κ → B
P : Matrix κ κ A
α β x y : κ
⊢ BilinForm.bilin (traceForm A B) (b y * Matrix.map P (↑(algebraMap A B)) y α)
      (b x * Matrix.map P (↑(algebraMap A B)) x β) =
    Pᵀ α y * traceMatrix A b y x * P x β
[PROOFSTEP]
rw [map_apply, traceForm_apply, mul_comm (b y), ← smul_def]
[GOAL]
case a.h.e_f.h.e_f.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁹ : CommRing R
inst✝¹⁸ : CommRing S
inst✝¹⁷ : CommRing T
inst✝¹⁶ : Algebra R S
inst✝¹⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra K L
ι κ : Type w
inst✝¹¹ : Fintype ι
F : Type u_6
inst✝¹⁰ : Field F
inst✝⁹ : Algebra R L
inst✝⁸ : Algebra L F
inst✝⁷ : Algebra R F
inst✝⁶ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : CommRing C
inst✝¹ : Algebra A C
inst✝ : Fintype κ
b : κ → B
P : Matrix κ κ A
α β x y : κ
⊢ ↑(trace A B) (P y α • b y * (b x * Matrix.map P (↑(algebraMap A B)) x β)) = Pᵀ α y * traceMatrix A b y x * P x β
[PROOFSTEP]
simp only [id.smul_eq_mul, RingHom.id_apply, map_apply, transpose_apply, LinearMap.map_smulₛₗ, traceForm_apply,
  Algebra.smul_mul_assoc]
[GOAL]
case a.h.e_f.h.e_f.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁹ : CommRing R
inst✝¹⁸ : CommRing S
inst✝¹⁷ : CommRing T
inst✝¹⁶ : Algebra R S
inst✝¹⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra K L
ι κ : Type w
inst✝¹¹ : Fintype ι
F : Type u_6
inst✝¹⁰ : Field F
inst✝⁹ : Algebra R L
inst✝⁸ : Algebra L F
inst✝⁷ : Algebra R F
inst✝⁶ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : CommRing C
inst✝¹ : Algebra A C
inst✝ : Fintype κ
b : κ → B
P : Matrix κ κ A
α β x y : κ
⊢ P y α * ↑(trace A B) (b y * (b x * ↑(algebraMap A B) (P x β))) = P y α * traceMatrix A b y x * P x β
[PROOFSTEP]
rw [mul_comm (b x), ← smul_def]
[GOAL]
case a.h.e_f.h.e_f.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁹ : CommRing R
inst✝¹⁸ : CommRing S
inst✝¹⁷ : CommRing T
inst✝¹⁶ : Algebra R S
inst✝¹⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra K L
ι κ : Type w
inst✝¹¹ : Fintype ι
F : Type u_6
inst✝¹⁰ : Field F
inst✝⁹ : Algebra R L
inst✝⁸ : Algebra L F
inst✝⁷ : Algebra R F
inst✝⁶ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : CommRing C
inst✝¹ : Algebra A C
inst✝ : Fintype κ
b : κ → B
P : Matrix κ κ A
α β x y : κ
⊢ P y α * ↑(trace A B) (b y * P x β • b x) = P y α * traceMatrix A b y x * P x β
[PROOFSTEP]
ring_nf
[GOAL]
case a.h.e_f.h.e_f.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁹ : CommRing R
inst✝¹⁸ : CommRing S
inst✝¹⁷ : CommRing T
inst✝¹⁶ : Algebra R S
inst✝¹⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra K L
ι κ : Type w
inst✝¹¹ : Fintype ι
F : Type u_6
inst✝¹⁰ : Field F
inst✝⁹ : Algebra R L
inst✝⁸ : Algebra L F
inst✝⁷ : Algebra R F
inst✝⁶ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : CommRing C
inst✝¹ : Algebra A C
inst✝ : Fintype κ
b : κ → B
P : Matrix κ κ A
α β x y : κ
⊢ P y α * ↑(trace A B) (b y * P x β • b x) = P y α * traceMatrix A b y x * P x β
[PROOFSTEP]
rw [mul_assoc]
[GOAL]
case a.h.e_f.h.e_f.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁹ : CommRing R
inst✝¹⁸ : CommRing S
inst✝¹⁷ : CommRing T
inst✝¹⁶ : Algebra R S
inst✝¹⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra K L
ι κ : Type w
inst✝¹¹ : Fintype ι
F : Type u_6
inst✝¹⁰ : Field F
inst✝⁹ : Algebra R L
inst✝⁸ : Algebra L F
inst✝⁷ : Algebra R F
inst✝⁶ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : CommRing C
inst✝¹ : Algebra A C
inst✝ : Fintype κ
b : κ → B
P : Matrix κ κ A
α β x y : κ
⊢ P y α * ↑(trace A B) (b y * P x β • b x) = P y α * (traceMatrix A b y x * P x β)
[PROOFSTEP]
simp [mul_comm]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁹ : CommRing R
inst✝¹⁸ : CommRing S
inst✝¹⁷ : CommRing T
inst✝¹⁶ : Algebra R S
inst✝¹⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra K L
ι κ : Type w
inst✝¹¹ : Fintype ι
F : Type u_6
inst✝¹⁰ : Field F
inst✝⁹ : Algebra R L
inst✝⁸ : Algebra L F
inst✝⁷ : Algebra R F
inst✝⁶ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : CommRing C
inst✝¹ : Algebra A C
inst✝ : Fintype κ
b : κ → B
P : Matrix κ κ A
⊢ traceMatrix A (mulVec (Matrix.map P ↑(algebraMap A B)) b) = P * traceMatrix A b * Pᵀ
[PROOFSTEP]
refine' AddEquiv.injective (transposeAddEquiv κ κ A) _
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁹ : CommRing R
inst✝¹⁸ : CommRing S
inst✝¹⁷ : CommRing T
inst✝¹⁶ : Algebra R S
inst✝¹⁵ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁴ : Field K
inst✝¹³ : Field L
inst✝¹² : Algebra K L
ι κ : Type w
inst✝¹¹ : Fintype ι
F : Type u_6
inst✝¹⁰ : Field F
inst✝⁹ : Algebra R L
inst✝⁸ : Algebra L F
inst✝⁷ : Algebra R F
inst✝⁶ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁵ : CommRing A
inst✝⁴ : CommRing B
inst✝³ : Algebra A B
inst✝² : CommRing C
inst✝¹ : Algebra A C
inst✝ : Fintype κ
b : κ → B
P : Matrix κ κ A
⊢ ↑(transposeAddEquiv κ κ A) (traceMatrix A (mulVec (Matrix.map P ↑(algebraMap A B)) b)) =
    ↑(transposeAddEquiv κ κ A) (P * traceMatrix A b * Pᵀ)
[PROOFSTEP]
rw [transposeAddEquiv_apply, transposeAddEquiv_apply, ← vecMul_transpose, ← transpose_map, traceMatrix_of_matrix_vecMul,
  transpose_transpose, transpose_mul, transpose_transpose, transpose_mul]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁶ : CommRing A
inst✝⁵ : CommRing B
inst✝⁴ : Algebra A B
inst✝³ : CommRing C
inst✝² : Algebra A C
inst✝¹ : Fintype κ
inst✝ : DecidableEq κ
b : Basis κ A B
⊢ traceMatrix A ↑b = ↑(BilinForm.toMatrix b) (traceForm A B)
[PROOFSTEP]
ext (i j)
[GOAL]
case a.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁰ : CommRing R
inst✝¹⁹ : CommRing S
inst✝¹⁸ : CommRing T
inst✝¹⁷ : Algebra R S
inst✝¹⁶ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁵ : Field K
inst✝¹⁴ : Field L
inst✝¹³ : Algebra K L
ι κ : Type w
inst✝¹² : Fintype ι
F : Type u_6
inst✝¹¹ : Field F
inst✝¹⁰ : Algebra R L
inst✝⁹ : Algebra L F
inst✝⁸ : Algebra R F
inst✝⁷ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁶ : CommRing A
inst✝⁵ : CommRing B
inst✝⁴ : Algebra A B
inst✝³ : CommRing C
inst✝² : Algebra A C
inst✝¹ : Fintype κ
inst✝ : DecidableEq κ
b : Basis κ A B
i j : κ
⊢ traceMatrix A (↑b) i j = ↑(BilinForm.toMatrix b) (traceForm A B) i j
[PROOFSTEP]
rw [traceMatrix_apply, traceForm_apply, traceForm_toMatrix]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
⊢ mulVec (traceMatrix A ↑b) (↑(Basis.equivFun b) z) = fun i => ↑(trace A B) (z * ↑b i)
[PROOFSTEP]
ext i
[GOAL]
case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
⊢ mulVec (traceMatrix A ↑b) (↑(Basis.equivFun b) z) i = ↑(trace A B) (z * ↑b i)
[PROOFSTEP]
rw [← col_apply ((traceMatrix A b).mulVec (b.equivFun z)) i Unit.unit, col_mulVec, Matrix.mul_apply, traceMatrix]
[GOAL]
case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
⊢ ∑ j : ι, ↑of (fun i j => BilinForm.bilin (traceForm A B) (↑b i) (↑b j)) i j * col (↑(Basis.equivFun b) z) j () =
    ↑(trace A B) (z * ↑b i)
[PROOFSTEP]
simp only [col_apply, traceForm_apply]
[GOAL]
case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
⊢ ∑ x : ι, ↑of (fun i j => ↑(trace A B) (↑b i * ↑b j)) i x * ↑(Basis.equivFun b) z x = ↑(trace A B) (z * ↑b i)
[PROOFSTEP]
conv_lhs =>
  congr
  rfl
  ext
  rw [mul_comm _ (b.equivFun z _), ← smul_eq_mul, of_apply, ← LinearMap.map_smul]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
| ∑ x : ι, ↑of (fun i j => ↑(trace A B) (↑b i * ↑b j)) i x * ↑(Basis.equivFun b) z x
[PROOFSTEP]
  congr
  rfl
  ext
  rw [mul_comm _ (b.equivFun z _), ← smul_eq_mul, of_apply, ← LinearMap.map_smul]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
| ∑ x : ι, ↑of (fun i j => ↑(trace A B) (↑b i * ↑b j)) i x * ↑(Basis.equivFun b) z x
[PROOFSTEP]
  congr
  rfl
  ext
  rw [mul_comm _ (b.equivFun z _), ← smul_eq_mul, of_apply, ← LinearMap.map_smul]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
| ∑ x : ι, ↑of (fun i j => ↑(trace A B) (↑b i * ↑b j)) i x * ↑(Basis.equivFun b) z x
[PROOFSTEP]
congr
[GOAL]
case s
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
| univ
case f
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
| fun x => ↑of (fun i j => ↑(trace A B) (↑b i * ↑b j)) i x * ↑(Basis.equivFun b) z x
[PROOFSTEP]
rfl
[GOAL]
case f
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
| fun x => ↑of (fun i j => ↑(trace A B) (↑b i * ↑b j)) i x * ↑(Basis.equivFun b) z x
[PROOFSTEP]
ext
[GOAL]
case f.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i x✝ : ι
| ↑of (fun i j => ↑(trace A B) (↑b i * ↑b j)) i x✝ * ↑(Basis.equivFun b) z x✝
[PROOFSTEP]
rw [mul_comm _ (b.equivFun z _), ← smul_eq_mul, of_apply, ← LinearMap.map_smul]
[GOAL]
case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
⊢ ∑ x : ι, ↑(trace A B) (↑(Basis.equivFun b) z x • (↑b i * ↑b x)) = ↑(trace A B) (z * ↑b i)
[PROOFSTEP]
rw [← LinearMap.map_sum]
[GOAL]
case h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
⊢ ↑(trace A B) (∑ i_1 : ι, ↑(Basis.equivFun b) z i_1 • (↑b i * ↑b i_1)) = ↑(trace A B) (z * ↑b i)
[PROOFSTEP]
congr
[GOAL]
case h.h.e_6.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
⊢ ∑ i_1 : ι, ↑(Basis.equivFun b) z i_1 • (↑b i * ↑b i_1) = z * ↑b i
[PROOFSTEP]
conv_lhs =>
  congr
  rfl
  ext
  rw [← mul_smul_comm]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
| ∑ i_1 : ι, ↑(Basis.equivFun b) z i_1 • (↑b i * ↑b i_1)
[PROOFSTEP]
  congr
  rfl
  ext
  rw [← mul_smul_comm]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
| ∑ i_1 : ι, ↑(Basis.equivFun b) z i_1 • (↑b i * ↑b i_1)
[PROOFSTEP]
  congr
  rfl
  ext
  rw [← mul_smul_comm]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
| ∑ i_1 : ι, ↑(Basis.equivFun b) z i_1 • (↑b i * ↑b i_1)
[PROOFSTEP]
congr
[GOAL]
case s
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
| univ
case f
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
| fun i_1 => ↑(Basis.equivFun b) z i_1 • (↑b i * ↑b i_1)
[PROOFSTEP]
rfl
[GOAL]
case f
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
| fun i_1 => ↑(Basis.equivFun b) z i_1 • (↑b i * ↑b i_1)
[PROOFSTEP]
ext
[GOAL]
case f.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i x✝ : ι
| ↑(Basis.equivFun b) z x✝ • (↑b i * ↑b x✝)
[PROOFSTEP]
rw [← mul_smul_comm]
[GOAL]
case h.h.e_6.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
⊢ ∑ x : ι, ↑b i * ↑(Basis.equivFun b) z x • ↑b x = z * ↑b i
[PROOFSTEP]
rw [← Finset.mul_sum, mul_comm z]
[GOAL]
case h.h.e_6.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
⊢ ↑b i * ∑ x : ι, ↑(Basis.equivFun b) z x • ↑b x = ↑b i * z
[PROOFSTEP]
congr
[GOAL]
case h.h.e_6.h.e_a
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
b : Basis ι A B
z : B
i : ι
⊢ ∑ x : ι, ↑(Basis.equivFun b) z x • ↑b x = z
[PROOFSTEP]
rw [b.sum_equivFun]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
pb : PowerBasis A B
e : Fin pb.dim ≃ (B →ₐ[A] C)
⊢ embeddingsMatrixReindex A C (↑pb.basis) e = (vandermonde fun i => ↑(↑e i) pb.gen)ᵀ
[PROOFSTEP]
ext i j
[GOAL]
case a.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁸ : CommRing R
inst✝¹⁷ : CommRing S
inst✝¹⁶ : CommRing T
inst✝¹⁵ : Algebra R S
inst✝¹⁴ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹³ : Field K
inst✝¹² : Field L
inst✝¹¹ : Algebra K L
ι κ : Type w
inst✝¹⁰ : Fintype ι
F : Type u_6
inst✝⁹ : Field F
inst✝⁸ : Algebra R L
inst✝⁷ : Algebra L F
inst✝⁶ : Algebra R F
inst✝⁵ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁴ : CommRing A
inst✝³ : CommRing B
inst✝² : Algebra A B
inst✝¹ : CommRing C
inst✝ : Algebra A C
pb : PowerBasis A B
e : Fin pb.dim ≃ (B →ₐ[A] C)
i j : Fin pb.dim
⊢ embeddingsMatrixReindex A C (↑pb.basis) e i j = (vandermonde fun i => ↑(↑e i) pb.gen)ᵀ i j
[PROOFSTEP]
simp [embeddingsMatrixReindex, embeddingsMatrix]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²³ : CommRing R
inst✝²² : CommRing S
inst✝²¹ : CommRing T
inst✝²⁰ : Algebra R S
inst✝¹⁹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁸ : Field K
inst✝¹⁷ : Field L
inst✝¹⁶ : Algebra K L
ι κ : Type w
inst✝¹⁵ : Fintype ι
F : Type u_6
inst✝¹⁴ : Field F
inst✝¹³ : Algebra R L
inst✝¹² : Algebra L F
inst✝¹¹ : Algebra R F
inst✝¹⁰ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁹ : CommRing A
inst✝⁸ : CommRing B
inst✝⁷ : Algebra A B
inst✝⁶ : CommRing C
inst✝⁵ : Algebra A C
E : Type z
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Module.Finite K L
inst✝¹ : IsSeparable K L
inst✝ : IsAlgClosed E
b : κ → L
pb : PowerBasis K L
⊢ Matrix.map (traceMatrix K b) ↑(algebraMap K E) = embeddingsMatrix K E b * (embeddingsMatrix K E b)ᵀ
[PROOFSTEP]
ext (i j)
[GOAL]
case a.h
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²³ : CommRing R
inst✝²² : CommRing S
inst✝²¹ : CommRing T
inst✝²⁰ : Algebra R S
inst✝¹⁹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁸ : Field K
inst✝¹⁷ : Field L
inst✝¹⁶ : Algebra K L
ι κ : Type w
inst✝¹⁵ : Fintype ι
F : Type u_6
inst✝¹⁴ : Field F
inst✝¹³ : Algebra R L
inst✝¹² : Algebra L F
inst✝¹¹ : Algebra R F
inst✝¹⁰ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝⁹ : CommRing A
inst✝⁸ : CommRing B
inst✝⁷ : Algebra A B
inst✝⁶ : CommRing C
inst✝⁵ : Algebra A C
E : Type z
inst✝⁴ : Field E
inst✝³ : Algebra K E
inst✝² : Module.Finite K L
inst✝¹ : IsSeparable K L
inst✝ : IsAlgClosed E
b : κ → L
pb : PowerBasis K L
i j : κ
⊢ Matrix.map (traceMatrix K b) (↑(algebraMap K E)) i j = (embeddingsMatrix K E b * (embeddingsMatrix K E b)ᵀ) i j
[PROOFSTEP]
simp [trace_eq_sum_embeddings, embeddingsMatrix, Matrix.mul_apply]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝²⁴ : CommRing R
inst✝²³ : CommRing S
inst✝²² : CommRing T
inst✝²¹ : Algebra R S
inst✝²⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁹ : Field K
inst✝¹⁸ : Field L
inst✝¹⁷ : Algebra K L
ι κ : Type w
inst✝¹⁶ : Fintype ι
F : Type u_6
inst✝¹⁵ : Field F
inst✝¹⁴ : Algebra R L
inst✝¹³ : Algebra L F
inst✝¹² : Algebra R F
inst✝¹¹ : IsScalarTower R L F
A : Type u
B : Type v
C : Type z
inst✝¹⁰ : CommRing A
inst✝⁹ : CommRing B
inst✝⁸ : Algebra A B
inst✝⁷ : CommRing C
inst✝⁶ : Algebra A C
E : Type z
inst✝⁵ : Field E
inst✝⁴ : Algebra K E
inst✝³ : Module.Finite K L
inst✝² : IsSeparable K L
inst✝¹ : IsAlgClosed E
b : κ → L
pb : PowerBasis K L
inst✝ : Fintype κ
e : κ ≃ (L →ₐ[K] E)
⊢ Matrix.map (traceMatrix K b) ↑(algebraMap K E) = embeddingsMatrixReindex K E b e * (embeddingsMatrixReindex K E b e)ᵀ
[PROOFSTEP]
rw [traceMatrix_eq_embeddingsMatrix_mul_trans, embeddingsMatrixReindex, reindex_apply, transpose_submatrix, ←
  submatrix_mul_transpose_submatrix, ← Equiv.coe_refl, Equiv.refl_symm]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
pb : PowerBasis K L
inst✝ : IsSeparable K L
⊢ det (traceMatrix K ↑pb.basis) ≠ 0
[PROOFSTEP]
suffices algebraMap K (AlgebraicClosure L) (det (traceMatrix K pb.basis)) ≠ 0
  by
  refine' mt (fun ht => _) this
  rw [ht, RingHom.map_zero]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
pb : PowerBasis K L
inst✝ : IsSeparable K L
this : ↑(algebraMap K (AlgebraicClosure L)) (det (traceMatrix K ↑pb.basis)) ≠ 0
⊢ det (traceMatrix K ↑pb.basis) ≠ 0
[PROOFSTEP]
refine' mt (fun ht => _) this
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
pb : PowerBasis K L
inst✝ : IsSeparable K L
this : ↑(algebraMap K (AlgebraicClosure L)) (det (traceMatrix K ↑pb.basis)) ≠ 0
ht : det (traceMatrix K ↑pb.basis) = 0
⊢ ↑(algebraMap K (AlgebraicClosure L)) (det (traceMatrix K ↑pb.basis)) = 0
[PROOFSTEP]
rw [ht, RingHom.map_zero]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
pb : PowerBasis K L
inst✝ : IsSeparable K L
⊢ ↑(algebraMap K (AlgebraicClosure L)) (det (traceMatrix K ↑pb.basis)) ≠ 0
[PROOFSTEP]
haveI : FiniteDimensional K L := pb.finiteDimensional
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
pb : PowerBasis K L
inst✝ : IsSeparable K L
this : FiniteDimensional K L
⊢ ↑(algebraMap K (AlgebraicClosure L)) (det (traceMatrix K ↑pb.basis)) ≠ 0
[PROOFSTEP]
let e : Fin pb.dim ≃ (L →ₐ[K] AlgebraicClosure L) := (Fintype.equivFinOfCardEq ?_).symm
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
pb : PowerBasis K L
inst✝ : IsSeparable K L
this : FiniteDimensional K L
e : Fin pb.dim ≃ (L →ₐ[K] AlgebraicClosure L) := (Fintype.equivFinOfCardEq ?refine_1).symm
⊢ ↑(algebraMap K (AlgebraicClosure L)) (det (traceMatrix K ↑pb.basis)) ≠ 0
case refine_1
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
pb : PowerBasis K L
inst✝ : IsSeparable K L
this : FiniteDimensional K L
⊢ Fintype.card (L →ₐ[K] AlgebraicClosure L) = pb.dim
[PROOFSTEP]
rw [RingHom.map_det, RingHom.mapMatrix_apply, traceMatrix_eq_embeddingsMatrixReindex_mul_trans K _ _ e,
  embeddingsMatrixReindex_eq_vandermonde, det_mul, det_transpose]
  -- Porting note: the following is necessary.
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
pb : PowerBasis K L
inst✝ : IsSeparable K L
this : FiniteDimensional K L
e : Fin pb.dim ≃ (L →ₐ[K] AlgebraicClosure L) := (Fintype.equivFinOfCardEq ?refine_1).symm
⊢ det (vandermonde fun i => ↑(↑e i) pb.gen) * det (vandermonde fun i => ↑(↑e i) pb.gen)ᵀᵀ ≠ 0
case refine_1
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
pb : PowerBasis K L
inst✝ : IsSeparable K L
this : FiniteDimensional K L
⊢ Fintype.card (L →ₐ[K] AlgebraicClosure L) = pb.dim
[PROOFSTEP]
haveI := IsDomain.to_noZeroDivisors (AlgebraicClosure L)
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
pb : PowerBasis K L
inst✝ : IsSeparable K L
this✝ : FiniteDimensional K L
e : Fin pb.dim ≃ (L →ₐ[K] AlgebraicClosure L) := (Fintype.equivFinOfCardEq ?refine_1).symm
this : NoZeroDivisors (AlgebraicClosure L)
⊢ det (vandermonde fun i => ↑(↑e i) pb.gen) * det (vandermonde fun i => ↑(↑e i) pb.gen)ᵀᵀ ≠ 0
case refine_1
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
pb : PowerBasis K L
inst✝ : IsSeparable K L
this : FiniteDimensional K L
⊢ Fintype.card (L →ₐ[K] AlgebraicClosure L) = pb.dim
[PROOFSTEP]
refine' mt mul_self_eq_zero.mp _
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
pb : PowerBasis K L
inst✝ : IsSeparable K L
this✝ : FiniteDimensional K L
e : Fin pb.dim ≃ (L →ₐ[K] AlgebraicClosure L) := (Fintype.equivFinOfCardEq ?refine_1).symm
this : NoZeroDivisors (AlgebraicClosure L)
⊢ ¬det (vandermonde fun i => ↑(↑e i) pb.gen) = 0
[PROOFSTEP]
simp only [det_vandermonde, Finset.prod_eq_zero_iff, not_exists, sub_eq_zero]
[GOAL]
case refine_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
pb : PowerBasis K L
inst✝ : IsSeparable K L
this✝ : FiniteDimensional K L
e : Fin pb.dim ≃ (L →ₐ[K] AlgebraicClosure L) := (Fintype.equivFinOfCardEq ?refine_1).symm
this : NoZeroDivisors (AlgebraicClosure L)
⊢ ∀ (x : Fin pb.dim),
    ¬(x ∈ Finset.univ ∧
        ∃ a,
          a ∈ Finset.Ioi x ∧
            ↑(↑(Fintype.equivFinOfCardEq ?refine_1).symm a) pb.gen =
              ↑(↑(Fintype.equivFinOfCardEq ?refine_1).symm x) pb.gen)
[PROOFSTEP]
rintro i ⟨_, j, hij, h⟩
[GOAL]
case refine_2.intro.intro.intro
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
pb : PowerBasis K L
inst✝ : IsSeparable K L
this✝ : FiniteDimensional K L
e : Fin pb.dim ≃ (L →ₐ[K] AlgebraicClosure L) := (Fintype.equivFinOfCardEq ?refine_1).symm
this : NoZeroDivisors (AlgebraicClosure L)
i : Fin pb.dim
left✝ : i ∈ Finset.univ
j : Fin pb.dim
hij : j ∈ Finset.Ioi i
h : ↑(↑(Fintype.equivFinOfCardEq ?refine_1).symm j) pb.gen = ↑(↑(Fintype.equivFinOfCardEq ?refine_1).symm i) pb.gen
⊢ False
[PROOFSTEP]
exact (Finset.mem_Ioi.mp hij).ne' (e.injective <| pb.algHom_ext h)
[GOAL]
case refine_1
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁴ : CommRing R
inst✝¹³ : CommRing S
inst✝¹² : CommRing T
inst✝¹¹ : Algebra R S
inst✝¹⁰ : Algebra R T
K : Type u_4
L : Type u_5
inst✝⁹ : Field K
inst✝⁸ : Field L
inst✝⁷ : Algebra K L
ι κ : Type w
inst✝⁶ : Fintype ι
F : Type u_6
inst✝⁵ : Field F
inst✝⁴ : Algebra R L
inst✝³ : Algebra L F
inst✝² : Algebra R F
inst✝¹ : IsScalarTower R L F
pb : PowerBasis K L
inst✝ : IsSeparable K L
this : FiniteDimensional K L
⊢ Fintype.card (L →ₐ[K] AlgebraicClosure L) = pb.dim
[PROOFSTEP]
rw [AlgHom.card, pb.finrank]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing T
inst✝¹² : Algebra R S
inst✝¹¹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁰ : Field K
inst✝⁹ : Field L
inst✝⁸ : Algebra K L
ι κ : Type w
inst✝⁷ : Fintype ι
F : Type u_6
inst✝⁶ : Field F
inst✝⁵ : Algebra R L
inst✝⁴ : Algebra L F
inst✝³ : Algebra R F
inst✝² : IsScalarTower R L F
pb : PowerBasis K L
inst✝¹ : IsSeparable K L
inst✝ : DecidableEq ι
b : Basis ι K L
⊢ det (↑(BilinForm.toMatrix b) (traceForm K L)) ≠ 0
[PROOFSTEP]
haveI : FiniteDimensional K L := FiniteDimensional.of_fintype_basis b
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing T
inst✝¹² : Algebra R S
inst✝¹¹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁰ : Field K
inst✝⁹ : Field L
inst✝⁸ : Algebra K L
ι κ : Type w
inst✝⁷ : Fintype ι
F : Type u_6
inst✝⁶ : Field F
inst✝⁵ : Algebra R L
inst✝⁴ : Algebra L F
inst✝³ : Algebra R F
inst✝² : IsScalarTower R L F
pb : PowerBasis K L
inst✝¹ : IsSeparable K L
inst✝ : DecidableEq ι
b : Basis ι K L
this : FiniteDimensional K L
⊢ det (↑(BilinForm.toMatrix b) (traceForm K L)) ≠ 0
[PROOFSTEP]
let pb : PowerBasis K L := Field.powerBasisOfFiniteOfSeparable _ _
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing T
inst✝¹² : Algebra R S
inst✝¹¹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁰ : Field K
inst✝⁹ : Field L
inst✝⁸ : Algebra K L
ι κ : Type w
inst✝⁷ : Fintype ι
F : Type u_6
inst✝⁶ : Field F
inst✝⁵ : Algebra R L
inst✝⁴ : Algebra L F
inst✝³ : Algebra R F
inst✝² : IsScalarTower R L F
pb✝ : PowerBasis K L
inst✝¹ : IsSeparable K L
inst✝ : DecidableEq ι
b : Basis ι K L
this : FiniteDimensional K L
pb : PowerBasis K L := Field.powerBasisOfFiniteOfSeparable K L
⊢ det (↑(BilinForm.toMatrix b) (traceForm K L)) ≠ 0
[PROOFSTEP]
rw [← BilinForm.toMatrix_mul_basis_toMatrix pb.basis b, ← det_comm' (pb.basis.toMatrix_mul_toMatrix_flip b) _, ←
  Matrix.mul_assoc, det_mul]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing T
inst✝¹² : Algebra R S
inst✝¹¹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁰ : Field K
inst✝⁹ : Field L
inst✝⁸ : Algebra K L
ι κ : Type w
inst✝⁷ : Fintype ι
F : Type u_6
inst✝⁶ : Field F
inst✝⁵ : Algebra R L
inst✝⁴ : Algebra L F
inst✝³ : Algebra R F
inst✝² : IsScalarTower R L F
pb✝ : PowerBasis K L
inst✝¹ : IsSeparable K L
inst✝ : DecidableEq ι
b : Basis ι K L
this : FiniteDimensional K L
pb : PowerBasis K L := Field.powerBasisOfFiniteOfSeparable K L
⊢ det (Basis.toMatrix pb.basis ↑b * (Basis.toMatrix pb.basis ↑b)ᵀ) *
      det (↑(BilinForm.toMatrix pb.basis) (traceForm K L)) ≠
    0
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing T
inst✝¹² : Algebra R S
inst✝¹¹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁰ : Field K
inst✝⁹ : Field L
inst✝⁸ : Algebra K L
ι κ : Type w
inst✝⁷ : Fintype ι
F : Type u_6
inst✝⁶ : Field F
inst✝⁵ : Algebra R L
inst✝⁴ : Algebra L F
inst✝³ : Algebra R F
inst✝² : IsScalarTower R L F
pb✝ : PowerBasis K L
inst✝¹ : IsSeparable K L
inst✝ : DecidableEq ι
b : Basis ι K L
this : FiniteDimensional K L
pb : PowerBasis K L := Field.powerBasisOfFiniteOfSeparable K L
⊢ Basis.toMatrix b ↑pb.basis * Basis.toMatrix pb.basis ↑b = 1
[PROOFSTEP]
swap
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing T
inst✝¹² : Algebra R S
inst✝¹¹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁰ : Field K
inst✝⁹ : Field L
inst✝⁸ : Algebra K L
ι κ : Type w
inst✝⁷ : Fintype ι
F : Type u_6
inst✝⁶ : Field F
inst✝⁵ : Algebra R L
inst✝⁴ : Algebra L F
inst✝³ : Algebra R F
inst✝² : IsScalarTower R L F
pb✝ : PowerBasis K L
inst✝¹ : IsSeparable K L
inst✝ : DecidableEq ι
b : Basis ι K L
this : FiniteDimensional K L
pb : PowerBasis K L := Field.powerBasisOfFiniteOfSeparable K L
⊢ Basis.toMatrix b ↑pb.basis * Basis.toMatrix pb.basis ↑b = 1
[PROOFSTEP]
apply Basis.toMatrix_mul_toMatrix_flip
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing T
inst✝¹² : Algebra R S
inst✝¹¹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁰ : Field K
inst✝⁹ : Field L
inst✝⁸ : Algebra K L
ι κ : Type w
inst✝⁷ : Fintype ι
F : Type u_6
inst✝⁶ : Field F
inst✝⁵ : Algebra R L
inst✝⁴ : Algebra L F
inst✝³ : Algebra R F
inst✝² : IsScalarTower R L F
pb✝ : PowerBasis K L
inst✝¹ : IsSeparable K L
inst✝ : DecidableEq ι
b : Basis ι K L
this : FiniteDimensional K L
pb : PowerBasis K L := Field.powerBasisOfFiniteOfSeparable K L
⊢ det (Basis.toMatrix pb.basis ↑b * (Basis.toMatrix pb.basis ↑b)ᵀ) *
      det (↑(BilinForm.toMatrix pb.basis) (traceForm K L)) ≠
    0
[PROOFSTEP]
refine' mul_ne_zero (isUnit_of_mul_eq_one _ ((b.toMatrix pb.basis)ᵀ * b.toMatrix pb.basis).det _).ne_zero _
[GOAL]
case refine'_1
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing T
inst✝¹² : Algebra R S
inst✝¹¹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁰ : Field K
inst✝⁹ : Field L
inst✝⁸ : Algebra K L
ι κ : Type w
inst✝⁷ : Fintype ι
F : Type u_6
inst✝⁶ : Field F
inst✝⁵ : Algebra R L
inst✝⁴ : Algebra L F
inst✝³ : Algebra R F
inst✝² : IsScalarTower R L F
pb✝ : PowerBasis K L
inst✝¹ : IsSeparable K L
inst✝ : DecidableEq ι
b : Basis ι K L
this : FiniteDimensional K L
pb : PowerBasis K L := Field.powerBasisOfFiniteOfSeparable K L
⊢ det (Basis.toMatrix pb.basis ↑b * (Basis.toMatrix pb.basis ↑b)ᵀ) *
      det ((Basis.toMatrix b ↑pb.basis)ᵀ * Basis.toMatrix b ↑pb.basis) =
    1
[PROOFSTEP]
calc
  (pb.basis.toMatrix b * (pb.basis.toMatrix b)ᵀ).det * ((b.toMatrix pb.basis)ᵀ * b.toMatrix pb.basis).det =
      (pb.basis.toMatrix b * (b.toMatrix pb.basis * pb.basis.toMatrix b)ᵀ * b.toMatrix pb.basis).det :=
    by simp only [← det_mul, Matrix.mul_assoc, Matrix.transpose_mul]
  _ = 1 := by simp only [Basis.toMatrix_mul_toMatrix_flip, Matrix.transpose_one, Matrix.mul_one, Matrix.det_one]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing T
inst✝¹² : Algebra R S
inst✝¹¹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁰ : Field K
inst✝⁹ : Field L
inst✝⁸ : Algebra K L
ι κ : Type w
inst✝⁷ : Fintype ι
F : Type u_6
inst✝⁶ : Field F
inst✝⁵ : Algebra R L
inst✝⁴ : Algebra L F
inst✝³ : Algebra R F
inst✝² : IsScalarTower R L F
pb✝ : PowerBasis K L
inst✝¹ : IsSeparable K L
inst✝ : DecidableEq ι
b : Basis ι K L
this : FiniteDimensional K L
pb : PowerBasis K L := Field.powerBasisOfFiniteOfSeparable K L
⊢ det (Basis.toMatrix pb.basis ↑b * (Basis.toMatrix pb.basis ↑b)ᵀ) *
      det ((Basis.toMatrix b ↑pb.basis)ᵀ * Basis.toMatrix b ↑pb.basis) =
    det
      (Basis.toMatrix pb.basis ↑b * (Basis.toMatrix b ↑pb.basis * Basis.toMatrix pb.basis ↑b)ᵀ *
        Basis.toMatrix b ↑pb.basis)
[PROOFSTEP]
simp only [← det_mul, Matrix.mul_assoc, Matrix.transpose_mul]
[GOAL]
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing T
inst✝¹² : Algebra R S
inst✝¹¹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁰ : Field K
inst✝⁹ : Field L
inst✝⁸ : Algebra K L
ι κ : Type w
inst✝⁷ : Fintype ι
F : Type u_6
inst✝⁶ : Field F
inst✝⁵ : Algebra R L
inst✝⁴ : Algebra L F
inst✝³ : Algebra R F
inst✝² : IsScalarTower R L F
pb✝ : PowerBasis K L
inst✝¹ : IsSeparable K L
inst✝ : DecidableEq ι
b : Basis ι K L
this : FiniteDimensional K L
pb : PowerBasis K L := Field.powerBasisOfFiniteOfSeparable K L
⊢ det
      (Basis.toMatrix pb.basis ↑b * (Basis.toMatrix b ↑pb.basis * Basis.toMatrix pb.basis ↑b)ᵀ *
        Basis.toMatrix b ↑pb.basis) =
    1
[PROOFSTEP]
simp only [Basis.toMatrix_mul_toMatrix_flip, Matrix.transpose_one, Matrix.mul_one, Matrix.det_one]
[GOAL]
case refine'_2
R : Type u_1
S : Type u_2
T : Type u_3
inst✝¹⁵ : CommRing R
inst✝¹⁴ : CommRing S
inst✝¹³ : CommRing T
inst✝¹² : Algebra R S
inst✝¹¹ : Algebra R T
K : Type u_4
L : Type u_5
inst✝¹⁰ : Field K
inst✝⁹ : Field L
inst✝⁸ : Algebra K L
ι κ : Type w
inst✝⁷ : Fintype ι
F : Type u_6
inst✝⁶ : Field F
inst✝⁵ : Algebra R L
inst✝⁴ : Algebra L F
inst✝³ : Algebra R F
inst✝² : IsScalarTower R L F
pb✝ : PowerBasis K L
inst✝¹ : IsSeparable K L
inst✝ : DecidableEq ι
b : Basis ι K L
this : FiniteDimensional K L
pb : PowerBasis K L := Field.powerBasisOfFiniteOfSeparable K L
⊢ det (↑(BilinForm.toMatrix pb.basis) (traceForm K L)) ≠ 0
[PROOFSTEP]
simpa only [traceMatrix_of_basis] using det_traceMatrix_ne_zero' pb
