Algebra isomorphism between matrices of polynomials and polynomials of matrices #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
Given [comm_ring R] [ring A] [algebra R A]
we show A[X] ≃ₐ[R] (A ⊗[R] R[X])
.
Combining this with the isomorphism matrix n n A ≃ₐ[R] (A ⊗[R] matrix n n R)
proved earlier
in ring_theory.matrix_algebra
, we obtain the algebra isomorphism
def mat_poly_equiv :
matrix n n R[X] ≃ₐ[R] (matrix n n R)[X]
which is characterized by
coeff (mat_poly_equiv m) k i j = coeff (m i j) k
We will use this algebra isomorphism to prove the Cayley-Hamilton theorem.
(Implementation detail).
The function underlying A ⊗[R] R[X] →ₐ[R] A[X]
,
as a bilinear function of two arguments.
Equations
(Implementation detail).
The function underlying A ⊗[R] R[X] →ₐ[R] A[X]
,
as a linear map.
Equations
(Implementation detail).
The algebra homomorphism A ⊗[R] R[X] →ₐ[R] A[X]
.
(Implementation detail.)
The bare function A[X] → A ⊗[R] R[X]
.
(We don't need to show that it's an algebra map, thankfully --- just that it's an inverse.)
Equations
(Implementation detail)
The equivalence, ignoring the algebra structure, (A ⊗[R] R[X]) ≃ A[X]
.
Equations
- poly_equiv_tensor.equiv R A = {to_fun := ⇑(poly_equiv_tensor.to_fun_alg_hom R A), inv_fun := poly_equiv_tensor.inv_fun R A _inst_3, left_inv := _, right_inv := _}
The R
-algebra isomorphism A[X] ≃ₐ[R] (A ⊗[R] R[X])
.
Equations
- poly_equiv_tensor R A = {to_fun := (poly_equiv_tensor.to_fun_alg_hom R A).to_fun, inv_fun := (poly_equiv_tensor.equiv R A).inv_fun, left_inv := _, right_inv := _, map_mul' := _, map_add' := _, commutes' := _}.symm
The algebra isomorphism stating "matrices of polynomials are the same as polynomials of matrices".
(You probably shouldn't attempt to use this underlying definition ---
it's an algebra equivalence, and characterised extensionally by the lemma
mat_poly_equiv_coeff_apply
below.)
Equations
- mat_poly_equiv = ((matrix_equiv_tensor R (polynomial R) n).trans (algebra.tensor_product.comm R (polynomial R) (matrix n n R))).trans (poly_equiv_tensor R (matrix n n R)).symm