Characteristic polynomials
We give methods for computing coefficients of the characteristic polynomial.
Main definitions
char_poly_degree_eq_dim
proves that the degree of the characteristic polynomial over a nonzero ring is the dimension of the matrixdet_eq_sign_char_poly_coeff
proves that the determinant is the constant term of the characteristic polynomial, up to sign.trace_eq_neg_char_poly_coeff
proves that the trace is the negative of the (d-1)th coefficient of the characteristic polynomial, where d is the dimension of the matrix. For a nonzero ring, this is the second-highest coefficient.
theorem
char_matrix_apply_nat_degree
{R : Type u}
[comm_ring R]
{n : Type v}
[decidable_eq n]
[fintype n]
{M : matrix n n R}
[nontrivial R]
(i j : n) :
(char_matrix M i j).nat_degree = ite (i = j) 1 0
theorem
char_matrix_apply_nat_degree_le
{R : Type u}
[comm_ring R]
{n : Type v}
[decidable_eq n]
[fintype n]
{M : matrix n n R}
(i j : n) :
(char_matrix M i j).nat_degree ≤ ite (i = j) 1 0
theorem
char_poly_sub_diagonal_degree_lt
{R : Type u}
[comm_ring R]
{n : Type v}
[decidable_eq n]
[fintype n]
(M : matrix n n R) :
(char_poly M - ∏ (i : n), (polynomial.X - ⇑polynomial.C (M i i))).degree < ↑(fintype.card n - 1)
theorem
char_poly_coeff_eq_prod_coeff_of_le
{R : Type u}
[comm_ring R]
{n : Type v}
[decidable_eq n]
[fintype n]
(M : matrix n n R)
{k : ℕ}
(h : fintype.card n - 1 ≤ k) :
(char_poly M).coeff k = (∏ (i : n), (polynomial.X - ⇑polynomial.C (M i i))).coeff k
theorem
det_of_card_zero
{R : Type u}
[comm_ring R]
{n : Type v}
[decidable_eq n]
[fintype n]
(h : fintype.card n = 0)
(M : matrix n n R) :
theorem
char_poly_degree_eq_dim
{R : Type u}
[comm_ring R]
{n : Type v}
[decidable_eq n]
[fintype n]
[nontrivial R]
(M : matrix n n R) :
(char_poly M).degree = ↑(fintype.card n)
theorem
char_poly_nat_degree_eq_dim
{R : Type u}
[comm_ring R]
{n : Type v}
[decidable_eq n]
[fintype n]
[nontrivial R]
(M : matrix n n R) :
(char_poly M).nat_degree = fintype.card n
theorem
char_poly_monic_of_nontrivial
{R : Type u}
[comm_ring R]
{n : Type v}
[decidable_eq n]
[fintype n]
[nontrivial R]
(M : matrix n n R) :
theorem
char_poly_monic
{R : Type u}
[comm_ring R]
{n : Type v}
[decidable_eq n]
[fintype n]
(M : matrix n n R) :
theorem
trace_eq_neg_char_poly_coeff
{R : Type u}
[comm_ring R]
{n : Type v}
[decidable_eq n]
[fintype n]
[nonempty n]
(M : matrix n n R) :
⇑(matrix.trace n R R) M = -(char_poly M).coeff (fintype.card n - 1)
theorem
mat_poly_equiv_eval
{R : Type u}
[comm_ring R]
{n : Type v}
[decidable_eq n]
[fintype n]
(M : matrix n n (polynomial R))
(r : R)
(i j : n) :
polynomial.eval (⇑(matrix.scalar n) r) (⇑mat_poly_equiv M) i j = polynomial.eval r (M i j)
theorem
eval_det
{R : Type u}
[comm_ring R]
{n : Type v}
[decidable_eq n]
[fintype n]
(M : matrix n n (polynomial R))
(r : R) :
polynomial.eval r M.det = (polynomial.eval (⇑(matrix.scalar n) r) (⇑mat_poly_equiv M)).det
theorem
det_eq_sign_char_poly_coeff
{R : Type u}
[comm_ring R]
{n : Type v}
[decidable_eq n]
[fintype n]
(M : matrix n n R) :
@[simp]
theorem
finite_field.char_poly_pow_card
{n : Type v}
[decidable_eq n]
[fintype n]
{K : Type u_1}
[field K]
[fintype K]
(M : matrix n n K) :
char_poly (M ^ fintype.card K) = char_poly M
theorem
finite_field.trace_pow_card
{n : Type v}
[decidable_eq n]
[fintype n]
{K : Type u_1}
[field K]
[fintype K]
[nonempty n]
(M : matrix n n K) :
⇑(matrix.trace n K K) (M ^ fintype.card K) = ⇑(matrix.trace n K K) M ^ fintype.card K
theorem
matrix.is_integral
{R : Type u}
[comm_ring R]
{n : Type v}
[decidable_eq n]
[fintype n]
(M : matrix n n R) :
is_integral R M
theorem
matrix.min_poly_dvd_char_poly
{n : Type v}
[decidable_eq n]
[fintype n]
{K : Type u_1}
[field K]
(M : matrix n n K) :