@@ -4,13 +4,14 @@ Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Aaron Anderson, Jalex Stark
5
5
-/
6
6
7
+ import algebra.polynomial.big_operators
7
8
import data.matrix.char_p
9
+ import field_theory.finite.basic
10
+ import group_theory.perm.cycles
8
11
import linear_algebra.char_poly.basic
9
12
import linear_algebra.matrix
10
13
import ring_theory.polynomial.basic
11
- import algebra.polynomial.big_operators
12
- import group_theory.perm.cycles
13
- import field_theory.finite.basic
14
+ import ring_theory.power_basis
14
15
15
16
/-!
16
17
# Characteristic polynomials
@@ -220,3 +221,29 @@ theorem min_poly_dvd_char_poly {K : Type*} [field K] (M : matrix n n K) :
220
221
minpoly.dvd _ _ (aeval_self_char_poly M)
221
222
222
223
end matrix
224
+
225
+ section power_basis
226
+
227
+ open algebra
228
+
229
+ /-- The characteristic polynomial of the map `λ x, a * x` is the minimal polynomial of `a`.
230
+
231
+ In combination with `det_eq_sign_char_poly_coeff` or `trace_eq_neg_char_poly_coeff`
232
+ and a bit of rewriting, this will allow us to conclude the
233
+ field norm resp. trace of `x` is the product resp. sum of `x`'s conjugates.
234
+ -/
235
+ lemma char_poly_left_mul_matrix {K S : Type *} [field K] [comm_ring S] [algebra K S]
236
+ (h : power_basis K S) :
237
+ char_poly (left_mul_matrix h.is_basis h.gen) = minpoly K h.gen :=
238
+ begin
239
+ apply minpoly.unique,
240
+ { apply char_poly_monic },
241
+ { apply (left_mul_matrix _).injective_iff.mp (left_mul_matrix_injective h.is_basis),
242
+ rw [← polynomial.aeval_alg_hom_apply, aeval_self_char_poly] },
243
+ { intros q q_monic root_q,
244
+ rw [char_poly_degree_eq_dim, fintype.card_fin, degree_eq_nat_degree q_monic.ne_zero],
245
+ apply with_bot.some_le_some.mpr,
246
+ exact h.dim_le_nat_degree_of_root q_monic.ne_zero root_q }
247
+ end
248
+
249
+ end power_basis
0 commit comments