You've used assignment =
when you mean to use delayed assignment :=
. When you evaluate F[f_]=D[f,x]*2
using (non-delayed) assignment, Mathematica looks at D[f,x]
and sees that f
(an unassigned symbol) does not depend on x
; hence, its derivative is 0. Thus, F[f_]=0
for any arguments to F
, which is what it returns later.
If you want F
to be evaluated only after you have specified what f_
should be, you need to use delayed assignment by replacing =
with :=
.