\documentstyle[11pt,reduce]{article}
\newcommand{\nl}{\hfill\newline}
\newcommand{\bq}{\begin{quotation}}
\newcommand{\eq}{\end{quotation}}
\newcommand{\bi}{\begin{itemize}}
\newcommand{\ei}{\end{itemize}}
\date{}
\title{{\bf DUMMY}\\[3pt]
A package to find the canonical form of expressions involving
dummy variables\\[5pt]
  \mbox{\hfill Version 1.0\hfil}}
\author{Alain Dresse \\
Universit\'e Libre de Bruxelles \\
Boulevard du Triomphe, CP 210/01 \\
B--1050 BRUXELLES \\[3pt]
E--mail: adresse@ulb.ac.be}
\begin{document}
\maketitle
\index{DUMMY package}
\section{Introduction}
The proper use of dummy variables in computer algebra is difficult
because of the problem of simplifications. However, it is very important
to keep large expressions in a concise form and to manipulate them
efficiently.
The routines in the file allows 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.

In section 2, the convention for writing expressions is described and
the available declarations to distinguish between dummy and free variables
are explained.

In section 3, the various declarations on the algebraic properties
of the operators as well as on their operational properties are
given. The use of the ready-to-use function {\tt canonuical} is illustrated.
In section 4, installation is explained.
\section{Dummy and Free Variables}
An expression of the type
$$
\sum_{a=1}^{n} f(a)
$$
for any $n$ is  simply written as
$$
f(a)
$$
and $a$ is a {\em dummy} index.
If the previous expression is written as
$$
\sum_{b=1}^{n} f(b)
$$
$b$ is also a dummy index and, obviously we should be able to get the
equality
$$
f(a)-f(b);\, \rightarrow  0
$$
To declare dummy variables, two declarations are available:
\begin{itemize}
\item{i.}
\begin{verbatim}
     dummy_base <idp>;
\end{verbatim}
where {\tt idp} is the name of any unassigned identifier.
\item{ii.}
\begin{verbatim}
     dummy_names <d>,<dp>,<dpp> ....;
\end{verbatim}
\end{itemize}
The first declares {\tt idp1,$\cdots$, idpn} as dummy variables i.e.
all variables of the form ``{\tt idxxx}'' where {\tt xxx} is a number
will be dummy variables, such as {\tt id1, id2, ... , id23}.
The second gives special names for dummy variables.
All other arguments are assumed to be {\tt free}.\\
An example:
\begin{verbatim}

     dummy_base dv; ==> dv

               % dummy indices are dv1, dv2, dv3, ...

     dummy_names i,j,k; ==> t

                % dummy names are i,j,k.

\end{verbatim}
When this is done, an expression like
\begin{verbatim}
     op(dv1)*sin(dv2)*abs(x)*op(i)^3*op(dv2)$
\end{verbatim}
is allowed. Notice that, dummy indices may not be repeated (it is not
limited to tensor calculus) or that they be repeated many times inside
the expression.
\section{Operators and Use of {\tt CANONICAL}}
All dummy variables are arguments of operators. These operators are
quite general, they may be element of an algebra, they may be tensors,
spinors, grassman variables, etc. $\ldots$
By default they are assumed to be {\em commutative} and without symmetry
properties. Several commands allow to make variations about this default.

First, the declarations {\tt NONCOM, SYMMETRIC and AN\-TI\-SYM\-ME\-TRIC}
 may be  used on the operators.\\
Second, they may be declared anticommutative.
\begin{verbatim}
     anticom ao1, ao2;
\end{verbatim}
Third, one may, declare partial symmetries for them thanks to the
declaration {\tt SYMTREE}.
Here is the corresponding declaration for the Riemann tensor
\begin{verbatim}
     symtree (r, {!+, {!-, 1, 2}, {!-, 3, 4}});
\end{verbatim}
The symbols !*, !+ and !- at the beginning of each list mean that
the operator has no symmetry, is symmetric and is antisymmetric with respect
to the indices inside the list. Notices that the indices are not designated
by their names but merely by their natural order of appearance. 1 means the
first written argument of {\tt r}, 2 its second argument etc.
In the example above r is symmetric with respect to interchange of the
pairs of indices 1,2 and 3,4 respectively.

Notice that all the declarations here are valid whether the indices
are free or not.
It is then left to apply {CANONICAL} on any polynomial containing operators
to get its canonical representation. In that way full simplifications
are guaranteed.

There are two limitations to the package. The first is that non-commuting
operators are assumed to commute with anticommuting ones. The second is
that it does not add anything to the problem of simplifications when
side relations (like Bianchi identities) are present.
\section{Installation}
The use of DUMMY requires that the package ASSIST  version 2.2 be loaded.
It is also available in the \REDUCE\ library. Assuming that you got the
source files, use the script {\tt MKFASL} and do
\begin{verbatim}
     mkfasl assist
\end{verbatim}
when done do
\begin{verbatim}
     mkfasl dummy
\end{verbatim}
Finally, run the test file.
\end{document}
