This module provides symbolic substitution. The substitution
operator subst/3 takes an original reduced expression, a
replacement variable and a replacement expression. It will
re-execute the constructors in the original reduced expression and
replace every occurrence of the replacement variable by the
replacement expression.

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

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

Y is 4-2*B+B^2

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

The following substitution predicates are defined:

- subst(P, X, R, Q):
- The predicate succeeds in Q with the substitution P[X/R].