\documentstyle[11pt]{article}

\parindent 0pt

\parskip 6pt

\raggedbottom

\newlength{\reduceboxwidth}
\setlength{\reduceboxwidth}{4in}

\newlength{\redboxwidth}
\setlength{\redboxwidth}{3.5in}

\newlength{\rboxwidth}
\setlength{\rboxwidth}{2.6in}

\newcommand{\REDUCE}{REDUCE}
\newcommand{\RLISP}{RLISP}
\newcommand{\ttindex}[1]{\index{#1@{\tt #1}}}
\newcommand{\COMPATNOTE}{{\em Compatibility Note:\ }}

% Close up default vertical spacings:
\setlength{\topsep}{0.5\baselineskip}  % above and below environments
\setlength{\itemsep}{\topsep}
\setlength{\abovedisplayskip}{\topsep}  % for "long" equations
\setlength{\belowdisplayskip}{\topsep}

\pagestyle{headings}

\begin{document}
% \pagestyle{empty}
% \vspace*{\fill}
\begin{center}

{\LARGE\bf Addendum to the \\[0.4cm]
\Huge\bf {\REDUCE}} \\[0.1cm]
{\LARGE\bf User's Manual\vspace{0.3cm} \\
for Version 3.4.1}

\vspace{0.1in}\large\bf

Anthony C.\ Hearn \\
RAND \\
Santa Monica, CA 90407-2138

\vspace{0.1in}

\bf Email: reduce@rand.org

\vspace{0.1in}

\large\bf July 1992

\vspace*{0.2in}

\end{center}

%\pagestyle{headings}
%\setcounter{page}{1}

\section{Introduction}
The major purpose of the 3.4.1 release is to correct various bugs and
deficiencies in the former version.  In addition, the following
capabilities have been augmented or changed:

\section{SOLVE}

A number of changes have been made in the {\tt SOLVE} package in order
to improve its effectiveness.

\subsection{Improved Handling of Undetermined Solutions}

The {\tt SOLVE} package has been modified so that when a solution cannot
be found, an equation for the relevant indeterminates is normally returned
in terms of a new operator {\tt ROOT\_OF}, rather than an equation in
terms of unknown expressions.  For example, the expression
\begin{verbatim}
        solve(cos(x) + log(x),x);
\end{verbatim}
now returns the result
\begin{verbatim}
        {X=ROOT_OF(COS(X_) + LOG(X_),X_)}
\end{verbatim}
rather than
\begin{verbatim}
        {COS(X) + LOG(X)=0} .
\end{verbatim}
This makes the form of the {\tt SOLVE} output much more uniform, thus
allowing for its easier manipulation by other operators.

An expression with a top-level {\tt ROOT\_OF} operator is implicitly a
list with an unknown number of elements (since we can't always know how
many solutions an equation has).  If a substitution is made into such an
expression, closed form solutions can emerge.  If this occurs, the {\tt
ROOT\_OF construct} is replaced by an operator {\tt ONE\_OF}.  At this
point it is of course possible to transform the result of the original
{\tt SOLVE} operator expression into a standard {\tt SOLVE} solution.  To
effect this, an operator {\tt EXPAND\_CASES} can be used.

The following complete example shows the use of these facilities:
\begin{verbatim}
solve({1-c*x1+x1*x2^2,
          1-c*x2+x2*x1^2},
         {x1,x2});

              3
      SQRT(4*C  + 1) + 1
{{X2=--------------------,
             2*C

                 3
       - SQRT(4*C  + 1) + 1
  X1=-----------------------},
               2*C

                 3
       - SQRT(4*C  + 1) + 1
 {X2=-----------------------,
               2*C

              3
      SQRT(4*C  + 1) + 1
  X1=--------------------},
             2*C

                              3
 {X2=ROOT_OF(C*X2____ - X2____  - 1,X2____),

  X1=X2}}

sub(c=2,ws);

      SQRT(33) + 1
{{X2=--------------,
           4

       - SQRT(33) + 1
  X1=-----------------},
             4

       - SQRT(33) + 1
 {X2=-----------------,
             4

      SQRT(33) + 1
  X1=--------------},
           4
                 1/2        1/2
              - 5    - 1   5    - 1
 {X2=ONE_OF(-------------,----------,1),
                  2           2

  X1=X2}}

expand_cases ws;

      SQRT(33) + 1       - SQRT(33) + 1
{{X2=--------------,X1=-----------------},
           4                   4

       - SQRT(33) + 1      SQRT(33) + 1
 {X2=-----------------,X1=--------------},
             4                  4

       - SQRT(5) - 1       - SQRT(5) - 1
 {X2=----------------,X1=----------------},
            2                   2

      SQRT(5) - 1      SQRT(5) - 1
 {X2=-------------,X1=-------------},
           2                2

 {X2=1,X1=1}}

\end{verbatim}

\subsection{Improved Handling of Cubics and Quartics}

Since roots of cubics and quartics can often be very messy, a switch
{\tt FULLROOTS} has been added, which, when off (the default), will
prevent the production of a result in closed form.  The {\tt ROOT\_OF}
construct will be used in this case instead.

Finally, the code for the production of solutions of cubics and quartics
has been modified so that trigonometrical forms are used where appropriate.
This option is under the control of a switch {\tt TRIGFORM}, which is
normally on.

The following example illustrates the use of these facilities:
\begin{verbatim}
let xx = solve(x^3+x+1,x);

xx;

             3
{X=ROOT_OF(X_  + X_ + 1,X_)}

on fullroots;

xx;

                           - SQRT(31)*I
                    ATAN(---------------)
                            3*SQRT(3)
{X=(I*(SQRT(3)*SIN(-----------------------)
                              3

                      - SQRT(31)*I
               ATAN(---------------)
                       3*SQRT(3)
        - COS(-----------------------)))/SQRT(3),
                         3

                              - SQRT(31)*I
                       ATAN(---------------)
                               3*SQRT(3)
 X=( - I*(SQRT(3)*SIN(-----------------------)
                                 3

                         - SQRT(31)*I
                  ATAN(---------------)
                          3*SQRT(3)
           + COS(-----------------------)))/SQRT(
                            3

      3),

                  - SQRT(31)*I
           ATAN(---------------)
                   3*SQRT(3)
    2*COS(-----------------------)*I
                     3
 X=----------------------------------}
                SQRT(3)

off trigform;

xx;

                             2/3
{X=( - (SQRT(31) - 3*SQRT(3))   *SQRT(3)*I

                             2/3    2/3
     - (SQRT(31) - 3*SQRT(3))    - 2   *SQRT(3)*I

        2/3                           1/3  1/3
     + 2   )/(2*(SQRT(31) - 3*SQRT(3))   *6

                1/6
              *3   ),

                          2/3
 X=((SQRT(31) - 3*SQRT(3))   *SQRT(3)*I

                             2/3    2/3
     - (SQRT(31) - 3*SQRT(3))    + 2   *SQRT(3)*I

        2/3                           1/3  1/3
     + 2   )/(2*(SQRT(31) - 3*SQRT(3))   *6

                1/6
              *3   ),

                           2/3    2/3
     (SQRT(31) - 3*SQRT(3))    - 2
 X=-------------------------------------}
                          1/3  1/3  1/6
    (SQRT(31) - 3*SQRT(3))   *6   *3

\end{verbatim}
\newpage
\section{New Operators}

In addition to the operators ONE\_OF and ROOT\_OF described above, the
following new operator is available in REDUCE 3.4.1:

\subsection{ROOT\_VAL Operator}

The {\tt ROOT\_VAL} operator takes a single univariate polynomial as
argument, and returns a list of root values at system precision (or
greater if required to separate roots).  It is used with the syntax
\begin{verbatim}
	ROOT_VAL(EXPRN:univariate polynomial):list.
\end{verbatim}
For example, the sequence
\begin{verbatim}
        on rounded; root_val(x^3-x-1);
\end{verbatim}
gives the result
\begin{verbatim}
        {0.562279512062*I - 0.662358978622, - 0.562279512062*I

          - 0.662358978622,1.32471795724}
\end{verbatim}

\section{New Switches}
In many cases it is desirable to expand product arguments of logarithms, or
collect a sum of logarithms into a single logarithm.  Since these are inverse
operations, it is not possible to provide rules for doing both at the same
time and preserve the {\REDUCE} concept of idempotent evaluation. As an
alternative, REDUCE 3.4.1 provides two switches {\tt EXPANDLOGS} and
{\tt COMBINELOGS} to carry out these operations.  Both are off by default.
Thus to expand {\tt LOG(X*Y)} into a sum of logs, one can say
\begin{verbatim}
        ON EXPANDLOGS; LOG(X*Y);
\end{verbatim}
and to combine this sum into a single log:
\begin{verbatim}
	ON COMBINELOGS; LOG(X) + LOG(Y);
\end{verbatim}

At the present time, it is possible to have both switches on at once,
which could lead to infinite recursion.  However, an expression is
switched from one form to the other in this case.  Users should not rely
on this behavior, since it may change in the next release.

\section{User-Contributed Library Packages}

The following packages, not directly supported by the REDUCE distributors,
are contained in the REDUCE 3.4.1 user library.  Please consult the {\tt
lib} directory for a detailed description of their functionality.  Any
questions regarding them should be directed to the relevant author(s).
\begin{itemize}

\item{ASSIST: Useful utilities for various applications} 

Author: Hubert Caprasse.

\item{CAMAL: Calculations in celestial mechanics}

Author: John P. Fitch

\item{CHANGEVAR:  Change of Independent Variable(s) in DEs}

Author: G. \"{U}\c{c}oluk

\item{CVIT: Fast Calculation of Dirac Gamma matrices traces}

Authors: V.Ilyin, A.Kryukov, A.Rodionov, A.Taranov

\item{DESIR: Differential linear homogenous Equation Solutions in the
              neighbourhood of Irregular and Regular singular points}

Authors: C. Dicrescenzo, F. Richard-Jung, E. Tournier

\item{FIDE: Finite difference method for partial differential equations}

Author: Richard Liska

\item{GNUPLOT: Using the GNUPLOT package for REDUCE graphical output}

Author: Herbert Melenk

\item{LAPLACE: Laplace and inverse Laplace transform}

Author: C. Kazasov, M. Spiridonova, V. Tomov

\item{LININEQ: Solving systems of linear inequalities}

Author: Herbert Melenk

\item{NUMERIC: Basic algorithms for numerical problems using rounded mode}

Author: Herbert Melenk

\item{PHYSOP: Package for Operator Calculus in Quantum Theory}

Author: Mathias Warns

\item{PM: A REDUCE Pattern Matcher}

Author: Kevin McIsaac

\item{REACTEQN: Support for chemical reaction equation systems}

Author: Herbert Melenk

\item{RLFI: REDUCE LATEX Formula Interface}

Author: Richard Liska

\item{SYMMETRY: Symmetry-adapted bases and block diagonal forms
of symmetric matrices}

Author: Karin Gatermann

\item{TRI: TeX REDUCE Interface}

Author: Werner Antweiler

\item{WU: Wu Algorithm for polynomial systems}

Author: Russell Bradford

\end{itemize}
\end{document}

