reserve S,T for RealNormSpace;
reserve f,f1,f2 for PartFunc of S,T;
reserve Z for Subset of S;
reserve i,n for Nat;

theorem Th20:
for n being Nat, f,g being PartFunc of S,T
 st 1<=n & f is_differentiable_on n,Z & g is_differentiable_on n,Z
 holds
  for i being Nat st i<=n holds diff(f+g,i,Z) = diff(f,i,Z) + diff(g,i,Z)
proof
   let n be Nat, f,g be PartFunc of S,T;
   assume A1: 1<=n & f is_differentiable_on n,Z
            & g is_differentiable_on n,Z; then
A2:
   Z is open by Th18;
   defpred P[Nat] means $1 <= n implies
    diff(f+g,$1,Z) = diff(f,$1,Z) + diff(g,$1,Z);
A3:P[0]
   proof
    assume 0<=n;
    diff_SP(0,S,T)=T & f|Z=diff(f,0,Z) & g|Z=diff(g,0,Z)
    & diff(f+g,0,Z) = (f+g)|Z by Def2,Def5;
    hence diff(f+g,0,Z) = diff(f,0,Z) + diff(g,0,Z) by VFUNCT_1:27;
   end;
A4:for i be Nat st P[i] holds P[i+1]
   proof
    let i be Nat;
    assume A5: P[i];
    assume A6: i+1 <= n; then
    i + 1 - 1 <= n-1 by XREAL_1:9; then
A7: diff(f,i,Z) is_differentiable_on Z
  & diff(g,i,Z) is_differentiable_on Z by Th14,A1;
A8: i <= i +1 by NAT_1:11; then
A9: i <= n by A6,XXREAL_0:2;
    set f0 = diff(f,i,Z);
    set g0 = diff(g,i,Z);
A10: diff_SP(S,T).i is RealNormSpace
  & diff(f,Z).i is PartFunc of S,diff_SP(i,S,T) & dom diff(f,i,Z) = Z
      by Th19,A9,A1;
A11: diff_SP(S,T).i is RealNormSpace
  & diff(g,Z).i is PartFunc of S,diff_SP(i,S,T) & dom diff(g,i,Z) = Z
      by Th19,A9,A1;
    Z = (dom f0) /\ Z by A10; then
A12: Z = dom (f0+g0) by A11,VFUNCT_1:def 1; then
    f0+g0 is_differentiable_on Z by A2,A7,NDIFF_1:39; then
A13: dom ((f0+g0)`|Z) = Z by NDIFF_1:def 9;
A14: f0`|Z = diff(f,i+1,Z) & g0`|Z = diff(g,i+1,Z)
  & diff(f+g,i+1,Z) = diff(f+g,i,Z)`|Z by Th13;
A15: dom(f0`|Z) = Z & dom(g0`|Z) = Z by A7,NDIFF_1:def 9; then
A16: dom(f0`|Z + g0`|Z) = Z /\ Z & dom(diff(f,i+1,Z)+diff(g,i+1,Z)) = Z /\ Z
      by A14,VFUNCT_1:def 1;
    now let x be Point of S;
     assume A17: x in dom(diff(f,i+1,Z) + diff(g,i+1,Z)); then
     (f0`|Z + g0`|Z).x = (f0`|Z + g0`|Z)/.x by A16,PARTFUN1:def 6; then
A18:  (f0`|Z + g0`|Z).x = (f0`|Z)/.x + (g0`|Z)/.x by A17,A16,VFUNCT_1:def 1;
     (f0`|Z)/.x = (diff(f,i+1,Z)).x & (g0`|Z)/.x = (diff(g,i+1,Z)).x
       by A16,A17,A14,A15,PARTFUN1:def 6; then
     (f0`|Z)/.x = (diff(f,i+1,Z))/.x & (g0`|Z)/.x = (diff(g,i+1,Z))/.x
       by A16,A17,A14,A15,PARTFUN1:def 6; then
     (f0`|Z + g0`|Z).x = (diff(f,i+1,Z))/.x + (diff(g,i+1,Z))/.x
        by A18,Th10; then
     (f0`|Z + g0`|Z).x = (diff(f,i+1,Z) + diff(g,i+1,Z))/.x
        by A17,VFUNCT_1:def 1; then
A19:  (diff(f,i+1,Z) + diff(g,i+1,Z)).x = (f0`|Z + g0`|Z).x
        by A17,PARTFUN1:def 6;
     ((f0+g0)`|Z)/.x = diff(f0,x)+diff(g0,x)
        by NDIFF_1:39,A7,A2,A12,A16,A17; then
A20:  ((f0+g0)`|Z)/.x = (f0`|Z)/.x + diff(g0,x) by NDIFF_1:def 9,A7,A16,A17;
     (diff(f+g,i+1,Z)).x = ((f0+g0)`|Z)/.x
       by A14,A5,A8,A16,A13,A17,PARTFUN1:def 6,A6,XXREAL_0:2;
     hence (diff(f+g,i+1,Z)).x = (diff(f,i+1,Z) + diff(g,i+1,Z)).x
       by A18,A19,A20,NDIFF_1:def 9,A7,A16,A17;
    end;
    hence diff(f+g,i+1,Z) = diff(f,i+1,Z) + diff(g,i+1,Z)
      by A16,A13,A14,A8,A5,A6,XXREAL_0:2,PARTFUN1:5;
   end;
   for n be Nat holds P[n] from NAT_1:sch 2(A3,A4);
   hence thesis;
end;
