
theorem
for f1,f2 be PartFunc of REAL,REAL, I be non empty Interval st
 f1 is_differentiable_on_interval I & f2 is_differentiable_on_interval I
 holds
  f1(#)f2 is_differentiable_on_interval I &
  (f1(#)f2)`\I = f2(#)(f1`\I) + f1(#)(f2`\I) &
  for x be Real st x in I holds
   ((f1(#)f2)`\I).x = (f2.x)*(f1`\I).x + (f1.x)*(f2`\I).x
proof
    let f1,f2 be PartFunc of REAL,REAL, I be non empty Interval;
    assume that
A1:  f1 is_differentiable_on_interval I and
A2:  f2 is_differentiable_on_interval I;

    reconsider J = ].inf I,sup I.[ as open Subset of REAL by Th2;
A3: J c= I by Th2;

A4: I c= dom f1 /\ dom f2 by A1,A2,XBOOLE_1:19; then
    I c= dom(f1(#)f2) by VALUED_1:def 4; then
    J c= dom(f1(#)f2) by A3;
    hence
A5:  f1(#)f2 is_differentiable_on_interval I
       by A4,A1,A2,FDIFF_1:21,FDIFF_3:18,12,VALUED_1:def 4; then
A6: dom((f1(#)f2)`\I) = I by Def2;
A7: dom(f1`\I) = I & dom(f2`\I) = I by A1,A2,Def2;
    dom f1 /\ dom(f2`\I) = I & dom f2 /\ dom(f1`\I) = I
      by A1,A2,A7,XBOOLE_1:28; then
A8: dom(f1(#)(f2`\I)) = I & dom(f2(#)(f1`\I)) = I by VALUED_1:def 4; then
A9: dom(f2(#)(f1`\I)+f1(#)(f2`\I)) = I /\ I by VALUED_1:def 1;

A10: for x be Element of REAL st x in dom((f1(#)f2)`\I) holds
     ((f1(#)f2)`\I).x = (f2(#)(f1`\I) + f1(#)(f2`\I)).x
    proof
     let x be Element of REAL;
     assume x in dom((f1(#)f2)`\I); then
A11:   x in I by A5,Def2;
     per cases;
     suppose
A12:  x = inf I; then
A13:  ((f1(#)f2)`\I).x = Rdiff(f1(#)f2,x) & (f1`\I).x = Rdiff(f1,x) &
      (f2`\I).x = Rdiff(f2,x) by A1,A2,A5,A11,Def2;

      f1 is_right_differentiable_in x &
      f2 is_right_differentiable_in x by A1,A2,A11,A12,Lm5; then
      ((f1(#)f2)`\I).x = (f2.x)*(f1`\I).x + (f1.x)*(f2`\I).x
        by A13,FDIFF_3:18; then
      ((f1(#)f2)`\I).x = (f2(#)(f1`\I)).x + (f1.x)*(f2`\I).x
        by A11,A8,VALUED_1:def 4; then
      ((f1(#)f2)`\I).x = (f2(#)(f1`\I)).x + (f1(#)(f2`\I)).x
        by A11,A8,VALUED_1:def 4;
      hence ((f1(#)f2)`\I).x = (f2(#)(f1`\I) + f1(#)(f2`\I)).x
        by A11,A9,VALUED_1:def 1;
     end;
     suppose
A14:  x = sup I; then
A15:  ((f1(#)f2)`\I).x = Ldiff(f1(#)f2,x) & (f1`\I).x = Ldiff(f1,x) &
      (f2`\I).x = Ldiff(f2,x) by A1,A2,A5,A11,Def2;

      f1 is_left_differentiable_in x &
      f2 is_left_differentiable_in x by A1,A2,A11,A14,Lm6; then
      ((f1(#)f2)`\I).x = (f2.x)*(f1`\I).x + (f1.x)*(f2`\I).x
        by A15,FDIFF_3:12; then
      ((f1(#)f2)`\I).x = (f2(#)(f1`\I)).x + (f1.x)*(f2`\I).x
        by A11,A8,VALUED_1:def 4; then
      ((f1(#)f2)`\I).x = (f2(#)(f1`\I)).x + (f1(#)(f2`\I)).x
        by A11,A8,VALUED_1:def 4;
      hence ((f1(#)f2)`\I).x = (f2(#)(f1`\I) + f1(#)(f2`\I)).x
        by A11,A9,VALUED_1:def 1;
     end;
     suppose A16: x <> inf I & x <> sup I; then
      x in J by A11,Th3; then
A17:  f1 is_differentiable_in x & f2 is_differentiable_in x
      by A1,A2,FDIFF_1:9;

      (f1`\I).x = diff(f1,x) & (f2`\I).x = diff(f2,x) &
      ((f1(#)f2)`\I).x = diff(f1(#)f2,x) by A1,A2,A5,A11,A16,Def2; then
      ((f1(#)f2)`\I).x = (f2.x)*(f1`\I).x + (f1.x)*(f2`\I).x
        by A17,FDIFF_1:16; then
      ((f1(#)f2)`\I).x = (f2(#)(f1`\I)).x + (f1.x)*(f2`\I).x
        by A11,A8,VALUED_1:def 4; then
      ((f1(#)f2)`\I).x = (f2(#)(f1`\I)).x + (f1(#)(f2`\I)).x
        by A11,A8,VALUED_1:def 4;
      hence ((f1(#)f2)`\I).x = (f2(#)(f1`\I) + f1(#)(f2`\I)).x
        by A11,A9,VALUED_1:def 1;
     end;
    end;
    hence (f1(#)f2)`\I = f2(#)(f1`\I) + f1(#)(f2`\I) by A6,A9,PARTFUN1:5;
    hereby let x be Real;
     assume
A18:   x in I; then
     ((f1(#)f2)`\I).x = (f2(#)(f1`\I) + f1(#)(f2`\I)).x by A6,A10; then
     ((f1(#)f2)`\I).x = (f2(#)(f1`\I)).x + (f1(#)(f2`\I)).x
       by A18,A9,VALUED_1:def 1; then
     ((f1(#)f2)`\I).x = f2.x * (f1`\I).x + (f1(#)(f2`\I)).x
       by A18,A8,VALUED_1:def 4;
     hence ((f1(#)f2)`\I).x = (f2.x)*(f1`\I).x + (f1.x)*(f2`\I).x
       by A18,A8,VALUED_1:def 4;
    end;
end;
