Theorem: Algebra.trace_prod_apply
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✝³ : 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.1 + (trace R T) x.2
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✝³ : Module.Free R S
inst✝² : Module.Free R T
inst✝¹ : Module.Finite R S
inst✝ : Module.Finite R T
x : S × T
a✝ : Nontrivial R
⊢ (trace R (S × T)) x = (trace R S) x.1 + (trace R T) x.2
tactic: nontriviality R
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✝³ : Module.Free R S
inst✝² : Module.Free R T
inst✝¹ : Module.Finite R S
inst✝ : Module.Finite R T
x : S × T
a✝ : Nontrivial R
⊢ (trace R (S × T)) x = (trace R S) x.1 + (trace R T) x.2
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✝³ : Module.Free R S
inst✝² : Module.Free R T
inst✝¹ : Module.Finite R S
inst✝ : Module.Finite R T
x : S × T
a✝ : Nontrivial R
f : S × T →ₗ[R] Module.End R S × Module.End R T := (lmul R S).toLinearMap.prodMap (lmul R T).toLinearMap
⊢ (trace R (S × T)) x = (trace R S) x.1 + (trace R T) x.2
tactic: let f := (lmul R S).toLinearMap.prodMap (lmul R T).toLinearMap
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✝³ : Module.Free R S
inst✝² : Module.Free R T
inst✝¹ : Module.Finite R S
inst✝ : Module.Finite R T
x : S × T
a✝ : Nontrivial R
f : S × T →ₗ[R] Module.End R S × Module.End R T := (lmul R S).toLinearMap.prodMap (lmul R T).toLinearMap
⊢ (trace R (S × T)) x = (trace R S) x.1 + (trace R T) x.2
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✝³ : Module.Free R S
inst✝² : Module.Free R T
inst✝¹ : Module.Finite R S
inst✝ : Module.Finite R T
x : S × T
a✝ : Nontrivial R
f : S × T →ₗ[R] Module.End R S × Module.End R T := (lmul R S).toLinearMap.prodMap (lmul R T).toLinearMap
this : (lmul R (S × T)).toLinearMap = prodMapLinear R S T S T R ∘ₗ f
⊢ (trace R (S × T)) x = (trace R S) x.1 + (trace R T) x.2
tactic: have : (lmul R (S × T)).toLinearMap = (prodMapLinear R S T S T R).comp f :=
    LinearMap.ext₂ Prod.mul_def
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✝³ : Module.Free R S
inst✝² : Module.Free R T
inst✝¹ : Module.Finite R S
inst✝ : Module.Finite R T
x : S × T
a✝ : Nontrivial R
f : S × T →ₗ[R] Module.End R S × Module.End R T := (lmul R S).toLinearMap.prodMap (lmul R T).toLinearMap
this : (lmul R (S × T)).toLinearMap = prodMapLinear R S T S T R ∘ₗ f
⊢ (trace R (S × T)) x = (trace R S) x.1 + (trace R T) x.2
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✝³ : Module.Free R S
inst✝² : Module.Free R T
inst✝¹ : Module.Finite R S
inst✝ : Module.Finite R T
x : S × T
a✝ : Nontrivial R
f : S × T →ₗ[R] Module.End R S × Module.End R T := (lmul R S).toLinearMap.prodMap (lmul R T).toLinearMap
this : (lmul R (S × T)).toLinearMap = prodMapLinear R S T S T R ∘ₗ f
⊢ (LinearMap.trace R (S × T) ∘ₗ prodMapLinear R S T S T R ∘ₗ f) x =
    (LinearMap.trace R S ∘ₗ (lmul R S).toLinearMap) x.1 + (LinearMap.trace R T ∘ₗ (lmul R T).toLinearMap) x.2
tactic: simp_rw [trace, this]
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✝³ : Module.Free R S
inst✝² : Module.Free R T
inst✝¹ : Module.Finite R S
inst✝ : Module.Finite R T
x : S × T
a✝ : Nontrivial R
f : S × T →ₗ[R] Module.End R S × Module.End R T := (lmul R S).toLinearMap.prodMap (lmul R T).toLinearMap
this : (lmul R (S × T)).toLinearMap = prodMapLinear R S T S T R ∘ₗ f
⊢ (LinearMap.trace R (S × T) ∘ₗ prodMapLinear R S T S T R ∘ₗ f) x =
    (LinearMap.trace R S ∘ₗ (lmul R S).toLinearMap) x.1 + (LinearMap.trace R T ∘ₗ (lmul R T).toLinearMap) x.2
state_after: no goals
tactic: exact trace_prodMap' _ _