Theorem: LinearMap.trace_baseChange
File: Mathlib/LinearAlgebra/Trace.lean

Proof steps:
state_before: R : Type u_1
inst✝¹⁶ : CommRing R
M : Type u_2
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : Module R M
N : Type u_3
P : Type u_4
inst✝¹³ : AddCommGroup N
inst✝¹² : Module R N
inst✝¹¹ : AddCommGroup P
inst✝¹⁰ : Module R P
ι : Type u_5
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : Module.Free R N
inst✝⁶ : Module.Finite R N
inst✝⁵ : Module.Free R P
inst✝⁴ : Module.Finite R P
inst✝³ : Module.Free R M
inst✝² : Module.Finite R M
f : M →ₗ[R] M
A : Type u_6
inst✝¹ : CommRing A
inst✝ : Algebra R A
⊢ (trace A (A ⊗[R] M)) (baseChange A f) = (algebraMap R A) ((trace R M) f)
state_after: R : Type u_1
inst✝¹⁶ : CommRing R
M : Type u_2
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : Module R M
N : Type u_3
P : Type u_4
inst✝¹³ : AddCommGroup N
inst✝¹² : Module R N
inst✝¹¹ : AddCommGroup P
inst✝¹⁰ : Module R P
ι : Type u_5
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : Module.Free R N
inst✝⁶ : Module.Finite R N
inst✝⁵ : Module.Free R P
inst✝⁴ : Module.Finite R P
inst✝³ : Module.Free R M
inst✝² : Module.Finite R M
f : M →ₗ[R] M
A : Type u_6
inst✝¹ : CommRing A
inst✝ : Algebra R A
b : Basis (Module.Free.ChooseBasisIndex R M) R M := Module.Free.chooseBasis R M
⊢ (trace A (A ⊗[R] M)) (baseChange A f) = (algebraMap R A) ((trace R M) f)
tactic: let b := Module.Free.chooseBasis R M
state_before: R : Type u_1
inst✝¹⁶ : CommRing R
M : Type u_2
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : Module R M
N : Type u_3
P : Type u_4
inst✝¹³ : AddCommGroup N
inst✝¹² : Module R N
inst✝¹¹ : AddCommGroup P
inst✝¹⁰ : Module R P
ι : Type u_5
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : Module.Free R N
inst✝⁶ : Module.Finite R N
inst✝⁵ : Module.Free R P
inst✝⁴ : Module.Finite R P
inst✝³ : Module.Free R M
inst✝² : Module.Finite R M
f : M →ₗ[R] M
A : Type u_6
inst✝¹ : CommRing A
inst✝ : Algebra R A
b : Basis (Module.Free.ChooseBasisIndex R M) R M := Module.Free.chooseBasis R M
⊢ (trace A (A ⊗[R] M)) (baseChange A f) = (algebraMap R A) ((trace R M) f)
state_after: R : Type u_1
inst✝¹⁶ : CommRing R
M : Type u_2
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : Module R M
N : Type u_3
P : Type u_4
inst✝¹³ : AddCommGroup N
inst✝¹² : Module R N
inst✝¹¹ : AddCommGroup P
inst✝¹⁰ : Module R P
ι : Type u_5
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : Module.Free R N
inst✝⁶ : Module.Finite R N
inst✝⁵ : Module.Free R P
inst✝⁴ : Module.Finite R P
inst✝³ : Module.Free R M
inst✝² : Module.Finite R M
f : M →ₗ[R] M
A : Type u_6
inst✝¹ : CommRing A
inst✝ : Algebra R A
b : Basis (Module.Free.ChooseBasisIndex R M) R M := Module.Free.chooseBasis R M
b' : Basis (Module.Free.ChooseBasisIndex R M) A (A ⊗[R] M) := Algebra.TensorProduct.basis A b
⊢ (trace A (A ⊗[R] M)) (baseChange A f) = (algebraMap R A) ((trace R M) f)
tactic: let b' := Algebra.TensorProduct.basis A b
state_before: R : Type u_1
inst✝¹⁶ : CommRing R
M : Type u_2
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : Module R M
N : Type u_3
P : Type u_4
inst✝¹³ : AddCommGroup N
inst✝¹² : Module R N
inst✝¹¹ : AddCommGroup P
inst✝¹⁰ : Module R P
ι : Type u_5
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : Module.Free R N
inst✝⁶ : Module.Finite R N
inst✝⁵ : Module.Free R P
inst✝⁴ : Module.Finite R P
inst✝³ : Module.Free R M
inst✝² : Module.Finite R M
f : M →ₗ[R] M
A : Type u_6
inst✝¹ : CommRing A
inst✝ : Algebra R A
b : Basis (Module.Free.ChooseBasisIndex R M) R M := Module.Free.chooseBasis R M
b' : Basis (Module.Free.ChooseBasisIndex R M) A (A ⊗[R] M) := Algebra.TensorProduct.basis A b
⊢ (trace A (A ⊗[R] M)) (baseChange A f) = (algebraMap R A) ((trace R M) f)
state_after: R : Type u_1
inst✝¹⁶ : CommRing R
M : Type u_2
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : Module R M
N : Type u_3
P : Type u_4
inst✝¹³ : AddCommGroup N
inst✝¹² : Module R N
inst✝¹¹ : AddCommGroup P
inst✝¹⁰ : Module R P
ι : Type u_5
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : Module.Free R N
inst✝⁶ : Module.Finite R N
inst✝⁵ : Module.Free R P
inst✝⁴ : Module.Finite R P
inst✝³ : Module.Free R M
inst✝² : Module.Finite R M
f : M →ₗ[R] M
A : Type u_6
inst✝¹ : CommRing A
inst✝ : Algebra R A
b : Basis (Module.Free.ChooseBasisIndex R M) R M := Module.Free.chooseBasis R M
b' : Basis (Module.Free.ChooseBasisIndex R M) A (A ⊗[R] M) := Algebra.TensorProduct.basis A b
⊢ (trace A (A ⊗[R] M)) (baseChange A f) = ↑(algebraMap R A) ((trace R M) f)
tactic: change _ = (algebraMap R A : R →+ A) _
state_before: R : Type u_1
inst✝¹⁶ : CommRing R
M : Type u_2
inst✝¹⁵ : AddCommGroup M
inst✝¹⁴ : Module R M
N : Type u_3
P : Type u_4
inst✝¹³ : AddCommGroup N
inst✝¹² : Module R N
inst✝¹¹ : AddCommGroup P
inst✝¹⁰ : Module R P
ι : Type u_5
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : Module.Free R N
inst✝⁶ : Module.Finite R N
inst✝⁵ : Module.Free R P
inst✝⁴ : Module.Finite R P
inst✝³ : Module.Free R M
inst✝² : Module.Finite R M
f : M →ₗ[R] M
A : Type u_6
inst✝¹ : CommRing A
inst✝ : Algebra R A
b : Basis (Module.Free.ChooseBasisIndex R M) R M := Module.Free.chooseBasis R M
b' : Basis (Module.Free.ChooseBasisIndex R M) A (A ⊗[R] M) := Algebra.TensorProduct.basis A b
⊢ (trace A (A ⊗[R] M)) (baseChange A f) = ↑(algebraMap R A) ((trace R M) f)
state_after: no goals
tactic: simp [b', trace_eq_matrix_trace R b, trace_eq_matrix_trace A b', AddMonoidHom.map_trace]