Theorem: LieAlgebra.engel_isBot_of_isMin.lieCharpoly_map_eval
File: Mathlib/Algebra/Lie/CartanExists.lean

Proof steps:
state_before: K : Type u_1
R : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁴ : Field K
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra K L
inst✝⁹ : LieAlgebra R L
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
inst✝⁶ : LieRingModule L M
inst✝⁵ : LieModule R L M
inst✝⁴ : Module.Finite K L
inst✝³ : Module.Finite R L
inst✝² : Module.Free R L
inst✝¹ : Module.Finite R M
inst✝ : Module.Free R M
x y : L
r : R
⊢ Polynomial.map (evalRingHom r) (LieAlgebra.engel_isBot_of_isMin.lieCharpoly R M x y) = charpoly (φ (r • y + x))
state_after: K : Type u_1
R : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁴ : Field K
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra K L
inst✝⁹ : LieAlgebra R L
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
inst✝⁶ : LieRingModule L M
inst✝⁵ : LieModule R L M
inst✝⁴ : Module.Finite K L
inst✝³ : Module.Finite R L
inst✝² : Module.Free R L
inst✝¹ : Module.Finite R M
inst✝ : Module.Free R M
x y : L
r : R
⊢ Polynomial.map
      ((evalRingHom r).comp
        ↑(MvPolynomial.aeval fun i => C (((chooseBasis R L).repr y) i) * X + C (((chooseBasis R L).repr x) i)))
      ((↑φ).polyCharpoly (chooseBasis R L)) =
    charpoly (φ (r • y + x))
tactic: rw [lieCharpoly, map_map]
state_before: K : Type u_1
R : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁴ : Field K
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra K L
inst✝⁹ : LieAlgebra R L
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
inst✝⁶ : LieRingModule L M
inst✝⁵ : LieModule R L M
inst✝⁴ : Module.Finite K L
inst✝³ : Module.Finite R L
inst✝² : Module.Free R L
inst✝¹ : Module.Finite R M
inst✝ : Module.Free R M
x y : L
r : R
⊢ Polynomial.map
      ((evalRingHom r).comp
        ↑(MvPolynomial.aeval fun i => C (((chooseBasis R L).repr y) i) * X + C (((chooseBasis R L).repr x) i)))
      ((↑φ).polyCharpoly (chooseBasis R L)) =
    charpoly (φ (r • y + x))
state_after: K : Type u_1
R : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁴ : Field K
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra K L
inst✝⁹ : LieAlgebra R L
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
inst✝⁶ : LieRingModule L M
inst✝⁵ : LieModule R L M
inst✝⁴ : Module.Finite K L
inst✝³ : Module.Finite R L
inst✝² : Module.Free R L
inst✝¹ : Module.Finite R M
inst✝ : Module.Free R M
x y : L
r : R
b : Basis (ChooseBasisIndex R L) R L := chooseBasis R L
⊢ Polynomial.map ((evalRingHom r).comp ↑(MvPolynomial.aeval fun i => C ((b.repr y) i) * X + C ((b.repr x) i)))
      ((↑φ).polyCharpoly b) =
    charpoly (φ (r • y + x))
tactic: set b := chooseBasis R L
state_before: K : Type u_1
R : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁴ : Field K
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra K L
inst✝⁹ : LieAlgebra R L
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
inst✝⁶ : LieRingModule L M
inst✝⁵ : LieModule R L M
inst✝⁴ : Module.Finite K L
inst✝³ : Module.Finite R L
inst✝² : Module.Free R L
inst✝¹ : Module.Finite R M
inst✝ : Module.Free R M
x y : L
r : R
b : Basis (ChooseBasisIndex R L) R L := chooseBasis R L
⊢ Polynomial.map ((evalRingHom r).comp ↑(MvPolynomial.aeval fun i => C ((b.repr y) i) * X + C ((b.repr x) i)))
      ((↑φ).polyCharpoly b) =
    charpoly (φ (r • y + x))
state_after: K : Type u_1
R : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁴ : Field K
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra K L
inst✝⁹ : LieAlgebra R L
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
inst✝⁶ : LieRingModule L M
inst✝⁵ : LieModule R L M
inst✝⁴ : Module.Finite K L
inst✝³ : Module.Finite R L
inst✝² : Module.Free R L
inst✝¹ : Module.Finite R M
inst✝ : Module.Free R M
x y : L
r : R
b : Basis (ChooseBasisIndex R L) R L := chooseBasis R L
aux : (fun i => (b.repr y) i * r + (b.repr x) i) = ⇑(b.repr (r • y + x))
⊢ Polynomial.map ((evalRingHom r).comp ↑(MvPolynomial.aeval fun i => C ((b.repr y) i) * X + C ((b.repr x) i)))
      ((↑φ).polyCharpoly b) =
    charpoly (φ (r • y + x))
tactic: have aux : (fun i ↦ (b.repr y) i * r + (b.repr x) i) = b.repr (r • y + x) := by
    ext i; simp [mul_comm r]
state_before: K : Type u_1
R : Type u_2
L : Type u_3
M : Type u_4
inst✝¹⁴ : Field K
inst✝¹³ : CommRing R
inst✝¹² : Nontrivial R
inst✝¹¹ : LieRing L
inst✝¹⁰ : LieAlgebra K L
inst✝⁹ : LieAlgebra R L
inst✝⁸ : AddCommGroup M
inst✝⁷ : Module R M
inst✝⁶ : LieRingModule L M
inst✝⁵ : LieModule R L M
inst✝⁴ : Module.Finite K L
inst✝³ : Module.Finite R L
inst✝² : Module.Free R L
inst✝¹ : Module.Finite R M
inst✝ : Module.Free R M
x y : L
r : R
b : Basis (ChooseBasisIndex R L) R L := chooseBasis R L
aux : (fun i => (b.repr y) i * r + (b.repr x) i) = ⇑(b.repr (r • y + x))
⊢ Polynomial.map ((evalRingHom r).comp ↑(MvPolynomial.aeval fun i => C ((b.repr y) i) * X + C ((b.repr x) i)))
      ((↑φ).polyCharpoly b) =
    charpoly (φ (r • y + x))
state_after: no goals
tactic: simp_rw [← coe_aeval_eq_evalRingHom, ← AlgHom.comp_toRingHom, MvPolynomial.comp_aeval,
    map_add, map_mul, aeval_C, Algebra.id.map_eq_id, RingHom.id_apply, aeval_X, aux,
    MvPolynomial.coe_aeval_eq_eval, polyCharpoly_map_eq_charpoly, LieHom.coe_toLinearMap]