Up | Next | Tail |
REDUCE is designed so that each operator in the system has an evaluation (or simplification) function associated with it that transforms the expression into an internal canonical form. This form, which bears little resemblance to the original expression, is described in detail in [Hea71].
The evaluation function may transform its arguments in one of two alternative ways.
First, it may convert the expression into other operators in the system, leaving no
functions of the original operator for further manipulation. This is in a sense
true of the evaluation functions associated with the operators +
, *
and /
, for
example, because the canonical form does not include these operators explicitly. It
is also true of an operator such as the determinant operator det
because the
relevant evaluation function calculates the appropriate determinant, and the
operator det
no longer appears. On the other hand, the evaluation process may
leave some residual functions of the relevant operator. For example, with the
operator cos
, a residual expression like cos(x)
may remain after evaluation
unless a rule for the reduction of cosines into exponentials, for example, were
introduced. These residual functions of an operator are termed kernels and are stored
uniquely like variables. Subsequently, the kernel is carried through the calculation
as a variable unless transformations are introduced for the operator at a later
stage.
In those cases where the evaluation process leaves an operator expression with
non-trivial arguments, the form of the argument can vary depending on the state of the
system at the point of evaluation. Such arguments are normally produced in
expanded form with no terms factored or grouped in any way. For example, the
expression cos(2*x+2*y)
will normally be returned in the same form. If the
argument 2*x+2*y
were evaluated at the top level, however, it would be printed
as 2*(X+Y)
. If it is desirable to have the arguments themselves in a similar
form, the switch intstr
(for “internal structure”), if on, will cause this to
happen.
In cases where the arguments of the kernel operators may be reordered, the system puts them in a canonical order, based on an internal intrinsic ordering of the variables. However, some commands allow arguments in the form of kernels, and the user has no way of telling what internal order the system will assign to these arguments. To resolve this difficulty, we introduce the notion of a kernel form as an expression that transforms to a kernel on evaluation.
Examples of kernel forms are:
a cos(x*y) log(sin(x))
whereas
a*b (a+b)^4
are not.
We see that kernel forms can usually be used as generalized variables, and most algebraic properties associated with variables may also be associated with kernels.
Up | Next | Front |