While working on #980 I noticed something strange in your use of ImplicitDifferentiation. You seem to be using a circular reasoning like the following:
forward(x) = implicit(x)
conditions(x, y, z) = ...
const implicit = ImplicitFunction(forward, conditions)
Can you explain why this is necessary? Higher-order AD perhaps?