This module provides symbolic differentiation. The
differentiation operator deriv/2 takes an original reduced
expression and a varying variable. It will re-execute the
constructors in the original reduced expression by their
differential counterpart constructors and treat variables
different from the varying variable as constant.

?- X is A^2-B*A+B^2, Y is deriv(X,A).

X is A^2-A*B+B^2,

Y is 2*A-B

Since the differential counterpart constructors of the original expression are re-executed the differentiation operator might cause new partial evaluations or simplifications. At the moment we provide differentiation only for elements, differentiation for vectors and matrices has not yet been implemented. Accordingly we do not yet support some special functions.

We also have implemented a primitive integration predicate integ/3. The predicate currently only accepts polynomial arguments and returns the indeterminate integral. It can be combined with the subst/3 predicate to compute determinate integrals.

The following differentiation predicates are defined:

- deriv(P, X, Q):
- The predicate succeeds in Q with the derivation dP/dX.
**integ(P, X, Q):**- The predicate succeeds in Q with the integral integ P dX.