reserve Rseq, Rseq1, Rseq2 for Function of [:NAT,NAT:],REAL;
reserve rseq1,rseq2 for convergent Real_Sequence;
reserve n,m,N,M for Nat;
reserve e,r for Real;
reserve Pseq for P-convergent Function of [:NAT,NAT:],REAL;

theorem
addreal*(rseq1,rseq2) is convergent_in_cod1 convergent_in_cod2
& lim_in_cod1 (addreal*(rseq1,rseq2)) is convergent
& cod1_major_iterated_lim (addreal*(rseq1,rseq2)) = lim rseq1 + lim rseq2
& lim_in_cod2 (addreal*(rseq1,rseq2)) is convergent
& cod2_major_iterated_lim (addreal*(rseq1,rseq2)) = lim rseq1 + lim rseq2
& addreal*(rseq1,rseq2) is P-convergent
& P-lim (addreal*(rseq1,rseq2)) = lim rseq1 + lim rseq2
proof
   set Rseq = addreal*(rseq1,rseq2);
a2:for n,m holds Rseq.(n,m) = rseq1.n + rseq2.m
   proof
    let n,m;
a1: n in NAT & m in NAT by ORDINAL1:def 12;
    dom Rseq = [:NAT,NAT:] by FUNCT_2:def 1; then
    [n,m] in dom Rseq by a1,ZFMISC_1:def 2; then
    Rseq.(n,m) = addreal.(rseq1.n,rseq2.m) by FINSEQOP:77;
    hence Rseq.(n,m) = rseq1.n + rseq2.m by BINOP_2:def 9;
   end;
x1:for m be Element of NAT, e be Real st 0<e
    ex N be Nat st
     for n be Nat st n>=N holds
      |.ProjMap2(Rseq,m).n - (lim rseq1 + rseq2.m).| < e
   proof
    let m be Element of NAT, e be Real;
    assume 0<e; then
    consider N be Nat such that
a3:  for n be Nat st n>=N holds
      |.rseq1.n - lim rseq1.| < e by SEQ_2:def 7;
    take N;
    hereby let n be Nat;
     assume a4: n>=N;
     n is Element of NAT by ORDINAL1:def 12; then
     |.ProjMap2(Rseq,m).n - (lim rseq1 + rseq2.m).|
      = |. Rseq.(n,m) - (lim rseq1 + rseq2.m).| by MESFUNC9:def 7
     .= |.(rseq1.n + rseq2.m) - (lim rseq1 + rseq2.m).| by a2
     .= |. rseq1.n - lim rseq1.|;
     hence |. ProjMap2(Rseq,m).n - (lim rseq1 + rseq2.m).|< e
       by a3,a4;
    end;
   end;
p1:for m be Element of NAT holds ProjMap2(Rseq,m) is convergent
   proof
    let m be Element of NAT;
    for e st 0<e ex N st for n st n>=N holds
       |. ProjMap2(Rseq,m).n - (lim rseq1 + rseq2.m).| < e by x1;
    hence ProjMap2(Rseq,m) is convergent by SEQ_2:def 6;
   end;
   hence Rseq is convergent_in_cod1;
x2:for m be Element of NAT, e be Real st 0<e
    ex N st for n st n>=N holds
     |. ProjMap1(Rseq,m).n - (rseq1.m + lim rseq2).| < e
   proof
    let m be Element of NAT, e be Real;
    assume 0<e; then
    consider N such that
a3:   for n st n>=N holds |. rseq2.n - lim rseq2.| < e by SEQ_2:def 7;
    take N;
    hereby let n;
     assume a4: n>=N;
     n is Element of NAT by ORDINAL1:def 12; then
     |. ProjMap1(Rseq,m).n - (lim rseq2 + rseq1.m).|
      = |. Rseq.(m,n) - (lim rseq2 + rseq1.m).| by MESFUNC9:def 6
     .= |. rseq2.n + rseq1.m - (lim rseq2 + rseq1.m).| by a2
     .= |. rseq2.n - lim rseq2.|;
     hence |. ProjMap1(Rseq,m).n - (rseq1.m + lim rseq2).| < e
        by a3,a4;
    end;
   end;
p2:for m be Element of NAT holds ProjMap1(Rseq,m) is convergent
   proof
    let m be Element of NAT;
    for e st 0<e ex N st for n st n>=N holds
     |.ProjMap1(Rseq,m).n - (rseq1.m + lim rseq2).| < e by x2;
    hence ProjMap1(Rseq,m) is convergent by SEQ_2:def 6;
   end;
   hence Rseq is convergent_in_cod2;
x3:for e st 0<e ex N st for n st n>=N holds
    |.(lim_in_cod1 Rseq).n - (lim rseq1 + lim rseq2).| < e
   proof
    let e;
    assume 0<e; then
    consider N such that
a3:  for n st n>=N holds |. rseq2.n - lim rseq2.| < e by SEQ_2:def 7;
    take N;
    hereby let n;
     assume n>=N; then
a4:  |. rseq2.n - lim rseq2.| < e by a3;
     reconsider n1 = n as Element of NAT by ORDINAL1:def 12;
a5:  ProjMap2(Rseq,n1) is convergent by p1;
a6:  (lim_in_cod1 Rseq).n = lim ProjMap2(Rseq,n1) by def32;
     for e st 0<e ex N st for m st m>=N holds
        |. ProjMap2(Rseq,n1).m - (lim rseq1 + rseq2.n).| < e by x1; then
     |.(lim_in_cod1 Rseq).n - (lim rseq1 + lim rseq2).|
      = |.(lim rseq1 + rseq2.n) - (lim rseq1 + lim rseq2).|
        by a5,a6,SEQ_2:def 7;
     hence |. (lim_in_cod1 Rseq).n - (lim rseq1 + lim rseq2).| < e by a4;
    end;
   end;
   hence lim_in_cod1 Rseq is convergent by SEQ_2:def 6;
   hence cod1_major_iterated_lim Rseq = lim rseq1 + lim rseq2 by x3,def34;
x4:for e st 0<e ex N st for n st n>=N holds
    |. (lim_in_cod2 Rseq).n - (lim rseq1 + lim rseq2).| < e
   proof
    let e;
    assume 0<e; then
    consider N such that
a3:  for n st n>=N holds |. rseq1.n - lim rseq1.| < e by SEQ_2:def 7;
    take N;
    hereby let n;
     assume n>=N; then
a4:  |. rseq1.n - lim rseq1.| < e by a3;
     reconsider n1 = n as Element of NAT by ORDINAL1:def 12;
a5:  ProjMap1(Rseq,n1) is convergent by p2;
a6:  (lim_in_cod2 Rseq).n = lim ProjMap1(Rseq,n1) by def33;
     for e st 0<e ex N st for m st m>=N holds
        |.ProjMap1(Rseq,n1).m - (rseq1.n + lim rseq2).| < e by x2; then
     |.(lim_in_cod2 Rseq).n - (lim rseq1 + lim rseq2).|
      = |.(rseq1.n + lim rseq2) - (lim rseq1 + lim rseq2).|
        by a5,a6,SEQ_2:def 7;
     hence |.(lim_in_cod2 Rseq).n - (lim rseq1 + lim rseq2).| < e by a4;
    end;
   end;
   hence lim_in_cod2 Rseq is convergent by SEQ_2:def 6;
   hence cod2_major_iterated_lim Rseq = lim rseq1 + lim rseq2
     by x4,def35;
x5:for e st 0<e ex N st for n,m st n>=N & m>=N holds
    |. Rseq.(n,m) - (lim rseq1 + lim rseq2).| < e
   proof
    let e;
    assume c1: 0<e; then
    consider N1 be Nat such that
c4:  for n st n>=N1 holds |. rseq1.n - lim rseq1.| < e/2 by SEQ_2:def 7;
    consider N2 be Nat such that
c5:  for n st n>=N2 holds |. rseq2.n - lim rseq2.| < e/2 by c1,SEQ_2:def 7;
    reconsider N = max(N1,N2) as Nat by TARSKI:1;
    take N;
    thus for n,m st n>=N & m>=N holds
     |. Rseq.(n,m)  - (lim rseq1 + lim rseq2).| < e
    proof
     let n,m;
     assume c13: n>=N & m>=N;
     max(N1,N2) >= N1 & max(N1,N2) >= N2 by XXREAL_0:25; then
c6:  n >= N1 & m >= N2 by c13,XXREAL_0:2;
     |. Rseq.(n,m) - (lim rseq1 + lim rseq2).|
      = |. rseq1.n + rseq2.m - (lim rseq1 + lim rseq2).| by a2
     .= |.(rseq1.n - lim rseq1) + (rseq2.m - lim rseq2).|; then
a8:  |. Rseq.(n,m) - (lim rseq1 + lim rseq2).|
      <= |. rseq1.n - lim rseq1.| + |. rseq2.m - lim rseq2.| by COMPLEX1:56;
     |. rseq1.n - lim rseq1.| < e/2 & |. rseq2.m - lim rseq2.| < e/2
       by c4,c5,c6; then
     |. rseq1.n - lim rseq1.| + |. rseq2.m - lim rseq2.| < e/2 + e/2
       by XREAL_1:8;
     hence |. Rseq.(n,m) - (lim rseq1 + lim rseq2).| < e by a8,XXREAL_0:2;
    end;
   end;
   hence Rseq is P-convergent;
   hence P-lim Rseq = lim rseq1 + lim rseq2 by x5,def6;
end;
