isn't f(x).diff(x) just df (so you can write `a*df`)?