let f1, f2 be PartFunc of COMPLEX ,COMPLEX ; :: thesis: for x0 being Complex st f1 is_differentiable_in x0 & f2 is_differentiable_in x0 holds
( f1 (#) f2 is_differentiable_in x0 & diff (f1 (#) f2),x0 = ((f2 /. x0) * (diff f1,x0)) + ((f1 /. x0) * (diff f2,x0)) )

let x0 be Complex; :: thesis: ( f1 is_differentiable_in x0 & f2 is_differentiable_in x0 implies ( f1 (#) f2 is_differentiable_in x0 & diff (f1 (#) f2),x0 = ((f2 /. x0) * (diff f1,x0)) + ((f1 /. x0) * (diff f2,x0)) ) )
assume that
A1: f1 is_differentiable_in x0 and
A2: f2 is_differentiable_in x0 ; :: thesis: ( f1 (#) f2 is_differentiable_in x0 & diff (f1 (#) f2),x0 = ((f2 /. x0) * (diff f1,x0)) + ((f1 /. x0) * (diff f2,x0)) )
consider N1 being Neighbourhood of x0 such that
A3: ( N1 c= dom f1 & ex L being C_LINEAR ex R being C_REST st
for x being Complex st x in N1 holds
(f1 /. x) - (f1 /. x0) = (L /. (x - x0)) + (R /. (x - x0)) ) by A1, Def6;
consider L1 being C_LINEAR, R1 being C_REST such that
A4: for x being Complex st x in N1 holds
(f1 /. x) - (f1 /. x0) = (L1 /. (x - x0)) + (R1 /. (x - x0)) by A3;
consider N2 being Neighbourhood of x0 such that
A5: ( N2 c= dom f2 & ex L being C_LINEAR ex R being C_REST st
for x being Complex st x in N2 holds
(f2 /. x) - (f2 /. x0) = (L /. (x - x0)) + (R /. (x - x0)) ) by A2, Def6;
consider L2 being C_LINEAR, R2 being C_REST such that
A6: for x being Complex st x in N2 holds
(f2 /. x) - (f2 /. x0) = (L2 /. (x - x0)) + (R2 /. (x - x0)) by A5;
consider N being Neighbourhood of x0 such that
A7: ( N c= N1 & N c= N2 ) by Th10;
reconsider L11 = (f2 /. x0) (#) L1 as C_LINEAR ;
reconsider L12 = (f1 /. x0) (#) L2 as C_LINEAR ;
reconsider L = L11 + L12 as C_LINEAR ;
reconsider R11 = (f2 /. x0) (#) R1 as C_REST ;
reconsider R12 = (f1 /. x0) (#) R2 as C_REST ;
reconsider R13 = R11 + R12 as C_REST ;
reconsider R14 = L1 (#) L2 as C_REST ;
reconsider R15 = R13 + R14 as C_REST ;
reconsider R16 = R1 (#) L2 as C_REST ;
reconsider R17 = R1 (#) R2 as C_REST ;
reconsider R18 = R2 (#) L1 as C_REST ;
reconsider R19 = R16 + R17 as C_REST ;
reconsider R20 = R19 + R18 as C_REST ;
reconsider R = R15 + R20 as C_REST ;
A10: N c= dom f1 by A3, A7, XBOOLE_1:1;
N c= dom f2 by A5, A7, XBOOLE_1:1;
then N /\ N c= (dom f1) /\ (dom f2) by A10, XBOOLE_1:27;
then A11: N c= dom (f1 (#) f2) by VALUED_1:def 4;
A12: now
let x be Complex; :: thesis: ( x in N implies ((f1 (#) f2) /. x) - ((f1 (#) f2) /. x0) = (L /. (x - x0)) + (R /. (x - x0)) )
assume A13: x in N ; :: thesis: ((f1 (#) f2) /. x) - ((f1 (#) f2) /. x0) = (L /. (x - x0)) + (R /. (x - x0))
A14: x0 in N by Th9;
A15: ((f1 /. x) - (f1 /. x0)) + (f1 /. x0) = ((L1 /. (x - x0)) + (R1 /. (x - x0))) + (f1 /. x0) by A4, A7, A13;
thus ((f1 (#) f2) /. x) - ((f1 (#) f2) /. x0) = ((f1 /. x) * (f2 /. x)) - ((f1 (#) f2) /. x0) by A11, A13, CFUNCT_1:5
.= ((((f1 /. x) * (f2 /. x)) + (- ((f1 /. x) * (f2 /. x0)))) + ((f1 /. x) * (f2 /. x0))) - ((f1 /. x0) * (f2 /. x0)) by A11, A14, CFUNCT_1:5
.= ((f1 /. x) * ((f2 /. x) - (f2 /. x0))) + (((f1 /. x) - (f1 /. x0)) * (f2 /. x0))
.= ((f1 /. x) * ((f2 /. x) - (f2 /. x0))) + (((L1 /. (x - x0)) + (R1 /. (x - x0))) * (f2 /. x0)) by A4, A7, A13
.= ((f1 /. x) * ((f2 /. x) - (f2 /. x0))) + (((f2 /. x0) * (L1 /. (x - x0))) + ((R1 /. (x - x0)) * (f2 /. x0)))
.= ((f1 /. x) * ((f2 /. x) - (f2 /. x0))) + ((L11 /. (x - x0)) + ((f2 /. x0) * (R1 /. (x - x0)))) by CFUNCT_1:77
.= ((((L1 /. (x - x0)) + (R1 /. (x - x0))) + (f1 /. x0)) * ((f2 /. x) - (f2 /. x0))) + ((L11 /. (x - x0)) + (R11 /. (x - x0))) by A15, CFUNCT_1:77
.= ((((L1 /. (x - x0)) + (R1 /. (x - x0))) + (f1 /. x0)) * ((L2 /. (x - x0)) + (R2 /. (x - x0)))) + ((L11 /. (x - x0)) + (R11 /. (x - x0))) by A6, A7, A13
.= ((((L1 /. (x - x0)) + (R1 /. (x - x0))) * ((L2 /. (x - x0)) + (R2 /. (x - x0)))) + (((f1 /. x0) * (L2 /. (x - x0))) + ((f1 /. x0) * (R2 /. (x - x0))))) + ((L11 /. (x - x0)) + (R11 /. (x - x0)))
.= ((((L1 /. (x - x0)) + (R1 /. (x - x0))) * ((L2 /. (x - x0)) + (R2 /. (x - x0)))) + ((L12 /. (x - x0)) + ((f1 /. x0) * (R2 /. (x - x0))))) + ((L11 /. (x - x0)) + (R11 /. (x - x0))) by CFUNCT_1:77
.= ((((L1 /. (x - x0)) + (R1 /. (x - x0))) * ((L2 /. (x - x0)) + (R2 /. (x - x0)))) + ((L12 /. (x - x0)) + (R12 /. (x - x0)))) + ((L11 /. (x - x0)) + (R11 /. (x - x0))) by CFUNCT_1:77
.= (((L1 /. (x - x0)) + (R1 /. (x - x0))) * ((L2 /. (x - x0)) + (R2 /. (x - x0)))) + ((L12 /. (x - x0)) + ((L11 /. (x - x0)) + ((R11 /. (x - x0)) + (R12 /. (x - x0)))))
.= (((L1 /. (x - x0)) + (R1 /. (x - x0))) * ((L2 /. (x - x0)) + (R2 /. (x - x0)))) + ((L12 /. (x - x0)) + ((L11 /. (x - x0)) + (R13 /. (x - x0)))) by CFUNCT_1:76
.= (((L1 /. (x - x0)) + (R1 /. (x - x0))) * ((L2 /. (x - x0)) + (R2 /. (x - x0)))) + (((L11 /. (x - x0)) + (L12 /. (x - x0))) + (R13 /. (x - x0)))
.= ((((L1 /. (x - x0)) * (L2 /. (x - x0))) + ((L1 /. (x - x0)) * (R2 /. (x - x0)))) + ((R1 /. (x - x0)) * ((L2 /. (x - x0)) + (R2 /. (x - x0))))) + ((L /. (x - x0)) + (R13 /. (x - x0))) by CFUNCT_1:76
.= (((R14 /. (x - x0)) + ((R2 /. (x - x0)) * (L1 /. (x - x0)))) + ((R1 /. (x - x0)) * ((L2 /. (x - x0)) + (R2 /. (x - x0))))) + ((L /. (x - x0)) + (R13 /. (x - x0))) by CFUNCT_1:76
.= (((R14 /. (x - x0)) + (R18 /. (x - x0))) + (((R1 /. (x - x0)) * (L2 /. (x - x0))) + ((R1 /. (x - x0)) * (R2 /. (x - x0))))) + ((L /. (x - x0)) + (R13 /. (x - x0))) by CFUNCT_1:76
.= (((R14 /. (x - x0)) + (R18 /. (x - x0))) + ((R16 /. (x - x0)) + ((R1 /. (x - x0)) * (R2 /. (x - x0))))) + ((L /. (x - x0)) + (R13 /. (x - x0))) by CFUNCT_1:76
.= (((R14 /. (x - x0)) + (R18 /. (x - x0))) + ((R16 /. (x - x0)) + (R17 /. (x - x0)))) + ((L /. (x - x0)) + (R13 /. (x - x0))) by CFUNCT_1:76
.= (((R14 /. (x - x0)) + (R18 /. (x - x0))) + (R19 /. (x - x0))) + ((L /. (x - x0)) + (R13 /. (x - x0))) by CFUNCT_1:76
.= ((R14 /. (x - x0)) + ((R19 /. (x - x0)) + (R18 /. (x - x0)))) + ((L /. (x - x0)) + (R13 /. (x - x0)))
.= ((L /. (x - x0)) + (R13 /. (x - x0))) + ((R14 /. (x - x0)) + (R20 /. (x - x0))) by CFUNCT_1:76
.= (L /. (x - x0)) + (((R13 /. (x - x0)) + (R14 /. (x - x0))) + (R20 /. (x - x0)))
.= (L /. (x - x0)) + ((R15 /. (x - x0)) + (R20 /. (x - x0))) by CFUNCT_1:76
.= (L /. (x - x0)) + (R /. (x - x0)) by CFUNCT_1:76 ; :: thesis: verum
end;
hence f1 (#) f2 is_differentiable_in x0 by A11, Def6; :: thesis: diff (f1 (#) f2),x0 = ((f2 /. x0) * (diff f1,x0)) + ((f1 /. x0) * (diff f2,x0))
hence diff (f1 (#) f2),x0 = L /. 1r by A11, A12, Def7
.= (L11 /. 1r ) + (L12 /. 1r ) by CFUNCT_1:76
.= ((f2 /. x0) * (L1 /. 1r )) + (L12 /. 1r ) by CFUNCT_1:77
.= ((f2 /. x0) * (L1 /. 1r )) + ((f1 /. x0) * (L2 /. 1r )) by CFUNCT_1:77
.= ((f2 /. x0) * (diff f1,x0)) + ((f1 /. x0) * (L2 /. 1r )) by A1, A3, A4, Def7
.= ((f2 /. x0) * (diff f1,x0)) + ((f1 /. x0) * (diff f2,x0)) by A2, A5, A6, Def7 ;
:: thesis: verum