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 (since := "2024-09-07")]
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 (since := "2024-09-07")]
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 (since := "2024-09-07")]
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 (since := "2024-09-07")]
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).