reserve m,n for non zero Element of NAT;
reserve i,j,k for Element of NAT;
reserve Z for set;

theorem  Th64:
for f,g be PartFunc of REAL m,REAL, x be Element of REAL m
 st f is_partial_differentiable_in x,i
  & g is_partial_differentiable_in x,i
holds
   f(#)g is_partial_differentiable_in x,i
 & partdiff(f(#)g,x,i) = partdiff(f,x,i)*(g.x) +(f.x)*partdiff(g,x,i)
proof
   let f,g be PartFunc of REAL m,REAL, x be Element of REAL m;
   assume a1: f is_partial_differentiable_in x,i
            & g is_partial_differentiable_in x,i;
   set y=proj(i,m).x;
   dom(reproj(i,x))=REAL by FUNCT_2:def 1; then
A2:(f*reproj(i,x)).y = f.(reproj(i,x).y) &
   (g*reproj(i,x)).y = g.(reproj(i,x).y) by FUNCT_1:13; then
A3:(f*reproj(i,x)).y = f.x by Th12;
   (f*reproj(i,x))(#)(g*reproj(i,x)) = (f(#)g)*reproj(i,x) by Lm5; then
   (f(#)g)*reproj(i,x) is_differentiable_in proj(i,m).x by a1,FDIFF_1:16;
   hence (f(#)g) is_partial_differentiable_in x,i;
   thus partdiff((f(#)g),x,i)
     = diff((f*reproj(i,x))(#)(g*reproj(i,x)),y) by Lm5
    .= ((g*reproj(i,x)).y)*partdiff(f,x,i)
     + ((f*reproj(i,x)).y)*diff((g*reproj(i,x)),y) by a1,FDIFF_1:16
    .= partdiff(f,x,i)*(g.x) +(f.x)*partdiff(g,x,i) by A3,A2,Th12;
end;
