Integer powers of square matrices #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
In this file, we define integer power of matrices, relying on the nonsingular inverse definition for negative powers.
Implementation details #
The main definition is a direct recursive call on the integer inductive type,
as provided by the div_inv_monoid.zpow
default implementation.
The lemma names are taken from algebra.group_with_zero.power
.
Tags #
matrix inverse, matrix powers
@[protected, instance]
noncomputable
def
matrix.div_inv_monoid
{n' : Type u_1}
[decidable_eq n']
[fintype n']
{R : Type u_2}
[comm_ring R] :
div_inv_monoid (matrix n' n' R)
Equations
- matrix.div_inv_monoid = {mul := monoid.mul (show monoid (matrix n' n' R), from ring.to_monoid (matrix n' n' R)), mul_assoc := _, one := monoid.one (show monoid (matrix n' n' R), from ring.to_monoid (matrix n' n' R)), one_mul := _, mul_one := _, npow := monoid.npow (show monoid (matrix n' n' R), from ring.to_monoid (matrix n' n' R)), npow_zero' := _, npow_succ' := _, inv := has_inv.inv (show has_inv (matrix n' n' R), from matrix.has_inv), div := λ (a b : matrix n' n' R), monoid.mul a b⁻¹, div_eq_mul_inv := _, zpow := zpow_rec {inv := has_inv.inv (show has_inv (matrix n' n' R), from matrix.has_inv)}, zpow_zero' := _, zpow_succ' := _, zpow_neg' := _}
@[simp]
theorem
matrix.one_zpow
{n' : Type u_1}
[decidable_eq n']
[fintype n']
{R : Type u_2}
[comm_ring R]
(n : ℤ) :
theorem
matrix.semiconj_by.zpow_right
{n' : Type u_1}
[decidable_eq n']
[fintype n']
{R : Type u_2}
[comm_ring R]
{A X Y : matrix n' n' R}
(hx : is_unit X.det)
(hy : is_unit Y.det)
(h : semiconj_by A X Y)
(m : ℤ) :
semiconj_by A (X ^ m) (Y ^ m)
theorem
matrix.zpow_ne_zero_of_is_unit_det
{n' : Type u_1}
[decidable_eq n']
[fintype n']
{R : Type u_2}
[comm_ring R]
[nonempty n']
[nontrivial R]
{A : matrix n' n' R}
(ha : is_unit A.det)
(z : ℤ) :
@[simp]
theorem
matrix.conj_transpose_zpow
{n' : Type u_1}
[decidable_eq n']
[fintype n']
{R : Type u_2}
[comm_ring R]
[star_ring R]
(A : matrix n' n' R)
(n : ℤ) :
(A ^ n).conj_transpose = A.conj_transpose ^ n