Theorem: LinearEquiv.charpoly_conj
File: Mathlib/LinearAlgebra/Charpoly/ToMatrix.lean

Proof steps:
state_before: R : Type u_1
M : Type u_2
M₁ : Type u_3
M₂ : Type u_4
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : AddCommGroup M₁
inst✝⁶ : Module R M₁
inst✝⁵ : Module.Finite R M₁
inst✝⁴ : Module.Free R M₁
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : Module.Finite R M₂
inst✝ : Module.Free R M₂
f : M →ₗ[R] M
e : M₁ ≃ₗ[R] M₂
φ : Module.End R M₁
⊢ LinearMap.charpoly (e.conj φ) = LinearMap.charpoly φ
state_after: R : Type u_1
M : Type u_2
M₁ : Type u_3
M₂ : Type u_4
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : AddCommGroup M₁
inst✝⁶ : Module R M₁
inst✝⁵ : Module.Finite R M₁
inst✝⁴ : Module.Free R M₁
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : Module.Finite R M₂
inst✝ : Module.Free R M₂
f : M →ₗ[R] M
e : M₁ ≃ₗ[R] M₂
φ : Module.End R M₁
b : Basis (ChooseBasisIndex R M₁) R M₁ := chooseBasis R M₁
⊢ LinearMap.charpoly (e.conj φ) = LinearMap.charpoly φ
tactic: let b := chooseBasis R M₁
state_before: R : Type u_1
M : Type u_2
M₁ : Type u_3
M₂ : Type u_4
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : AddCommGroup M₁
inst✝⁶ : Module R M₁
inst✝⁵ : Module.Finite R M₁
inst✝⁴ : Module.Free R M₁
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : Module.Finite R M₂
inst✝ : Module.Free R M₂
f : M →ₗ[R] M
e : M₁ ≃ₗ[R] M₂
φ : Module.End R M₁
b : Basis (ChooseBasisIndex R M₁) R M₁ := chooseBasis R M₁
⊢ LinearMap.charpoly (e.conj φ) = LinearMap.charpoly φ
state_after: R : Type u_1
M : Type u_2
M₁ : Type u_3
M₂ : Type u_4
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : AddCommGroup M₁
inst✝⁶ : Module R M₁
inst✝⁵ : Module.Finite R M₁
inst✝⁴ : Module.Free R M₁
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : Module.Finite R M₂
inst✝ : Module.Free R M₂
f : M →ₗ[R] M
e : M₁ ≃ₗ[R] M₂
φ : Module.End R M₁
b : Basis (ChooseBasisIndex R M₁) R M₁ := chooseBasis R M₁
⊢ ((LinearMap.toMatrix (b.map e) (b.map e)) (e.conj φ)).charpoly = ((LinearMap.toMatrix b b) φ).charpoly
tactic: rw [← LinearMap.charpoly_toMatrix φ b, ← LinearMap.charpoly_toMatrix (e.conj φ) (b.map e)]
state_before: R : Type u_1
M : Type u_2
M₁ : Type u_3
M₂ : Type u_4
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : AddCommGroup M₁
inst✝⁶ : Module R M₁
inst✝⁵ : Module.Finite R M₁
inst✝⁴ : Module.Free R M₁
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : Module.Finite R M₂
inst✝ : Module.Free R M₂
f : M →ₗ[R] M
e : M₁ ≃ₗ[R] M₂
φ : Module.End R M₁
b : Basis (ChooseBasisIndex R M₁) R M₁ := chooseBasis R M₁
⊢ ((LinearMap.toMatrix (b.map e) (b.map e)) (e.conj φ)).charpoly = ((LinearMap.toMatrix b b) φ).charpoly
state_after: case e_M
R : Type u_1
M : Type u_2
M₁ : Type u_3
M₂ : Type u_4
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : AddCommGroup M₁
inst✝⁶ : Module R M₁
inst✝⁵ : Module.Finite R M₁
inst✝⁴ : Module.Free R M₁
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : Module.Finite R M₂
inst✝ : Module.Free R M₂
f : M →ₗ[R] M
e : M₁ ≃ₗ[R] M₂
φ : Module.End R M₁
b : Basis (ChooseBasisIndex R M₁) R M₁ := chooseBasis R M₁
⊢ (LinearMap.toMatrix (b.map e) (b.map e)) (e.conj φ) = (LinearMap.toMatrix b b) φ
tactic: congr 1
state_before: case e_M
R : Type u_1
M : Type u_2
M₁ : Type u_3
M₂ : Type u_4
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : AddCommGroup M₁
inst✝⁶ : Module R M₁
inst✝⁵ : Module.Finite R M₁
inst✝⁴ : Module.Free R M₁
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : Module.Finite R M₂
inst✝ : Module.Free R M₂
f : M →ₗ[R] M
e : M₁ ≃ₗ[R] M₂
φ : Module.End R M₁
b : Basis (ChooseBasisIndex R M₁) R M₁ := chooseBasis R M₁
⊢ (LinearMap.toMatrix (b.map e) (b.map e)) (e.conj φ) = (LinearMap.toMatrix b b) φ
state_after: case e_M.a
R : Type u_1
M : Type u_2
M₁ : Type u_3
M₂ : Type u_4
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : AddCommGroup M₁
inst✝⁶ : Module R M₁
inst✝⁵ : Module.Finite R M₁
inst✝⁴ : Module.Free R M₁
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : Module.Finite R M₂
inst✝ : Module.Free R M₂
f : M →ₗ[R] M
e : M₁ ≃ₗ[R] M₂
φ : Module.End R M₁
b : Basis (ChooseBasisIndex R M₁) R M₁ := chooseBasis R M₁
i j : ChooseBasisIndex R M₁
⊢ (LinearMap.toMatrix (b.map e) (b.map e)) (e.conj φ) i j = (LinearMap.toMatrix b b) φ i j
tactic: ext i j : 1
state_before: case e_M.a
R : Type u_1
M : Type u_2
M₁ : Type u_3
M₂ : Type u_4
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : AddCommGroup M
inst✝¹⁰ : Module R M
inst✝⁹ : Module.Free R M
inst✝⁸ : Module.Finite R M
inst✝⁷ : AddCommGroup M₁
inst✝⁶ : Module R M₁
inst✝⁵ : Module.Finite R M₁
inst✝⁴ : Module.Free R M₁
inst✝³ : AddCommGroup M₂
inst✝² : Module R M₂
inst✝¹ : Module.Finite R M₂
inst✝ : Module.Free R M₂
f : M →ₗ[R] M
e : M₁ ≃ₗ[R] M₂
φ : Module.End R M₁
b : Basis (ChooseBasisIndex R M₁) R M₁ := chooseBasis R M₁
i j : ChooseBasisIndex R M₁
⊢ (LinearMap.toMatrix (b.map e) (b.map e)) (e.conj φ) i j = (LinearMap.toMatrix b b) φ i j
state_after: no goals
tactic: simp [Matrix.charmatrix, LinearMap.toMatrix, Matrix.diagonal, LinearEquiv.conj_apply]