Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 6d7e756

Browse files
committed
feat(linear_algebra/char_poly): charpoly of left_mul_matrix (#7397)
This is an important ingredient for showing the field norm resp. trace of `x` is the product resp. sum of `x`'s conjugates.
1 parent cfc7415 commit 6d7e756

File tree

1 file changed

+30
-3
lines changed

1 file changed

+30
-3
lines changed

src/linear_algebra/char_poly/coeff.lean

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Aaron Anderson, Jalex Stark
55
-/
66

7+
import algebra.polynomial.big_operators
78
import data.matrix.char_p
9+
import field_theory.finite.basic
10+
import group_theory.perm.cycles
811
import linear_algebra.char_poly.basic
912
import linear_algebra.matrix
1013
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
1415

1516
/-!
1617
# Characteristic polynomials
@@ -220,3 +221,29 @@ theorem min_poly_dvd_char_poly {K : Type*} [field K] (M : matrix n n K) :
220221
minpoly.dvd _ _ (aeval_self_char_poly M)
221222

222223
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

Comments
 (0)