Documentation

Mathlib.Data.Matrix.Composition

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 #

def Matrix.comp (I : Type u_1) (J : Type u_2) (K : Type u_3) (L : Type u_4) (R : Type u_5) :
Matrix I J (Matrix K L R) Matrix (I × K) (J × L) R

I by J matrix where each entry is a K by L matrix is equivalent to I × K by J × L matrix

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    @[simp]
    theorem Matrix.comp_apply (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)) (ik : I × K) (jl : J × L) :
    (comp I J K L R) m ik jl = m ik.1 jl.1 ik.2 jl.2
    @[simp]
    theorem Matrix.comp_symm_apply (I : Type u_1) (J : Type u_2) (K : Type u_3) (L : Type u_4) (R : Type u_5) (n : Matrix (I × K) (J × L) R) (i : I) (j : J) (k : K) (l : L) :
    (comp I J K L R).symm n i j k l = n (i, k) (j, l)
    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 : RR') :
    (comp I J K L R') (M.map fun (M' : Matrix K L R) => M'.map f) = ((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) :
    (comp I J K L R) (stdBasisMatrix i j (stdBasisMatrix k l r)) = 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) :
    (comp I J K L R).symm (stdBasisMatrix ii jj r) = stdBasisMatrix ii.1 jj.1 (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 : IJR) :
    (comp I I J J R) (diagonal fun (i : I) => diagonal fun (j : J) => d i j) = 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 × JR) :
    (comp I I J J R).symm (diagonal d) = diagonal fun (i : I) => 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)) :
    (comp J I K L R) M.transpose = ((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)) :
    (comp I J L K R) (M.map fun (x : Matrix K L R) => x.transpose) = ((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) :
    (comp J I L K R).symm M.transpose = (((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] :
    Matrix I J (Matrix K L R) ≃+ Matrix (I × K) (J × L) R

    Matrix.comp as AddEquiv

    Equations
    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)) :
      (compAddEquiv I J K L R) M = (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) :
      (compAddEquiv I J K L R).symm M = (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] :
      Matrix I I (Matrix J J R) ≃+* Matrix (I × J) (I × J) R

      Matrix.comp as RingEquiv

      Equations
      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)) :
        (compRingEquiv I J R) M = (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) :
        (compRingEquiv I J R).symm M = (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] :
        Matrix I J (Matrix K L R) ≃ₗ[K] Matrix (I × K) (J × L) R

        Matrix.comp as LinearEquiv

        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)) :
          (compLinearEquiv I J L R K) a✝ = (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) :
          (compLinearEquiv I J L R K).symm a✝ = (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] :
          Matrix I I (Matrix J J R) ≃ₐ[K] Matrix (I × J) (I × J) R

          Matrix.comp as AlgEquiv

          Equations
          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)) :
            (compAlgEquiv I J R K) M = (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) :
            (compAlgEquiv I J R K).symm M = (comp I I J J R).symm M