Symmetric matrices #
This file contains the definition and basic results about symmetric matrices.
Main definition #
Matrix.isSymm
: a matrixA : Matrix n n α
is "symmetric" ifAᵀ = A
.
Tags #
symm, symmetric, matrix
A matrix A : Matrix n n α
is "symmetric" if Aᵀ = A
.
Equations
- Matrix.IsSymm A = (Matrix.transpose A = A)
Instances For
theorem
Matrix.IsSymm.eq
{α : Type u_1}
{n : Type u_3}
{A : Matrix n n α}
(h : Matrix.IsSymm A)
:
Matrix.transpose A = A
theorem
Matrix.IsSymm.ext_iff
{α : Type u_1}
{n : Type u_3}
{A : Matrix n n α}
:
Matrix.IsSymm A ↔ ∀ (i j : n), A j i = A i j
A version of Matrix.ext_iff
that unfolds the Matrix.transpose
.
theorem
Matrix.IsSymm.ext
{α : Type u_1}
{n : Type u_3}
{A : Matrix n n α}
:
(∀ (i j : n), A j i = A i j) → Matrix.IsSymm A
A version of Matrix.ext
that unfolds the Matrix.transpose
.
theorem
Matrix.IsSymm.apply
{α : Type u_1}
{n : Type u_3}
{A : Matrix n n α}
(h : Matrix.IsSymm A)
(i : n)
(j : n)
:
A j i = A i j
theorem
Matrix.isSymm_mul_transpose_self
{α : Type u_1}
{n : Type u_3}
[Fintype n]
[CommSemiring α]
(A : Matrix n n α)
:
Matrix.IsSymm (A * Matrix.transpose A)
theorem
Matrix.isSymm_transpose_mul_self
{α : Type u_1}
{n : Type u_3}
[Fintype n]
[CommSemiring α]
(A : Matrix n n α)
:
Matrix.IsSymm (Matrix.transpose A * A)
theorem
Matrix.isSymm_add_transpose_self
{α : Type u_1}
{n : Type u_3}
[AddCommSemigroup α]
(A : Matrix n n α)
:
Matrix.IsSymm (A + Matrix.transpose A)
theorem
Matrix.isSymm_transpose_add_self
{α : Type u_1}
{n : Type u_3}
[AddCommSemigroup α]
(A : Matrix n n α)
:
Matrix.IsSymm (Matrix.transpose A + A)
@[simp]
theorem
Matrix.IsSymm.pow
{α : Type u_1}
{n : Type u_3}
[CommSemiring α]
[Fintype n]
[DecidableEq n]
{A : Matrix n n α}
(h : Matrix.IsSymm A)
(k : ℕ)
:
Matrix.IsSymm (A ^ k)
@[simp]
theorem
Matrix.IsSymm.map
{α : Type u_1}
{β : Type u_2}
{n : Type u_3}
{A : Matrix n n α}
(h : Matrix.IsSymm A)
(f : α → β)
:
Matrix.IsSymm (Matrix.map A f)
@[simp]
theorem
Matrix.IsSymm.transpose
{α : Type u_1}
{n : Type u_3}
{A : Matrix n n α}
(h : Matrix.IsSymm A)
:
@[simp]
theorem
Matrix.IsSymm.conjTranspose
{α : Type u_1}
{n : Type u_3}
[Star α]
{A : Matrix n n α}
(h : Matrix.IsSymm A)
:
@[simp]
theorem
Matrix.IsSymm.neg
{α : Type u_1}
{n : Type u_3}
[Neg α]
{A : Matrix n n α}
(h : Matrix.IsSymm A)
:
Matrix.IsSymm (-A)
@[simp]
theorem
Matrix.IsSymm.add
{α : Type u_1}
{n : Type u_3}
{A : Matrix n n α}
{B : Matrix n n α}
[Add α]
(hA : Matrix.IsSymm A)
(hB : Matrix.IsSymm B)
:
Matrix.IsSymm (A + B)
@[simp]
theorem
Matrix.IsSymm.sub
{α : Type u_1}
{n : Type u_3}
{A : Matrix n n α}
{B : Matrix n n α}
[Sub α]
(hA : Matrix.IsSymm A)
(hB : Matrix.IsSymm B)
:
Matrix.IsSymm (A - B)
@[simp]
theorem
Matrix.IsSymm.smul
{α : Type u_1}
{n : Type u_3}
{R : Type u_5}
[SMul R α]
{A : Matrix n n α}
(h : Matrix.IsSymm A)
(k : R)
:
Matrix.IsSymm (k • A)
@[simp]
theorem
Matrix.IsSymm.submatrix
{α : Type u_1}
{n : Type u_3}
{m : Type u_4}
{A : Matrix n n α}
(h : Matrix.IsSymm A)
(f : m → n)
:
Matrix.IsSymm (Matrix.submatrix A f f)
@[simp]
The diagonal matrix diagonal v
is symmetric.
theorem
Matrix.IsSymm.fromBlocks
{α : Type u_1}
{n : Type u_3}
{m : Type u_4}
{A : Matrix m m α}
{B : Matrix m n α}
{C : Matrix n m α}
{D : Matrix n n α}
(hA : Matrix.IsSymm A)
(hBC : Matrix.transpose B = C)
(hD : Matrix.IsSymm D)
:
Matrix.IsSymm (Matrix.fromBlocks A B C D)
A block matrix A.fromBlocks B C D
is symmetric,
if A
and D
are symmetric and Bᵀ = C
.
theorem
Matrix.isSymm_fromBlocks_iff
{α : Type u_1}
{n : Type u_3}
{m : Type u_4}
{A : Matrix m m α}
{B : Matrix m n α}
{C : Matrix n m α}
{D : Matrix n n α}
:
Matrix.IsSymm (Matrix.fromBlocks A B C D) ↔ Matrix.IsSymm A ∧ Matrix.transpose B = C ∧ Matrix.transpose C = B ∧ Matrix.IsSymm D
This is the iff
version of Matrix.isSymm.fromBlocks
.