Article MATRIX_1, MML version 4.99.1005

:: MATRIX_1:attrnot 1 => MATRIX_1:attr 1
definition
  let a1 be Relation-like Function-like FinSequence-like set;
  attr a1 is tabular means
    ex b1 being natural set st
       for b2 being set
             st b2 in proj2 a1
          holds ex b3 being Relation-like Function-like FinSequence-like set st
             b3 = b2 & len b3 = b1;
end;

:: MATRIX_1:dfs 1
definiens
  let a1 be Relation-like Function-like FinSequence-like set;
To prove
     a1 is tabular
it is sufficient to prove
  thus ex b1 being natural set st
       for b2 being set
             st b2 in proj2 a1
          holds ex b3 being Relation-like Function-like FinSequence-like set st
             b3 = b2 & len b3 = b1;

:: MATRIX_1:def 1
theorem
for b1 being Relation-like Function-like FinSequence-like set holds
      b1 is tabular
   iff
      ex b2 being natural set st
         for b3 being set
               st b3 in proj2 b1
            holds ex b4 being Relation-like Function-like FinSequence-like set st
               b4 = b3 & len b4 = b2;

:: MATRIX_1:exreg 1
registration
  cluster Relation-like Function-like finite FinSequence-like tabular set;
end;

:: MATRIX_1:th 1
theorem
for b1 being non empty set
for b2 being Element of b1 holds
   <*<*b2*>*> is tabular;

:: MATRIX_1:th 2
theorem
for b1 being set
for b2, b3 being natural set holds
b2 |-> (b3 |-> b1) is tabular;

:: MATRIX_1:th 3
theorem
for b1 being Relation-like Function-like FinSequence-like set holds
   <*b1*> is tabular;

:: MATRIX_1:th 4
theorem
for b1 being natural set
for b2, b3 being Relation-like Function-like FinSequence-like set
      st len b2 = b1 & len b3 = b1
   holds <*b2,b3*> is tabular;

:: MATRIX_1:th 5
theorem
{} is tabular;

:: MATRIX_1:th 6
theorem
<*{},{}*> is tabular;

:: MATRIX_1:th 7
theorem
for b1 being non empty set
for b2, b3 being Element of b1 holds
<*<*b2*>,<*b3*>*> is tabular;

:: MATRIX_1:th 8
theorem
for b1 being non empty set
for b2, b3, b4, b5 being Element of b1 holds
<*<*b2,b3*>,<*b4,b5*>*> is tabular;

:: MATRIX_1:exreg 2
registration
  let a1 be set;
  cluster Relation-like Function-like finite FinSequence-like tabular FinSequence of a1 *;
end;

:: MATRIX_1:modenot 1
definition
  let a1 be set;
  mode Matrix of a1 is tabular FinSequence of a1 *;
end;

:: MATRIX_1:exreg 3
registration
  let a1 be non empty set;
  cluster Relation-like non empty-yielding Function-like finite FinSequence-like tabular FinSequence of a1 *;
end;

:: MATRIX_1:th 9
theorem
for b1 being non empty set
for b2 being Relation-like Function-like FinSequence-like set holds
      b2 is tabular FinSequence of b1 *
   iff
      ex b3 being natural set st
         for b4 being set
               st b4 in proj2 b2
            holds ex b5 being FinSequence of b1 st
               b4 = b5 & len b5 = b3;

:: MATRIX_1:modenot 2 => MATRIX_1:mode 1
definition
  let a1 be non empty set;
  let a2, a3 be natural set;
  mode Matrix of A2,A3,A1 -> tabular FinSequence of a1 * means
    len it = a2 &
     (for b1 being FinSequence of a1
           st b1 in proj2 it
        holds len b1 = a3);
end;

:: MATRIX_1:dfs 2
definiens
  let a1 be non empty set;
  let a2, a3 be natural set;
  let a4 be tabular FinSequence of a1 *;
To prove
     a4 is Matrix of a2,a3,a1
it is sufficient to prove
  thus len a4 = a2 &
     (for b1 being FinSequence of a1
           st b1 in proj2 a4
        holds len b1 = a3);

:: MATRIX_1:def 3
theorem
for b1 being non empty set
for b2, b3 being natural set
for b4 being tabular FinSequence of b1 * holds
      b4 is Matrix of b2,b3,b1
   iff
      len b4 = b2 &
       (for b5 being FinSequence of b1
             st b5 in proj2 b4
          holds len b5 = b3);

:: MATRIX_1:modenot 3
definition
  let a1 be non empty set;
  let a2 be natural set;
  mode Matrix of a2,a1 is Matrix of a2,a2,a1;
end;

:: MATRIX_1:modenot 4
definition
  let a1 be non empty 1-sorted;
  mode Matrix of a1 is tabular FinSequence of (the carrier of a1) *;
end;

:: MATRIX_1:modenot 5
definition
  let a1 be non empty 1-sorted;
  let a2 be natural set;
  mode Matrix of a2,a1 is Matrix of a2,a2,the carrier of a1;
end;

:: MATRIX_1:modenot 6
definition
  let a1 be non empty 1-sorted;
  let a2, a3 be natural set;
  mode Matrix of a2,a3,a1 is Matrix of a2,a3,the carrier of a1;
end;

:: MATRIX_1:th 10
theorem
for b1, b2 being natural set
for b3 being non empty set
for b4 being Element of b3 holds
   b1 |-> (b2 |-> b4) is Matrix of b1,b2,b3;

:: MATRIX_1:th 11
theorem
for b1 being non empty set
for b2 being FinSequence of b1 holds
   <*b2*> is Matrix of 1,len b2,b1;

:: MATRIX_1:th 12
theorem
for b1 being natural set
for b2 being non empty set
for b3, b4 being FinSequence of b2
      st len b3 = b1 & len b4 = b1
   holds <*b3,b4*> is Matrix of 2,b1,b2;

:: MATRIX_1:th 13
theorem
for b1 being natural set
for b2 being non empty set holds
   {} is Matrix of 0,b1,b2;

:: MATRIX_1:th 14
theorem
for b1 being non empty set holds
   <*{}*> is Matrix of 1,0,b1;

:: MATRIX_1:th 15
theorem
for b1 being non empty set
for b2 being Element of b1 holds
   <*<*b2*>*> is Matrix of 1,1,b1;

:: MATRIX_1:th 16
theorem
for b1 being non empty set holds
   <*{},{}*> is Matrix of 2,0,b1;

:: MATRIX_1:th 17
theorem
for b1 being non empty set
for b2, b3 being Element of b1 holds
<*<*b2,b3*>*> is Matrix of 1,2,b1;

:: MATRIX_1:th 18
theorem
for b1 being non empty set
for b2, b3 being Element of b1 holds
<*<*b2*>,<*b3*>*> is Matrix of 2,1,b1;

:: MATRIX_1:th 19
theorem
for b1 being non empty set
for b2, b3, b4, b5 being Element of b1 holds
<*<*b2,b3*>,<*b4,b5*>*> is Matrix of 2,2,b1;

:: MATRIX_1:funcnot 1 => MATRIX_1:func 1
definition
  let a1 be Relation-like Function-like FinSequence-like tabular set;
  func width A1 -> Element of NAT means
    ex b1 being Relation-like Function-like FinSequence-like set st
       b1 in proj2 a1 & len b1 = it
    if 0 < len a1
    otherwise it = 0;
end;

:: MATRIX_1:def 4
theorem
for b1 being Relation-like Function-like FinSequence-like tabular set
for b2 being Element of NAT holds
   (len b1 <= 0 or    (b2 = width b1
    iff
       ex b3 being Relation-like Function-like FinSequence-like set st
          b3 in proj2 b1 & len b3 = b2)) &
    (len b1 <= 0 implies    (b2 = width b1
    iff
       b2 = 0));

:: MATRIX_1:th 20
theorem
for b1 being non empty set
for b2 being tabular FinSequence of b1 *
   st 0 < len b2
for b3 being natural set holds
      b2 is Matrix of len b2,b3,b1
   iff
      b3 = width b2;

:: MATRIX_1:funcnot 2 => MATRIX_1:func 2
definition
  let a1 be Relation-like Function-like FinSequence-like tabular set;
  func Indices A1 -> set equals
    [:dom a1,Seg width a1:];
end;

:: MATRIX_1:def 5
theorem
for b1 being Relation-like Function-like FinSequence-like tabular set holds
   Indices b1 = [:dom b1,Seg width b1:];

:: MATRIX_1:funcnot 3 => MATRIX_1:func 3
definition
  let a1 be set;
  let a2 be tabular FinSequence of a1 *;
  let a3, a4 be natural set;
  assume [a3,a4] in Indices a2;
  func A2 *(A3,A4) -> Element of a1 means
    ex b1 being FinSequence of a1 st
       b1 = a2 . a3 & it = b1 . a4;
end;

:: MATRIX_1:def 6
theorem
for b1 being set
for b2 being tabular FinSequence of b1 *
for b3, b4 being natural set
   st [b3,b4] in Indices b2
for b5 being Element of b1 holds
      b5 = b2 *(b3,b4)
   iff
      ex b6 being FinSequence of b1 st
         b6 = b2 . b3 & b5 = b6 . b4;

:: MATRIX_1:th 21
theorem
for b1 being non empty set
for b2, b3 being tabular FinSequence of b1 *
      st len b2 = len b3 &
         width b2 = width b3 &
         (for b4, b5 being natural set
               st [b4,b5] in Indices b2
            holds b2 *(b4,b5) = b3 *(b4,b5))
   holds b2 = b3;

:: MATRIX_1:sch 1
scheme MATRIX_1:sch 1
{F1 -> non empty set,
  F2 -> Element of NAT,
  F3 -> Element of NAT,
  F4 -> Element of F1()}:
ex b1 being Matrix of F2(),F3(),F1() st
   for b2, b3 being natural set
         st [b2,b3] in Indices b1
      holds b1 *(b2,b3) = F4(b2, b3)


:: MATRIX_1:sch 2
scheme MATRIX_1:sch 2
{F1 -> non empty set,
  F2 -> Element of NAT,
  F3 -> Element of NAT}:
ex b1 being Matrix of F2(),F3(),F1() st
   for b2, b3 being natural set
         st [b2,b3] in Indices b1
      holds P1[b2, b3, b1 *(b2,b3)]
provided
   for b1, b2 being natural set
      st [b1,b2] in [:Seg F2(),Seg F3():]
   for b3, b4 being Element of F1()
         st P1[b1, b2, b3] & P1[b1, b2, b4]
      holds b3 = b4
and
   for b1, b2 being natural set
         st [b1,b2] in [:Seg F2(),Seg F3():]
      holds ex b3 being Element of F1() st
         P1[b1, b2, b3];


:: MATRIX_1:th 23
theorem
for b1 being natural set
for b2 being non empty set
for b3 being Matrix of 0,b1,b2 holds
   len b3 = 0 & width b3 = 0 & Indices b3 = {};

:: MATRIX_1:th 24
theorem
for b1, b2 being natural set
for b3 being non empty set
   st 0 < b1
for b4 being Matrix of b1,b2,b3 holds
   len b4 = b1 &
    width b4 = b2 &
    Indices b4 = [:Seg b1,Seg b2:];

:: MATRIX_1:th 25
theorem
for b1 being natural set
for b2 being non empty set
for b3 being Matrix of b1,b1,b2 holds
   len b3 = b1 &
    width b3 = b1 &
    Indices b3 = [:Seg b1,Seg b1:];

:: MATRIX_1:th 26
theorem
for b1, b2 being natural set
for b3 being non empty set
for b4 being Matrix of b1,b2,b3 holds
   len b4 = b1 &
    Indices b4 = [:Seg b1,Seg width b4:];

:: MATRIX_1:th 27
theorem
for b1, b2 being natural set
for b3 being non empty set
for b4, b5 being Matrix of b1,b2,b3 holds
Indices b4 = Indices b5;

:: MATRIX_1:th 28
theorem
for b1, b2 being natural set
for b3 being non empty set
for b4, b5 being Matrix of b1,b2,b3
      st for b6, b7 being natural set
              st [b6,b7] in Indices b4
           holds b4 *(b6,b7) = b5 *(b6,b7)
   holds b4 = b5;

:: MATRIX_1:th 29
theorem
for b1 being natural set
for b2 being non empty set
for b3 being Matrix of b1,b1,b2
for b4, b5 being natural set
      st [b4,b5] in Indices b3
   holds [b5,b4] in Indices b3;

:: MATRIX_1:funcnot 4 => MATRIX_1:func 4
definition
  let a1 be non empty set;
  let a2 be tabular FinSequence of a1 *;
  func A2 @ -> tabular FinSequence of a1 * means
    len it = width a2 &
     (for b1, b2 being natural set holds
        [b1,b2] in Indices it
     iff
        [b2,b1] in Indices a2) &
     (for b1, b2 being natural set
           st [b2,b1] in Indices a2
        holds it *(b1,b2) = a2 *(b2,b1));
end;

:: MATRIX_1:def 7
theorem
for b1 being non empty set
for b2, b3 being tabular FinSequence of b1 * holds
   b3 = b2 @
iff
   len b3 = width b2 &
    (for b4, b5 being natural set holds
       [b4,b5] in Indices b3
    iff
       [b5,b4] in Indices b2) &
    (for b4, b5 being natural set
          st [b5,b4] in Indices b2
       holds b3 *(b4,b5) = b2 *(b5,b4));

:: MATRIX_1:funcnot 5 => MATRIX_1:func 5
definition
  let a1 be natural set;
  let a2 be non empty set;
  let a3 be Matrix of a1,a1,a2;
  redefine func a3 @ -> Matrix of a1,a1,a2;
end;

:: MATRIX_1:funcnot 6 => MATRIX_1:func 6
definition
  let a1 be non empty set;
  let a2 be tabular FinSequence of a1 *;
  let a3 be natural set;
  func Line(A2,A3) -> FinSequence of a1 means
    len it = width a2 &
     (for b1 being natural set
           st b1 in Seg width a2
        holds it . b1 = a2 *(a3,b1));
end;

:: MATRIX_1:def 8
theorem
for b1 being non empty set
for b2 being tabular FinSequence of b1 *
for b3 being natural set
for b4 being FinSequence of b1 holds
      b4 = Line(b2,b3)
   iff
      len b4 = width b2 &
       (for b5 being natural set
             st b5 in Seg width b2
          holds b4 . b5 = b2 *(b3,b5));

:: MATRIX_1:funcnot 7 => MATRIX_1:func 7
definition
  let a1 be non empty set;
  let a2 be tabular FinSequence of a1 *;
  let a3 be natural set;
  func Col(A2,A3) -> FinSequence of a1 means
    len it = len a2 &
     (for b1 being natural set
           st b1 in dom a2
        holds it . b1 = a2 *(b1,a3));
end;

:: MATRIX_1:def 9
theorem
for b1 being non empty set
for b2 being tabular FinSequence of b1 *
for b3 being natural set
for b4 being FinSequence of b1 holds
      b4 = Col(b2,b3)
   iff
      len b4 = len b2 &
       (for b5 being natural set
             st b5 in dom b2
          holds b4 . b5 = b2 *(b5,b3));

:: MATRIX_1:funcnot 8 => MATRIX_1:func 8
definition
  let a1 be non empty set;
  let a2 be tabular FinSequence of a1 *;
  let a3 be natural set;
  redefine func Line(a2,a3) -> Element of (width a2) -tuples_on a1;
end;

:: MATRIX_1:funcnot 9 => MATRIX_1:func 9
definition
  let a1 be non empty set;
  let a2 be tabular FinSequence of a1 *;
  let a3 be natural set;
  redefine func Col(a2,a3) -> Element of (len a2) -tuples_on a1;
end;

:: MATRIX_1:funcnot 10 => MATRIX_1:func 10
definition
  let a1 be non empty doubleLoopStr;
  let a2 be natural set;
  func A2 -Matrices_over A1 -> set equals
    a2 -tuples_on (a2 -tuples_on the carrier of a1);
end;

:: MATRIX_1:def 10
theorem
for b1 being non empty doubleLoopStr
for b2 being natural set holds
   b2 -Matrices_over b1 = b2 -tuples_on (b2 -tuples_on the carrier of b1);

:: MATRIX_1:funcnot 11 => MATRIX_1:func 11
definition
  let a1 be non empty doubleLoopStr;
  let a2 be natural set;
  func 0.(A1,A2) -> Matrix of a2,a2,the carrier of a1 equals
    a2 |-> (a2 |-> 0. a1);
end;

:: MATRIX_1:def 11
theorem
for b1 being non empty doubleLoopStr
for b2 being natural set holds
   0.(b1,b2) = b2 |-> (b2 |-> 0. b1);

:: MATRIX_1:funcnot 12 => MATRIX_1:func 12
definition
  let a1 be non empty doubleLoopStr;
  let a2 be natural set;
  func 1.(A1,A2) -> Matrix of a2,a2,the carrier of a1 means
    (for b1 being natural set
           st [b1,b1] in Indices it
        holds it *(b1,b1) = 1. a1) &
     (for b1, b2 being natural set
           st [b1,b2] in Indices it & b1 <> b2
        holds it *(b1,b2) = 0. a1);
end;

:: MATRIX_1:def 12
theorem
for b1 being non empty doubleLoopStr
for b2 being natural set
for b3 being Matrix of b2,b2,the carrier of b1 holds
      b3 = 1.(b1,b2)
   iff
      (for b4 being natural set
             st [b4,b4] in Indices b3
          holds b3 *(b4,b4) = 1. b1) &
       (for b4, b5 being natural set
             st [b4,b5] in Indices b3 & b4 <> b5
          holds b3 *(b4,b5) = 0. b1);

:: MATRIX_1:funcnot 13 => MATRIX_1:func 13
definition
  let a1 be non empty doubleLoopStr;
  let a2 be natural set;
  let a3 be Matrix of a2,a2,the carrier of a1;
  func - A3 -> Matrix of a2,a2,the carrier of a1 means
    for b1, b2 being natural set
          st [b1,b2] in Indices a3
       holds it *(b1,b2) = - (a3 *(b1,b2));
end;

:: MATRIX_1:def 13
theorem
for b1 being non empty doubleLoopStr
for b2 being natural set
for b3, b4 being Matrix of b2,b2,the carrier of b1 holds
   b4 = - b3
iff
   for b5, b6 being natural set
         st [b5,b6] in Indices b3
      holds b4 *(b5,b6) = - (b3 *(b5,b6));

:: MATRIX_1:funcnot 14 => MATRIX_1:func 14
definition
  let a1 be non empty doubleLoopStr;
  let a2 be natural set;
  let a3, a4 be Matrix of a2,a2,the carrier of a1;
  func A3 + A4 -> Matrix of a2,a2,the carrier of a1 means
    for b1, b2 being natural set
          st [b1,b2] in Indices a3
       holds it *(b1,b2) = (a3 *(b1,b2)) + (a4 *(b1,b2));
end;

:: MATRIX_1:def 14
theorem
for b1 being non empty doubleLoopStr
for b2 being natural set
for b3, b4, b5 being Matrix of b2,b2,the carrier of b1 holds
   b5 = b3 + b4
iff
   for b6, b7 being natural set
         st [b6,b7] in Indices b3
      holds b5 *(b6,b7) = (b3 *(b6,b7)) + (b4 *(b6,b7));

:: MATRIX_1:funcreg 1
registration
  let a1 be non empty doubleLoopStr;
  let a2 be natural set;
  cluster a2 -Matrices_over a1 -> non empty;
end;

:: MATRIX_1:th 30
theorem
for b1, b2, b3 being natural set
for b4 being non empty doubleLoopStr
      st [b1,b2] in Indices 0.(b4,b3)
   holds (0.(b4,b3)) *(b1,b2) = 0. b4;

:: MATRIX_1:th 31
theorem
for b1 being set
for b2 being natural set
for b3 being non empty doubleLoopStr holds
      b1 is Element of b2 -Matrices_over b3
   iff
      b1 is Matrix of b2,b2,the carrier of b3;

:: MATRIX_1:attrnot 2 => MATRIX_1:attr 2
definition
  let a1 be non empty ZeroStr;
  let a2 be tabular FinSequence of (the carrier of a1) *;
  attr a2 is diagonal means
    for b1, b2 being natural set
          st [b1,b2] in Indices a2 & a2 *(b1,b2) <> 0. a1
       holds b1 = b2;
end;

:: MATRIX_1:dfs 14
definiens
  let a1 be non empty ZeroStr;
  let a2 be tabular FinSequence of (the carrier of a1) *;
To prove
     a2 is diagonal
it is sufficient to prove
  thus for b1, b2 being natural set
          st [b1,b2] in Indices a2 & a2 *(b1,b2) <> 0. a1
       holds b1 = b2;

:: MATRIX_1:def 15
theorem
for b1 being non empty ZeroStr
for b2 being tabular FinSequence of (the carrier of b1) * holds
      b2 is diagonal(b1)
   iff
      for b3, b4 being natural set
            st [b3,b4] in Indices b2 & b2 *(b3,b4) <> 0. b1
         holds b3 = b4;

:: MATRIX_1:exreg 4
registration
  let a1 be natural set;
  let a2 be non empty doubleLoopStr;
  cluster Relation-like Function-like finite FinSequence-like tabular diagonal Matrix of a1,a1,the carrier of a2;
end;

:: MATRIX_1:modenot 7
definition
  let a1 be non empty doubleLoopStr;
  let a2 be natural set;
  mode Diagonal of a2,a1 is diagonal Matrix of a2,a2,the carrier of a1;
end;

:: MATRIX_1:th 32
theorem
for b1 being natural set
for b2 being non empty right_complementable Abelian add-associative right_zeroed doubleLoopStr
for b3, b4 being Matrix of b1,b1,the carrier of b2 holds
b3 + b4 = b4 + b3;

:: MATRIX_1:th 33
theorem
for b1 being natural set
for b2 being non empty right_complementable Abelian add-associative right_zeroed doubleLoopStr
for b3, b4, b5 being Matrix of b1,b1,the carrier of b2 holds
(b3 + b4) + b5 = b3 + (b4 + b5);

:: MATRIX_1:th 34
theorem
for b1 being natural set
for b2 being non empty right_complementable Abelian add-associative right_zeroed doubleLoopStr
for b3 being Matrix of b1,b1,the carrier of b2 holds
   b3 + 0.(b2,b1) = b3;

:: MATRIX_1:th 35
theorem
for b1 being natural set
for b2 being non empty right_complementable Abelian add-associative right_zeroed doubleLoopStr
for b3 being Matrix of b1,b1,the carrier of b2 holds
   b3 + - b3 = 0.(b2,b1);

:: MATRIX_1:funcnot 15 => MATRIX_1:func 15
definition
  let a1 be non empty right_complementable Abelian add-associative right_zeroed doubleLoopStr;
  let a2 be natural set;
  func A2 -G_Matrix_over A1 -> non empty strict right_complementable Abelian add-associative right_zeroed addLoopStr means
    the carrier of it = a2 -Matrices_over a1 &
     (for b1, b2 being Matrix of a2,a2,the carrier of a1 holds
     (the addF of it) .(b1,b2) = b1 + b2) &
     0. it = 0.(a1,a2);
end;

:: MATRIX_1:def 16
theorem
for b1 being non empty right_complementable Abelian add-associative right_zeroed doubleLoopStr
for b2 being natural set
for b3 being non empty strict right_complementable Abelian add-associative right_zeroed addLoopStr holds
      b3 = b2 -G_Matrix_over b1
   iff
      the carrier of b3 = b2 -Matrices_over b1 &
       (for b4, b5 being Matrix of b2,b2,the carrier of b1 holds
       (the addF of b3) .(b4,b5) = b4 + b5) &
       0. b3 = 0.(b1,b2);

:: MATRIX_1:th 36
theorem
for b1, b2 being natural set
for b3 being non empty doubleLoopStr
for b4 being Matrix of 0,b1,the carrier of b3
for b5 being Matrix of 0,b2,the carrier of b3 holds
   b4 = b5;

:: MATRIX_1:th 37
theorem
for b1 being set
for b2, b3 being natural set
for b4 being tabular FinSequence of b1 *
      st 1 <= b2 & b2 <= len b4 & 1 <= b3 & b3 <= width b4
   holds [b2,b3] in Indices b4;

:: MATRIX_1:th 38
theorem
for b1, b2, b3, b4 being natural set
for b5 being non empty set
for b6 being Matrix of b1,b2,b5
      st 1 <= b3 & b3 <= b1 & 1 <= b4 & b4 <= b2
   holds [b3,b4] in Indices b6;