\section{High Energy Physics}

\begin{Introduction}{HEPHYS}
The High-energy Physics package is historic for REDUCE, since REDUCE
originated as a program to aid in computations with Dirac expressions.
The commutation algebra of the gamma matrices is independent of their
representation, and is a natural subject for symbolic mathematics.  Dirac
theory is applied to \IFTEX{$\beta$}{beta} decay and the computation of
cross-sections and scattering.  The high-energy physics operators are
available in the REDUCE main program, rather than as a module which must
be loaded.
\end{Introduction}

\begin{Operator}[HE-dot]{.}
The . operator is used to denote the scalar product of two Lorentz
four-vectors.
\begin{Syntax}
\meta{vector} \name{.} \meta{vector}
\end{Syntax}

\meta{vector} must be an identifier declared to be of type \name{vector} to have
the scalar product definition.  When applied to arguments that are not
vectors, the \nameref{cons} operator is used,
whose symbol is also ``dot.''

\begin{Examples}
vector aa,bb,cc; \\
let aa.bb = 0; \\
aa.bb;                               &     0 \\
aa.cc;                               &     AA.CC \\
q := aa.cc;                          &     Q := AA.CC \\
q;                                   &     AA.CC
\end{Examples}

\begin{Comments}
Since vectors are special high-energy physics entities that do not contain
values, the . product will not return a true scalar product.  You can
assign a scalar identifier to the result of a . operation, or assign a .
operation to have the value of the scalar you supply, as shown above.  Note
that the result of a . operation is a scalar, not a vector.

The metric tensor g(u,v) can be represented by \name{u.v}.  If contraction
over the indices is required, \name{u} and \name{v} should be declared to
be of type \nameref{index}.

The dot operator has the highest precedence of the infix operators, so
expressions involving . and other operators have the scalar product
evaluated first before other operations are done.
\end{Comments}
\end{Operator}


\begin{Operator}{EPS}
The \name{eps} operator denotes the completely antisymmetric tensor of
order 4 and its contraction with Lorentz four-vectors, as used in
high-energy physics calculations.
\begin{Syntax}
\name{eps}\(\meta{vector-expr},\meta{vector-expr},\meta{vector-expr},
\meta{vector-expr}\)
\end{Syntax}

\meta{vector-expr} must be a valid vector expression, and may be an index.

\begin{Examples}
vector g0,g1,g2,g3; \\
eps(g1,g0,g2,g3);               &      - EPS(G0,G1,G2,G3); \\
eps(g1,g2,g0,g3);               &      EPS(G0,G1,G2,G3); \\
eps(g1,g2,g3,g1);               &      0
\end{Examples}

\begin{Comments}
Vector identifiers are ordered alphabetically by REDUCE.  When an odd number
of transpositions is required to restore the canonical order to the four
arguments of \name{eps}, the term is ordered and carries a minus sign.  When an
even number of transpositions is required, the term is returned ordered and
positive.  When one of the arguments is repeated, the value 0 is returned.
A contraction of the form
\IFTEX{$\epsilon_{ij\mu\nu}p_{\mu}q_{\nu}$}{eps(_i j mu nu p_mu q_nu)}
is represented by \name{eps(i,j,p,q)} when \name{i} and \name{j} have been
declared to be of type \nameref{index}.
\end{Comments}
\end{Operator}


\begin{Operator}{G}
\name{g} is an n-ary operator used to denote a product of gamma matrices
contracted with Lorentz four-vectors, in high-energy physics.
\begin{Syntax}
\name{g}\(\meta{identifier},\meta{vector-expr}
\{,\meta{vector-expr}\}\optional\)
\end{Syntax}

\meta{identifier} is a scalar identifier representing a fermion line
identifier, \meta{vector-expr} can be any valid vector expression,
representing a vector or a gamma matrix.

\begin{Examples}
vector aa,bb,cc; \\
vector a; \\
g(line1,aa,bb);                 &     AA.BB \\
g(line2,aa,a);                  &     0 \\
g(id,aa,bb,cc);                 &     0 \\
g(li1,aa,bb) + k;               &     AA.BB + K \\
let aa.bb = m*k; \\
g(ln1,aa)*g(ln1,bb);            &     K*M \\
g(ln1,aa)*g(ln2,bb);            &     0
\end{Examples}
\begin{Comments}
The vector \name{A} is reserved in arguments of \name{g} to denote the
special gamma matrix \IFTEX{$\gamma_{5}$}{gamma_5}.  It must be declared to
be a vector before you use it.

Gamma matrix expressions are associated with fermion lines in a Feynman
diagram.  If more than one line occurs in an expression, the gamma
matrices involved are separate (operating in independent spin space), as
shown in the last two example lines above.  A product of gamma matrices
associated with a single line can be entered either as a single \name{g}
command with several vector arguments, or as products of separate \name{g}
commands each with a single argument.

While the product of vectors is not defined, the product, sum and
difference of several gamma expressions are defined, as is the product of
a gamma expression with a scalar.  If an expression involving gamma
matrices includes a scalar, the scalar is treated as if it were the
product of itself with a unit \IFTEX{$4 \times 4$}{4 x 4} matrix.

Dirac expressions are evaluated by computing the trace of the expression
using the commutation algebra of gamma matrices.  The algorithms used are
described in articles by J. S. R. Chisholm in \meta{Il Nuovo Cimento X,} Vol.
30, p. 426, 1963, and J. Kahane, \meta{Journal of Mathematical Physics},
Vol. 9, p. 1732, 1968.  The trace is then divided by 4 to distinguish
between the trace of a scalar and the trace of an expression that is the
product of a scalar with a unit \IFTEX{$4 \times 4$}{4 x 4} matrix.

Trace calculations may be prevented over any line identifier by declaring it
to be \nameref{nospur}.   If it is later desired to evaluate these traces,
the declaration can be undone with the \nameref{spur} declaration.

The notation of Bjorken and Drell, \meta{Relativistic Quantum Mechanics,}
1964, is assumed in all operations involving gamma matrices.  For an
example of the use of \name{g} in a calculation, see the \meta{REDUCE
User's Manual}.
\end{Comments}
\end{Operator}


\begin{Declaration}{INDEX}
The declaration \name{index} flags a four-vector as an index for subsequent
high-energy physics calculations.
\begin{Syntax}
\name{index} \meta{vector-id}\{,\meta{vector-id}\}\optional
\end{Syntax}

\meta{vector-id} must have been declared of type \name{vector}.

\begin{Examples}
vector aa,bb,cc; \\
index uu; \\
let aa.bb = 0; \\
(aa.uu)*(bb.uu);                  &      0 \\
(aa.uu)*(cc.uu);                  &      AA.CC
\end{Examples}

\begin{Comments}
Index variables are used to represent contraction over components of
vectors when scalar products are taken by the . operator, as well as
indicating contraction for the \nameref{eps} operator or metric tensor.

The special status of a vector as an index can be revoked with the
declaration \nameref{remind}.  The object remains a vector, however.
\end{Comments}
\end{Declaration}


\begin{Command}{MASS}
The \name{mass} command associates a scalar variable as a mass with
the corresponding vector variable, in high-energy physics calculations.
\begin{Syntax}
\name{mass} \meta{vector-var}\name{=}\meta{scalar-var}
\{,\meta{vector-var}\name{=}\meta{scalar-var}\}\optional
\end{Syntax}

\meta{vector-var} can be a declared vector variable;  \name{mass} will declare
it to be of type \name{vector} if it is not.  This may override an existing
matrix variable by that name.  \meta{scalar-var} must be a scalar variable.

\begin{Examples}
vector bb,cc; \\
mass cc=m; \\
mshell cc; \\
cc.cc;                            &         M^{2}
\end{Examples}

\begin{Comments}
Once a mass has been attached to a vector with a \name{mass} declaration,
the \nameref{mshell} declaration puts the associated particle ``on the mass
shell.''  Subsequent scalar (.) products of the vector with itself will be
replaced by the square of the mass expression.
\end{Comments}
\end{Command}


\begin{Command}{MSHELL}
The \name{mshell} command puts particles on the mass shell in high-energy
physics calculations.
\begin{Syntax}
\name{mshell} \meta{vector-var}\{,\meta{vector-var}\}\optional
\end{Syntax}

\meta{vector-var} must have had a mass attached to it by a \nameref{mass}
declaration.

\begin{Examples}
vector v1,v2; \\
mass v1=m,v2=q; \\
mshell v1; \\
v1.v1;                       &            M^{2} \\
v2.v2;                       &            V2.V2 \\
mshell v2; \\
v1.v1*v2.v2;                 &            M^{2}*Q^{2}
\end{Examples}

\begin{Comments}
Even though a mass is attached to a vector variable representing a
particle, the replacement does not take place until the \name{mshell}
declaration is given for that vector variable.
\end{Comments}
\end{Command}


\begin{Declaration}{NOSPUR}
The \name{nospur} declaration prevents the trace calculation over the given
line identifiers in high-energy physics calculations.
\begin{Syntax}
\name{nospur} \meta{line-id}\{,\meta{line-id}\}\optional
\end{Syntax}


\meta{line-id} is a scalar identifier that will be used as a line identifier.

\begin{Examples}
vector a1,b1,c1; \\
g(line1,a1,b1)*g(line2,b1,c1);      &     A1.B1*B1.C1 \\
nospur line2; \\
g(line1,a1,b1)*g(line2,b1,c1);      &     A1.B1*G(LINE2,B1,C1)
\end{Examples}

\begin{Comments}
Nospur declarations can be removed by making the declaration \nameref{spur}.
\end{Comments}
\end{Declaration}


\begin{Declaration}{REMIND}
The \name{remind} declaration removes the special status of its arguments
as indices, which was set in the \nameref{index} declaration, in
high-energy physics calculations.
\begin{Syntax}
\name{remind} \meta{identifier}\{,\meta{identifier}\}\optional
\end{Syntax}

\meta{identifier} must have been declared to be of type \nameref{index}.
\end{Declaration}


\begin{Declaration}{SPUR}
The \name{spur} declaration removes the special exemption from trace
calculations that was declared by \nameref{nospur}, in high-energy physics
calculations.
\begin{Syntax}
\name{spur} \meta{line-id}\{,\meta{line-id}\}\optional
\end{Syntax}

\meta{line-id} must be a line-identifier that has previously been declared
\name{nospur}.
\end{Declaration}


\begin{Command}{VECDIM}
The command \name{vecdim} changes the vector dimension from 4 to an arbitrary
integer or symbol.  Used in high-energy physics calculations.
\begin{Syntax}
\name{vecdim} \meta{dimension}
\end{Syntax}


\meta{dimension} must be either an integer or a valid scalar identifier that
does not have a floating-point value.

\begin{Comments}
The \nameref{eps} operator and the \IFTEX{$\gamma_{5}$}{gamma_5}
symbol (\name{A}) are not properly defined in anything except four
dimensions and will print an error message if you use them that way.  The
other high-energy physics operators should work without problem.
\end{Comments}
\end{Command}


\begin{Declaration}{VECTOR}
The \name{vector} declaration declares that its arguments are of type \name{vector}.
\begin{Syntax}
\name{vector} \meta{identifier}\{,\meta{identifier}\}\optional
\end{Syntax}

\meta{identifier} must be a valid REDUCE identifier.  It may have already been
used for a matrix, array, operator or scalar variable.  After an identifier
has been declared to be a vector, it may not be used as a scalar variable.

\begin{Comments}
Vectors are special entities for high-energy physics calculations.  You
cannot put values into their coordinates; they do not have coordinates.
They are legal arguments for the high-energy physics operators
\nameref{eps}, \nameref{g} and \name{.} (dot).  Vector variables are
used to represent gamma matrices and gamma matrices contracted with Lorentz
4-vectors, since there are no Dirac variables per se in the system.
Vectors do follow the usual vector rules for arithmetic operations:
\name{+} and \name{-} operate upon two or more vectors, producing a
vector; \name{*} and \name{/} cannot be used between vectors; the
scalar product is represented by the . operator; and the product of a
scalar and vector expression is well defined, and is a vector.

You can represent components of vectors by including representations of unit
vectors in your system.  For instance, letting \name{E0} represent the unit
vector (1,0,0,0), the command

\name{V1.E0 := 0;}

would set up the substitution of zero for the first component of the vector
\name{V1}.

Identifiers that are declared by the \name{index} and \name{mass} declarations are
automatically declared to be vectors.

The following errors can occur in calculations using the high energy
physics package:

\name{A represents only gamma5 in vector expressions}
\begin{quote}
You have tried to use A in some way other than gamma5 in a
high-energy physics expression.
\end{quote}

\name{Gamma5 not allowed unless vecdim is 4}
\begin{quote}
You have used \IFTEX{$\gamma_{5}$}{gamma_5} in a high-energy physics
computation involving a vector dimension other than 4.
\end{quote}

\meta{ID} \name{has no mass}
\begin{quote}
One of the arguments to \nameref{mshell} has had no mass assigned to it, in
high-energy physics calculations.
\end{quote}

\name{Missing arguments for G operator}
\begin{quote}
A line symbol is missing in a gamma matrix expression in high-energy physics
calculations.
\end{quote}

\name{Unmatched index} \meta{list}
\begin{quote}
The parser has found unmatched indices during the evaluation of a
gamma matrix expression in high-energy physics calculations.
\end{quote}
\end{Comments}
\end{Declaration}

