theorem
  Z c= dom (f1(#)f2) & f1 is_differentiable_on Z & f2
is_differentiable_on Z implies f1(#)f2 is_differentiable_on Z & for x st x in Z
  holds ((f1(#)f2)`|Z).x = (f2.x)*diff(f1,x) + (f1.x)*diff(f2,x)
proof
  assume that
A1: Z c= dom (f1(#)f2) and
A2: f1 is_differentiable_on Z & f2 is_differentiable_on Z;
  now
    let x0;
    assume x0 in Z;
    then f1 is_differentiable_in x0 & f2 is_differentiable_in x0 by A2,Th9;
    hence f1(#)f2 is_differentiable_in x0 by Th16;
  end;
  hence
A3: f1(#)f2 is_differentiable_on Z by A1,Th9;
  now
    let x;
    assume
A4: x in Z;
    then
A5: f1 is_differentiable_in x & f2 is_differentiable_in x by A2,Th9;
    thus ((f1(#)f2)`|Z).x = diff((f1(#)f2),x) by A3,A4,Def7
      .= f2.x*diff(f1,x) + f1.x*diff(f2,x) by A5,Th16;
  end;
  hence thesis;
end;
