Documentation

Mathlib.LinearAlgebra.Matrix.ZPow

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.instDivInvMonoid {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] :
Equations
    @[simp]
    theorem Matrix.inv_pow' {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (A : Matrix n' n' R) (n : โ„•) :
    theorem Matrix.pow_sub' {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (A : Matrix n' n' R) {m n : โ„•} (ha : IsUnit A.det) (h : n โ‰ค m) :
    A ^ (m - n) = A ^ m * (A ^ n)โปยน
    theorem Matrix.pow_inv_comm' {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (A : Matrix n' n' R) (m n : โ„•) :
    @[simp]
    theorem Matrix.one_zpow {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (n : โ„ค) :
    1 ^ n = 1
    theorem Matrix.zero_zpow {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (z : โ„ค) :
    z โ‰  0 โ†’ 0 ^ z = 0
    theorem Matrix.zero_zpow_eq {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (n : โ„ค) :
    0 ^ n = if n = 0 then 1 else 0
    theorem Matrix.inv_zpow {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (A : Matrix n' n' R) (n : โ„ค) :
    @[simp]
    theorem Matrix.zpow_neg_one {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (A : Matrix n' n' R) :
    @[simp]
    theorem Matrix.zpow_neg_natCast {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (A : Matrix n' n' R) (n : โ„•) :
    A ^ (-โ†‘n) = (A ^ 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 A.det) (n : โ„ค) :
    IsUnit (A ^ n).det
    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 : โ„ค} :
    theorem Matrix.zpow_neg {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A : Matrix n' n' R} (h : IsUnit A.det) (n : โ„ค) :
    A ^ (-n) = (A ^ n)โปยน
    theorem Matrix.inv_zpow' {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A : Matrix n' n' R} (h : IsUnit A.det) (n : โ„ค) :
    Aโปยน ^ n = A ^ (-n)
    theorem Matrix.zpow_add_one {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A : Matrix n' n' R} (h : IsUnit A.det) (n : โ„ค) :
    A ^ (n + 1) = A ^ n * A
    theorem Matrix.zpow_sub_one {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A : Matrix n' n' R} (h : IsUnit A.det) (n : โ„ค) :
    A ^ (n - 1) = A ^ n * Aโปยน
    theorem Matrix.zpow_add {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A : Matrix n' n' R} (ha : IsUnit A.det) (m n : โ„ค) :
    A ^ (m + n) = A ^ m * A ^ n
    theorem Matrix.zpow_add_of_nonpos {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A : Matrix n' n' R} {m n : โ„ค} (hm : m โ‰ค 0) (hn : n โ‰ค 0) :
    A ^ (m + n) = A ^ m * A ^ n
    theorem Matrix.zpow_add_of_nonneg {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A : Matrix n' n' R} {m n : โ„ค} (hm : 0 โ‰ค m) (hn : 0 โ‰ค n) :
    A ^ (m + n) = A ^ m * A ^ n
    theorem Matrix.zpow_one_add {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A : Matrix n' n' R} (h : IsUnit A.det) (i : โ„ค) :
    A ^ (1 + i) = A * A ^ i
    theorem Matrix.SemiconjBy.zpow_right {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A X Y : Matrix n' n' R} (hx : IsUnit X.det) (hy : IsUnit Y.det) (h : SemiconjBy A X Y) (m : โ„ค) :
    SemiconjBy A (X ^ m) (Y ^ m)
    theorem Matrix.Commute.zpow_right {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A B : Matrix n' n' R} (h : Commute A B) (m : โ„ค) :
    Commute A (B ^ m)
    theorem Matrix.Commute.zpow_left {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A B : Matrix n' n' R} (h : Commute A B) (m : โ„ค) :
    Commute (A ^ m) B
    theorem Matrix.Commute.zpow_zpow {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A B : Matrix n' n' R} (h : Commute A B) (m n : โ„ค) :
    Commute (A ^ m) (B ^ n)
    theorem Matrix.Commute.zpow_self {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (A : Matrix n' n' R) (n : โ„ค) :
    Commute (A ^ n) A
    theorem Matrix.Commute.self_zpow {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (A : Matrix n' n' R) (n : โ„ค) :
    Commute A (A ^ n)
    theorem Matrix.Commute.zpow_zpow_self {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (A : Matrix n' n' R) (m n : โ„ค) :
    Commute (A ^ m) (A ^ n)
    theorem Matrix.zpow_add_one_of_ne_neg_one {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A : Matrix n' n' R} (n : โ„ค) :
    n โ‰  -1 โ†’ A ^ (n + 1) = A ^ n * A
    theorem Matrix.zpow_mul {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (A : Matrix n' n' R) (h : IsUnit A.det) (m n : โ„ค) :
    A ^ (m * n) = (A ^ m) ^ n
    theorem Matrix.zpow_mul' {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (A : Matrix n' n' R) (h : IsUnit A.det) (m n : โ„ค) :
    A ^ (m * n) = (A ^ n) ^ m
    @[simp]
    theorem Matrix.coe_units_zpow {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (u : (Matrix n' n' R)หฃ) (n : โ„ค) :
    โ†‘(u ^ n) = โ†‘u ^ n
    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 A.det) (z : โ„ค) :
    A ^ z โ‰  0
    theorem Matrix.zpow_sub {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A : Matrix n' n' R} (ha : IsUnit A.det) (z1 z2 : โ„ค) :
    A ^ (z1 - z2) = A ^ z1 / A ^ z2
    theorem Matrix.Commute.mul_zpow {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A B : Matrix n' n' R} (h : Commute A B) (i : โ„ค) :
    (A * B) ^ i = A ^ i * B ^ i
    theorem Matrix.zpow_neg_mul_zpow_self {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] (n : โ„ค) {A : Matrix n' n' R} (h : IsUnit A.det) :
    A ^ (-n) * A ^ n = 1
    theorem Matrix.one_div_pow {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A : Matrix n' n' R} (n : โ„•) :
    (1 / A) ^ n = 1 / A ^ n
    theorem Matrix.one_div_zpow {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A : Matrix n' n' R} (n : โ„ค) :
    (1 / A) ^ n = 1 / A ^ n
    @[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 : โ„ค) :
    (A ^ n).transpose = A.transpose ^ 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 : โ„ค) :
    theorem Matrix.IsSymm.zpow {n' : Type u_1} [DecidableEq n'] [Fintype n'] {R : Type u_2} [CommRing R] {A : Matrix n' n' R} (h : A.IsSymm) (k : โ„ค) :
    (A ^ k).IsSymm