Consider the following:
(%i13) gradef(Vb, R, Sb) $
(%o14) Sb del(R)
(%o15) 3 del(Vb)
Instead of %o15 I would have expected 3*Sb*del(R).
In functional notation showing the dependency on R, things
seem to work:
(%i21) gradef(Va(R), Sa) $
(%o22) Sa del(R)
(%o23) 3 Sa del(R)
This behavior may be related to the fact that
%i13 does not update gradefs.
On the mailing list, Robert Dodier mentioned the following:
This behavior seems to be intentional, but certainly is confusing.
The available documentation for gradef (probably derived from
the union of old documentation and what could be puzzled out
by reading the code) seems to distinguish gradef(F(x), ...) from
gradef(F, x, ...) although the intended effect of this distinction
Certainly the two cases are treated differently by the code.
gradef (Va(R), Sa);
:lisp (symbol-plist '|$Va|)
=> (GRAD ((r) $Sa))
gradef (Vb, R, Sa);
:lisp (symbol-plist '|$Vb|)
=> (MPROPS (NIL DEPENDS ($r) $ATOMGRAD (($r . $Sa))))
An easy fix would be to cause the two forms of gradef to
assign the same properties. But I don't know what else
that would break.