Documentation

Mathlib.Data.Matrix.Invertible

Extra lemmas about invertible matrices #

A few of the Invertible lemmas generalize to multiplication of rectangular matrices.

For lemmas about the matrix inverse in terms of the determinant and adjugate, see Matrix.inv in LinearAlgebra/Matrix/NonsingularInverse.lean.

Main results #

theorem Matrix.invOf_mul_cancel_left {m : Type u_1} {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Semiring α] (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
⅟A * (A * B) = B

A copy of invOf_mul_cancel_left for rectangular matrices.

theorem Matrix.mul_invOf_cancel_left {m : Type u_1} {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Semiring α] (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
A * (⅟A * B) = B

A copy of mul_invOf_cancel_left for rectangular matrices.

theorem Matrix.invOf_mul_cancel_right {m : Type u_1} {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Semiring α] (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
A * ⅟B * B = A

A copy of invOf_mul_cancel_right for rectangular matrices.

theorem Matrix.mul_invOf_cancel_right {m : Type u_1} {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Semiring α] (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
A * B * ⅟B = A

A copy of mul_invOf_cancel_right for rectangular matrices.

@[deprecated Matrix.invOf_mul_cancel_left]
theorem Matrix.invOf_mul_self_assoc {m : Type u_1} {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Semiring α] (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
⅟A * (A * B) = B

Alias of Matrix.invOf_mul_cancel_left.


A copy of invOf_mul_cancel_left for rectangular matrices.

@[deprecated Matrix.mul_invOf_cancel_left]
theorem Matrix.mul_invOf_self_assoc {m : Type u_1} {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Semiring α] (A : Matrix n n α) (B : Matrix n m α) [Invertible A] :
A * (⅟A * B) = B

Alias of Matrix.mul_invOf_cancel_left.


A copy of mul_invOf_cancel_left for rectangular matrices.

@[deprecated Matrix.invOf_mul_cancel_right]
theorem Matrix.mul_invOf_mul_self_cancel {m : Type u_1} {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Semiring α] (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
A * ⅟B * B = A

Alias of Matrix.invOf_mul_cancel_right.


A copy of invOf_mul_cancel_right for rectangular matrices.

@[deprecated Matrix.mul_invOf_cancel_right]
theorem Matrix.mul_mul_invOf_self_cancel {m : Type u_1} {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Semiring α] (A : Matrix m n α) (B : Matrix n n α) [Invertible B] :
A * B * ⅟B = A

Alias of Matrix.mul_invOf_cancel_right.


A copy of mul_invOf_cancel_right for rectangular matrices.

instance Matrix.invertibleConjTranspose {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Semiring α] [StarRing α] (A : Matrix n n α) [Invertible A] :
Invertible A.conjTranspose

The conjugate transpose of an invertible matrix is invertible.

Equations
theorem Matrix.conjTranspose_invOf {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Semiring α] [StarRing α] (A : Matrix n n α) [Invertible A] [Invertible A.conjTranspose] :
(⅟A).conjTranspose = ⅟A.conjTranspose
def Matrix.invertibleOfInvertibleConjTranspose {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Semiring α] [StarRing α] (A : Matrix n n α) [Invertible A.conjTranspose] :

A matrix is invertible if the conjugate transpose is invertible.

Equations
  • A.invertibleOfInvertibleConjTranspose = ⋯.mpr (⋯.mpr inferInstance)
Instances For
    @[simp]
    theorem Matrix.isUnit_conjTranspose {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Semiring α] [StarRing α] (A : Matrix n n α) :
    IsUnit A.conjTranspose ↔ IsUnit A
    instance Matrix.invertibleTranspose {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [CommSemiring α] (A : Matrix n n α) [Invertible A] :
    Invertible A.transpose

    The transpose of an invertible matrix is invertible.

    Equations
    • A.invertibleTranspose = { invOf := (⅟A).transpose, invOf_mul_self := ⋯, mul_invOf_self := ⋯ }
    theorem Matrix.transpose_invOf {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [CommSemiring α] (A : Matrix n n α) [Invertible A] [Invertible A.transpose] :
    (⅟A).transpose = ⅟A.transpose
    def Matrix.invertibleOfInvertibleTranspose {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [CommSemiring α] (A : Matrix n n α) [Invertible A.transpose] :

    Aᵀ is invertible when A is.

    Equations
    • A.invertibleOfInvertibleTranspose = { invOf := (⅟A.transpose).transpose, invOf_mul_self := ⋯, mul_invOf_self := ⋯ }
    Instances For
      def Matrix.transposeInvertibleEquivInvertible {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [CommSemiring α] (A : Matrix n n α) :
      Invertible A.transpose ≃ Invertible A

      Together Matrix.invertibleTranspose and Matrix.invertibleOfInvertibleTranspose form an equivalence, although both sides of the equiv are subsingleton anyway.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        @[simp]
        theorem Matrix.transposeInvertibleEquivInvertible_apply {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [CommSemiring α] (A : Matrix n n α) [Invertible A.transpose] :
        A.transposeInvertibleEquivInvertible inst✝ = A.invertibleOfInvertibleTranspose
        @[simp]
        theorem Matrix.transposeInvertibleEquivInvertible_symm_apply {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [CommSemiring α] (A : Matrix n n α) [Invertible A] :
        A.transposeInvertibleEquivInvertible.symm inst✝ = A.invertibleTranspose
        @[simp]
        theorem Matrix.isUnit_transpose {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [CommSemiring α] (A : Matrix n n α) :
        IsUnit A.transpose ↔ IsUnit A
        theorem Matrix.add_mul_mul_invOf_mul_eq_one {m : Type u_1} {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Fintype m] [DecidableEq m] [Ring α] (A : Matrix n n α) (U : Matrix n m α) (C : Matrix m m α) (V : Matrix m n α) [Invertible A] [Invertible C] [Invertible (⅟C + V * ⅟A * U)] :
        (A + U * C * V) * (⅟A - ⅟A * U * ⅟(⅟C + V * ⅟A * U) * V * ⅟A) = 1
        theorem Matrix.add_mul_mul_invOf_mul_eq_one' {m : Type u_1} {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Fintype m] [DecidableEq m] [Ring α] (A : Matrix n n α) (U : Matrix n m α) (C : Matrix m m α) (V : Matrix m n α) [Invertible A] [Invertible C] [Invertible (⅟C + V * ⅟A * U)] :
        (⅟A - ⅟A * U * ⅟(⅟C + V * ⅟A * U) * V * ⅟A) * (A + U * C * V) = 1

        Like add_mul_mul_invOf_mul_eq_one, but with multiplication reversed.

        def Matrix.invertibleAddMulMul {m : Type u_1} {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Fintype m] [DecidableEq m] [Ring α] (A : Matrix n n α) (U : Matrix n m α) (C : Matrix m m α) (V : Matrix m n α) [Invertible A] [Invertible C] [Invertible (⅟C + V * ⅟A * U)] :
        Invertible (A + U * C * V)

        If matrices A, C, and C⁻¹ + V * A⁻¹ * U are invertible, then so is A + U * C * V

        Equations
        • A.invertibleAddMulMul U C V = { invOf := ⅟A - ⅟A * U * ⅟(⅟C + V * ⅟A * U) * V * ⅟A, invOf_mul_self := ⋯, mul_invOf_self := ⋯ }
        Instances For
          theorem Matrix.invOf_add_mul_mul {m : Type u_1} {n : Type u_2} {α : Type u_3} [Fintype n] [DecidableEq n] [Fintype m] [DecidableEq m] [Ring α] (A : Matrix n n α) (U : Matrix n m α) (C : Matrix m m α) (V : Matrix m n α) [Invertible A] [Invertible C] [Invertible (⅟C + V * ⅟A * U)] [Invertible (A + U * C * V)] :
          ⅟(A + U * C * V) = ⅟A - ⅟A * U * ⅟(⅟C + V * ⅟A * U) * V * ⅟A

          The Woodbury Identity (⅟ version).