Theorem: Algebra.trace_trace_of_basis
File: Mathlib/RingTheory/Trace/Defs.lean

Proof steps:
state_before: 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
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_4
κ : Type u_5
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
state_after: 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
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_4
κ : Type u_5
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
tactic: haveI := Classical.decEq ι
state_before: 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
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_4
κ : Type u_5
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
state_after: 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
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_4
κ : Type u_5
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
tactic: haveI := Classical.decEq κ
state_before: 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
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_4
κ : Type u_5
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
state_after: 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
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_4
κ : Type u_5
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
tactic: cases nonempty_fintype ι
state_before: 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
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_4
κ : Type u_5
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
state_after: 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
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_4
κ : Type u_5
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
tactic: cases nonempty_fintype κ
state_before: 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
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_4
κ : Type u_5
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
state_after: 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
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_4
κ : Type u_5
inst✝¹ : Finite ι
inst✝ : Finite κ
b : Basis ι R S
c : Basis κ S T
x : T
this✝ : DecidableEq ι
this : DecidableEq κ
val✝¹ : Fintype ι
val✝ : Fintype κ
⊢ ∑ i : ι, ((leftMulMatrix b) (∑ i : κ, ((leftMulMatrix c) x).diag i)).diag i =
    ∑ x_1 : ι, ∑ y : κ, ((leftMulMatrix (b.smulTower c)) x).diag (x_1, y)
tactic: rw [trace_eq_matrix_trace (b.smulTower c), trace_eq_matrix_trace b, trace_eq_matrix_trace c,
    Matrix.trace, Matrix.trace, Matrix.trace, ← Finset.univ_product_univ, Finset.sum_product]
state_before: 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
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_4
κ : Type u_5
inst✝¹ : Finite ι
inst✝ : Finite κ
b : Basis ι R S
c : Basis κ S T
x : T
this✝ : DecidableEq ι
this : DecidableEq κ
val✝¹ : Fintype ι
val✝ : Fintype κ
⊢ ∑ i : ι, ((leftMulMatrix b) (∑ i : κ, ((leftMulMatrix c) x).diag i)).diag i =
    ∑ x_1 : ι, ∑ y : κ, ((leftMulMatrix (b.smulTower c)) x).diag (x_1, y)
state_after: 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
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_4
κ : Type u_5
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
⊢ ((leftMulMatrix b) (∑ i : κ, ((leftMulMatrix c) x).diag i)).diag i =
    ∑ y : κ, ((leftMulMatrix (b.smulTower c)) x).diag (i, y)
tactic: refine Finset.sum_congr rfl fun i _ ↦ ?_
state_before: 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
ι✝ κ✝ : Type w
inst✝⁴ : Fintype ι✝
b✝ : Basis ι✝ R S
inst✝³ : Algebra S T
inst✝² : IsScalarTower R S T
ι : Type u_4
κ : Type u_5
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
⊢ ((leftMulMatrix b) (∑ i : κ, ((leftMulMatrix c) x).diag i)).diag i =
    ∑ y : κ, ((leftMulMatrix (b.smulTower c)) x).diag (i, y)
state_after: no goals
tactic: simp only [map_sum, smulTower_leftMulMatrix, Finset.sum_apply, Matrix.diag,
    Finset.sum_apply i (Finset.univ : Finset κ) fun y => leftMulMatrix b (leftMulMatrix c x y y)]