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, !.