reserve h,h1,h2 for 0-convergent non-zero Real_Sequence,
  c,c1 for constant Real_Sequence,
  f,f1,f2 for PartFunc of REAL,REAL,
  x0,r,r0,r1,r2,g,g1,g2 for Real,
  n0,k,n,m for Element of NAT,
  a,b,d for Real_Sequence,
  x for set;

theorem
  f1 is_right_differentiable_in x0 & f2 is_right_differentiable_in x0
implies f1(#)f2 is_right_differentiable_in x0 & Rdiff(f1(#)f2,x0) = Rdiff(f1,x0
  )*f2.x0 + Rdiff(f2,x0)*f1.x0
proof
  assume that
A1: f1 is_right_differentiable_in x0 and
A2: f2 is_right_differentiable_in x0;
A3: x0 + 0 =x0;
  consider r2 such that
A4: r2>0 and
A5: [.x0,x0+r2.] c=dom f2 by A2;
  consider r1 such that
A6: r1>0 and
A7: [.x0,x0+r1.] c= dom f1 by A1;
  set r = min (r1,r2);
  0 <= r by A6,A4,XXREAL_0:15;
  then
A8: x0 <= x0 + r by A3,XREAL_1:7;
  r<=r2 by XXREAL_0:17;
  then
A9: x0 + r <= x0 + r2 by XREAL_1:7;
  then x0 + r in {g: x0 <= g & g <= x0 +r2} by A8;
  then
A10: x0 + r in [.x0,x0+r2.] by RCOMP_1:def 1;
  x0 <= x0 + r2 by A8,A9,XXREAL_0:2;
  then x0 in [.x0,x0+r2.] by XXREAL_1:1;
  then [.x0,x0+r.] c= [.x0,x0+r2.] by A10,XXREAL_2:def 12;
  then
A11: [.x0,x0+r.] c= dom f2 by A5;
  r<=r1 by XXREAL_0:17;
  then
A12: x0 + r <= x0 + r1 by XREAL_1:7;
  then x0 + r in {g: x0 <= g & g <= x0 +r1} by A8;
  then
A13: x0 + r in [.x0,x0+r1.] by RCOMP_1:def 1;
  x0 <= x0+r1 by A12,A8,XXREAL_0:2;
  then x0 in [.x0,x0+r1.] by XXREAL_1:1;
  then [.x0,x0+r.] c= [.x0,x0+r1.] by A13,XXREAL_2:def 12;
  then
A14: [.x0,x0+r.] c= dom f1 by A7;
A15: 0<r by A6,A4,XXREAL_0:15;
A16: for h,c st rng c = {x0} & rng (h+c) c= dom (f1(#)f2) &
(for n being Nat holds h.n
> 0 ) holds h"(#)((f1(#)f2)/*(h+c) - (f1(#)f2)/*c) is convergent & lim(h"(#)((
  f1(#)f2)/*(h+c) - (f1(#) f2)/*c))=Rdiff(f1,x0)*f2.x0 + Rdiff(f2,x0)*f1.x0
  proof
    let h,c;
    assume that
A17: rng c = {x0} and
A18: rng (h+c) c= dom (f1(#)f2) and
A19: for n being Nat holds h.n > 0;
A20: rng (h + c) c= dom f1 /\ dom f2 by A18,VALUED_1:def 4;
    x0 + 0 <= x0 +r by A15,XREAL_1:7;
    then
A21: x0 in [.x0,x0+ r.] by XXREAL_1:1;
    then
A22: x0 in dom f2 by A11;
A23: rng c c=dom f2
    by A17,A22,TARSKI:def 1;
A24: for m holds c.m = x0
    proof
      let m;
      c.m in rng c by VALUED_0:28;
      hence thesis by A17,TARSKI:def 1;
    end;
A25: for g be Real st 0<g
   ex n being Nat st for m being Nat st n <= m holds |.(f2/*c)
    .m - f2.x0 .|<g
    proof
      let g be Real such that
A26:  0<g;
      take n=0;
      let m being Nat such that
      n <= m;
A27:   m in NAT by ORDINAL1:def 12;
      |.(f2/*c).m - f2.x0 .| = |.f2.(c.m) - f2.x0 .| by A23,FUNCT_2:108,A27
        .=|. f2.x0 - f2.x0 .| by A24,A27
        .= 0 by ABSVALUE:def 1;
      hence thesis by A26;
    end;
    then
A28: f2/*c is convergent by SEQ_2:def 6;
    dom f1 /\ dom f2 c=dom f2 by XBOOLE_1:17;
    then
A29: rng (h + c) c= dom f2 by A20;
    then
A30: lim(h"(#)(f2/*(h+c) - f2/*c)) = Rdiff(f2,x0) by A2,A17,A19,Th15;
    now
      let n;
A31:  h.n <> 0 by A19;
      thus (h(#)(h"(#)(f1/*(h+c) - f1/*c))).n =((h(#)h")(#)(f1/*(h+c) - f1/*c)
      ). n by SEQ_1:14
        .= (h(#)h").n*(f1/*(h+c) - f1/*c).n by SEQ_1:8
        .= h.n*(h").n*(f1/*(h+c) - f1/*c).n by SEQ_1:8
        .= h.n*(h.n)"*(f1/*(h+c) - f1/*c).n by VALUED_1:10
        .= 1*(f1/*(h+c) - f1/*c).n by A31,XCMPLX_0:def 7
        .= (f1/*(h+c) - f1/*c).n;
    end;
    then
A32: h(#)(h"(#)(f1/*(h+c) - f1/*c)) =(f1/*(h+c) - f1/*c) by FUNCT_2:63;
A33: x0 in dom f1 by A14,A21;
A34: rng c c=dom f1
    by A17,A33,TARSKI:def 1;
A35: for g be Real st 0<g
   ex n being Nat st for m being Nat st n <= m holds |.(f1/*c)
    .m - f1.x0 .|<g
    proof
      let g be Real such that
A36:  0<g;
      take n=0;
      let m being Nat such that
      n <= m;
A37:    m in NAT by ORDINAL1:def 12;
      |.(f1/*c).m - f1.x0 .| = |.f1.(c.m) - f1.x0 .| by A34,FUNCT_2:108,A37
        .=|. f1.x0 - f1.x0 .| by A24,A37
        .= 0 by ABSVALUE:def 1;
      hence thesis by A36;
    end;
    then
A38: f1/*c is convergent by SEQ_2:def 6;
    dom f1 /\ dom f2 c= dom f1 by XBOOLE_1:17;
    then
A39: rng (h + c) c= dom f1 by A20;
    then
A40: lim(h"(#)(f1/*(h+c) - f1/*c)) = Rdiff(f1,x0) by A1,A17,A19,Th15;
A41: h"(#)(f1/*(h+c) - f1/*c) is convergent by A1,A17,A19,A39;
    then
A42: h"(#) (f1/*(h+c) - f1/*c) (#) (f2/*c) is convergent by A28;
A43: rng c c= dom f1 /\ dom f2 by A34,A23,XBOOLE_1:19;
A44: now
      let n;
      thus (h"(#)((f1(#)f2)/*(h+c) - (f1(#)f2)/*c)).n = ((h").n) * ((f1(#)f2)
      /*(h+c) - (f1(#)f2)/*c).n by SEQ_1:8
        .= ((h").n) * (((f1(#)f2)/*(h+c)).n - ((f1(#)f2)/*c).n) by RFUNCT_2:1
        .= h".n * (((f1/*(h+c))(#)(f2/*(h+c))).n - ((f1(#)f2)/*c).n) by A20,
RFUNCT_2:8
        .= h".n * (((f1/*(h+c))(#)(f2/*(h+c))).n - ((f1/*c)(#)(f2/*c)).n) by
A43,RFUNCT_2:8
        .= h".n * ((f1/*(h+c)).n * (f2/*(h+c)).n - ((f1/*c)(#)(f2/*c)).n) by
SEQ_1:8
        .= h".n * ((f1/*(h+c)).n * (f2/*(h+c)).n - ((f1/*c).n * (f2/*c).n))
      by SEQ_1:8
        .= h".n * ((f2/*(h+c)).n - (f2/*c).n)*(f1/*(h+c)).n + (h".n * ((f1/*
      (h+c)).n - (f1/*c).n))*(f2/*c).n
        .= h".n * (f2/*(h+c) - f2/*c).n * (f1/*(h+c)).n + (h".n * ((f1/*(h+c
      )).n - (f1/*c).n))*(f2/*c).n by RFUNCT_2:1
        .= (h"(#) (f2/*(h+c) - f2/*c)).n * (f1/*(h+c)).n + (h".n * ((f1/*(h+
      c)).n - (f1/*c).n))*(f2/*c).n by SEQ_1:8
        .= (h"(#) (f2/*(h+c) - f2/*c)).n * (f1/*(h+c)).n + (h".n * (f1/*(h+c
      ) - (f1/*c)).n)*(f2/*c).n by RFUNCT_2:1
        .= (h"(#) (f2/*(h+c) - f2/*c)).n * (f1/*(h+c)).n + (h"(#) (f1/*(h+c)
      - f1/*c)).n*(f2/*c).n by SEQ_1:8
        .= (h"(#) (f2/*(h+c) - f2/*c) (#) (f1/*(h+c))).n + (h"(#) (f1/*(h+c)
      - f1/*c)).n*(f2/*c).n by SEQ_1:8
        .= (h"(#) (f2/*(h+c) - f2/*c)(#)(f1/*(h+c))).n + (h"(#) (f1/*(h+c) -
      f1/*c)(#)(f2/*c)).n by SEQ_1:8
        .= (h"(#) (f2/*(h+c) - f2/*c)(#)(f1/*(h+c)) + h"(#) (f1/*(h+c) - f1
      /*c)(#)(f2/*c)).n by SEQ_1:7;
    end;
    then
A45: h"(#)((f1(#)f2)/*(h+c) - (f1(#)f2)/*c) = h"(#) (f2/*(h+c) - f2/*c)(#)
    (f1/*(h+c)) + h"(#) (f1/*(h+c) - f1/*c)(#)(f2/*c) by FUNCT_2:63;
    now
      let n;
      thus (f1/*c + (f1/*(h+c) - f1/*c)).n = (f1/*c).n + (f1/*(h+c) - f1/*c).n
      by SEQ_1:7
        .= (f1/*c).n + ((f1/*(h+c)).n - (f1/*c).n) by RFUNCT_2:1
        .= (f1/*(h+c)).n;
    end;
    then
A46: f1/*c + (f1/*(h+c) - f1/*c) = f1/*(h+c) by FUNCT_2:63;
A47: h is convergent & h"(#)(f1/*(h+c) - f1/*c) is convergent by A1,A17,A19,A39
;
    then h(#)(h"(#)(f1/*(h+c) - f1/*c)) is convergent;
    then
A48: f1/*(h+c) is convergent by A38,A32,A46;
    lim(h(#)(h"(#)(f1/*(h+c) - f1/*c))) =lim h *lim(h"(#)(f1/*(h+c) - f1
    /*c) ) by A47,SEQ_2:15
      .= 0;
    then
A49: 0 = lim (f1/*(h+c)) - lim(f1/*c) by A38,A32,A48,SEQ_2:12
      .= lim (f1/*(h+c)) - f1.x0 by A35,A38,SEQ_2:def 7;
A50: h"(#)(f2/*(h+c) - f2/*c) is convergent by A2,A17,A19,A29;
    then
A51: h"(#) (f2/*(h+c)-f2/*c) (#) (f1/*(h+c)) is convergent by A48;
    lim (h"(#)((f1(#)f2)/*(h+c) - (f1(#)f2)/*c)) = lim (h"(#) (f2/*(h+c)
- f2/*c)(#)(f1/*(h+c)) + h"(#) (f1/*(h+c) - f1/*c)(#) (f2/*c)) by A44,
FUNCT_2:63
      .= lim (h"(#) (f2/*(h+c) - f2/*c)(#)(f1/*(h+c))) + lim (h"(#) (f1/*(h+
    c) - f1/*c)(#)(f2/*c)) by A51,A42,SEQ_2:6
      .= lim (h"(#) (f2/*(h+c) - f2/*c))*lim(f1/*(h+c)) + lim (h"(#) (f1/*(h
    +c) - f1/*c)(#)(f2/*c)) by A50,A48,SEQ_2:15
      .= lim (h"(#) (f2/*(h+c) - f2/*c))* f1.x0 + lim (h"(#) (f1/*(h+c) - f1
    /*c))*lim(f2/*c) by A41,A49,A28,SEQ_2:15
      .= Rdiff(f1,x0)*f2.x0 + Rdiff(f2,x0)*f1.x0 by A40,A30,A25,A28,SEQ_2:def 7
;
    hence thesis by A51,A42,A45;
  end;
  [.x0,x0+r.] c= dom f1 /\ dom f2 by A14,A11,XBOOLE_1:19;
  then [.x0,x0+r.] c= dom (f1 (#) f2) by VALUED_1:def 4;
  hence thesis by A15,A16,Th15;
end;
