# Defining a derivative on a custom function

I am trying to define a derivative that acts on a custom function, $f$, such that when it acts, it increments one of the arguments of by 1. f is not defined; I just want to use it to keep track of derivatives. I know I could define a separate operator to do this, but this function, $f$, will be multiplied by other functions that need differentiating, so I thought it easier to define how derivatives act on f. My attempt thus far:

Derivative[1, 0, 0, 0][f[a,b,c,d]][x1, x2, x3, x4] = f[a,b,c,d]


However, when I go to evaluate this derivative, I get

Input: D[f[a,b,c,d][x1, x2, x3, x4], x1]
Output: f[a,b,c,d]^{1,0,0,0}[x1, x2, x3, x4]


whereas, I would hope to get something like:

Input: D[f[a,b,c,d][x1, x2, x3, x4], x1]
Output: f[a+1,b,c,d][x1, x2, x3, x4]


The derivative definition only works specifically for the exact syntax in the definition, and not with any other arguments apart from a,b,c,d:

Input: D[f[a,b,c,d][x1, x2, x3, x4], x1]
Output: f[a+1,b,c,d]


Any suggestions on how to obtain the second listed output?

• Welcome to Mathematica.SE! I hope you will become a regular contributor. To get started, 1) take the introductory Tour now, 2) when you see good questions and answers, vote them up by clicking the gray triangles, because the credibility of the system is based on the reputation gained by users sharing their knowledge, 3) remember to accept the answer, if any, that solves your problem, by clicking the checkmark sign, and 4) give help too, by answering questions in your areas of expertise. Jul 27, 2015 at 21:03
• Clear all your previous definitions, try Derivative[1, 0, 0, 0][f] = CKB[#1 + 1, #2, #3, #4] &, and report back. Jul 27, 2015 at 21:12
• You're using Slot the wrong way. Also, I don't see why you expect the output to be in terms of f if you define the right-hand side to be CKB in the first line.
– Jens
Jul 27, 2015 at 21:15
• @Jens My mistake - CKB should be f. Edited. Jul 27, 2015 at 21:42
• @Guesswhoitis. Using Slot isn't necessary - since I don't fully understand how it works, I'm editing the question to functions without Slot. Jul 27, 2015 at 21:44

It seems to be that all you need is SetDelayed (:=) instead of Set (=):

Derivative[1, 0, 0, 0][f][a_, b_, c_, d_] := f[a + 1, b, c, d]


Now let us evaluate some derivatives:

D[f[x, y, z, p], {x, 1}] (* with respect to that first argument *)
D[f[x, y, z, p], {y, 1}] (* with respect to any other argument *)

(*Out:
f[1 + x, y, z, p]
Derivative[0, 1, 0, 0][f][x, y, z, p]
*)