Composition of matrices #
This file shows that Mₙ(Mₘ(R)) ≃ Mₙₘ(R), Mₙ(Rᵒᵖ) ≃ₐ[K] Mₙ(R)ᵒᵖ and also different levels of equivalence when R is an AddCommMonoid, Semiring, and Algebra over a CommSemiring K.
Main results #
Matrix.comp
is an equivalence betweenMatrix I J (Matrix K L R)
andI × K
byJ × L
matrices.Matrix.swap
is an equivalence between(I × J)
by(K × L)
matrices andJ × I
byL × K
matrices.
theorem
Matrix.comp_map_map
{I : Type u_1}
{J : Type u_2}
{K : Type u_3}
{L : Type u_4}
{R : Type u_5}
(R' : Type u_6)
(M : Matrix I J (Matrix K L R))
(f : R → R')
:
(Matrix.comp I J K L R') (M.map fun (M' : Matrix K L R) => M'.map f) = ((Matrix.comp I J K L R) M).map f
@[simp]
theorem
Matrix.comp_stdBasisMatrix_stdBasisMatrix
{I : Type u_1}
{J : Type u_2}
{K : Type u_3}
{L : Type u_4}
{R : Type u_5}
[DecidableEq I]
[DecidableEq J]
[DecidableEq K]
[DecidableEq L]
[Zero R]
(i : I)
(j : J)
(k : K)
(l : L)
(r : R)
:
(Matrix.comp I J K L R) (Matrix.stdBasisMatrix i j (Matrix.stdBasisMatrix k l r)) = Matrix.stdBasisMatrix (i, k) (j, l) r
@[simp]
theorem
Matrix.comp_symm_stdBasisMatrix
{I : Type u_1}
{J : Type u_2}
{K : Type u_3}
{L : Type u_4}
{R : Type u_5}
[DecidableEq I]
[DecidableEq J]
[DecidableEq K]
[DecidableEq L]
[Zero R]
(ii : I × K)
(jj : J × L)
(r : R)
:
(Matrix.comp I J K L R).symm (Matrix.stdBasisMatrix ii jj r) = Matrix.stdBasisMatrix ii.1 jj.1 (Matrix.stdBasisMatrix ii.2 jj.2 r)
@[simp]
theorem
Matrix.comp_diagonal_diagonal
{I : Type u_1}
{J : Type u_2}
{R : Type u_5}
[DecidableEq I]
[DecidableEq J]
[Zero R]
(d : I → J → R)
:
(Matrix.comp I I J J R) (Matrix.diagonal fun (i : I) => Matrix.diagonal fun (j : J) => d i j) = Matrix.diagonal fun (ij : I × J) => d ij.1 ij.2
@[simp]
theorem
Matrix.comp_symm_diagonal
{I : Type u_1}
{J : Type u_2}
{R : Type u_5}
[DecidableEq I]
[DecidableEq J]
[Zero R]
(d : I × J → R)
:
(Matrix.comp I I J J R).symm (Matrix.diagonal d) = Matrix.diagonal fun (i : I) => Matrix.diagonal fun (j : J) => d (i, j)
theorem
Matrix.comp_transpose
{I : Type u_1}
{J : Type u_2}
{K : Type u_3}
{L : Type u_4}
{R : Type u_5}
(M : Matrix I J (Matrix K L R))
:
(Matrix.comp J I K L R) M.transpose = ((Matrix.comp I J L K R) (M.map fun (x : Matrix K L R) => x.transpose)).transpose
theorem
Matrix.comp_map_transpose
{I : Type u_1}
{J : Type u_2}
{K : Type u_3}
{L : Type u_4}
{R : Type u_5}
(M : Matrix I J (Matrix K L R))
:
(Matrix.comp I J L K R) (M.map fun (x : Matrix K L R) => x.transpose) = ((Matrix.comp J I K L R) M.transpose).transpose
theorem
Matrix.comp_symm_transpose
{I : Type u_1}
{J : Type u_2}
{K : Type u_3}
{L : Type u_4}
{R : Type u_5}
(M : Matrix (I × K) (J × L) R)
:
(Matrix.comp J I L K R).symm M.transpose = (((Matrix.comp I J K L R).symm M).map fun (x : Matrix K L R) => x.transpose).transpose
def
Matrix.compAddEquiv
(I : Type u_1)
(J : Type u_2)
(K : Type u_3)
(L : Type u_4)
(R : Type u_5)
[AddCommMonoid R]
:
Equations
- Matrix.compAddEquiv I J K L R = { toEquiv := Matrix.comp I J K L R, map_add' := ⋯ }
Instances For
@[simp]
theorem
Matrix.compAddEquiv_apply
(I : Type u_1)
(J : Type u_2)
(K : Type u_3)
(L : Type u_4)
(R : Type u_5)
[AddCommMonoid R]
(M : Matrix I J (Matrix K L R))
:
(Matrix.compAddEquiv I J K L R) M = (Matrix.comp I J K L R) M
@[simp]
theorem
Matrix.compAddEquiv_symm_apply
(I : Type u_1)
(J : Type u_2)
(K : Type u_3)
(L : Type u_4)
(R : Type u_5)
[AddCommMonoid R]
(M : Matrix (I × K) (J × L) R)
:
(Matrix.compAddEquiv I J K L R).symm M = (Matrix.comp I J K L R).symm M
def
Matrix.compRingEquiv
(I : Type u_1)
(J : Type u_2)
(R : Type u_5)
[Semiring R]
[Fintype I]
[Fintype J]
:
Equations
- Matrix.compRingEquiv I J R = { toEquiv := (Matrix.compAddEquiv I I J J R).toEquiv, map_mul' := ⋯, map_add' := ⋯ }
Instances For
@[simp]
theorem
Matrix.compRingEquiv_apply
(I : Type u_1)
(J : Type u_2)
(R : Type u_5)
[Semiring R]
[Fintype I]
[Fintype J]
(M : Matrix I I (Matrix J J R))
:
(Matrix.compRingEquiv I J R) M = (Matrix.comp I I J J R) M
@[simp]
theorem
Matrix.compRingEquiv_symm_apply
(I : Type u_1)
(J : Type u_2)
(R : Type u_5)
[Semiring R]
[Fintype I]
[Fintype J]
(M : Matrix (I × J) (I × J) R)
:
(Matrix.compRingEquiv I J R).symm M = (Matrix.comp I I J J R).symm M
def
Matrix.compLinearEquiv
(I : Type u_1)
(J : Type u_2)
(L : Type u_4)
(R : Type u_5)
(K : Type u_7)
[CommSemiring K]
[AddCommMonoid R]
[Module K R]
:
Equations
- One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem
Matrix.compLinearEquiv_apply
(I : Type u_1)
(J : Type u_2)
(L : Type u_4)
(R : Type u_5)
(K : Type u_7)
[CommSemiring K]
[AddCommMonoid R]
[Module K R]
(a✝ : Matrix I J (Matrix K L R))
:
(Matrix.compLinearEquiv I J L R K) a✝ = (Matrix.comp I J K L R) a✝
@[simp]
theorem
Matrix.compLinearEquiv_symm_apply
(I : Type u_1)
(J : Type u_2)
(L : Type u_4)
(R : Type u_5)
(K : Type u_7)
[CommSemiring K]
[AddCommMonoid R]
[Module K R]
(a✝ : Matrix (I × K) (J × L) R)
:
(Matrix.compLinearEquiv I J L R K).symm a✝ = (Matrix.comp I J K L R).symm a✝
def
Matrix.compAlgEquiv
(I : Type u_1)
(J : Type u_2)
(R : Type u_5)
(K : Type u_7)
[CommSemiring K]
[Semiring R]
[Fintype I]
[Fintype J]
[Algebra K R]
[DecidableEq I]
[DecidableEq J]
:
Equations
- Matrix.compAlgEquiv I J R K = { toEquiv := (Matrix.compRingEquiv I J R).toEquiv, map_mul' := ⋯, map_add' := ⋯, commutes' := ⋯ }
Instances For
@[simp]
theorem
Matrix.compAlgEquiv_apply
(I : Type u_1)
(J : Type u_2)
(R : Type u_5)
(K : Type u_7)
[CommSemiring K]
[Semiring R]
[Fintype I]
[Fintype J]
[Algebra K R]
[DecidableEq I]
[DecidableEq J]
(M : Matrix I I (Matrix J J R))
:
(Matrix.compAlgEquiv I J R K) M = (Matrix.comp I I J J R) M
@[simp]
theorem
Matrix.compAlgEquiv_symm_apply
(I : Type u_1)
(J : Type u_2)
(R : Type u_5)
(K : Type u_7)
[CommSemiring K]
[Semiring R]
[Fintype I]
[Fintype J]
[Algebra K R]
[DecidableEq I]
[DecidableEq J]
(M : Matrix (I × J) (I × J) R)
:
(Matrix.compAlgEquiv I J R K).symm M = (Matrix.comp I I J J R).symm M