123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744 |
- \documentstyle[11pt,reduce,makeidx]{article}
- \makeindex
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % The following definitions should be commented out by those
- % wishing to use MakeIndeX
- \def\indexentry#1#2{{\tt #1} \dotfill\ #2\newline}
- \renewcommand{\printindex}{\noindent \@input{\jobname.idx}}
- %%%%%%% end of definitions %%%%%%%%%%%%%%%%%%%%%
- \title{PHYSOP \\ A Package for Operator Calculus in Quantum Theory}
- \author{User's Manual \\ Version 1.5 \\ January 1992}
- \date{Mathias Warns \\
- Physikalisches Institut der Universit\"at Bonn \\
- Endenicher Allee 11--13 \\
- D--5300 BONN 1 (F.R.G.) \\*[2\parskip]
- Tel: (++49) 228 733724 \\
- Fax: (++49) 228 737869 \\
- e--mail: UNP008@DBNRHRZ1.bitnet}
- \begin{document}
- \maketitle
- \section{Introduction}
- The package PHYSOP 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 in the calculation of commutators between operator
- expressions and in the evaluations of operator matrix elements
- in some abstract space. Since the capabilities
- of the current \REDUCE\ release to deal with complex
- expressions containing noncommutative operators are rather restricted,
- the first step was to enhance these possibilities in order to
- achieve a better usability of \REDUCE\ for these kind of calculations.
- This has led to the development of a first package called
- NONCOM2 which is described in section 2. For more complicated
- expressions involving both scalar quantities and operators
- the need for an additional data type has emerged in order to make a
- clear separation between the various objects present in the calculation.
- The implementation of this new \REDUCE\ data type is realized by the
- PHYSOP (for PHYSical OPerator) package described in section 3.
- \section{The NONCOM2 Package}
- The package NONCOM2 redefines some standard \REDUCE\ routines
- in order to modify the way noncommutative operators are handled by the
- system. In standard \REDUCE\ declaring an operator to be noncommutative
- using the \f{NONCOM} statement puts a global flag on the
- operator. This flag is checked when the system has to decide
- whether or not two operators commute during the manipulation of an
- expression.
- The NONCOM2 package redefines the \f{NONCOM} \index{NONCOM} statement in
- a way more suitable for calculations in physics. Operators have now to
- be declared noncommutative pairwise, i.e. coding: \\
- \begin{framedverbatim}
- NONCOM A,B;
- \end{framedverbatim}
- declares the operators \f{A} and \f{B} to be noncommutative but allows them
- to commute with any other (noncommutative or not) operator present in
- the expression. In a similar way if one wants e.g.\ \f{A(X)} and
- \f{A(Y)} not to commute, one has now to code: \\
- \begin{framedverbatim}
- NONCOM A,A;
- \end{framedverbatim}
- Each operator gets a new property list containing the
- operators with which it does not commute.
- A final example should make
- the use of the redefined \f{NONCOM} statement clear: \\
- \begin{framedverbatim}
- NONCOM A,B,C;
- \end{framedverbatim}
- declares \f{A} to be noncommutative with \f{B} and \f{C},
- \f{B} to be noncommutative
- with \f{A} and \f{C} and \f{C} to be noncommutative
- with \f{A} and \f{B}.
- Note that after these declaration
- e.g.\ \f{A(X)} and \f{A(Y)}
- are still commuting kernels.
- Finally to keep the compatibility with standard \REDUCE\, declaring a
- \underline{single} identifier using the \f{NONCOM} statement has the same
- effect as in
- standard \REDUCE\, i.e., the identifier is flagged with the \f{NONCOM} tag.
- From the user's point of view there are no other
- new commands implemented by the package. Commutation
- relations have to be declared in the standard way as described in
- the manual i.e.\ using
- \f{LET} statements. The package itself consists of several redefined
- standard
- \REDUCE\ routines to handle the new definition of noncommutativity in
- multiplications and pattern matching processes.
- {\bf CAVEAT: } Due to its nature, the package is highly version
- dependent. The current version has been designed for the 3.3 and 3.4
- releases
- of \REDUCE\ and may not work with previous versions. Some different
- (but still correct) results may occur by using this package in
- conjunction with
- LET statements since part of the pattern matching routines have been
- redesigned. The package has been designed to bridge a deficiency of the
- current \REDUCE\ version concerning the notion of noncommutativity
- and it is the author's hope that it will be made obsolete
- by a future release of \REDUCE.
- \section{The PHYSOP package}
- The package PHYSOP implements a new \REDUCE\ data type to perform
- calculations with physical operators. The noncommutativity of
- operators is
- implemented using the NONCOM2 package so this file should be loaded
- prior to the use of PHYSOP\footnote{To build a fast
- loading version of PHYSOP the NONCOM2
- source code should be read in prior to the PHYSOP
- code}.
- In the following the new commands implemented by the package
- are described. Beside these additional commands,
- the full set of standard \REDUCE\ instructions remains
- available for performing any other calculation.
- \subsection{Type declaration commands}
- The new \REDUCE\ data type PHYSOP implemented by the package allows the
- definition of a new kind of operators (i.e. kernels carrying
- an arbitrary
- number of arguments). Throughout this manual, the name
- ``operator''
- will refer, unless explicitly stated otherwise, to this new data type.
- This data type is in turn
- divided into 5 subtypes. For each of this subtype, a declaration command
- has been defined:
- \begin{description}
- \item[\f{SCALOP A;} ] \index{SCALOP} declares \f{A} to be a scalar
- operator. This operator may
- carry an arbitrary number of arguments i.e.\ after the
- declaration: \f{ SCALOP A; }
- all kernels of the form e.g.\
- \f{A(J), A(1,N), A(N,L,M)}
- are recognized by the system as being scalar operators.
- \item[\f{VECOP V;} ] \index{VECOP} declares \f{V} to be a vector operator.
- As for scalar operators, the vector operators may carry an arbitrary
- number of arguments. For example \f{V(3)} can be used to represent
- the vector operator $\vec{V}_{3}$. Note that the dimension of space
- in which this operator lives is \underline{arbitrary}.
- One can however address a specific component of the
- vector operator by using a special index declared as \f{PHYSINDEX} (see
- below). This index must then be the first in the argument list
- of the vector operator.
- \item[\f{TENSOP C(3);} ] \index{TENSOP}
- declares \f{C} to be a tensor operator of rank 3. Tensor operators
- of any fixed integer rank larger than 1 can be declared.
- Again this operator may carry an arbitrary number of arguments
- and the space dimension is not fixed.
- The tensor
- components can be addressed by using special \f{PHYSINDEX} indices
- (see below) which have to be placed in front of all other
- arguments in the argument list.
- \item[\f{STATE U;} ] \index{STATE} declares \f{U} to be a state, i.e.\ an
- object on
- which operators have a certain action. The state U can also carry an
- arbitrary number of arguments.
- \item[\f{PHYSINDEX X;} ] \index{PHYSINDEX} declares \f{X} to be a special
- index which will be used
- to address components of vector and tensor operators.
- \end{description}
- It is very important to understand precisely the way how the type
- declaration commands work in order to avoid type mismatch errors when
- using the PHYSOP package. The following examples should illustrate the
- way the program interprets type declarations.
- Assume that the declarations listed above have
- been typed in by the user, then:
- \begin{description}
- \item[$\bullet$] \f{A,A(1,N),A(N,M,K)} are SCALAR operators.
- \item[$\bullet$] \f{V,V(3),V(N,M)} are VECTOR operators.
- \item[$\bullet$] \f{C, C(5),C(Y,Z)} are TENSOR operators of
- rank 3.
- \item[$\bullet$] \f{U,U(P),U(N,L,M)} are STATES.
- \item[BUT:] \f{V(X),V(X,3),V(X,N,M)} are all \underline{scalar}
- operators
- since the \underline{special index} \f{X} addresses a
- specific component
- of the vector operator (which is a scalar operator). Accordingly,
- \f{C(X,X,X)} is also a \underline{scalar} operator because
- the diagonal component $C_{xxx}$
- of the tensor operator \f{C} is meant here
- (C has rank 3 so 3 special indices must be used for the components).
- \end{description}
- In view of these examples, every time the following text
- refers to \underline{scalar} operators,
- it should be understood that this means not only operators defined by
- the
- \f{SCALOP} statement but also components of vector and tensor operators.
- Depending on the situation, in some case when dealing only with the
- components of vector or tensor operators it may be preferable to use
- an operator declared with \f{SCALOP} rather than addressing the
- components using several special indices (throughout the
- manual,
- indices declared with the \f{PHYSINDEX} command are referred to as special
- indices).
- Another important feature of the system is that
- for each operator declared using the statements described above, the
- system generates 2 additional operators of the same type:
- the \underline{adjoint} and the \underline{inverse} operator.
- These operators are accessible to the user for subsequent calculations
- without any new declaration. The syntax is as following:
- If \f{A} has been declared to be an operator (scalar, vector or tensor)
- the \underline{adjoint} operator is denoted \f{A!+} and the
- \underline{inverse}
- operator is denoted \f{A!-1} (an inverse adjoint operator \f{A!+!-1}
- is also generated).
- The exclamation marks do not appear
- when these operators are printed out by \REDUCE\ (except when the switch
- \f{NAT} is set to off)
- but have to be typed in when these operators are used in an input
- expression.
- An adjoint (but \underline{no} inverse) state is also
- generated for every state defined by the user.
- One may consider these generated operators as ''placeholders'' which
- means that these operators are considered by default as
- being completely independent of the original operator.
- Especially if some value is assigned to the original operator,
- this value is \underline{not} automatically assigned to the
- generated operators. The user must code additional assignement
- statements in order to get the corresponding values.
- Exceptions from these rules are (i) that inverse operators are
- \underline{always} ordered at the same place as the original operators
- and (ii) that the expressions \f{A!-1*A}
- and \f{A*A!-1} are replaced\footnote{This may not always occur in
- intermediate steps of a calculation due to efficiency reasons.}
- by the unit operator \f{UNIT} \index{UNIT}.
- This operator is defined
- as a scalar operator during the initialization of the PHYSOP package.
- It should be used to indicate
- the type of an operator expression whenever no other PHYSOP
- occur in it. For example, the following sequence: \\
- \begin{framedverbatim}
- SCALOP A;
- A:= 5;
- \end{framedverbatim}
- leads to a type mismatch error and should be replaced by: \\
- \begin{framedverbatim}
- SCALOP A;
- A:=5*UNIT;
- \end{framedverbatim}
- The operator \f{UNIT} is a reserved variable of the system and should
- not be used for other purposes.
- All other kernels (including standard \REDUCE\ operators)
- occurring in expressions are treated as ordinary scalar variables
- without any PHYSOP type (referred to as \underline{scalars} in the
- following).
- Assignement statements are checked to ensure correct operator
- type assignement on both sides leading to an error if a type
- mismatch occurs. However an assignement statement of the form
- \f{A:= 0} or \f{LET A = 0} is \underline{always} valid regardless of the
- type of \f{A}.
- Finally a command \f{CLEARPHYSOP} \index{CLEARPHYSOP}
- has been defined to remove
- the PHYSOP type from an identifier in order to use it for subsequent
- calculations (e.g. as an ordinary \REDUCE\ operator). However it should be
- remembered that \underline{no}
- substitution rule is cleared by this function. It
- is therefore left to the user's responsability to clear previously all
- substitution rules involving the identifier from which the PHYSOP type
- is removed.
- Users should be very careful when defining procedures or statements of
- the type \f{FOR ALL ... LET ...} that the PHYSOP type of all identifiers
- occurring in such expressions is unambigously fixed. The type analysing
- procedure is rather restrictive and will print out a ''PHYSOP type
- conflict'' error message if such ambiguities occur.
- \subsection{Ordering of operators in an expression}
- The ordering of kernels in an expression is performed according to
- the following rules: \\
- 1. \underline{Scalars} are always ordered ahead of
- PHYSOP \underline{operators} in an expression.
- The \REDUCE\ statement \f{KORDER} \index{KORDER} can be used to control the
- ordering of scalars but has \underline{no}
- effect on the ordering of operators.
- 2. The default ordering of \underline{operators} follows the
- order in which they have been declared (and \underline{not}
- the alphabetical one).
- This ordering scheme can be changed using the command \f{OPORDER}.
- \index{OPORDER}
- Its syntax is similar to the \f{KORDER} statement, i.e.\ coding:
- \f{OPORDER A,V,F;}
- means that all occurrences of the operator \f{A} are ordered ahead of
- those of \f{V} etc. It is also possible to include operators
- carrying
- indices (both normal and special ones) in the argument list of
- \f{OPORDER}. However including objects \underline{not}
- defined as operators (i.e. scalars or indices) in the argument list
- of the \f{OPORDER} command leads to an error.
- 3. Adjoint operators are placed by the declaration commands just
- after the original operators on the \f{OPORDER} list. Changing the
- place of an operator on this list means \underline{not} that the
- adjoint operator is moved accordingly. This adjoint operator can
- be moved freely by including it in the argument list of the
- \f{OPORDER} command.
- \subsection{Arithmetic operations on operators}
- The following arithmetic operations are possible with
- operator expressions: \\
- 1. Multiplication or division of an operator by a scalar.
- 2.Addition and substraction of operators of the \underline{same}
- type.
- 3. Multiplication of operators is only defined between two
- \underline{scalar} operators.
- 4. The scalar product of two VECTOR operators is implemented
- with a new function \f{DOT} \index{DOT}. The system expands
- the product of
- two vector operators into an ordinary product of the components of these
- operators by inserting a special index generated by the program.
- To give an example, if one codes: \\
- \begin{framedverbatim}
- VECOP V,W;
- V DOT W;
- \end{framedverbatim}
- the system will transform the product into: \\
- \begin{framedverbatim}
- V(IDX1) * W(IDX1)
- \end{framedverbatim}
- where \f{IDX1} is a \f{PHYSINDEX} generated by the system (called a DUMMY
- INDEX in the following) to express the summation over the components.
- The identifiers \f{IDXn} (\f{n} is
- a nonzero integer) are
- reserved variables for this purpose and should not be used for other
- applications. The arithmetic operator
- \f{DOT} can be used both in infix and prefix form with two arguments.
- 5. Operators (but not states) can only be raised to an
- \underline{integer} power. The system expands this power
- expression into a product of the corresponding number of terms
- inserting dummy indices if necessary. The following examples explain
- the transformations occurring on power expressions (system output
- is indicated with an \f{-->}): \\
- \begin{framedverbatim}
- SCALOP A; A**2;
- - --> A*A
- VECOP V; V**4;
- - --> V(IDX1)*V(IDX1)*V(IDX2)*V(IDX2)
- TENSOP C(2); C**2;
- - --> C(IDX3,IDX4)*C(IDX3,IDX4)
- \end{framedverbatim}
- Note in particular the way how the system interprets powers of
- tensor operators which is different from the notation used in matrix
- algebra.
- 6. Quotients of operators are only defined between
- \underline{scalar} operator expressions.
- The system transforms the quotient of 2 scalar operators into the
- product of the first operator times the inverse of the second one.
- Example\footnote{This shows how inverse operators are printed out when
- the switch \f{NAT} is on}: \\
- \begin{framedverbatim}
- SCALOP A,B; A / B;
- -1
- - --> A * B
- \end{framedverbatim}
- 7. Combining the last 2 rules explains the way how the system
- handles negative powers of operators: \\
- \noindent
- \begin{framedverbatim}
- SCALOP B;
- B**(-3);
- -1 -1 -1
- - --> B *B *B
- \end{framedverbatim}
- The method of inserting dummy indices and expanding powers of
- operators has been chosen to facilitate the handling of
- complicated operator
- expressions and particularly their application on states
- (see section 3.4.3). However it may be useful to get rid of these
- dummy indices in order to enhance the readability of the
- system's final output.
- For this purpose the switch \f{CONTRACT} \index{CONTRACT} has to
- be turned on (\f{CONTRACT} is normally set to \f{OFF}).
- The system in this case contracts over dummy indices reinserting the
- \f{DOT} operator and reassembling the expanded powers. However due to
- the predefined operator ordering the system may not remove all the
- dummy indices introduced previously.
- file).
- \subsection{Special functions}
- \subsubsection{Commutation relations}
- If 2 PHYSOPs have been declared noncommutative using the (redefined)
- \f{NONCOM} statement, it is possible to introduce in the environment
- \underline{elementary} (anti-) commutation relations between them. For
- this purpose,
- 2 \underline{scalar} operators \f{COMM} \index{COMM} and
- \f{ANTICOMM} \index{ANTICOMM} are available.
- These operators are used in conjunction with \f{LET} statements.
- Example: \\
- \begin{framedverbatim}
- SCALOP A,B,C,D;
- LET COMM(A,B)=C;
- FOR ALL N,M LET ANTICOMM(A(N),B(M))=D;
- VECOP U,V,W; PHYSINDEX X,Y,Z;
- FOR ALL X,Y LET COMM(V(X),W(Y))=U(Z);
- \end{framedverbatim}
- Note that if special indices are used as dummy variables in
- \f{FOR ALL ... LET} constructs then these indices should have been
- declared previously using the \f{PHYSINDEX} command.
- Every time the system
- encounters a product term involving 2
- noncommutative operators which have to be reordered on account of the
- given operator ordering, the list of available (anti-) commutators is
- checked in the following way: First the system looks for a
- \underline{commutation} relation which matches the product term. If it
- fails then the defined \underline{anticommutation} relations are
- checked. If there is no successful match the product term
- \f{A*B} is replaced by: \\
- \begin{framedverbatim}
- A*B;
- --> COMM(A,B) + B*A
- \end{framedverbatim}
- so that the user may introduce the commutation relation later on.
- The user may want to force the system to look for
- \underline{anticommutators} only; for this purpose a switch \f{ANTICOM}
- \index{ANTICOM}
- is defined which has to be turned on ( \f{ANTICOM} is normally set to
- \f{OFF}). In this case, the above example is replaced by: \\
- \begin{framedverbatim}
- ON ANTICOM;
- A*B;
- --> ANTICOMM(A,B) - B*A
- \end{framedverbatim}
- Once the operator ordering has been fixed (in the example above \f{B}
- has to be ordered ahead of \f{A}),
- there is \underline{no way} to prevent the
- system from introducing (anti-)commutators every time it encounters
- a product whose terms are not in the right order. On the other hand,
- simply by changing the \f{OPORDER} statement and reevaluating the
- expression one can change the operator ordering
- \underline{without}
- the need to introduce new commutation relations.
- Consider the following example: \\
- \begin{framedverbatim}
- SCALOP A,B,C; NONCOM A,B; OPORDER B,A;
- LET COMM(A,B)=C;
- A*B;
- - --> B*A + C;
- OPORDER A,B;
- B*A;
- - --> A*B - C;
- \end{framedverbatim}
- The functions \f{COMM} and \f{ANTICOMM} should only be used to
- define
- elementary (anti-) commutation relations between single operators.
- For the calculation of (anti-) commutators between complex
- operator
- expressions, the functions \f{COMMUTE} \index{COMMUTE} and
- \f{ANTICOMMUTE} \index{ANTICOMMUTE} have been defined.
- Example (is included as example 1 in the test file): \\
- \begin{framedverbatim}
- VECOP P,A,K;
- PHYSINDEX X,Y;
- FOR ALL X,Y LET COMM(P(X),A(Y))=K(X)*A(Y);
- COMMUTE(P**2,P DOT A);
- \end{framedverbatim}
- \subsubsection{Adjoint expressions}
- As has been already mentioned, for each operator and state defined
- using the declaration commands quoted in section 3.1, the system
- generates automatically the corresponding adjoint operator. For the
- calculation of the adjoint representation of a complicated
- operator expression, a function \f{ADJ} \index{ADJ} has been defined.
- Example\footnote{This shows how adjoint operators are printed out
- when the switch \f{NAT} is on}: \\
- \begin{framedverbatim}
- SCALOP A,B;
- ADJ(A*B);
- + +
- - --> A * B
- \end{framedverbatim}
- \subsubsection{Application of operators on states}
- For this purpose, a function \f{OPAPPLY} \index{OPAPPLY} has been
- defined.
- It has 2 arguments and is used in the following combinations: \\
- {\bf (i)} \f{LET OPAPPLY(}{\it operator, state}\f{) =} {\it state};
- This is to define a elementary
- action of an operator on a state in analogy to the way
- elementary commutation relations are introduced to the system.
- Example: \\
- \begin{framedverbatim}
- SCALOP A; STATE U;
- FOR ALL N,P LET OPAPPLY((A(N),U(P))= EXP(I*N*P)*U(P);
- \end{framedverbatim}
- {\bf (ii)} \f{LET OPAPPLY(}{\it state, state}\f{) =} {\it scalar exp.};
- This form is to define scalar products between states and normalization
- conditions.
- Example: \\
- \begin{framedverbatim}
- STATE U;
- FOR ALL N,M LET OPAPPLY(U(N),U(M)) = IF N=M THEN 1 ELSE 0;
- \end{framedverbatim}
- {\bf (iii)} {\it state} \f{:= OPAPPLY(}{\it operator expression, state});
- In this way, the action of an operator expression on a given state
- is calculated using elementary relations defined as explained in {\bf
- (i)}. The result may be assigned to a different state vector.
- {\bf (iv)} \f{OPAPPLY(}{\it state}\f{, OPAPPLY(}{\it operator expression,
- state}\f{))}; This is the way how to calculate matrix elements of
- operator
- expressions. The system proceeds in the following way: first the
- rightmost operator is applied on the right state, which means that the
- system tries
- to find an elementary relation which match the application of the
- operator on the state. If it fails
- the system tries to apply the leftmost operator of the expression on the
- left state using the adjoint representations. If this fails also,
- the system prints out a warning message and stops the evaluation.
- Otherwise the next operator occuring in the expression is
- taken and so on until the complete expression is applied. Then the
- system
- looks for a relation expressing the scalar product of the two
- resulting states and prints out the final result. An example of such
- a calculation is given in the test file.
- The infix version of the \f{OPAPPLY} function is the vertical bar $\mid$
- . It is \underline{right} associative and placed in the precedence
- list just above the minus ($-$) operator.
- Some of the \REDUCE\ implementation may not work with this character,
- the prefix form should then be used instead\footnote{The source code
- can also be modified to choose another special character for the
- function}.
- \section{Known problems in the current release of PHYSOP}
- \indent {\bf (i)} Some spurious negative powers of operators
- may appear
- in the result of a calculation using the PHYSOP package. This is a
- purely ''cosmetic'' effect which is due to an additional
- factorization of the expression in the output printing routines of
- \REDUCE. Setting off the \REDUCE\ switch \f{ALLFAC} (\f{ALLFAC} is normally
- on)
- should make these
- terms disappear and print out the correct result (see example 1
- in the test file).
- {\bf (ii)} The current release of the PHYSOP package is not optimized
- w.r.t. computation speed. Users should be aware that the evaluation
- of complicated expressions involving a lot of commutation relations
- requires a significant amount of CPU time \underline{and} memory.
- Therefore the use of PHYSOP on small machines is rather limited. A
- minimal hardware configuration should include at least 4 MB of
- memory and a reasonably fast CPU (type Intel 80386 or equiv.).
- {\bf (iii)} Slightly different ordering of operators (especially with
- multiple occurrences of the same operator with different indices)
- may appear in some calculations
- due to the internal ordering of atoms in the underlying LISP system
- (see last example in the test file). This cannot be entirely avoided
- by the package but does not affect the correctness of the results.
- \section{Compilation of the packages}
- To build a fast loading module of the NONCOM2 package, enter the
- following commands after starting the \REDUCE\ system: \\
- \begin{framedverbatim}
- faslout "noncom2";
- in "noncom2.red";
- faslend;
- \end{framedverbatim}
- To build a fast loading module of the PHYSOP package, enter the
- following commands after starting the \REDUCE\ system: \\
- \begin{framedverbatim}
- faslout "physop";
- in "noncom2.red";
- in "physop.red";
- faslend;
- \end{framedverbatim}
- Input and output file specifications may change according to the
- underlying operating system. \\
- On PSL--based systems, a spurious message: \\
- \begin{framedverbatim}
- *** unknown function PHYSOP!*SQ called from compiled code
- \end{framedverbatim}
- may appear during the compilation of the PHYSOP package. This warning
- has no effect on the functionality of the package.
- \section{Final remarks}
- The package PHYSOP has been presented by
- the author at the IV inter. Conference on Computer Algebra in Physical
- Research, Dubna (USSR) 1990 (see M. Warns, {\it
- Software Extensions of \REDUCE\ for Operator Calculus in Quantum Theory},
- Proc.\ of the IV inter.\ Conf.\ on Computer Algebra in Physical
- Research, Dubna 1990, to appear). It has been developed with the aim in
- mind to perform calculations of the type exemplified in the test file
- included in the distribution of this package.
- However it should
- also be useful in some other domains like e.g.\ the calculations of
- complicated Feynman diagrams in QCD which could not be performed using
- the HEPHYS package. The author is therefore grateful for any
- suggestion
- to improve or extend the usability of the package. Users should not
- hesitate to contact the author for additional help and explanations on
- how to use
- this package. Some bugs may also
- appear which have not been discovered during the tests performed
- prior to the release of this version. Please send in this case to the
- author a short
- input and output listing displaying the encountered problem.
- \section*{Acknowledgements}
- The main ideas for the implementation of a new data type in the \REDUCE\
- environnement have been taken from the VECTOR package developed by
- Dr.\ David Harper (D. Harper, Comp.\ Phys.\ Comm.\ {\bf 54} (1989)
- 295).
- Useful discussions with Dr.\ Eberhard Schr\"ufer and
- Prof.\ John Fitch are also gratefully acknowledged.
- \appendix
- \section{List of error and warning messages}
- In the following the error (E) and warning (W) messages specific to the
- PHYSOP package are listed.
- \begin{description}
- \item[\f{cannot declare} {\it x}\f{ as }{\it data type}] (W):
- An attempt has been made to declare an
- object {\it x} which cannot be used as a PHYSOP operator of the
- required type. The declaration command is ignored.
- \item [{\it x} \f{already defined as} {\it data type}] (W): The object
- {\it x} has already been declared using a \REDUCE\ type declaration
- command and can therefore not be used as a PHYSOP operator.
- The declaration command is ignored.
- \item [{\it x} \f{already declared as} {\it data type}] (W): The object
- \f{x} has already been declared with a PHYSOP declaration command.
- The declaration command is ignored.
- \item[{\it x} \f{is not a PHYSOP}] (E): An invalid argument has been
- included in an \f{OPORDER} command. Check the arguments.
- \item[\f{invalid argument(s) to }{\it function}] (E): A
- function implemented by the PHYSOP package has been called with an
- invalid argument. Check type of arguments.
- \item[\f{Type conflict in }{\it operation}] (E): A PHYSOP type conflict
- has occured during an arithmetic operation. Check the arguments.
- \item [\f{invalid call of }{\it function} \f{with args:} {\it arguments}]
- (E): A function
- of the PHYSOP package has been declared with invalid argument(s). Check
- the argument list.
- \item[\f{type mismatch in} {\it expression}] (E): A type mismatch has
- been detected in an expression. Check the corresponding expression.
- \item[\f{type mismatch in} {\it assignement}] (E): A type
- mismatch has been detected in an assignment or in a \f{LET}
- statement. Check the listed statement.
- \item[\f{PHYSOP type conflict in} {\it expr}] (E): A ambiguity has been
- detected during the type analysis of the expression. Check the
- expression.
- \item[\f{operators in exponent cannot be handled}] (E): An operator has
- occurred in the exponent of an expression.
- \item[\f{cannot raise a state to a power}] (E): states cannot be
- exponentiated by the system.
- \item[\f{invalid quotient}] (E): An invalid denominator has occurred in a
- quotient. Check the expression.
- \item[\f{physops of different types cannot be commuted}] (E): An invalid
- operator has occurred in a call of the \f{COMMUTE}/\f{ANTICOMMUTE} function.
- \item[\f{commutators only implemented between scalar operators}] (E):
- An invalid operator has occurred in the call of the
- \f{COMMUTE}/\f{ANTICOMMUTE} function.
- \item[\f{evaluation incomplete due to missing elementary relations}] (W):
- \\
- The system has not found all
- the elementary commutators or application relations necessary to
- calculate or reorder the input expression. The result may however be
- used for further calculations.
- \end{description}
- \section{List of available commands}
- \printindex
- \end{document}
|