Question: How do I do an implicit differentiation while switching order of differentiation using the chain rule?

I am trying to expand a derivative using the chain rule and sitching the order of differentiation.

I have two expressions, u and phi:
> u :=  (x, y, z)-> (diff(f(x, y, z), x))*(diff(f(x, y, z), y))
fx := (x, y, z)-> diff(f(x, y, z), x);
fy := (x, y, z); diff(f(x, y, z), y);
phi := (x, y, z, fx, fy)->; diff(f(x, y, z), z);

             / d            \ / d            \
(x, y, z) -> |--- f(x, y, z)| |--- f(x, y, z)|
             \ dx           / \ dy           /
(x, y, z) -> --- f(x, y, z)
(x, y, z) -> --- f(x, y, z)
(x, y, z, fx, fy) -> --- f(x, y, z)

In other words, phi the z-derivative of f, but I know it is a function of x,y, and z and  also the x and y derivatives of f.  How can I find u_z?

I tried implicitdiff and regular diff with no luck:
> implicitdiff(u, f(x, y, z), z);
Error, invalid input: implicitdiff expects its 3rd argument, u, to be of type {name, set(name)}, but received y(x, y, z)



Please Wait...