\section{Miscellaneous Packages}

\begin{Introduction}{Miscellaneous Packages}
REDUCE includes a large number of packages that have been contributed by
users from various fields.  Some of these, together with their relevant
commands, switches and so on (e.g., the NUMERIC package), have
been described elsewhere.  This section describes those packages for which
no separate help material exists.  Each has its own switches, commands,
and operators, and some redefine special characters to aid in their
notation.  However, the brief descriptions given here do not include all
such information.  Readers are referred to the general package
documentation in this case, which can be found, along with the source
code, under the subdirectories \name{doc} and \name{src} in the
\name{reduce} directory.  The \nameref{load_package} command is used to
load the files you wish into your system.  There will be a short delay
while the package is loaded.  A package cannot be {\it unloaded}.  Once it
is in your system, it stays there until you end the session.  Each package
also has a test file, which you will find under its name in the
\name{\$reduce/xmpl} directory.

Finally, it should be mentioned that such user-contributed packages are
unsupported; any questions or problems should be directed to their
authors.

\end{Introduction}

\begin{Package}{ALGINT}
\index{integration}\index{integration of square roots}
Author: James H. Davenport \\

The \name{algint} package provides indefinite integration of square roots.
This package, which is an extension of the basic integration package
distributed with REDUCE, will analytically integrate a wide range of
expressions involving square roots.  The \nameref{algint} switch provides for
the use of the facilities given by the package, and is automatically turned
on when the package is loaded.  If you want to return to the standard
integration algorithms, turn \nameref{algint} off.  An error message is given
if you try to turn the \nameref{algint} switch on when its package is not
loaded.
\end{Package}

\begin{Package}{APPLYSYM}
\index{differential equations} \index{symmetries}
Author: Thomas Wolf \\

This package provides programs APPLYSYM, QUASILINPDE and DETRAFO for
computing with infinitesimal symmetries of differential equations.
\end{Package}

\begin{Package}{ARNUM}
\index{algebraic numbers}
Author: Eberhard Schruefer\\

This package provides facilities for handling algebraic numbers as polynomial
coefficients in REDUCE calculations.  It includes facilities for introducing
indeterminates to represent algebraic numbers, for calculating splitting
fields, and for factoring and finding greatest common divisors in such
domains.
\end{Package}

\begin{Package}{ASSIST}
\index{utilities}
Author: Hubert Caprasse\\

ASSIST contains a large number of additional general purpose functions
that allow a user to better adapt REDUCE to various calculational
strategies and to make the programming task more straightforward and more
efficient.
\end{Package}

\begin{Package}{AVECTOR}
\index{vector algebra}\index{cross product}\index{dot product}
Author: David Harper\\

This package provides REDUCE with the ability to perform vector algebra
using the same notation as scalar algebra.  The basic algebraic operations
are supported, as are differentiation and integration of vectors with
respect to scalar variables, cross product and dot product, component
manipulation and application of scalar functions (e.g. cosine) to a vector
to yield a vector result.
\end{Package}

\begin{Package}{BOOLEAN}
\index{boolean expressions}
Author: Herbert Melenk\\

This package supports the computation with boolean expressions in the
propositional calculus.  The data objects are composed from algebraic
expressions connected by the infix boolean operators {\bf and}, {\bf or},
{\bf implies}, {\bf equiv}, and the unary prefix operator {\bf not}.
{\bf Boolean} allows you to simplify expressions built from these
operators, and to test properties like equivalence, subset property etc.
\end{Package}

\begin{Package}{CALI}
\index{polynomial}\index{Groebner}\index{commutative algebra}
Author: Hans-Gert Gr{\"a}be \\

This package contains algorithms for computations in commutative algebra
closely related to the Groebner algorithm for ideals and modules.  Its
heart is a new implementation of the Groebner algorithm that also allows
for the computation of syzygies.  This implementation is also applicable to
submodules of free modules with generators represented as rows of a matrix.
\end{Package}

\begin{Package}{CAMAL}
\index{celestial mechanics}\index{Fourier series}
Author: John P. Fitch\\

This packages implements in REDUCE the Fourier transform procedures of the
CAMAL package for celestial mechanics.
\end{Package}

\begin{Package}{CHANGEVR}
Author: G. Ucoluk\\

This package provides facilities for changing the independent variables in
a differential equation. It is basically the application of the chain rule.
\end{Package}

\begin{Package}{COMPACT}
\index{simplification}
Author: Anthony C. Hearn\\

COMPACT is a package of functions for the reduction of a polynomial in the
presence of side relations.  COMPACT applies the side relations to the
polynomial so that an equivalent expression results with as few terms as
possible.  For example, the evaluation of

\begin{verbatim}
     compact(s*(1-sin x^2)+c*(1-cos x^2)+sin x^2+cos x^2,
             {cos x^2+sin x^2=1});

\end{verbatim}
yields the result
\begin{verbatim}

              2           2
        SIN(X) *C + COS(X) *S + 1
\end{verbatim}

The first argument to the operator \name{compact} is the expression
and the second is a list of side relations that can be
equations or simple expressions (implicitly equated to zero). The
kernels in the side relations may also be free variables with the
same meaning as in rules, e.g.
\begin{verbatim}
     sin_cos_identity :=  {cos ~w^2+sin ~w^2=1}$
     compact(u,in_cos_identity);
\end{verbatim}
Also the full rule syntax with the replacement operator is allowed here.
\end{Package}                 

\begin{Package}{CONTFR}
\index{continued fraction}
Author: Herbert Melenk\\

This package provides for the simultaneous approximation of a real number
by a continued fraction and a rational number with optional user
controlled precision (an upper bound for the denominator).

To use this package, the \name{misc} package should be loaded.  One can then
use the operator \name{continued\_fraction} to approximate the real
number by a continued fraction.  This operator has one or two arguments, the
number to be converted and an optional precision.  The result is a list of
two elements: the first is the rational value of the approximation and the
second the list of terms of the continued fraction that represent the same
value according to the definition \verb&t0 +1/(t1 + 1/(t2 + ...))&.  The
second optional parameter \name{size} is an upper bound on the absolute
value of the result denominator.  If omitted, the approximation is performed
up to the current system precision.

\begin{Examples}
continued\_fraction pi;   &
\begin{multilineoutput}{6cm}
  1146408
\{---------,\{3,7,15,1,292,1,1,1,2,1\}\}
  364913
\end{multilineoutput} \\

continued\_fraction(pi,100);  &
\begin{multilineoutput}{6cm}
  22
\{----,\{3,7\}\}
  7
\end{multilineoutput}
\end{Examples}
\end{Package}

\begin{Package}{CRACK}
\index{differential equation}
Authors: Andreas Brand, Thomas Wolf\\

CRACK is a package for solving overdetermined systems of partial or
ordinary differential equations (PDEs, ODEs).  Examples of programs which
make use of CRACK for investigating ODEs (finding symmetries, first
integrals, an equivalent Lagrangian or a ``differential factorization'') are
included.
\end{Package}

\begin{Package}{CVIT}
\index{Dirac algebra}
Authors: V.Ilyin, A.Kryukov, A.Rodionov, A.Taranov\\

This package provides an alternative method for computing traces of Dirac
gamma matrices, based on an algorithm by Cvitanovich that treats gamma
matrices as 3-j symbols.
\end{Package}

\begin{Package}{DEFINT}
\index{definite integration}
Authors: Kerry Gaskell, Stanley M. Kameny, Winfried Neun\\

This package finds the definite integral of an expression in a stated
interval.  It uses several techniques, including an innovative approach
based on the Meijer G-function, and contour integration.
\end{Package}

\begin{Package}{DESIR}
\index{differential equation}
Authors: C. Dicrescenzo, F. Richard-Jung, E. Tournier\\

This package enables the basis of formal solutions to be computed for an
ordinary homogeneous differential equation with polynomial coefficients
over Q of any order, in the neighborhood of zero (regular or irregular
singular point, or ordinary point).
\end{Package}

\begin{Package}{DFPART}
\index{partial derivative}
Author: Herbert Melenk\\

This package supports computations with total and partial derivatives of
formal function objects.  Such computations can be useful in the context
of differential equations or power series expansions.
\end{Package}

\begin{Package}{DUMMY}
\index{dummy variable}
Author: Alain Dresse\\

This package allows a user to find the canonical form of expressions
involving dummy variables. In that way, the simplification of
polynomial expressions can be fully done. The indeterminates are general
operator objects endowed with as few properties as possible. In that way
the package may be used in a large spectrum of applications.
\end{Package}

\begin{Package}{EXCALC}
\index{exterior calculus}\index{differential calculus}
\index{differential form}
Author: Eberhard Schruefer\\

The \name{excalc} package is designed for easy use by all who are familiar
with the calculus of Modern Differential Geometry.  The program is currently
able to handle scalar-valued exterior forms, vectors and operations between
them, as well as non-scalar valued forms (indexed forms).  It is thus an ideal
tool for studying differential equations, doing calculations in general
relativity and field theories, or doing simple things such as calculating the
Laplacian of a tensor field for an arbitrary given frame. 
\end{Package}

\begin{Package}{FPS}
\index{power series} \index{Laurent-Puiseux series}
Authors: Wolfram Koepf, Winfried Neun\\

This package can expand a specific class of functions into their
corresponding Laurent-Puiseux series.
\end{Package}

\begin{Package}{FIDE}
Author:  Richard Liska\\

This package performs  automation of  the process of numerically
solving  partial  differential  equations  systems  (PDES)  by  means of
computer algebra.  For PDES solving, the finite difference method is applied.
The  computer  algebra  system  REDUCE  and  the  numerical  programming
language FORTRAN  are used in the presented methodology. The main aim of
this methodology is to speed up the process of preparing numerical
programs for  solving PDES.  This process is quite often, especially for
complicated systems, a tedious and time consuming task.
\end{Package}

\begin{Package}{GENTRAN}
\index{code generation}\index{FORTRAN}\index{C}
Author: Barbara L. Gates\\

This package is an automatic code GENerator and TRANslator.  It constructs
complete numerical programs based on sets of algorithmic specifications and
symbolic expressions.  Formatted FORTRAN, RATFOR or C code can be generated
through a series of interactive commands or under the control of a template
processing routine.  Large expressions can be automatically segmented into
subexpressions of manageable size, and a special file-handling mechanism
maintains stacks of open I/O channels to allow output to be sent to any
number of files simultaneously and to facilitate recursive invocation of the
whole code generation process.
\end{Package}

\begin{Package}{IDEALS}
\index{polynomial}\index{Groebner}\index{commutative algebra}
\index{ideal}
Author: Herbert Melenk\\

This package implements the basic arithmetic for polynomial ideals by
exploiting the Groebner bases package of REDUCE.  In order to save
computing time all intermediate Groebner bases are stored internally such
that time consuming repetitions are inhibited.
\end{Package}

\begin{Package}{INEQ}
\index{inequality}
Author: Herbert Melenk\\

This package supports the operator \name{ineq\_solve} that
tries to solves single inequalities and sets of coupled inequalities.
\end{Package}

\begin{Package}{INVBASE}
Authors: A.Yu. Zharkov and Yu.A. Blinkov\\

Involutive bases are a new tool for solving problems in connection with
multivariate polynomials, such as solving systems of polynomial equations
and analyzing polynomial ideals.  An involutive basis of polynomial ideal
is nothing but a special form of a redundant Groebner basis.  The
construction of involutive bases reduces the problem of solving polynomial
systems to simple linear algebra.
\end{Package}

\begin{Package}{LAPLACE}
\index{transform}
Authors: C. Kazasov, M. Spiridonova, V. Tomov\\

This package can calculate ordinary and inverse Laplace transforms of
expressions.  Documentation is in plain text.
\end{Package}

\begin{Package}{LIE}
Authors: Carsten and Franziska Sch{\"o}bel\\

\name{Lie} is a package of functions for the classification of real
n-dimensional Lie algebras.  It consists of two modules: \name{liendmc1}
and \name{lie1234}.  With the help of the functions in the \name{liendmcl}
module, real n-dimensional Lie algebras $L$ with a derived algebra
$L^{(1)}$ of dimension 1 can be classified.
\end{Package}

\begin{Package}{MODSR}
\index{modular polynomial}
Author: Herbert Melenk\\

This package supports solve (M\_SOLVE) and roots (M\_ROOTS) operators for
modular polynomials and modular polynomial systems.  The moduli need not
be primes. M\_SOLVE requires a modulus to be set.  M\_ROOTS takes the
modulus as a second argument. For example:

\begin{verbatim}
on modular; setmod 8;
m_solve(2x=4);            ->  {{X=2},{X=6}}
m_solve({x^2-y^3=3});
    ->  {{X=0,Y=5}, {X=2,Y=1}, {X=4,Y=5}, {X=6,Y=1}}
m_solve({x=2,x^2-y^3=3}); ->  {{X=2,Y=1}}
off modular;
m_roots(x^2-1,8);         ->  {1,3,5,7}
m_roots(x^3-x,7);         ->  {0,1,6}
\end{verbatim}
\end{Package}

\begin{Package}{NCPOLY}
\index{non-commutativity}
Authors: Herbert Melenk, Joachim Apel\\

This package allows the user to set up automatically a consistent
environment for computing in an algebra where the non--commutativity is
defined by Lie-bracket commutators.  The package uses the REDUCE
\name{noncom} mechanism for elementary polynomial arithmetic; the commutator
rules are automatically computed from the Lie brackets.
\end{Package}

\begin{Package}{ORTHOVEC}
\index{vector algebra}\index{vector calculus}\index{Laplacian}\index{Taylor}
\index{cross product}\index{dot product}\index{div}\index{grad}\index{curl}
Author: James W. Eastwood\\

\name{orthovec} is a collection of REDUCE procedures and operations which
provide a simple-to-use environment for the manipulation of scalars and
vectors.  Operations include addition, subtraction, dot and cross
products, division, modulus, div, grad, curl, laplacian, differentiation,
integration, and Taylor expansion.
\end{Package}

\begin{Package}{PHYSOP}
Author: Mathias Warns\\

This package has been designed to meet the requirements of theoretical
physicists looking for a computer algebra tool to perform complicated
calculations in quantum theory with expressions containing operators.
These operations consist mainly of the calculation of commutators between
operator expressions and in the evaluations of operator matrix elements in
some abstract space.
\end{Package}

\begin{Package}{PM}
\index{pattern matching}
Author: Kevin McIsaac\\

PM is a general pattern matcher similar in style to those found in systems
such as SMP and Mathematica, and is based on the pattern matcher described
in Kevin McIsaac, ``Pattern Matching Algebraic Identities'', SIGSAM Bulletin,
19 (1985), 4-13.
\end{Package}

\begin{Package}{RANDPOLY}
\index{random polynomial}
Author: Francis J. Wright\\

This package is based on a port of the Maple random polynomial
generator together with some support facilities for the generation
of random numbers and anonymous procedures.
\end{Package}

\begin{Package}{REACTEQN}
\index{chemical reaction}
Author: Herbert Melenk\\

This package allows a user to transform chemical reaction systems into
ordinary differential equation systems (ODE) corresponding to the laws of
pure mass action.
\end{Package}

\begin{Package}{RESET}
Author: John Fitch\\

This package defines a command command RESETREDUCE that works through the
history of previous commands, and clears any values which have been
assigned, plus any rules, arrays and the like.  It also sets the various
switches to their initial values.  It is not complete, but does work for
most things that cause a gradual loss of space.  It would be relatively
easy to make it interactive, so allowing for selective resetting.
\end{Package}

\begin{Package}{RESIDUE}
Author: Wolfram Koepf\\

This package supports the calculation of residues of arbitrary
expressions.
\end{Package}

\begin{Package}{RLFI}
\index{output}\index{TEX}
Author: Richard Liska\\

This package
adds \begin{TEX}\LaTeX \end{TEX}\begin{INFO}LaTeX \end{INFO} syntax
to REDUCE.  Text generated by REDUCE in this mode can be directly
used in \begin{TEX}\LaTeX \end{TEX} \begin{INFO}LaTeX \end{INFO} source
documents.  Various
mathematical constructions are supported by the interface including
subscripts, superscripts, font changing, Greek letters, divide-bars,
integral and sum signs, derivatives, and so on.
\end{Package}

\begin{Package}{SCOPE}
\index{code generation}\index{optimization}
Author: J.A. van Hulzen\\

SCOPE is a package for the production of an optimized form of a set of
expressions.  It applies an heuristic search for common (sub)expressions
to almost any set of proper REDUCE assignment statements.  The output is
obtained as a sequence of assignment statements.  \name{gentran} is used to
facilitate expression output.
\end{Package}

\begin{Package}{SETS}
Author: Francis J. Wright\\

The SETS package provides algebraic-mode support for set operations on
lists regarded as sets (or representing explicit sets) and on implicit
sets represented by identifiers.
\end{Package}

\begin{Package}{SPDE}
\index{differential equation}\index{Lie symmetry}
Author: Fritz Schwartz \\

The package \name{spde} provides a set of functions which may be used to
determine the symmetry group of Lie- or point-symmetries of a given system of
partial differential equations.  In many cases the determining system is
solved completely automatically.  In other cases the user has to provide
additional input information for the solution algorithm to terminate.
\end{Package}

\begin{Package}{SYMMETRY}               
Author: Karin Gatermann\\

This package computes symmetry-adapted bases and block diagonal forms of
matrices which have the symmetry of a group.  The package is the
implementation of the theory of linear representations for small finite
groups such as the dihedral groups.
\end{Package}


\begin{Package}{TPS}
\index{power series}\index{Taylor series}
Authors: Alan Barnes, Julian Padget\\

This package implements formal Laurent series expansions in one variable
using the domain mechanism of REDUCE.  This means that power series
objects can be added, multiplied, differentiated etc., like other first
class objects in the system.  A lazy evaluation scheme is used and thus
terms of the series are not evaluated until they are required for printing
or for use in calculating terms in other power series.  The series are
extendible giving the user the impression that the full infinite series is
being manipulated.  The errors that can sometimes occur using series that
are truncated at some fixed depth (for example when a term in the required
series depends on terms of an intermediate series beyond the truncation
depth) are thus avoided.
\end{Package}

\begin{Package}{TRI}
\index{output}\index{TEX}
Author: Werner Antweiler\\

This package provides facilities written in REDUCE-Lisp for typesetting
REDUCE formulas
using \begin{TEX}\TeX. \end{TEX} \begin{INFO}TeX. \end{INFO} The
TeX-REDUCE-Interface incorporates three levels
of \begin{TEX}\TeX \end{TEX} \begin{INFO}TeX \end{INFO} output:
without line breaking, with line breaking, and
with line breaking plus indentation.
\end{Package}

\begin{Package}{TRIGSIMP}
\index{simplification}
Author: Wolfram Koepf\\
TRIGSIMP is a useful tool for all kinds of trigonometric and hyperbolic
simplification and factorization.  There are three procedures included in
TRIGSIMP: \name{trigsimp}, \name{trigfactorize} and \name{triggcd}.  The
first is for finding simplifications of trigonometric or hyperbolic
expressions with many options, the second for factorizing them and the
third for finding the greatest common divisor of two trigonometric or
hyperbolic polynomials.
\end{Package}

\begin{Package}{XCOLOR}
\index{high energy physics}
Author: A. Kryukov\\

This package calculates the color factor in non-abelian gauge field
theories using an algorithm due to Cvitanovich.
\end{Package}

\begin{Package}{XIDEAL}
\index{Groebner basis}
Author: David Hartley\\

\name{xideal} constructs Groebner bases for solving the left ideal
membership problem:  Groebner left ideal bases or GLIBs.  For graded
ideals, where each form is homogeneous in degree, the distinction between
left and right ideals vanishes.  Furthermore, if the generating forms are
all homogeneous, then the Groebner bases for the non-graded and graded
ideals are identical.  In this case, \name{xideal} is able to save time by
truncating the Groebner basis at some maximum degree if desired.
\end{Package}

\begin{Package}{WU}
\index{polynomial}\index{Wu-Wen-Tsun algorithm}
Author: Russell Bradford\\

This is a simple implementation of the Wu algorithm implemented in REDUCE
working directly from ``A Zero Structure Theorem for
Polynomial-Equations-Solving,'' Wu Wen-tsun, Institute of Systems Science,
Academia Sinica, Beijing.
\end{Package}

\begin{Package}{ZEILBERG}
\index{summation}
Authors: Gregor St{\"o}lting and Wolfram Koepf\\

This package is a careful implementation of the Gosper and Zeilberger
algorithms for indefinite and definite summation of hypergeometric terms,
respectively.  Extensions of these algorithms are also included that are
valid for ratios of products of powers,
factorials,\begin{TEX}$\Gamma$ \end{TEX} \begin{INFO}gamma \end{INFO}function
terms, binomial coefficients, and shifted factorials that are
rational-linear in their arguments.
\end{Package}

\begin{Package}{ZTRANS}
Authors: Wolfram Koepf, Lisa Temme\\

This package is an implementation of the Z-transform of a sequence.
This is the discrete analogue of the Laplace Transform.
\end{Package}

