% Symbolic differentiation example. % From "Programming in Prolog", Clocksin & Mellish, 4e, pp. 165-167 /* These are differentiation rules, found in any intro calculus text: dc/dx -> 0 dx/dx -> 1 d(-U)/dx -> -(dU/dx) d(U+V)/dx -> dU/dx + dV/dx D(U-V)/dx -> dU/dx - dV/dx d(cU)/dx -> c(dU/dx) d(UV)/dx -> U(dV/dx) + V(dU/dx) d(U/V)/dx -> d(UV(^-1))/dx d(U^c)/dx -> cU^(c-1) (dU/dx) d(loge U)/dx) -> U^(-1)(dU/dx) */ ?- op(300, yfx, '^'). d(X, X, 1) :- !. d(C, _, 0) :- atomic(C). d(-U, X, -A) :- d(U,X,A). d(U+V, X, A+B) :- d(U,X,A), d(V,X,B). d(U-V, X, A-B) :- d(U,X,A), d(V,X,B). d(C*U, X, C*A) :- atomic(C), C\=X, d(U,X,A), !. d(U*V, X, B*U+A*V) :- d(U, X, A), d(V, X, B). d(U/V, X, A) :- d(U*V^(-1), X, A). d(U^C, X, C*U^(C-1)*W) :- atomic(C), C\=X, d(U, X, W). d(log(U), X, A*U^(-1)) :- d(U,X,A). % ?- d(2*x - 3*(x^2)/log(2*x), x, A).