Integer powers of square matrices #
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 DivInvMonoid.Pow
default implementation.
The lemma names are taken from Algebra.GroupWithZero.Power
.
Tags #
matrix inverse, matrix powers
noncomputable instance
Matrix.instDivInvMonoidMatrix
{n' : Type u_1}
[DecidableEq n']
[Fintype n']
{R : Type u_2}
[CommRing R]
:
DivInvMonoid (Matrix n' n' R)
Equations
- Matrix.instDivInvMonoidMatrix = let src := let_fun this := inferInstance; this; let src_1 := let_fun this := inferInstance; this; DivInvMonoid.mk zpowRec
@[simp]
theorem
Matrix.one_zpow
{n' : Type u_1}
[DecidableEq n']
[Fintype n']
{R : Type u_2}
[CommRing R]
(n : ℤ)
:
theorem
IsUnit.det_zpow
{n' : Type u_1}
[DecidableEq n']
[Fintype n']
{R : Type u_2}
[CommRing R]
{A : Matrix n' n' R}
(h : IsUnit (Matrix.det A))
(n : ℤ)
:
IsUnit (Matrix.det (A ^ n))
theorem
Matrix.isUnit_det_zpow_iff
{n' : Type u_1}
[DecidableEq n']
[Fintype n']
{R : Type u_2}
[CommRing R]
{A : Matrix n' n' R}
{z : ℤ}
:
IsUnit (Matrix.det (A ^ z)) ↔ IsUnit (Matrix.det A) ∨ z = 0
theorem
Matrix.SemiconjBy.zpow_right
{n' : Type u_1}
[DecidableEq n']
[Fintype n']
{R : Type u_2}
[CommRing R]
{A : Matrix n' n' R}
{X : Matrix n' n' R}
{Y : Matrix n' n' R}
(hx : IsUnit (Matrix.det X))
(hy : IsUnit (Matrix.det Y))
(h : SemiconjBy A X Y)
(m : ℤ)
:
SemiconjBy A (X ^ m) (Y ^ m)
theorem
Matrix.zpow_ne_zero_of_isUnit_det
{n' : Type u_1}
[DecidableEq n']
[Fintype n']
{R : Type u_2}
[CommRing R]
[Nonempty n']
[Nontrivial R]
{A : Matrix n' n' R}
(ha : IsUnit (Matrix.det A))
(z : ℤ)
:
@[simp]
theorem
Matrix.transpose_zpow
{n' : Type u_1}
[DecidableEq n']
[Fintype n']
{R : Type u_2}
[CommRing R]
(A : Matrix n' n' R)
(n : ℤ)
:
Matrix.transpose (A ^ n) = Matrix.transpose A ^ n
@[simp]
theorem
Matrix.conjTranspose_zpow
{n' : Type u_1}
[DecidableEq n']
[Fintype n']
{R : Type u_2}
[CommRing R]
[StarRing R]
(A : Matrix n' n' R)
(n : ℤ)
:
Matrix.conjTranspose (A ^ n) = Matrix.conjTranspose A ^ n
theorem
Matrix.IsSymm.zpow
{n' : Type u_1}
[DecidableEq n']
[Fintype n']
{R : Type u_2}
[CommRing R]
{A : Matrix n' n' R}
(h : Matrix.IsSymm A)
(k : ℤ)
:
Matrix.IsSymm (A ^ k)