!TITLE Differentiation
!KEY
The  goal  d(E1,X,E2)  is  true  if  expression  E2  is a possible form for the
derivative of expression E1 with respect to X.

    | :-op(300,xfy,^).
    |
    | d(U+V,X,DU+DV) :-!, d(U,X,DU), d(V,X,DV).
    | d(U-V,X,DU-DV) :-!, d(U,X,DU), d(V,X,DV).
    | d(U*V,X,DU*V+U*DV) :-!, d(U,X,DU), d(V,X,DV).
    | d(U^N,X,N*U^N1*DU) :-!, integer(N), N1 is N-1, d(U,X,DU).
    | d(-U,X,-DU) :-!, d(U,X,DU).
    | d(exp(U),X,exp(U)*DU) :-!, d(U,X,DU).
    | d(log(U),X,DU/U) :-!, d(U,X,DU).
    | d(X,X,1) :-!.
    | d(C,X,0) :- atomic(C), C \== X, !.

