 reserve Rseq, Rseq1, Rseq2 for Function of [:NAT,NAT:],REAL;

theorem
  for n,m being Nat, Rseq being Function of [:NAT,NAT:],REAL,
      M being Matrix of n+1,m+1,REAL st
  ( for i,j being Nat st i<=n & j<=m holds Rseq.(i,j) = M*(i+1,j+1) )
     holds (Partial_Sums Rseq).(n,m) = SumAll M
proof
   let n,m be Nat;
   let Rseq be Function of [:NAT,NAT:],REAL;
   let M be Matrix of n+1,m+1,REAL;
   assume
A1: for i,j being Nat st i<=n & j<=m holds Rseq.(i,j) = M*(i+1,j+1);
A2:len M = n+1 by MATRIX_0:25; then
A3:width M = m+1 by MATRIX_0:20;
X1:for i being Nat st i<=n holds
    (Partial_Sums_in_cod2 Rseq).(i,m) = (LineSum M).(i+1)
   proof
    let i be Nat;
    assume B0: i<=n; then
    1 <= i+1 & i+1 <= n+1 by NAT_1:11,XREAL_1:6; then
B01:i+1 in Seg(n+1) by FINSEQ_1:1;
    defpred P1[Nat] means
     $1+1 <= width M implies
      (Partial_Sums_in_cod2 Rseq).(i,$1) = Sum (Line(M,i+1)|($1+1));
    now assume 0+1 <= width M;
B2:  (Partial_Sums_in_cod2 Rseq).(i,0) = Rseq.(i,0) by DefCS;
     len Line(M,i+1) = m+1 by A3,MATRIX_0:def 7; then
B5:  len (Line(M,i+1)|1) = 1 by NAT_1:11,FINSEQ_1:59;
     1 <= width M by A3,NAT_1:11; then
B4:  1 in Seg width M by FINSEQ_1:1;
     (Line(M,i+1)|1).1 = Line(M,i+1).1 by FINSEQ_3:112; then
     Line(M,i+1)|(0+1) = <* M*(i+1,1) *>
       by B5,B4,MATRIX_0:def 7,FINSEQ_1:40; then
B6:  Sum(Line(M,i+1)|(0+1)) = M*(i+1,1) by RVSUM_1:73;
     thus (Partial_Sums_in_cod2 Rseq).(i,0) = Sum(Line(M,i+1)|(0+1))
       by A1,B0,B2,B6;
    end; then
P0: P1[0];
P1: for k being Nat st P1[k] holds P1[k+1]
    proof
     let k be Nat;
     assume C1: P1[k];
     now assume C2: k+1+1 <= width M; then
C3:   k+1 <= k+1+1 & k+1+1 <= len Line(M,i+1) by MATRIX_0:def 7,NAT_1:11; then
C5:   len (Line(M,i+1)|(k+1+1)) = k+1+1 by FINSEQ_1:59; then
      Line(M,i+1)|(k+1+1)
        = (Line(M,i+1)|(k+1+1))|(k+1)
          ^ <* Line(M,i+1)|(k+1+1)/.(len (Line(M,i+1)|(k+1+1))) *>
          by FINSEQ_5:21; then
C6:   Line(M,i+1)|(k+1+1)
        = Line(M,i+1)|(k+1) ^ <* Line(M,i+1)|(k+2)/.(k+2) *>
           by C5,FINSEQ_1:82,NAT_1:11;
      1 <= k+1+1 by NAT_1:11; then
C7:   k+2 in Seg width M by C2,FINSEQ_1:1;
C8:   k+1 <= m by A3,C2,XREAL_1:6;
      k+2 in Seg len(Line(M,i+1)|(k+2)) by C5,FINSEQ_1:4; then
      k+2 in dom (Line(M,i+1)|(k+2)) by FINSEQ_1:def 3; then
      Line(M,i+1)|(k+2)/.(k+2) = (Line(M,i+1)|(k+2)).(k+2)
        by PARTFUN1:def 6; then
      Line(M,i+1)|(k+2)/.(k+2) = Line(M,i+1).(k+2) by FINSEQ_3:112; then
      Line(M,i+1)|(k+2)/.(k+2) = M*(i+1,k+2) by C7,MATRIX_0:def 7; then
      Sum(Line(M,i+1)|(k+1+1)) = Sum(Line(M,i+1)|(k+1)) + M*(i+1,k+2)
        by C6,RVSUM_1:74; then
      Sum(Line(M,i+1)|(k+1+1))
       = (Partial_Sums_in_cod2 Rseq).(i,k) + Rseq.(i,k+1)
           by C3,B0,A1,C8,C1,C2,XXREAL_0:2;
      hence (Partial_Sums_in_cod2 Rseq).(i,k+1) = Sum(Line(M,i+1)|(k+1+1))
        by DefCS;
     end;
     hence P1[k+1];
    end;
C9: m+1 = len Line(M,i+1) by A3,MATRIX_0:def 7;
    for k be Nat holds P1[k] from NAT_1:sch 2(P0,P1); then
    (Partial_Sums_in_cod2 Rseq).(i,m) = Sum(Line(M,i+1)|(m+1)) by A3; then
    (Partial_Sums_in_cod2 Rseq).(i,m) = Sum Line(M,i+1) by C9,FINSEQ_1:58;
    hence (Partial_Sums_in_cod2 Rseq).(i,m) = (LineSum M).(i+1)
      by B01,A2,MATRPROB:20;
   end;
   defpred P2[Nat] means
    $1 <= n implies
     (Partial_Sums_in_cod1(Partial_Sums_in_cod2 Rseq)).($1,m)
       = Sum((LineSum M)|($1+1));
   now assume 0 <= n;
    0+1 <= n+1 by XREAL_1:6; then
    0+1 <= len (LineSum M) by A2,MATRPROB:20; then
    len((LineSum M)|(0+1)) = 1 by FINSEQ_1:59; then
D2: ((LineSum M)|(0+1)) = <* ((LineSum M)|(0+1)).1 *> by FINSEQ_1:40;
    (Partial_Sums_in_cod2 Rseq).(0,m) = (LineSum M).(0+1) by X1; then
    (Partial_Sums_in_cod1(Partial_Sums_in_cod2 Rseq)).(0,m)
     = (LineSum M).(0+1) by DefRS
    .= Sum <* (LineSum M).(0+1) *> by RVSUM_1:73;
    hence (Partial_Sums_in_cod1 (Partial_Sums_in_cod2 Rseq)).(0,m)
      = Sum ((LineSum M)|(0+1)) by D2,FINSEQ_3:112;
   end; then
P2:P2[0];
P3:for k being Nat st P2[k] holds P2[k+1]
   proof
    let k be Nat;
    assume E1: P2[k];
    now assume E2: k+1 <= n; then
  k+1<=k+1+1 & k+1+1 <= n+1 by NAT_1:11,XREAL_1:6; then
     k+1+1 <= len(LineSum M) by A2,MATRPROB:20; then
E3:  len((LineSum M)|(k+1+1)) = k+1+1 by FINSEQ_1:59; then
E5:  (LineSum M)|(k+1+1)
      = ((LineSum M)|(k+1+1))|(k+1)
         ^ <* ((LineSum M)|(k+1+1))/.(len ((LineSum M)|(k+1+1))) *>
           by FINSEQ_5:21
     .= (LineSum M)|(k+1) ^ <* ((LineSum M)|(k+1+1))/.(k+1+1) *>
        by E3,NAT_1:11,FINSEQ_1:82;
E7:  k<=k+1 by NAT_1:11;
     k+2 in Seg len((LineSum M)|(k+2)) by E3,FINSEQ_1:4; then
     k+2 in dom ((LineSum M)|(k+2)) by FINSEQ_1:def 3; then
     ((LineSum M)|(k+2))/.(k+2) = ((LineSum M)|(k+2)).(k+2) by PARTFUN1:def 6
       .= (LineSum M).(k+2) by FINSEQ_3:112; then
     Sum((LineSum M)|(k+1+1))
       = Sum((LineSum M)|(k+1)) + (LineSum M).(k+1+1) by E5,RVSUM_1:74
      .= (Partial_Sums_in_cod1(Partial_Sums_in_cod2 Rseq)).(k,m)
          + (Partial_Sums_in_cod2 Rseq).(k+1,m) by E1,E7,E2,X1,XXREAL_0:2;
     hence (Partial_Sums_in_cod1(Partial_Sums_in_cod2 Rseq)).(k+1,m)
            = Sum((LineSum M)|(k+1+1)) by DefRS;
    end;
    hence P2[k+1];
   end;
   for k being Nat holds P2[k] from NAT_1:sch 2(P2,P3); then
X2:(Partial_Sums_in_cod1(Partial_Sums_in_cod2 Rseq)).(n,m)
     = Sum((LineSum M)|(n+1));
   len (LineSum M) = n+1 by A2,MATRPROB:20; then
   (LineSum M)|(n+1) = LineSum M by FINSEQ_1:58; then
   (Partial_Sums_in_cod1(Partial_Sums_in_cod2 Rseq)).(n,m)
     = SumAll M by X2,MATRPROB:def 3;
   hence (Partial_Sums Rseq).(n,m) = SumAll M by th103;
end;
