1\documentclass[12pt]{article}
2\usepackage[dvipdfm]{graphicx}
3\usepackage[dvipdfm]{color}
4\usepackage[dvipdfm]{hyperref}
5
6% After compilation with latex a pdf file can be generated with:
7% dvipdfm crack.dvi
8
9%Sets size of page and margins
10\oddsidemargin 0mm  \evensidemargin 0mm
11\topmargin -10mm   \headheight 0pt   \headsep 0pt
12\textwidth 17cm
13\textheight 25.5cm
14
15%
16% Some color definitions and definitions for pdf hyperlinks
17%
18\def\begincolor#1{\special{pdf:bc #1}}%
19\def\endcolor{\special{pdf:ec}}%
20\def\colored#1#2{%
21  \begincolor{#1}#2\endcolor}
22%\def\red{[0.8 0.5 0]}%
23%\def\green{[0 1 0]}%
24%\def\blue{[0 0.4 0.8]}%
25%\def\yellow{[0.8 0.9 0.1]}%
26\def\linkcolor{[0.5 0.0 0.7]}%
27%
28\def\setlink#1{\colored{\linkcolor}{#1}}%
29%
30\def\link#1#2{%
31  \leavevmode\special{pdf: bann
32    << /Type /Annot /Subtype /Link /Border [ 0 0 0 ] /A << /S /GoTo /D (#2) >>
33>>}\setlink{#1}\special{pdf: eann}\relax}
34%
35\def\dest#1{\hbox{\raise14pt\hbox{\special{pdf:dest (#1) [ @thispage /FitH
36@ypos ]}}}}%
37% Usage:
38% \special{html:<a href="http://www.zib.de">}huhu \special{html:</a>}
39% \link{text}{Label}
40% \dest{Label}
41
42\title{The computer algebra package {\sc Crack}
43       for solving over-determined systems of equations}
44
45\author{Thomas Wolf \\
46        Department of Mathematics \\
47        Brock University \\
48        St.Catharines \\
49        Ontario, Canada L2S 3A1 \\
50        twolf@brocku.ca}
51
52\begin{document}
53\maketitle
54\tableofcontents
55
56\section{Introduction}
57\subsection{Purpose}
58The package {\sc Crack} attempts the solution of an overdetermined
59system of algebraic, ordinary or partial differential equations
60(ODEs/PDEs) with at most polynomial nonlinearities.
61
62Under `normal circumstances' differential equations (DEs) which
63describe physical processes are not overdetermined, i.e.\ the number
64of DEs matches the number of unknown functions which are involved.
65Although {\sc Crack} may be successful in such cases (e.g.\ for
66characteristic ODE-systems of first order PDEs) this is not the
67typical application. It is rather the qualitative investigations of
68such differential equations, i.e.\ the investigation of their
69infinitesimal symmetries (with {\sc LiePDE,ApplySym}) and conservation
70laws (with {\sc Conlaw}) which result in over-determined systems which
71are the main application area of {\sc Crack}.
72
73\subsection{Interactivity}
74The package was originally developed to run automatically and effort
75was taken for the program to decide which computational steps are to
76be done next with a choice among integrations, separations,
77substitutions and investigation of integrability conditions. It is
78known from hand computations that the right sequence of operations
79with exactly the right equations at the right time is often crucial to
80avoid an explosion of the length of expressions. This statement keeps
81its truth for the computerized solution of systems of equations as
82they become more complex. As a consequence more and more interactive
83access has been provided to inspect data, to specify how to proceed
84with the computation and how to control it. This allows the human
85intervention in critical stages of the computations (see the switch
86{\em off batch\_mode} below.
87
88\subsection{General Structure}
89A problem consists of a system of equations
90and a set of inequalities. With each equation are associated a short
91name and numerous data, like size, which functions, derivatives and
92variables occur but also which investigations have already been done
93with this equation and which not in order to avoid unnecessary
94duplication of work.  These data are constantly updated if the
95equation is modified in any way.
96
97A set of about 30 modules is available to integrate, substitute,
98decouple, ... equations. A complete list can be inspected in
99interactive mode with the command {\em p2}, each operation is listed
100with the number it is called. All modules can be called
101interactively or automatically. Automatic computation is organized
102by a priority list of modules (each represented by a number) where
103modules are invoked in the order they appear in the priority list,
104each module trying to find equations in the system it can be applied
105to. The priority list can be inspected with the command {\em p1}.
106If a module is not successful then the next module in the list
107is tried, if any one is successful then execution starts again at
108the beginning of the priority list.
109\{\link{prog\_list\_, default\_proc\_list\_, full\_proc\_list\_}{lb1} \}
110
111Because each module has access to all the data, it is enough to call
112a module by its number. For example, the input of the number 2 in
113interactive mode will start the direct separation module (see below)
114to look for a directly separable equation and will split it.
115
116\section{Syntax}
117\subsection{The call}
118{\sc Crack} is called by
119\begin{tabbing}
120  {\tt crack}(\=\{{\it equ}$_1$, {\it equ}$_2$, \ldots , {\it equ}$_m$\}, \\
121              \>\{{\it ineq}$_1$, {\it ineq}$_2$, \ldots , {\it ineq}$_n$\}, \\
122              \>\{{\it fun}$_1$, {\it fun}$_2$, \ldots , {\it fun}$_p$\}, \\
123              \>\{{\it var}$_1$, {\it var}$_2$, \ldots , {\it var}$_q$\});
124\end{tabbing}
125        $m,n,p,q$ are arbitrary.
126\begin{itemize}
127\item
128The {\it equ}$_i$ are identically vanishing partial differential expressions,
129i.e.\
130they represent equations  $0 = {\it equ}_i$, which are to be solved for the
131functions ${\it fun}_j$ as far as possible, thereby drawing only necessary
132conclusions and not restricting the general solution.
133\item
134The {\it ineq}$_i$ are algebraic or differential expressions which must
135not vanish identically for
136any solution to be determined, i.e. only such solutions are computed for which
137none of the expressions {\it ineq}$_i$ vanishes identically in all independent
138variables.
139\item
140The dependence of the (scalar) functions ${\it fun}_j$ on independent
141variables must be defined beforehand with {\tt DEPEND} rather than
142declaring these functions
143as operators. Their arguments may  themselves only be identifiers
144representing variables, not expressions.
145Also other unknown functions not in ${\it fun}_j$ must not be represented
146as operators but only using {\tt DEPEND}.
147\item
148The functions ${\it fun}_j$ and their derivatives may only occur polynomially.
149\item
150The ${\it var}_k$ are further independent variables, which are not
151already arguments
152of any of the ${\it fun}_j$. If there are none then the fourth argument is
153the empty list \{\}, although it does no harm to include arguments of
154functions ${\it fun}_j$.
155\item
156The dependence of the ${\it equ}_i$ on the independent variables and on
157constants and functions other than ${\it fun}_j$ is arbitrary.
158\item
159{\sc Crack} can be run in automatic batch mode (by default) or
160interactively with the switch {\tt OFF BATCH\_MODE}.
161\end{itemize}
162
163\subsection{The result}
164The result is a list of solutions
165\[      \{{\it sol}_1, \ldots \}  \]
166where each solution is a list of 4 lists:
167\begin{tabbing}
168    \{\=\{${\it con}_1, \; {\it con}_2, \ldots , \; {\it con}_q$\}, \\
169      \>\{${\it fun}_a={\it ex}_a, \;\;
170{\it fun}_b={\it ex}_b, \ldots , \;\; {\it fun}_p={\it ex}_p$\},\=  \\
171      \>\{${\it fun}_c, \;\; {\it fun}_d, \ldots , \;\; {\it fun}_r$\}, \> \\
172      \>\{{\it ineq}$_1$, {\it ineq}$_2$, \ldots , {\it ineq}$_s$\}. \>  \}
173\end{tabbing}
174For example, in the case of a linear system, the input consists of at
175most one solution ${\it sol}_1$.
176
177If {\sc Crack} finds a contradiction as e.g. $0=1$ then there exists no
178solution and it returns the empty list \{\}. If {\sc Crack}
179can factorize algebraically a non-linear equation then factors are set
180to zero individually and different sub-cases are studied by
181{\sc Crack} calling itself recursively.
182If during such a recursive call a contradiction results,
183then this sub-case will not have a solution but other sub-cases still
184may have solutions.
185The empty list is also returned if no solution exists
186which satisfies the inequalities
187{\it ineq}$_i \neq 0.$
188
189The expressions ${\it con}_i$ (if there are any), are the
190remaining necessary and sufficient conditions for the functions
191${\it fun}_c,\ldots,{\it fun}_r$ in the third list. Those
192functions can be original functions from the equations to be
193solved (of the second argument of the call of {\sc Crack}) or new
194functions or constants which arose from integrations.
195The dependence of new functions on variables is declared with {\tt DEPEND}
196and to visualize this dependence the algebraic mode function
197${\tt FARGS({\it fun}_i)}$ can be used.
198If there are no ${\it con}_i$ then all equations are solved and the
199functions in the third list are unconstrained.
200The second list contains
201equations ${\it fun}_i={\it ex}_i$ where each ${\it fun}_i$ is an
202original function and ${\it ex}_i$ is the computed expression
203for ${\it fun}_i$.
204The elements of the fourth
205list are the expressions who have been assumed to be unequal zero
206in the derivation of this solution.
207
208\subsection{Automatic vs.\ interactive}
209Under normal circumstances one will try to have problems solved
210automatically by {\sc Crack}. An alternative is to input
211{\tt OFF BATCH\_MODE;} before calling {\sc Crack} and to solve problems
212interactively. In interactive mode it is possible to
213\begin{itemize}
214\item inspect data, like equations and their properties, unknown
215functions, variables, identities, a statistics,
216\item save, change, add or drop equations,
217\item add inequalities,
218\item inspect and change flags and parameters which govern individual
219modules as well as their interplay,
220\item pick a list of methods to be used out of about 30 different
221ones, and specify their priorities and in this way very easily
222compose an automatic solving strategy,
223\item or, for more interactive work, to specify how to proceed, i.e.\
224which computational step to do and how often, like doing
225 \begin{description}
226 \item one automatic step,
227 \item one specific step,
228 \item a number of automatic steps,
229 \item a specific step as often as possible or a specified number of times.
230 \end{description}
231\end{itemize}
232To get interactive help one enters {\tt h} or {\tt ?}.
233
234Flags and parameters are stored as symbolic fluid variables
235which means that they can be accessed by {\tt lisp( ... )},
236like {\tt lisp( print\_:=5 );} before calling {\sc Crack}.
237{\tt print\_}, for example, is a measure of the maximal
238length of expressions to be printed on the screen
239(the number of factors in terms).
240A complete list of flags and parameters is given at the beginning of
241the file {\tt crinit.red}.
242
243One more parameter shall be mentioned, which is the list of modules/procedures
244called {\tt proc\_list\_}. In interactive mode this list can be looked
245at with {\tt `p'} or be changed with {\tt `cp'}. This list defines
246in which order the different modules/procedures are tried whenever
247{\sc Crack} has to decide of what to do next. Exceptions
248to this rule may be specified. For example, some procedure, say
249$P_1$, requires after its execution another
250specific procedure, say $P_2$, to be executed, no  matter whether
251$P_2$ is next according to {\tt proc\_list\_} or not. This is managed by $P_1$
252writing a task for procedure $P_2$ into a hot-list. Tasks listed in
253the global variable {\tt `to\_do\_list'} are
254dealt with in the {\tt `to\_do'} step which should
255always come first in {\tt proc\_list\_}.
256A way to have the convenience of running {\sc Crack} automatically
257and still being able to break the fixed rhythm prescribed by {\tt
258proc\_list\_} is to have the entry {\tt stop\_batch} in {\tt proc\_list\_}
259and have {\sc Crack} started in automatic batch mode. Then execution
260is continuing
261until none of the procedures which come before {\tt stop\_batch} are
262applicable any more so that {\tt stop\_batch} is executed next which will
263stop automatic execution and go into interactive mode. This allows
264either to continue the computation interactively, or to change the
265{\tt proc\_list\_} with {\tt `cp'} and to continue in automatic mode.
266
267The default value of {\tt proc\_list\_} does not include all possible
268modules because not all are suitable for any kind of overdetermined
269system to be solved. The complete list is shown in interactive mode
270under {\tt `cp'}. A few basic modules are described in the following
271section. The efficiency of {\sc Crack} in automatic mode is very much
272depending on the content of {\tt proc\_list\_} and the sequence of its
273elements. Optimizing {\tt proc\_list\_} for a given task needs
274experience which can not be formalized in a few simple rules and will
275therefore not be explained in more detail here. The following remarks
276are only guidelines.
277
278\section{Modules}
279 The following modules are represented by numbers in
280 the priority list. Each module can appear with modifications under
281 different numbers. For example, integration is available under
282 \link{{\em 7}}{m_7}, \link{{\em 24}}{m_24} and
283 \link{{\em 25}}{m_25}.  Here \link{{\em 7}}{m_7} encodes an
284 integrations of short equations
285 $0=\partial^n f/\partial x^n$. \link{{\em 7}}{m_7}
286 has highest priority of the three
287 integrations. \link{{\em 24}}{m_24} encodes the
288 integration of an equation that leads
289 to the substitution of a function and \link{{\em 25}}{m_25} refers
290 to any integration and has lowest priority.
291
292\subsection{Integration and Separation}
293    An early feature in the development of the package {\sc Crack}
294    was the ability to integrate exact differential equations and
295    some generalizations of them (see \cite{Wol99e}). As a consequence
296    of integrations \link{{\em 7}}{m_7}, \link{{\em 24}}{m_24},
297    \link{{\em 25}}{m_25}
298    an increasing number of functions of fewer
299    variables is introduced which sooner or later produces equations with some
300    independent variables occuring only explicitly and not as
301    variables in functions. Such equations are splitted by the
302    separation module \link{{\em 2}}{m_2}. Another possibility are
303    equations in which each independent variable occurs in at least
304    one function in the equation but no function depends on all variables.
305    In this case so-called indirect separations are appropriate:
306    for linear problems \link{{\em 10}}{m_10} \link{{\em 26}}{m_26} and for
307    non-linear problems \link{{\em 48}}{m_48}.
308
309\subsection{Substitutions}
310    Substitutions can have a dramatic effect on the size and
311    complexity of systems. Therefore it is possible to have them not
312    only done automatically but also controlled tightly,
313    either by specifying exactly what equation should be used to substitute
314    which unknown and where, or by picking a substitution out of a list
315    of substitutions offered by the program {\em \{cs\} }. Substitutions to be
316    performed automatically can be controlled with a number of filters,
317    for example, by
318    \begin{itemize}
319    \item limiting the size of the equation to be used for
320    substitution, {\em \{length\_limit\} }
321    \item limiting the size of equations in which the
322    substitution is to be done, {\em \{target\_limit\_\} }
323    \item allowing only linear equations to
324    be used for substitutions, {\em \{lin\_subst\} }
325    \item allowing equations to increase in size only up
326    to some factor in order for a substitution to be performed
327    in that equation, {\em \{cost\_limit\} }
328    \item allowing a substitution for a function through an expression
329    only if that expression involves exclusively functions of fewer
330    variables, {\em \{less\_vars\} }
331    \item allowing substitutions only that do not lead to a case distinction
332    coefficient = 0 or not,
333    \item specifying whether extra effort should be spent to identify the
334    substitution with the lowest bound on growth of the full system.
335    {\em \{min\_growth\} }
336    % parameter in make\_subst,=t for example in subst\_level\_45
337    \end{itemize}
338    Substitution types are represented by different numbers
339    \link{(3-6,15-21)}{m_3} depending on the subset of the above
340    filters to be used.  If a substitution type is to be done
341    automatically then from all possible substitutions passing all
342    filters of this type that substitution is selected that leads to
343    no sub-cases (if available) and that uses the shortest equation.
344
345\subsection{Factorization}
346    It is very common that big algebraic systems contain equations that
347    can be factorized. Factorizing an equation and setting the factors
348    individually to zero simplifies the whole task because factors are
349    simpler expressions than the whole equation and setting them to zero
350    they may lead to substitutions and thereby further simplifications. The
351    downside is that if problems with, say 100 unknowns, would need 40
352    case-distinctions in order to be able to solve automatically for the
353    remaining 60 unknowns then this would require $2^{40}$ cases to be
354    investigated which is impractical. The problem is to find the right
355    balance, between delaying case-distinctions in order not to generate
356    too many cases and on the other hand introducing case distinctions
357    as early as necessary in order to simplify the system. This
358    simplification may be necessary to solve the system but in any
359    case it will speed up its solution (although at the price of having
360    to solve a simplified system at least twice, depending on the number
361    of factors).
362
363    For large systems with many factorizable equations the careful
364    selection of the next equation to be factorized is important to
365    gain the most from each factorization and to succeed with as few
366    as possible factorizations.  Criteria which give factors and
367    therefore equations a higher priority are
368    \begin{itemize}
369    \item the number of equations in which this factor occurs,
370    \item if the factor is a single unknown function or constant,
371      then the number of times this
372      unknown turns up in the whole system,
373    \item the total degree of the factor,
374    \item the number of factors of an equation,
375    \item and others.
376    \end{itemize}
377    It also matters in which order the factors are set to zero. For
378    example, the equation  $0=ab$ can be used to split into the 2
379    cases: $1.\ a=0, \ 2.\ a\neq 0, b=0$ or to split into the 2 cases
380    $1.\ b=0, \ 2.\ b\neq 0, a=0$. If one of the 2 factors, say $b$, involves
381    functions which occur only linearly then this property is to be
382    preserved and these functions should be substituted as such
383    substitutions preserve their linearity. But to have many such
384    substitutions available, it is useful to know of many non-linearly
385    occuring functions to be non-zero as they occur as coefficients of
386    the linearly occuring functions. In the above situation it is
387    therefore better to do the first splitting $1.\ a=0, \ 2.\ a\neq 0, b=0$
388    because $a\neq 0$ will be more useful for substitutions of linear
389    functions than $b\neq 0$ would be.
390
391    An exception of this plausible
392    rule occurs towards the end of all the substitutions of all the
393    linearly occuring $b_i$ when some $b_i$ are an overall factor to
394    many equations. If one would then set, say, $b_{22}=0$ as the second
395    case in a factorization, the first case would generate as subcases
396    factorizations of other equations where $b_{22}=0$ would be the second case
397    again and so on. To avoid this one should investigate $b_{22}=0$ as the
398    first case in the first factorization.
399
400    The only purpose of that little thought experiment was to show
401    that simple questions, like 'Which factored equation should
402    be used first for case-distinctions and in which order to set factors to
403    zero?' can already be difficult to answer in general.
404
405    {\sc Crack} currently offers two factorization steps:
406    \link{(8)}{m_8} and \link{(47)}{m_47}.
407
408\subsection{Elimination (Gr\"{o}bner Basis) Steps}
409    To increase safety and avoid excessive expression swell
410    one can apart from the normal call \link{(30)}{m_30}
411    request to do Gr\"{o}bner basis computation
412    steps only if they are simplification steps replacing an equation by
413    a shorter equation. \link{(27)}{m_27}
414
415    In a different version only steps are performed in which equations
416    are included which do not contain more than 3 unknowns. This helps
417    to focus on steps which are more likely to solve small sub-systems
418    with readily available simple results. \link{(57)}{m_57}
419
420    Often the computationally cheapest way to obtain a consistent
421    (involutive) system of equations implies to change the ordering
422    during the computation. This is the case when substitutions
423    of functions are performed which are not ranked highest in
424    a lexicographical ordering of functions. But {\sc Crack} also
425    offers an interactive way to
426    \begin{itemize}
427    \item change the lexicographical ordering of variables, {\em \{ov\} }
428    \item change the lexicographical ordering of functions, {\em \{of\} }
429    \item give the differential order of derivatives a higher or lower
430      priority in the total ordering than the lexicographical ordering
431      of functions, {\em \{og\} }
432    \item give either the total differential order of a partial derivative
433      a higher priority than the lexicographical ordering of
434      the derivative of that function or to take the lexicographical
435      ordering of derivatives as the only criterium. {\em \{of\} }
436    \end{itemize}
437
438\subsection{Solution of an under-determined differential equation}
439    When solving an over-determined system of linear differential
440    equations where the general solution involves free functions, then
441    in the last computational step often a single equation for more
442    than one function remains to be solved. Examples are the computation
443    of symmetries and conservation laws of non-linear differential
444    equations which are linearizable. In {\sc Crack} two procedures are
445    available, one for under-determined linear ODEs \link{(22)}{m_22}
446    and one for linear PDEs, \link{(23)}{m_23}
447    both with non-constant coefficients.
448
449\subsection{Indirect Separation}
450    Integrations introduce new functions of fewer variables.
451    As equations are used to substitute functions of all variables
452    it is only a question of time that equations are generated
453    in which no function depends on all variables. If at least one variable
454    occurs only explicitly then the equation can be splitted which we call
455    direct separation. But sometimes all variables appear as
456    variables to unknown functions, e.g.\ $0=f(x)+g(y)$ although
457    usually much more complicated with 10 or 20 independent variables
458    and many functions that are depending on different combinations of these
459    variables. Because no variable occurs only explicitly, direct
460    separations mentioned above are not possible.
461    Two different algorithms, one for linear indirectly separable
462    equations \link{(10)}{m_10}, \link{(26)}{m_26}
463    and one for non-linear directly separable equations \link{(48)}{m_48}
464    provide systematic ways of dealing with such equations.
465
466    Indirectly separable equations always result when an equation is
467    integrated with respect to different variables, like $0=f_{xy}$ to
468    $f=g(x)+h(y)$ and a function, here $f(x,y)$, is substituted.
469
470\subsection{Function and variable transformations}
471    In the interactive mode one can specify a transformation of the whole
472    problem with {\em pt} in which old functions and variables are expressed in a mix
473    of new functions and variables.
474
475\subsection{Solution of first order linear PDE}
476    If a system contains a single linear first order PDE for just one
477    function then in an automatic step characteristic ODE-systems are
478    generated, integrated if possible, a variable transformation
479    for the whole system of equations is performed to have in the
480    first order PDE only one single derivative and to make this PDE
481    integrable for the integration modules. \link{(39)}{m_39}
482
483\subsection{Length Reduction of Equations}
484    An algorithm designed originally to length-reduce differential
485    equations proved to be essential in length reducing systems of
486    bi-linear algebraic equations or homogeneous equations which resulted
487    from bi-linear equations during the solution process.
488
489    The aim of the method \link{(11)}{m_11}
490    is to find out whether one equation $0=E_1$ can
491    length reduce another one $0=E_2$ by replacing $E_2$ through an
492    appropriate linear combination $\alpha E_1 - \beta E_2,\ \ \beta \neq
493    0$. To find $\alpha, \beta$ one can divide each term of $E_2$ through
494    each term of $E_1$ and count how often each quotient occurs.  If a
495    quotient $\alpha/\beta$ occurs $m$ times then $\alpha E_1 - \beta E_2$
496    will have $\leq n_1+n_2-2m$ terms because $2m$ terms will cancel each
497    other. A length reduction is found if
498    $n_1+n_2-2m\leq \ \mbox{max}(n_1,n_2)$.
499    The method becomes efficient after a few algorithmic refinements discussed
500    in \cite{Wol99b}. Length reduced equations
501    \begin{itemize}
502    \item are more likely to length reduce other equations,
503    \item are much more likely to be factorizable,
504    \item are more suited for substitutions as the substitution
505      induces less growth of the whole systems and introduces fewer new
506      occurences of functions in equations,
507    \item are more likely to be integrable by being exact or being an ODE
508      if the system consists of differential equations,
509    \item involve on average fewer unknowns and make the whole system more
510      sparse. This sparseness can be used to plan better a sequence of
511      eliminations.
512    \end{itemize}
513
514  This concludes the listing of modules. Other aspects of {\sc Crack} follow.
515
516\section{Features}
517
518\subsection{Flexible Process Control}
519  Different types of over-determined systems are more or less suited
520  for an automatic solution. With the currrent version (2002)
521  it is relatively save to try solving large bi-linear algebraic problems
522  automatically. Another well suited area concerns over-determined systems
523  of linear PDEs. In contrast, non-linear systems of PDEs most likely
524  require a more tight interactive control. Different modes of
525  operation are possible. One can
526  \begin{itemize}
527  \item perform one {\em\{a\}} or more computational steps {\em\{g\}}
528    automatically, where each step is trying modules in the order defined by the
529    current priority list {\em \{p1\} } until one module succeeds in
530    its purpose,
531  \item
532    perform one module a specific number of times or as long as it is
533    successful, {\em \{l\} }
534  \item
535    set a time limit until which the program should run automatically,
536    {\em \{time\_limit, limit\_time\} }
537  \item
538    interrupt an on-going automatic computation and continue the
539    computation interactively by copying the file
540    {\tt \_stop\_crack} into the directory where the ongoing
541    computation was started and re-naming it {\tt \_stop\_}
542    (and by deleting {\tt \_stop\_} to resume automatic computation),
543  \item
544    arrange the priority list of modules changes
545    at a certain point in the computation when the system of equations
546    has changed its character,
547  \item
548    induce a case distinction whether a user-given expression
549    is zero or not. {\em \{44\} }
550  \item
551    have a module that changes the priority list {\em proc\_list\_}
552    dynamically, depending essentially on the size and difficulty
553    of the system but also on the success rate of previous steps.
554    {\em \{61, 62, 63\} }
555  \end{itemize}
556  Apart from flexible control over what kind of steps to be done, the
557  steps themselves can be controlled more or less too, e.g.\ whether
558  equations are selected by the module or the user.
559
560  Highest priority in the priority list have so-called {\em to-do}
561  steps. The list of to-do steps is usually empty but can be filled by
562  any successful step if it requires another specific step to follow
563  instantly. For example, if a very simple equation $0=f_x$ is
564  integrated then the substitution of $f$ should follow straight away, even
565  if substitutions would have a low priority according to the
566  current priority list.
567
568\subsection{Total Data Control}
569  To make wise decisions of how to continue
570  the computation in an interactive session one needs tools to inspect large systems of
571  equations.
572%Apart from adding, modifying and deleting equations {\em \{r,d\} }
573%or identities {\em \{n \} }
574%there are
575  Helpful commands in {\sc Crack} print
576  \begin{itemize}
577  \item equations, inequalities, functions and variables, {\em \{e, pi, f\} }
578  \item the occurence of all derivatives of selected functions in any
579    equation, {\em \{v\} }
580  \item a statistics summary of the equations of the system, {\em \{s\} }
581  \item a matrix display of occurences of unknowns in all equations, {\em \{pd\} }
582  \item the value of any LISP variable, {\em \{pv\} }
583  \item the value of algebraic expressions that can be specified using
584        equation names \\
585        (e.g.\ {\tt coeffn(e\_5,df(f,x,y),2)}), {\em \{pe\} }
586  \item not under-determined subsystems. {\em \{ss\} }
587  \end{itemize}
588
589  Inspecting a computation which already goes on for hours or a day and
590  that has performed many thousand steps is time consuming. The task is made
591  easier with the possibility to plot graphically as a function of
592  time: the type of steps performed, the number of unknowns,
593  the number of remainig equations, the number of terms in these
594  equations and the memory usage. {\em \{ps\} }
595
596  When non-linear systems are considered and many case distinctions
597  and sub-(sub-...)case distinctions are made in a long computation
598  then one easily loses track. With one command one can
599  list all cases that have been considered so far with their assumption, the number
600  of steps made until they are solved or until the next sub-case distinction
601  was made and the number of solutions contained in each completed
602  case. {\em \{ls\} }
603
604\subsection{Safety}
605  When working on large problems it may come to a stage where computational
606  steps are necessary, like substitution, which are risky in the sense
607  that they may simplify the problem but also complicate it by
608  increasing its size. To avoid this risk a few safety features have
609  been implemented.
610  \begin{itemize}
611  \item At any time during the computation one can save a backup of
612    the complete current situation in a file and also load a backup.
613    The command {\tt sb "file\_name"} saves all global variables and
614    data into an ASCII file and the command {\tt rb "file\_name"} reads
615    these data from a file. The format is independent of the computer
616    used and independent of the underlying {\sc Lisp} version.
617    Apart from reading in a backup file during an interactive
618    computation with {\em rb} one also can start a computation with
619    a backup file. After loading {\sc Crack} one makes in {\sc Reduce}
620    the call \verb+ CRACKSHELL()$ + %$
621    followed by the file name of the backup.
622  \item All key strokes are automatically recorded in a list which is
623    available after each interactive step with {\em ph}, or when the
624    computation has finished through {\tt lisp reverse history\_;}.
625    This list can be fed into {\sc Crack} at the beginning
626    of a new computation so that the same operations are performed
627    automatically that were performed interactively before. The
628    purpose is to be able to do an interactive exploration first and
629    to repeat it afterwards automatically without having to note with
630    pen or pencil all steps that had been done.
631
632    By assigning this list to the {\sc Lisp} variable {\tt old\_history}
633    before calling {\tt Crack} with {\tt off batch\_mode} the same steps
634    as in the previous run are performed
635    first as {\sc Crack} is first reading input from {\tt old\_history}
636    and only if that is {\tt nil} then read from the keyboard.
637  \item During an automatic computation the program might start a
638    computational step which turns out to take far too long. It would
639    be better to stop this computation and try something else instead.
640    But in computer algebra with lots of global variables involved it
641    is not straight forward to stop a computation in the middle of it.
642    If one would use time as a criterion then it could happen that
643    time is up during a garbage collection which to stop would
644    be deadly for the session. {\sc Crack} allows to
645    set a limit of garbage collections for any one of those
646    computations that have the potential to last forever, like
647    algebraic factorizations of large expressions.
648    With such an arrangement an automatic computation
649    can not get stuck anymore due to lengthy factorizations, searches
650    for length reductions or elimination steps.
651    {\em \{max\_gc\_elimin, max\_gc\_fac, max\_gc\_red\_len,
652    max\_gc\_short, max\_gc\_ss\} }
653  \item Due to a recent (April 2002) initiative of Winfried Neun the
654    parallel version of the computer algebra system REDUCE has been
655    re-activated and is running on the Beowulf cluster at Brock
656    University \cite{MelNeun}. This allows conveniently (with {\em
657    \{pp\} }) to duplicate the current status of a {\sc Crack}
658    computation to another computer, to try out there different
659    operations (e.g.\ risky ones) until a viable way to continue the
660    computation is found without endangering the original session.
661  \end{itemize}
662
663\subsection{Managing Solutions}
664  Non-linear problems can have many solutions. The number of solutions
665  found by {\sc Crack} can even be higher because to make progress
666  {\sc Crack} may have factorized an equation and considered the two
667  cases $a=0$ and $a \neq 0$ whereas solutions in both cases could be
668  merged to only one solution without any restriction for $a$. This merging
669  of solutions can be accomplished with a separate program {\tt
670  merge\_sol()} after the computation.
671
672  Another form of post-processing is the production of
673  a web page for each solution, like
674  \special{html:<a href="http://lie.math.brocku.ca/twolf/bl/v/v1l05o35-s1.html">}
675           http://lie.math.brocku.ca/twolf/bl/v/v1l05o35-s1.html
676  \special{html:</a>}
677%  \verb+http://lie.math.brocku.ca/twolf/bl/v1l05o35-s1.html+ .
678
679  If in the solution of over-determined differential equations the
680  program performs integrations of equations before the differential
681  Gr\"{o}bner basis was computed then in the final solution there may
682  be redundant constants or functions of integration.
683  Redundant constants or functions in a solution are not an
684  error but they make solutions appear unnecessarily complicated.
685  In a postprocessing step these functions and constants can be eliminated.
686  {\em \{adjust\_fnc, drop\_const(), dropredundant()\} }
687
688\subsection{Parallelization}
689  The availability of a parallel version of {\sc Crack} was mentioned
690  above allowing to try out different ways to continue an ongoing
691  computation. A different possibility to make use of a cluster of
692  computers with {\sc Crack} is, to export automatically the
693  investigation of sub-cases and sub-sub-cases to different computers
694  to be solved in parallel.
695
696  It was explained above how factorizations may be necessary to make
697  any progress but also their potential of exploding the time requirements.
698  By running the computation on a cluster and
699  being able to solve many more cases one can give factorizations a
700  higher priority and capitalize on the benefit of factorizations,
701  i.e.\ the simplification of the problem.
702
703\subsection{Relationship to Gr\"{o}bner Basis Algorithms}
704  For systems of equations in which the unknown constants or functions
705  turn up only polynomially a well known method is able to check the
706  consistency of the system. For algebraic systems this is the
707  Gr\"{o}bner Basis Method and for systems of differential equations
708  this is the differential Gr\"{o}bner Basis method. To guarantee the
709  method to terminate a total ordering of unknowns and their
710  derivatives has to be introduced. This ordering determines which
711  highest powers of unknowns are to be eliminated next or which
712  highest order derivatives have to be eliminated next using integrability
713  conditions. Often such eliminations lead to exponential growth of
714  the generated equations. In the package {\sc Crack} such
715  computations are executed with only a low priority. Operations have
716  a higher priority which reduce the length of equations,
717  irrespective of any orderings. Violating any ordering a finite
718  number of times still guarantees a finite algorithm. The potential
719  gain is large as described next.
720
721% \item[Comparison with other Packages]
722% Wide field, each package has strengths, strength of {\sc Crack}
723% lies  in its integration module including its recent extension to use
724% conservation laws of syzygies for integration \cite{},
725\subsection{Exploiting Bi-linearity}
726  In bi-linear algebraic problems we have 2 sets of variables
727  $a_1,..,a_m$ and $b_1,..,b_n$ such that all equations have
728  the form $0=\sum_{k=1}^l \gamma_k a_{i_k}b_{j_k}, \ \gamma_k \in G$.
729  Although the
730  problem is linear in the $a_i$ and linear in the $b_j$ it still is a
731  non-linear problem. A guideline which helps keeping the structure of
732  the system during computation relatively simple is to preserve the
733  linearity of either the $a_i$ or the $b_j$ as long as possible. In
734  classification problems of integrable systems
735  the ansatz for the symmetry/first integral
736  usually involves more terms and therefore more constants (called
737  $b_j$ in applications of {\sc Crack}) than the ansatz for the
738  integrable system (with constants $a_i$).  A good strategy therefore
739  is to keep the system linear in the $b_j$ during the computation,
740  i.e.\ to
741  \begin{itemize}
742  \item substitute only a $b_j$ in terms of $a_i, b_k$, or an $a_i$
743    in terms of an $a_k$ but not an $a_i$ in terms of any $b_k$,
744  \item do elimination steps for any $b_j$ or for an
745    $a_i$ if the involved equations do not contain any $b_k$,
746  \end{itemize}
747  The proposed measures are effective not only for algebraic problems
748  but for ODEs/PDEs too (i.e.\ to preserve linearity of a sub-set of
749  functions as long as possible).
750  {\em \{flin\_\} }
751
752\subsection{Occurrence of sin, cos or other special functions}
753
754  If the equations to be solved involve special functions, like $\sin$
755  and $\cos$ then one is inclined to add {\tt let}-rules for simplifying
756  expressions. Before doing this the simplification rules at the end of
757  the file {\tt crinit.red} should be inspected such that new rules do
758  not lead to cycles with existing rules. One possibility is to replace
759  existing rules, for example to substitute the existing rule \\
760  \verb+  trig1\_:={sin(~x)**2 => 1-cos(x)**2}$ + by the new rule \\
761  \verb+  trig1\_:={cos(~x)**2 => 1-sin(x)**2}$ +.
762  These rules are switched off when integrations are performed in order
763  not to interfere with the {\sc Reduce} Integrator.
764
765  Apart from an initial customization of let-rules to be used during the
766  whole run one can also specify and clear let-rules during a
767  computation using the interactive commands {\tt lr,cr}.
768
769\subsection{Exchanging time for memory}
770  The optimal order of applying different methods to the equations of a system
771  is not fixed. It does depend, for example, on the distributions of
772  unknown functions in the
773  equations and on what the individual method would produce in the next
774  step. For example, it is possible that the
775  decoupling module which applies integrability conditions through cross
776  differentiations of equations is going well up to a stage when it
777  suddenly produces huge equations. They not only occupy much memory,
778  they also are slow to handle.
779  Right {\em before} this explosion started other methods should
780  have been tried (shortening of equations, any integrations, solution of
781  underdetermined ODEs if there are any,...). These alternative methods are normally
782  comparatively slow or unfavourable as they introduce new functions but
783  under the current circumstances they may be perfect to avoid any growth
784  and to complete the calculation. How could one have known beforehand that some
785  method will lead to an explosion? One does not know. But one can
786  regularly make a backup with the interactive {\tt sb} command and
787  restart at this situation if necessary.
788
789\subsection{Customization}
790  The addition of new modules to perform new specialized computations
791  is easy.  Only the input and output of any new module are fixed.
792  The input consists of the system of equations, the list of
793  inequalities and the list of unknowns to be computed. The output
794  includes the new system of equations and new intermediate
795  results. The module name has to be added to a list of all modules
796  and a one line description has to be added to a list of
797  descriptions.  This makes it easy for users to add special
798  techniques for the solution of systems with extra structure. A dummy
799  template module {\em \{58\} } is already added and has only to be
800  filled with content.
801
802\subsection{Debugging}
803  A feature, useful mainly for debugging is that in the middle of an
804  ongoing interactive computation the program can be changed by
805  loading a different version of {\sc Crack} procedures. Thus one
806  could advance quickly close to the point in the execution where an
807  error occurs, load a version of the faulty procedure that gives
808  extensive output and watch how the fault happens before fixing it.
809
810  The possibility to interrupt REDUCE itself temporarily and to
811  inspect the underlying LISP environment {\em \{br\} }
812  or to execute LISP commands and to continue with the {\sc Crack}
813  session afterwards {\em \{pc\} }
814  led to a few improvements and fixes in REDUCE itself.
815
816\section{Technical issues}
817\subsection{System requirements}
818The required system is {\sc Reduce}, version
8193.6. or 3.7. (either the PSL version of {\sc Reduce} as distributed by
820the Konrad Zuse Institut / Berlin or the CSL version of {\sc Reduce}
821 as distributed by CODEMIST Ltd). The PSL version is faster whereas
822the CSL version seems to be more stable under WINDOWS. Also it
823provides a portable compiled code.
824
825Memory requirements depend crucially on the
826application. The {\tt crack.rlg} file is produced from running
827{\tt crack.tst} in a 4MB session running {\sc Reduce}, version 3.7 under
828{\sc Linux}. On the other hand it is not difficult to formulate problems that
829consume any amount of memory.
830
831\subsection{Installation}
832In a running {\sc Reduce} session either do \\
833\verb+    in "crack.red"$ + \\
834or, in order to speed up computation, either compile it with
835\verb+    on comp$ + \\
836before the above command, or, generate a fast-loading compiled
837file once with \\
838\verb+    faslout "crack"$ + \\
839\verb+    in "crack.red"$ + \\
840\verb+    faslend$ + \\
841and load that file to run {\sc Crack} with \\
842\verb+    load crack$ +
843
844\subsection{Availability}
845%%{\sc Crack} can be run from a web demo
846%A web demo under the address
847%\verb+http://cathode.maths.qmw.ac.uk/demo.html+
848%that was created by Francis Wright and Arrigo Triulzi
849%allows to run problems of restricted size.
850The package {\sc Crack} together with {\sc LiePDE, ConLaw} and {\sc ApplySym}
851including manual can be downloaded for free from \newline
852\verb+http://lie.math.brocku.ca/twolf/crack/+.
853
854Publications related to {\sc Crack} itself and to applications based
855on it can be found under  \\
856\verb+http://lie.math.brocku.ca/twolf/home/publications.html#1+.
857
858\subsection{The files}
859The following files are provided with {\sc Crack}
860\begin{tabbing}
861{\sc ApplySym} \= blah blah blah \kill \\
862{\tt crack.red} \> contains read-in statements of a number
863                      of files {\tt cr*.red} \\
864{\tt crack.tst} \> contains test-examples \\
865{\tt crack.rlg} \>contains the output of {\tt crack.tst} \\
866{\tt crack.tex} \> this manual.
867\end{tabbing}
868
869\section{Reference}
870%\dest{lb1}
871\subsection{Elements of proc\_list\_}
872The interactive command {\em p1} shows {\em proc\_list\_}. This list
873defines the order in which procedures are tried if a
874step is to be performed automatically. {\em p2} shows the complete
875list as it is shown below. To select any one procedure of the complete
876list interactively, one simply inputs the number shown in ().
877The numbering of procedures grew historically.
878Each number has only little or no connection with the priority of the
879procedure it is labeling.
880
881\begin{description}
882\dest{m_1}
883\item[{\tt to\_do (1):}] hot list of steps to be taken next, should
884always come first,
885\dest{m_3}
886\item[{\tt subst\_level\_? (3-6,15-21):}] substitutions of functions by
887expressions, substitutions differ by their maximal allowed size and other
888properties, to find out which function has which properties one
889currently has to inspect the procedure definitions of {\tt subst\_level\_?}
890in the file {\tt crmain.red}.
891\dest{m_2}
892\item[{\tt separation (2):}] what is described as direct separation in the
893next section,
894\dest{m_26}
895\item[{\tt gen\_separation (26):}] what is described as indirect separation in the
896next section, only to be used for linear problems,
897\dest{m_10}
898\item[{\tt quick\_gen\_separation (10):}] generalized separation of
899equations with an upper size limit,
900\dest{m_7}
901\item[{\tt quick\_integration (7):}] integration of very specific short equations,
902\dest{m_24}
903\item[{\tt full\_integration (24):}] integration of equations which lead
904to a substitution,
905\dest{m_25}
906\item[{\tt integration (25):}] any integration,
907\dest{m_8}
908\item[{\tt factorize\_to\_substitute (8):}] splitting the computation
909  into the investigation of different subcases resulting from the
910  algebraic factorization of an equation, only useful for non-linear
911  problems, and applied only if each one of the factors, when individually
912  set to zero, would enable the substitution of a function.
913\dest{m_47}
914\item[{\tt factorize\_any (47):}] splitting into sub-cases based on a
915  factorization even if not all factors set to zero lead to
916  substitutions.
917\dest{m_37}
918\item[{\tt change\_proc\_list (37):}] reserved name of a procedure to be
919written by the user that does nothing else but changing {\tt proc\_list\_} in
920a fixed manner. This is to be used if the computation splits naturally
921into different parts and if it is clear from the beginning what the
922computational methods ({\tt proc\_list\_}) have to be.
923\dest{m_38}
924\item[{\tt stop\_batch (38):}] If the first steps to simplify or partially
925solve a system of equations are known and should be done automatically
926and afterwards {\sc Crack} should switch into interactive mode
927then {\tt stop\_batch} is added to {\tt proc\_list} with a priority
928just below the steps to be done automatically.
929\dest{m_12}
930\item[{\tt drop\_lin\_dep (12):}] module to support
931solving big linear systems (still experimental),
932\dest{m_13}
933\item[{\tt find\_1\_term\_eqn (13):}] module to support
934solving big linear systems (still experimental),
935\dest{m_14}
936\item[{\tt trian\_lin\_alg (14):}] module to support
937solving big linear systems (still experimental),
938\dest{m_22}
939\item[{\tt undetlinode (22):}]  parametric solution of single under determined
940linear ODE (with non-constant coefficients), only applicable for
941linear problems (Too many redundant functions resulting from
942integrations may prevent further integrations. If they are involved in
943single ODEs then the parametric solution of such ODEs treated as
944single underdetermined equations is useful. Danger: new generated
945equations become very big if the minimal order of any function in the ODE is high.),
946\dest{m_23}
947\item[{\tt undetlinpde (23):}]  parametric solution of single under determined
948linear PDE (with non-constant coefficients), only applicable for
949linear problems (still experimental),
950\dest{m_11}
951\item[{\tt alg\_length\_reduction (11):}] length reduction by
952  algebraic combination, only for linear problems, one has to be
953  careful when combining it with decoupling as infinite loops may
954  occur when shortening and lowering order reverse each other,
955\dest{m_27}
956\item[{\tt diff\_length\_reduction (27):}] length reduction by differential
957  reduction,
958\dest{m_30}
959\item[{\tt decoupling (30):}] steps towards the computation of a
960  differential Gr\"{o}bner Basis,
961\dest{m_31}
962\item[{\tt add\_differentiated\_pdes (31):}] only useful for non-linear
963  differential equations with leading derivative occuring non-linearly,
964\dest{m_32}
965\item[{\tt add\_diff\_ise (32):}] for the treatment of non-linear
966  indirectly separable equations,
967\dest{m_33}
968\item[{\tt multintfac (33):}] to find integrating factors for a system
969  of equations, should have very slow priority if used at all,
970\dest{m_34}
971\item[{\tt alg\_solve\_single (34):}] to be used for equations quadratic in
972  the leading derivative,
973\dest{m_35}
974\item[{\tt alg\_solve\_system (35):}] to be used if a (sub-)system of
975  equations shall be solved for a set of functions or their
976  derivatives algebraically,
977\dest{m_9}
978\item[{\tt subst\_derivative (9):}] substitution of a derivative of a
979  function everywhere by a new function if such a derivative exists
980\dest{m_36}
981\item[{\tt undo\_subst\_derivative (36):}] undo the above substitution.
982\dest{m_40}
983\item[{\tt del\_redundant\_fc (40):}] Drop redundant functions and
984  constants. For that an overdetermined PDE - system is formulated and
985  solved to set redundant constants / functions of integration to
986  zero. This may take longer if many functions occur.
987\dest{m_39}
988\item[{\tt find\_trafo (39):}] finding a first order linear PDE, by
989  solving it the program finds a variable transformation that
990  transforms the PDE to a single derivative and makes the PDE
991  integrable for the integration modules. Because a variable
992  transformation was performed the solution contains only new
993  functions of integration which depend on single (new) variables and
994  not on expressions of them, like sums of them. Therefore the result
995  of the integration can be used for substitutions in other equations.
996  if the transformation would not have been made then the solution
997  of the PDE would involve arbitrary functions of expressions and
998  could not be used for the other equations using the current modules
999  of {\sc Crack}. A general transformation can be done interactively
1000  with the command {\em cp}.
1001\dest{m_41}
1002\item[{\tt sub\_problem (41):}] Solve a subset of equations first (still
1003  experimental),
1004\dest{m_28}
1005\item[{\tt del\_redundant\_de (28):}] Delete redundant equations,
1006\dest{m_29}
1007\item[{\tt idty\_integration (29):}] Integrate an identity
1008\dest{m_48}
1009\item[{\tt gen\_separation2 (48):}] Indirect separation of a pde, this
1010  is a 2nd version for non-linear PDEs
1011\dest{m_49}
1012\item[{\tt find\_and\_use\_sub\_systems12 (49):}] Find sub-systems of
1013  equations with at least as many equations as functions, in this case
1014  find systems with at most 2 functions, none of them a function of
1015  the set {\tt flin\_} (these are functions which occur initially only
1016  linearly in a non-linear problem, {\tt flin\_} is assigned initially
1017  by the user).
1018\dest{m_50}
1019\item[{\tt find\_and\_use\_sub\_systems13 (50):}]
1020  like above only with at most 3 functions, none from {\tt flin\_}
1021\dest{m_51}
1022\item[{\tt find\_and\_use\_sub\_systems14 (51):}]
1023  like above only with at most 4 functions, none from {\tt flin\_}
1024\dest{m_52}
1025\item[{\tt find\_and\_use\_sub\_systems15 (52):}]
1026  like above only with at most 5 functions, none from {\tt flin\_}
1027\dest{m_53}
1028\item[{\tt find\_and\_use\_sub\_systems22 (53):}]
1029  like above only with at most 2 functions, only {\tt flin\_} are
1030  considered, all others ignored
1031\dest{m_54}
1032\item[{\tt find\_and\_use\_sub\_systems23 (54):}]
1033  like above only with at most 3 functions, only {\tt flin\_} are
1034  considered, all others ignored
1035\dest{m_55}
1036\item[{\tt find\_and\_use\_sub\_systems24 (55):}]
1037  like above only with at most 4 functions, only {\tt flin\_} are
1038  considered, all others ignored
1039\dest{m_56}
1040\item[{\tt find\_and\_use\_sub\_systems25 (56):}]
1041  like above only with at most 5 functions, only {\tt flin\_} are
1042  considered, all others ignored
1043\dest{m_57}
1044\item[{\tt high\_prio\_decoupling (57):}] do a decoupling step
1045  with two equations that in total involve at most 3 different
1046  functions of all independent variables in these equations
1047\dest{m_58}
1048\item[{\tt user\_defined (58):}] This is an empty procedure which can
1049  be filled by the user with a very specific computational step that
1050  is needed in a special user application. Template: \begin{verbatim}
1051symbolic procedure user_defined(arglist)$
1052begin % arglist is a lisp list {pdes,forg,vl_} where
1053      % pdes is the list of names of all equations
1054      % forg is the list of original functions + their values
1055      %      as far as known
1056      % vl_ the list of independent variables
1057 ...
1058 return if successful then list(pdes,forg)
1059                           % new pdes + functions and their value
1060                      else nil
1061end$\end{verbatim}
1062\dest{m_59}
1063\item[{\tt alg\_groebner (59):}] call of the Reduce procedure
1064  {\tt groebnerf} trying to solve the whole system under the
1065  assumption that it is a completely algebraic polynomial system.
1066  All resulting solutions are considered individually further.
1067\dest{m_60}
1068\item[{\tt solution\_check (60):}] This procedure tests whether a
1069  solution that is defined in an external procedure sol\_define() is
1070  still contained in the general solution of the system currently under
1071  investigation. This procedure is useful to find the place in a long
1072  computation where a special solution is either lost or added to the
1073  general solution of the system to be solved. Template:\begin{verbatim}
1074algebraic procedure sol_define$
1075<< % This procedure contains the statements that specify a solution
1076  %Example: Test whether s=h_-y**2/t**2,  u=y/t is a solution
1077  %         where h_=h_(t)
1078  depend h_,t$
1079  % returned is a list of expressions that vanish for the solution
1080  % to be tested, in this example:
1081  {s-(h_-y**2/t**2),u-y/t}
1082>>$ \end{verbatim} %$
1083\end{description}
1084
1085\subsection{Online help}
1086The following commands and their one line descriptions appear in
1087the same order as in the online help.
1088
1089\subsubsection{Help to help}
1090\begin{tabbing}
1091  {\bf hd} \ \= Help to inspect data \\
1092  {\bf hp}   \> Help to proceed \\
1093  {\bf hf}   \> Help to change flags \& parameters \\
1094  {\bf hc}   \> Help to change data of equations \\
1095  {\bf hi}   \> Help to work with identities \\
1096  {\bf hb}   \> Help to trace and debug
1097\end{tabbing}
1098
1099\subsubsection{Help to inspect data}
1100\begin{tabbing}
1101  {\bf e}\ \ \ \ \= Print equations          \\
1102  {\bf eo}   \> Print overview of functions in equations  \\
1103  {\bf pi}   \> Print inequalities  \\
1104  {\bf f}    \> Print functions and variables        \\
1105  {\bf v}    \> Print all derivatives of all functions  \\
1106  {\bf s}    \> Print statistics                  \\
1107  {\bf fc}   \> Print no of free cells  \\
1108  {\bf pe}   \> Print an algebraic expression \\
1109  {\bf ph}   \> Print history of interactive input \\
1110  {\bf pv}   \> Print value of any lisp variable \\
1111  {\bf pf}   \> Print no of occurences of each function \\
1112  {\bf pr}   \> Print active substitution rules \\
1113  {\bf pd}   \> Plot the occurence of functions in equations \\
1114  {\bf ps}   \> Plot a statistical history \\
1115  {\bf lc}   \> List all case distinctions \\
1116  {\bf ws}   \> Write statistical history in file \\
1117  {\bf sn}   \> Show name of session \\
1118  {\bf ss}   \> Find and print sub-systems \\
1119  {\bf w}    \> Write equations into a file
1120\end{tabbing}
1121
1122\subsubsection{Help to proceed}
1123\begin{tabbing}
1124  {\bf a}\ \ \ \ \= Do one step automatically      \\
1125  {\bf g}    \> Go on for a number of steps automatically    \\
1126  {\bf t}    \> Toggle between automatic and user selection of
1127                equations ({\tt expert\_mode=nil/t}).  \\
1128  {\bf p1}   \> Print a list of all modules in batch mode \\
1129  {\bf p2}   \> Print a complete list of all modules \\
1130  {\bf \#}   \> Execute the module with the number `\#' once  \\
1131  {\bf l}    \> Execute a specific module repeatedly         \\
1132  {\bf sb}   \> Save complete backup to file \\
1133  {\bf rb}   \> Read backup from file \\
1134  {\bf ep}   \> Enable parallelism \\
1135  {\bf dp}   \> Disable parallelism \\
1136  {\bf pp}   \> Start an identical parallel process \\
1137  {\bf kp}   \> Kill a parallel process \\
1138  {\bf x}    \> Exit interactive mode for good            \\
1139  {\bf q}    \> Quit current level or crack if in level 0
1140\end{tabbing}
1141
1142\subsubsection{Help to change flags \& parameters}
1143\begin{tabbing}
1144  {\bf pl} \ \ \ \= Maximal length of an expression to be printed  \\
1145  {\bf pm}   \> Toggle to print more or less information about
1146                        pdes ({\tt print\_more})    \\
1147  {\bf pa}   \> Toggle to print all or not all information
1148                        about the pdes ({\tt print\_all}) \\
1149  {\bf cp}   \> Change the priorities of procedures   \\
1150  {\bf og}   \> Toggle ordering between `lexicographical
1151                ordering of functions having\\
1152             \> a higher priority than any ordering of
1153                derivatives' and the opposite \\
1154             \> ({\tt lex\_fc=t}) resp.\ ({\tt lex\_fc=nil}) \\
1155  {\bf od}   \> Toggle ordering between `the total order
1156                of derivatives having a higher\\
1157             \> priority than lexicographical ordering'
1158                ({\tt lex\_df=nil}) or not ({\tt lex\_df=t}) \\
1159  {\bf oi}   \> Interactive change of ordering on variables \\
1160  {\bf or}   \> Reverse ordering on variables \\
1161  {\bf om}   \> Mix randomly ordering on variables \\
1162  {\bf of}   \> Interactive change of ordering on functions     \\
1163  {\bf op}   \> Print current ordering  \\
1164  {\bf ne}   \> Root of the name of new generated equations
1165                        (default: e\_) \\
1166  {\bf nf}   \> Root of the name of new functions and constants
1167                        (default: c\_) \\
1168  {\bf ni}   \> Root of the name of new identities
1169                        (default: id\_) \\
1170  {\bf na}   \> Toggle for the NAT output switch ({\tt !*nat}) \\
1171  {\bf as}   \> Input of an assignment          \\
1172  {\bf kp}   \> Toggle for keeping a partitioned copy of each
1173                        equation ({\tt keep\_parti}) \\
1174  {\bf fi}   \> Toggle for allowing or not allowing
1175                        integrations of equations which \\
1176             \> involve unresolved integrals ({\tt freeint\_})  \\
1177  {\bf fa}   \> Toggle for allowing or not allowing solutions of ODEs
1178                        involving the \\
1179             \> {\tt abs} function ({\tt freeabs\_})  \\
1180  {\bf cs}   \> Switch on/off the confirmation of intended substitutions
1181                and of the \\
1182             \> order of the investigation of subcases
1183                resulting in a factorization \\
1184  {\bf fs}   \> Enforce direct separation \\
1185  {\bf ll}   \> change of the line length \\
1186  {\bf re}   \> Toggle for allowing to re-cycle equation names
1187             ({\tt do\_recycle\_eqn})  \\
1188  {\bf rf}   \> Toggle for allowing to re-cycle function names
1189             ({\tt do\_recycle\_fnc}) \\
1190  {\bf st}   \> Setting a CPU time limit for un-interrupted run \\
1191  {\bf cm}   \> Adding a comment to the history\_ list \\
1192  {\bf lr}   \> Adding a LET-rule \\
1193  {\bf cr}   \> Clearing a LET-rule
1194\end{tabbing}
1195
1196\subsubsection{Help to change data of equations}
1197\begin{tabbing}
1198  {\bf r}\ \ \ \ \ \= Replace or add one equation \\
1199  {\bf rd}   \> Reduce an equation modulo LET rules \\
1200  {\bf n}    \> Replace one inequality      \\
1201  {\bf de}   \> Delete one equation         \\
1202  {\bf di}   \> Delete one inequality       \\
1203  {\bf c}    \> Change a flag or property of one pde  \\
1204  {\bf pt}   \> Perform a transformation of functions and variables
1205\end{tabbing}
1206
1207\subsubsection{Help to work with identities}
1208\begin{tabbing}
1209  {\bf i}\ \ \ \ \ \= Print identities between equations \\
1210  {\bf id}   \> Delete redundand equations \\
1211  {\bf iw}   \> Write identities to a file \\
1212  {\bf ir}   \> Remove list of identities \\
1213  {\bf ia}   \> Add or replace an identity \\
1214  {\bf ih}   \> Start recording histories and identities \\
1215  {\bf ip}   \> Stop recording histories and identities \\
1216  {\bf ii}   \> Integrate an identity \\
1217  {\bf ic}   \> Check the consistency of identity data \\
1218  {\bf iy}   \> Print the history of equations
1219\end{tabbing}
1220
1221\subsubsection{Help to trace and debug}
1222\begin{tabbing}
1223  {\bf tm}  \ \= Toggle for tracing the main procedure ({\tt tr\_main}) \\
1224  {\bf tg}    \> Toggle for tracing the generalized separation
1225                        ({\tt tr\_gensep}) \\
1226  {\bf ti}    \> Toggle for tracing the generalized integration
1227                        ({\tt tr\_genint})  \\
1228  {\bf td}    \> Toggle for tracing the decoupling process
1229                        ({\tt tr\_decouple}) \\
1230  {\bf tl}    \> Toggle for tracing the decoupling length reduction
1231                        process ({\tt tr\_redlength}) \\
1232  {\bf ts}    \> Toggle for tracing the algebraic length reduction
1233                        process ({\tt tr\_short}) \\
1234  {\bf to}    \> Toggle for tracing the ordering procedures
1235                        process ({\tt tr\_orderings}) \\
1236  {\bf tr}    \> Trace an arbitrary procedure \\
1237  {\bf ut}    \> Untrace a procedure \\
1238  {\bf br}    \> Lisp break          \\
1239  {\bf pc}    \> Do a function call  \\
1240  {\bf in}    \> Reading in a REDUCE file
1241\end{tabbing}
1242
1243\subsection{Global variables}
1244The following is a complete list of identifiers used as global
1245lisp variables (to be precise symbolic fluid variables)
1246within {\sc Crack}. Some are flags and parameters, others are glaboal
1247variables, some of them can be accessed after the {\sc Crack}
1248run. \vspace{6pt} \\
1249\noindent
1250{\tt
1251!*allowdfint\_bak\ \ !*dfprint\_bak\ \ !*exp\_bak\ \ !*ezgcd\_bak\ \ !*fullroots\_bak\ \ \\
1252!*gcd\_bak\ \ !*mcd\_bak\ \ !*nopowers\_bak\ \ !*ratarg\_bak\ \ !*rational\_bak\ \ \\
1253!*batch\_mode\ \ abs\_\ \ adjust\_fnc\ \ allflags\_\ \ batchcount\_\ \ backup\_\ \ collect\_sol\\
1254confirm\_subst\ \ cont\_\ \ contradiction\_\ \ cost\_limit5\ \ current\_dir\ \ \\
1255default\_proc\_list\_\ \ do\_recycle\_eqn\ \ do\_recycle\_fnc\ \ done\_trafo\ \ \\
1256eqname\_\ \ expert\_mode\ \ explog\_\ \ facint\_\ \ flin\_\ \ force\_sep\ \ fname\_\ \ fnew\_\ \ \\
1257freeabs\_\ \ freeint\_\ \ ftem\_\ \ full\_proc\_list\_\ \ gcfree!*\ \ genint\_\ \ glob\_var\ \ \\
1258global\_list\_integer\ \ global\_list\_ninteger\ \ global\_list\_number\ \ high\_gensep\ \ \\
1259homogen\_\ \ history\_\ \ idname\_\ \ idnties\_\ \ independence\_\ \ ineq\_\ \ inter\_divint\ \ \\
1260keep\_parti\ \ last\_steps\ \ length\_inc\ \ level\_\ \ lex\_df\ \ lex\_fc\ \ limit\_time\ \ \\
1261lin\_problem\ \ lin\_test\_const\ \ logoprint\_\ \ low\_gensep\ \ max\_gc\_counter\ \ \\
1262max\_gc\_elimin\ \ max\_gc\_fac\ \ max\_gc\_red\_len\ \ max\_gc\_short\ \ max\_gc\_ss\ \ \\
1263max\_red\_len\ \ maxalgsys\_\ \ mem\_eff\ \ my\_gc\_counter\ \ nequ\_\ \ new\_gensep\ \ nfct\_\ \ \\
1264nid\_\ \ odesolve\_\ \ old\_history\ \ orderings\_\ \ target\_limit\_0\ \ target\_limit\_1\ \ \\
1265target\_limit\_2\ \ target\_limit\_3\ \ target\_limit\_4\ \ poly\_only\ \ potint\_\ \ print\_\ \ \\
1266print\_all\ \ print\_more\ \ proc\_list\_\ \ prop\_list\ \ pvm\_able\ \ quick\_decoup\ \ \\
1267record\_hist\ \ recycle\_eqns\ \ recycle\_fcts\ \ recycle\_ids\ \ reducefunctions\_\ \ \\
1268repeat\_mode\ \ safeint\_\ \ session\_\ \ simple\_orderings\ \ size\_hist\ \ size\_watch\ \ \\
1269sol\_list\ \ solvealg\_\ \ stepcounter\_\ \ stop\_\ \ struc\_dim\ \ struc\_eqn\ \ subst\_0\ \ \\
1270subst\_1\ \ subst\_2\ \ subst\_3\ \ subst\_4\ \ time\_\ \ time\_limit\ \ to\_do\_list\ \ tr\_decouple\ \ \\
1271tr\_genint\ \ tr\_gensep\ \ tr\_main\ \ tr\_orderings\ \ tr\_redlength\ \ tr\_short\ \ trig1\_\ \ \\
1272trig2\_\ \ trig3\_\ \ trig4\_\ \ trig5\_\ \ trig6\_\ \ trig7\_\ \ trig8\_\ \ userrules\_\ \ vl\_}
1273
1274\subsection{Global flags and parameters}
1275The list below gives a selection of
1276flags and global parameters that are available, for example,
1277to fine tune the performance according to specific needs of the system
1278of equations that is studied. Usually they are not needed and very few
1279are used regularly by the author. The interactive command that changes the
1280flag/parameter is given in [ ], default values of the flags/parameters
1281are given in (). All values can be changed interactively with the {\em as} command.
1282The values of the flags and parameters can either be
1283set after loading {\sc Crack} and before starting {\sc Crack} with a
1284lisp assignment, for example,\\
1285\verb+lisp(print_:=8)$+ \\ %$
1286or after starting {\sc Crack} in interactive mode with specific commands,
1287like {\tt pl} to change specifically the print length determining parameter
1288{\tt print\_}, or the command {\tt as} to do an assignment.
1289The values of
1290parameters/flags can be inspected interactively using {\tt pv}
1291and changed with {\tt as}.
1292
1293\begin{description}
1294\item[{\tt !*batch\_mode [x] (t) :}] running crack in interactive mode
1295                   ({\tt !*batch\_mode=nil}) or automaticly
1296                   ({\tt !*batch\_mode=t}). It can also be
1297                   set in algebraic mode before starting {\sc Crack}
1298                   by {\tt ON/OFF BATCH\_MODE}. Interactive mode can be left
1299                   and automatic computation be started by the interactive
1300                   commant {\tt x}.
1301\item[{\tt !*iconic (nil) :}] whether new processes in parallelization
1302                   should appear as icons (t) or windows (nil)
1303\item[{\tt adjust\_fnc (nil) :}] if t then free constants/functions
1304                    are scaled and redundant ones are dropped to
1305                    simplify the result after the computation has been
1306                    completed
1307\item[{\tt collect\_sol (t) :}] whether solutions found shall be collected and
1308                    returned together at the end or not (to save
1309                    memory), matters only for non-linear problems with
1310                    very many special solutions. If a computation has
1311                    to be performed with any solution that is found,
1312                    then these commands can be put into an
1313                    {\tt algebraic procedure crack\_out(eqns, assigns, freef, ineq)}
1314                    which is currently empty in file {\tt crmain.red}
1315                    but which is called for each solution.
1316\item[{\tt confirm\_subst [cs] (nil) :}] whether substitutions have to be
1317                   confirmed interactively
1318\item[{\tt cont\_ (nil) :}] interactive user control for integration
1319                   or substitution of large expressions (enabled = t)
1320\item[{\tt cost\_limit5 (100) :}] maximal number of extra terms
1321                    generated by a subst.
1322%\item[{\tt dec\_hist (0) :}] length of pde history list during decoupling
1323\item[{\tt do\_recycle (nil) :}] whether function names shall be recycled
1324                   or not (saves memory but computation is less clear to follow)
1325\item[{\tt done\_trafo (nil) :}] an (algebraic mode) list of backtransformations
1326                   that would invert done transformations, this list
1327                   is useful after {\sc Crack} completed to invert
1328                   transformations if needed
1329\item[{\tt eqname\_ [ne] ('e\_) :}] name of new equations
1330\item[{\tt expert\_mode [t] (nil) :}] For {\tt expert\_mode=t} the
1331                   equations that are involved in the next computational step are
1332                   selected by {\sc Crack}, for {\tt expert\_mode=nil} the user
1333                   is asked to select one or two equations which are to be worked
1334                   with in the next computational step.
1335\item[{\tt facint\_ (1000) :}] if equal nil then no search for
1336                    integrating factors otherwise equal the  max
1337                    product terms*kernels for searching an integrating
1338                    factor
1339\item[{\tt flin\_ (nil) :}] a list of functions occuring only linearly in an
1340                   otherwise non-linear problem. {\tt flin\_} has to be assigned
1341                   before calling {\sc Crack}. During execution it is tried to
1342                   preserve the linearity of these functions as long as possible.
1343\item[{\tt fname\_ [nf] ('c\_) :}] name of new functions and constants
1344                                   (integration)
1345\item[{\tt force\_sep (nil) :}] whether direct separation should be forced even
1346                   if functions occur in the supposed to be linear
1347                   independent explicit expressions (for non-lin. prob.)
1348\item[{\tt freeabs\_ [fi] (t) :}] Do not use solutions of ODEs that
1349                    involve the {\tt abs} function
1350\item[{\tt freeint\_ [fi] (t) :}] Do only integrations if expl.\ part
1351                    is integrable
1352\item[{\tt genint\_ (15) :}]  if =nil then generalized integration disabled
1353                    else equal the maximal number of new functions and extra
1354                    equations due to the generalized integration of
1355                    one equation
1356\item[{\tt high\_gensep (300) :}] min. size of expressions to separate in a
1357                    generalized way by \\ `quick\_gen\_separation'
1358\item[{\tt homogen\_ (nil) :}] Test for homogeneity of each equation
1359                    (for debugging)
1360\item[{\tt idname\_ [ni] ('id\_) :}] name of new equations
1361\item[{\tt idnties\_ (nil) :}] list of identities resulting from reductions and
1362                    integrability conditions
1363\item[{\tt independence\_ (nil) :}] interactive control of linear
1364                                    independence (enabled = t)
1365\item[{\tt inter\_divint (nil) :}] whether the integration of divergence
1366                   identities with more than 2 differentiation variables
1367                   shall be confirmed interactively
1368\item[{\tt keep\_parti [kp] (nil) :}] whether for each equation a copy
1369                    in partitioned form is to be stored to speed up
1370                    several simplifications but which needs more memory
1371\item[{\tt last\_steps (nil) :}] a list of the last steps generated and updated
1372                   automatically in order to avoid cycles
1373\item[{\tt length\_inc (1.0) :}] factor by which the length of an
1374                    expression may grow when performing
1375                    {\tt diff\_length\_reduction}
1376%\item[{\tt level\_ (nil) :}] actual level of crack recursion
1377\item[{\tt lex\_df [od] (nil) :}] if t then use lexicographical
1378                    instead of total degree ordering of derivatives
1379\item[{\tt lex\_fc [og] (t) :}] if t then lexicographical ordering of
1380                    functions has higher priority than any ordering of
1381                    derivatives
1382\item[{\tt limit\_time (nil) :}] = time() + how many more seconds allowed in batch mode
1383\item[{\tt logoprint\_ (t) :}] print logo after crack call
1384\item[{\tt low\_gensep (6) :}] max.\ size of expressions to be separated in a
1385                    generalized way by \\ `quick\_gen\_separation'
1386\item[{\tt max\_gc\_counter (100000000) :}] maximal total number of garbage collections
1387\item[{\tt max\_gc\_elimin (15) :}] maximal number of garbage collections during
1388                    elimination in decoupling
1389\item[{\tt max\_gc\_fac (15) :}] maximal number of garbage collections during factorization
1390\item[{\tt max\_gc\_red\_len (30) :}] maximal number of garbage collections during
1391                    length reduction
1392\item[{\tt max\_gc\_short (40) :}] maximal number of garbage collections during shortening
1393\item[{\tt max\_gc\_ss (10) :}] maximal number of garbage collections during
1394                    search of sub\_systems
1395\item[{\tt max\_red\_len (1000000) :}] maximal product of lengths of two
1396                    equations to be combined with length-reducing decoupling
1397\item[{\tt maxalgsys\_ (20) :}] max. number of equations to be solved
1398                    in specialsol
1399\item[{\tt mem\_eff (t) :}] whether to be memory efficient even if slower
1400\item[{\tt my\_gc\_counter (0) :}] initial value of my\_gc\_counter
1401\item[{\tt nequ\_ (1) :}] index of the next new equation
1402\item[{\tt new\_gensep (nil) :}] whether or not a newer (experimental)
1403                    form of gensep should be used
1404\item[{\tt nfct\_ (1) :}] index of the next new function or constant
1405\item[{\tt nid\_ (1) :}] index of the next new identity
1406\item[{\tt odesolve\_ (100) :}] maximal length of a de (number of terms) to be
1407                    integrated as ode
1408\item[{\tt old\_history (nil) :}]
1409                   old\_history is interactive input to be read from
1410                   this list
1411%\item[{\tt orderings\_ (nil) :}] Stores the orderings list, nil initially
1412\item[{\tt poly\_only (nil) :}] all equations are polynomials only
1413\item[{\tt potint\_ (t) :}] allowing `potential integration'
1414\item[{\tt print\_ [pl] (12) :}] maximal length of an expression to be printed
1415\item[{\tt print\_all [pa] (nil) :}] Print all informations about the pdes
1416\item[{\tt print\_more [pm] (t) :}] Print more informations about the pdes
1417\item[{\tt quick\_decoup (nil) :}] whether decoupling should be done
1418                    faster with less care for saving memory
1419\item[{\tt record\_hist (nil) :}] whether the history of equations is
1420                    to be recorded
1421%\item[{\tt repeat\_mode [] () :}]
1422\item[{\tt safeint\_ (t) :}] uses only solutions of ODEs with
1423                    non-vanishing denominator
1424\item[{\tt session\_ (``bu''+random number+date) :}] when loading {\sc Crack} or executing
1425%\item[{\tt simple\_orderings (t) :}] Turn off orderings support
1426%                   except for trivial case
1427\item[{\tt size\_watch (nil) :}] whether before each computational step
1428                   the size of the system shall be recorded in the
1429                   global variable size\_hist
1430\item[{\tt solvealg\_ (nil) :}] Use SOLVE for algebraic equations
1431\item[{\tt struc\_eqn (nil) :}] whether the equations has the form of
1432                    structural equations (an application are the
1433                    Killing vector and Killing tensor computations)
1434\item[{\tt subst\_* :}] maximal length of an expression to be substituted,
1435                    used with different values for different
1436                    procedures {\tt subst\_level\_*}
1437\item[{\tt target\_limit\_* (nil) :}] maximum of product
1438                    {\em length(pde)*length(substituted expression)} for
1439                    a PDE which is to be used for a substitution,
1440                    If {\tt target\_limit\_* = nil} then no length limit,
1441                    used with different values for different
1442                    procedures {\tt subst\_level\_*}
1443\item[{\tt time\_ (nil) :}] print the time needed for running crack
1444\item[{\tt time\_limit (nil) :}] whether a time limit is active after
1445                    which batch-mode is interrupted to interactive mode
1446\item[{\tt tr\_decouple [td] (nil) :}] Trace decoupling process
1447\item[{\tt tr\_genint [ti] (nil) :}] Trace generalized integration
1448\item[{\tt tr\_gensep [ts] (nil) :}] Trace generalized separation
1449\item[{\tt tr\_main [tm] (nil) :}] Trace main procedure
1450\item[{\tt tr\_orderings [to] (nil) :}] Trace orderings stuff
1451\item[{\tt tr\_redlength [tr] (nil) :}] Trace length reduction
1452\end{description}
1453
1454\section{A more detailed description of some of the modules}
1455The package {\sc Crack} contains a number of modules.
1456The basic ones are for computing a pseudo differential Gr\"{o}bner
1457Basis (using integrability conditions in a systematic way), integrating
1458exact PDEs, separating PDEs, solving DEs containing functions of only
1459a subset of all variables and solving standard ODEs (of Bernoulli or
1460Euler type, linear, homogeneous and separable ODEs). These facilities
1461will be described briefly together with examples. The test file
1462{\tt crack.tst} demonstrates these and others.
1463
1464\subsection{Pseudo Differential Gr\"{o}bner Basis}
1465This module (called `decoupling' in {\tt proc\_list\_})
1466reduces derivatives in equations by using other equations and it applies
1467integrability conditions to formulate additional equations which are
1468subsequently reduced, and so on.
1469
1470A general algorithm to bring a system of PDEs into a standard form
1471where all integrability conditions are satisfied by applying
1472a finite number of additions, multiplications and differentiations
1473is based on the general theory of involutive systems \cite{Riq,Th,Ja}.
1474
1475Essential to this theory is a total ordering of partial derivatives
1476which allows assignment to each PDE of a {\em Leading Derivative}
1477(LD) according to a chosen ordering of functions
1478and derivatives. Examples for possible orderings are
1479\begin{description}
1480\item lex.\ order of functions $>$ lex.\ order of variables,
1481\item lex.\ order of functions $>$ total differential order $>$ lex.\
1482      order of variables,
1483\item total order $>$ lex.\ order of functions $>$ lex.\ order of variables
1484\end{description}
1485or mixtures of them by giving weights to individual functions and variables.
1486Above, the `$>$' indicate ``before'' in priority of criteria. The principle
1487is then to
1488\begin{description}
1489\item[\ \ ] take two equations at a time and differentiate them as often as
1490necessary to get equal LDs,
1491\item[\ \ ]  regard these two equations as algebraic equations in
1492the common LD and calculate the remainder w.r.t.\ the LD, i.e.\ to
1493generate an equation without the LD by the Euclidean algorithm, and
1494\item[\ \ ]  add this equation to the system.
1495\end{description}
1496Usually pairs of equations are taken first, such that only one
1497of both equations must be
1498differentiated. If in such a generation step one of both equations is not
1499differentiated then it is called a
1500simplification step and this equation will be replaced by the new equation.
1501
1502The algorithm ends if each combination of two equations yields only equations
1503which simplify to an identity modulo the other equations.
1504A more detailed description is given e.g. in \cite{Alex,Reid1}.
1505
1506Other programs implementing this algorithm are described e.g. in
1507\cite{FS,Alex,Fush,Reid1,Reid2,Reid3} and \cite{Mans}.
1508
1509In the interactive mode of {\sc Crack} it is possible to change the
1510lexicographical ordering of variables, of functions, to choose between
1511`total differential order' ordering of variables or lexicographical
1512ordering of variables and to choose whether lexicographical ordering
1513of functions should have a higher priority than the ordering of the
1514variables in a derivative, or not.
1515
1516An example of the computation of a differential Gr\"{o}bner Basis is
1517given in the test file {\tt crack.tst}.
1518
1519\subsection{Integrating exact PDEs}
1520The technical term `exact' is adapted for PDEs from exterior calculus and
1521is a small abuse of language but it is useful to characterize the kind of PDEs
1522under consideration.
1523
1524The purpose of the integration module in {\sc Crack} is to  decide
1525whether a given differential
1526expression $D$ which involves unknown functions $f^i(x^j),\;\; 1\leq i\leq m$
1527of independent variables $x^j, 1\leq j\leq n$
1528is a total derivative of another expression $I$
1529w.r.t. some variable $x^k, 1\leq k\leq n$
1530\[ D(x^i,\; f^j,\; f^j,_p,\; f^j,_{pq}, \ldots)
1531     = \frac{d I(x^i,\; f^j,\; f^j,_p,\; f^j,_{pq}, \ldots)}{d x^k}. \]
1532The index $k$ is
1533reserved in the following for the integration variable $x^k.$
1534With an appropriate function of integration $c^r,$
1535which depends on all variables except $x^k$ it is no loss of generality
1536to replace $0 = D$ by $0 = I + c^r$ in a system of equations.
1537
1538Of course there
1539always exists a function $I$ with a total derivative equal to $D$ but
1540the question is whether for \underline{arbitrary} $f^i$ the integral
1541$I$ is functionally dependent only on the $f^i$ and their derivatives,
1542and \underline{not on integrals of $f^i.$} \\
1543\underline{Preconditions:} \\
1544$D$ is a polynomial in the $f^i$ and their derivatives. The number of
1545functions and variables is free.
1546For deciding the existence of $I$ only, the explicit occurrence of the
1547variables $x^i$ is arbitrary. In order to actually
1548calculate $I$ explicitly, $D$ must have the property that all terms in $D$
1549must either contain an unknown function of $x^k$ or
1550must be formally integrable w.r.t. $x^k.$
1551That means if $I$ exists then
1552only a special explicit occurrence of $x^k$ can prevent the
1553calculation of $I$
1554and furthermore only in those terms which do not contain
1555any unknown function of $x^k.$
1556If such terms occur in $D$ and $I$ exists then $I$ can still be expressed
1557as a polynomial in the $f^i, f^i,_j, \ldots$ and terms containing
1558indefinite integrals with integrands explicit in $x^k.$ \\
1559\underline{Algorithm:} \\
1560Successive partial integration of the term with the highest
1561$x^k$-derivative of any $f^i.$ By that the
1562differential order w.r.t. $x^k$ is reduced
1563successively. This procedure is always applicable because steps involve only
1564differentiations and the polynomial
1565integration $(\int h^n\frac{\partial h}{\partial x}dx =
1566h^{n+1}/(n+1))$ where $h$ is a partial derivative of some function
1567$f^i.$ For a more detailed description see \cite{Wol99e}.\\
1568\underline{Stop:} \\
1569Iteration stops if no term with any $x^k$-derivative of any $f^i$ is left.
1570If any $f^i(x^k)$ occurs in the remaining un-integrated terms
1571then $I$ is not expressible with $f^i$ and its derivatives only. In
1572case no $f^i(x^k)$ occurs, then any remaining terms can contain $x^k$ only
1573explicitly. Whether they can be integrated or not depends on their formal
1574integrability. For their integration the {\sc Reduce} integrator is
1575applied. \\
1576\underline{Speed up:} \\
1577The partial integration as described above preserves derivatives with
1578respect to other variables. For example, the three terms $f,_x, f
1579f,_{xxx}, f,_{xxy}$ can not combine somehow to the same terms in the
1580integral because if one ignores $x$-derivatives then it is clear that
1581$f, f^2$ and $f,_y$ are three functionally independent expressions
1582with respect of $x$-integrations. This allows the following drastic speed up
1583for large expressions. It is possible to partition the complete sum of
1584terms into partial sums such that each of them has to be
1585integrable on its own. That is managed by generating a label for each
1586term and collecting terms with equal label into partial sums. The
1587label is produced by dropping all $x$-derivatives from all functions
1588to be computed and dropping all factors which are not powers of derivatives of
1589functions to be computed.
1590
1591The partitioning into partial sums has two effects. Firstly, if the
1592integration of one partial sum fails then the remaining sums do not have
1593to be tried for integration. Secondly, doing partial integration for
1594each term means doing many subtractions. It is much faster to subtract
1595terms from small sums than from large sums.
1596
1597\underline{Example :} \\
1598We apply the above algorithm to
1599\begin{equation}
1600D := 2f,_yg' + 2f,_{xy}g + gg'^3 + xg'^4 + 3xgg'^2g'' = 0
1601\label{D}
1602\end{equation}
1603with $f = f(x,y), \, g = g(x), \, '\equiv d/dx.$
1604Starting with terms containing $g$
1605and at first with the highest derivative $g,_{xx},$ the steps are
1606\[
1607\begin{array}{rcccl}
1608\int 3xgg,_x^2g,_{xx} dx
1609& = & \int d(xgg,_x^3)
1610    & - & \int \left( \partial_x(xg) g,_x^3\right) dx \\ \\
1611& = & xgg,_x^3 & - & \int g,_x^3(g + xg,_x) dx,
1612\end{array} \]
1613\[ I := I + xgg,_x^3 \]
1614\[ D := D - g,_x^3(g + xg,_x) - 3xgg,_x^2g,_{xx} \]
1615The new terms $- g,_x^3(g + xg,_x)$ are of lower order than $g,_{xx}$
1616and so in the expression $D$ the maximal order of $x$-derivatives
1617of $g$ is lowered. The conditions that $D$ is exact are the following.
1618\begin{description}
1619\item The leading derivative must occur linearly before each partial
1620integration step.
1621\item After the partial integration of the terms with first order
1622$x$-derivatives of $f$ the remaining $D$ must not contain $f$
1623or other derivatives of $f$, because such terms cannot
1624be integrated w.r.t.\ $x$ without specifying $f$.
1625\end{description}
1626The result of $x$- and $y$-integration in the above example is
1627(remember $g=g(x)$)
1628\begin{equation}
16290 = 2fg + xygg,_x^3 + c_1(x) + c_2(y) \; \; (=I). \nonumber
1630\end{equation}
1631{\sc Crack} can now eliminate $f$ and substitute
1632for it in all other equations. \\
1633\underline{Generalization:} \\
1634If after applying the above basic algorithm, terms are left which contain
1635functions of $x^k$ but each of these functions depends only on a subset of
1636all $x^i, 1\leq i\leq n,$ then a generalized version of the above algorithm
1637can still provide a formal expression for the integral $I$
1638(see \cite{Wol99e}). The price consists of
1639additional differential conditions, but they are equations in fewer variables
1640than occur in the integrated equation. Integrating for example
1641\begin{equation}
1642\tilde{D} = D + g^2(y^2 + x\sin y + x^2e^y)       \label{Dnew}
1643\end{equation}
1644by introducing as few
1645new functions and additional conditions as possible gives for the integral
1646$\tilde{I}$
1647\begin{eqnarray*}
1648\tilde{I} & = & 2fg + xygg,_{x}^{3} + c_1(x) + c_2(y) \\
1649  &   & + \frac{1}{3}y^3c_3'' - \cos y(xc_3'' - c_3)
1650+ e^y(x^2c_3'' - 2xc_3' + 2c_3)
1651\end{eqnarray*}
1652with $c_3 = c_3(x), \, '\equiv d/dx$ and the single additional
1653condition $g^2 = c_3'''.$
1654The integration of the new terms of (\ref{Dnew}) is
1655achieved by partial integration again, for example
1656\begin{eqnarray*}
1657\int g^2x^2 dx & = & x^2\int g^2 dx - \int (2x\!\int g^2 dx) dx \\
1658& = & x^2\int g^2 dx - 2x\int\!\!\int g^2 dx
1659+ 2 \int\!\!\int\!\!\int g^2 dx \\
1660& = & x^2c_3'' - 2xc_3' + 2c_3.
1661\end{eqnarray*}
1662\underline{Characterization:} \\
1663This algorithm is a decision algorithm which does not involve any
1664heuristic.
1665After integration, the new equation is still a polynomial
1666in $f^i$ and in the new constant or function of integration.
1667Therefore the algorithms for bringing the system into standard form can still
1668be applied to the PDE-system
1669after the equation $D = 0$ is replaced by $I = 0.$
1670
1671The complexity of algorithms for bringing a PDE-system into a standard
1672form depends nonlinearly on the order of these equations because of
1673the nonlinearly increasing number of different leading derivatives
1674and by that the number of equations generated intermediately by such
1675an algorithm. It therefore in general pays off to integrate equations
1676during such a standard form algorithm.
1677
1678If an $f^i,$ which depends on all variables, can be eliminated after an
1679integration, then depending on its length
1680it is in general helpful to substitute $f^i$ in other equations and
1681to reduce the number of equations and functions by one. This is especially
1682profitable if the replaced expression is short and
1683contains only functions of fewer variables than $f^i.$ \\
1684\underline{Test:} \\
1685The corresponding test input is
1686\begin{verbatim}
1687depend f,x,y;
1688depend g,x;
1689crack({2*df(f,y)*df(g,x)+2*df(f,x,y)*g+g*df(g,x)**3
1690       +x*df(g,x)**4+3*x*g*df(g,x)**2*df(g,x,2)
1691       +g**2*(y**2+x*sin y+x**2*e**y)},
1692      {},{f,g},{});
1693\end{verbatim}
1694The meaning of the {\sc Reduce} command {\tt depend} is to declare that $f$
1695depends in an unknown way on $x$ and $y$. For more details on the
1696algorithm see \cite{Wol99e}.
1697
1698\subsection{Direct separation of PDEs}
1699As a result of repeated integrations the functions in the
1700remaining equations have fewer and fewer variables. It therefore may happen
1701that after a substitution an equation results where at least one variable
1702occurs only explicitly and not as an argument of an unknown function.
1703Consequently all coefficients of linearly independent expressions in this
1704variable can be set to zero individually. \\
1705{\em Example:}  \\
1706$f = f(x,y), \;\; g = g(x), \;\; x,y,z$ are independent variables.
1707The equation is
1708\begin{equation}
17090 = f,_y + z(f^2+g,_x) + z^2(g,_x+yg^2) \label{sep}
1710\end{equation}
1711$x$-separation? $\rightarrow$ no  \\
1712$y$-separation? $\rightarrow$ no  \\
1713$z$-separation? $\rightarrow$ yes: $0 \,=\, f,_y \,=\, f^2+g,_x \,=\,
1714g,_x+yg^2$ \\
1715$y$-separation? $\rightarrow$ yes: $0 = g,_x = g^2\;\;$
1716(from the third equation from the $z$-separation)
1717
1718If $z^2$ had been replaced in (\ref{sep}) by a third
1719function $h(z)$ then direct separation would not have been possible.
1720The situation changes if $h$ is a parametric function which is
1721assumed to be independently given and which should not be
1722calculated, i.e.\ $f$ and $g$ should be calculated for any
1723arbitrary given $h(z)$. Then the same separation could have been
1724done with an extra treatment of the special case $h,_{zz} = 0,$
1725i.e.\ $h$ linear in $z$. This different treatment of unknown functions
1726makes it necessary to input explicitly the functions to be
1727calculated as the third argument to {\sc Crack}. The input
1728in this case would be
1729\begin{verbatim}
1730depend f,x,y;
1731depend g,x;
1732depend h,z;
1733crack({df(f,y)+z*f**2+(z+h)*df(g,x)+h*y*g**2},{},{f,g},{z});
1734\end{verbatim}
1735The fourth parameter for {\sc Crack} is necessary to make clear that
1736in addition to the variables of $f$ and $g$, $z$ is also an independent
1737variable.
1738
1739If the flag {\tt independence\_} is not {\tt nil} then {\sc Crack} will
1740stop if linear independence of the explicit expressions of the
1741separation variable (in the example $1,z,z^2$) is not clear and ask
1742interactively whether separation should be done or not.
1743
1744\subsection{Indirect separation of PDEs}
1745For the above direct separation a precondition is that at least one
1746variable occurs only explicitly or as an argument of parametric
1747functions.  The situation where each variable is an argument of at least
1748one function but no function contains all independent variables of an
1749equation needs a more elaborate treatment.
1750
1751The steps are these
1752\begin{itemize}
1753\item A variable $x_a$ is chosen which occurs in as few functions as possible.
1754 This variable will be separated directly later which
1755 requires that all unknown functions $f_i$ containing $x_a$ are to be
1756 eliminated. Therefore, as long as $F:=\{f_i\}$ is not empty do the following:
1757 \begin{itemize}
1758  \item Choose the function $f_i(y_p)$ in $F$ with the smallest number of
1759  variables $y_p$ and with $z_{ij}$ as those variables on which $f_i$ does
1760  not depend.
1761  \item Identify all different products $P_{ik}$ of powers of
1762  $f_i$-derivatives and of $f_i$ in the equation.
1763  Determine the $z_{ij}$-dependent factors $C_{ik}$ of the coefficients
1764  of $P_{ik}$ and store them in a list.
1765  \item For each $C_{il}$ ($i$ fixed, $l=1,\ldots)$ choose a $z_{ij}$ and :
1766  \begin{itemize}
1767   \item divide by $C_{il}$ the equation and all following elements
1768         $C_{im}$ with $m>l$ of this list, such that these elements are
1769         still the actual coefficients in the equation after the division,
1770   \item differentiate the equation and the $C_{im}, m>l$ w.r.t.\ $z_{ij}$
1771  \end{itemize}
1772 \end{itemize}
1773 \item The resulting equation no longer contains any unknown function of $x_a$
1774 and can be separated w.r.t.\ $x_a$ directly in case $x_a$ still occurs
1775 explicitly. In both cases the equation(s) is (are) free of $x_a$ afterwards
1776 and inverting the sequence of integration and multiplication
1777 of all those equations (in case of direct separability) will also result
1778 in an equation(s) free of $x_a.$ More exactly, the steps are
1779 \begin{itemize}
1780  \item multiplication of the equation(s) and the $C_{im}$ with
1781        $m<l$ by the elements
1782  of the $C_{ik}$-lists in exactly the inverse order,
1783  \item integration of these exact PDEs and the $C_{im}$ w.r.t.\ $z_{ij}$.
1784 \end{itemize}
1785 \item The equations originating that way are used to evaluate those
1786 functions which do not depend on $x_a$ and which survived in the above
1787 differentiations. Substituting these functions in the original equation,
1788 may enable direct separability w.r.t. variables on which the $f_i$
1789 do not depend on.
1790 \item The whole procedure is repeated for another variable $x_b$ if the
1791 original DE could not be separated directly and still has the property that
1792 it contains only functions of a subset of all variables in the equation.
1793\end{itemize}
1794The additional bookkeeping of coefficients $C_{ik}$ and their updating by
1795division, differentiation, integration and multiplication is done to use
1796them as integrating factors for the backward integration.
1797The following example makes this clearer. The equation is
1798\begin{equation}
17990 = f(x) g(y) - \frac{1}{2}xf'(x) - g'(y) - (1+x^2)y. \label{isep}
1800\end{equation}
1801The steps are (equal levels of indentation in the example correspond to
1802those in the algorithm given above)
1803\begin{itemize}
1804 \item $x_1:=x, \, F=\{f\}$
1805 \begin{itemize}
1806  \item Identify $f_1:=f, \; \; \; \; \; y_1:=x, \; \; \; \; \; z_{11}:=y$
1807  \item and $P_1=\{f',f\}, \; \; \; \; \; C_1=\{1,g\}$
1808  \begin{itemize}
1809   \item Divide $C_{12}$ and
1810         (\ref{isep}) by $C_{11}=1$ and differentiate w.r.t. $z_{11}=y:$
1811         \begin{eqnarray}
1812         0 & = & fg' - g'' - (1+x^2)   \label{isep2}  \\
1813         C_{12} & = & g'    \nonumber
1814         \end{eqnarray}
1815 \item Divide (\ref{isep2}) by $C_{12}=g'$ and differentiate w.r.t. $z_{11}=y:$
1816\[ 0 = - (g''/g')' - (1+x^2)(1/g')' \]
1817
1818  \end{itemize}
1819 \end{itemize}
1820 \item Direct separation w.r.t.\ $x$ and integration:
1821 \[\begin{array}{rclclcl}
1822  x^2: 0 & = & (1/g')' & \Rightarrow & c_1g' =  1 & \Rightarrow &
1823        g = y/c_1 + c_2 \\
1824  x^0: 0 & = & (g''/g')' & \Rightarrow & c_3g' = g'' & \Rightarrow &
1825        c_3 = 0
1826 \end{array} \]
1827 \item Substitution of $g$ in the original DE
1828       \[0 = (y/c_1+c_2)f - \frac{1}{2}xf' - 1/c_1 - (1+x^2)y \]
1829       provides a form which allows {\sc Crack} standard methods to succeed
1830       by direct separation w.r.t.\ $y$
1831 \[\begin{array}{rclcl}
1832  y^1: 0 & = & f/c_1 - 1 - x^2               & \Rightarrow & f'  =  2c_1x \\
1833  y^0: 0 & = & c_2f - \frac{1}{2}xf' - 1/c_1 & \Rightarrow & 0   =
1834       c_2c_1(1+x^2) - c_1x^2 - 1/c_1
1835 \end{array}\]
1836       and direct separation w.r.t.\ $x$:
1837 \begin{eqnarray*}
1838 x^0:  0 & = & c_2c_1 - c_1    \\
1839 x^2:  0 & = & c_2c_1 - 1/c_1   \\
1840    & \Rightarrow &  0 = c_1 - 1/c_1   \\
1841    & \Rightarrow & c_1 = \pm 1 \Rightarrow c_2 = 1.
1842 \end{eqnarray*}
1843\end{itemize}
1844We get the two solutions $f = 1 + x^2, g = 1 + y$ and
1845$f = - 1 - x^2, g = 1 - y.$ The corresponding input to {\sc Crack} would be
1846\begin{verbatim}
1847depend f,x;
1848depend g,y;
1849crack({f*g-x*df(f,x)/2-df(g,y)-(1+x**2)*y},{},{f,g},{});
1850\end{verbatim}
1851
1852\subsection{Solving standard ODEs}
1853For solving standard ODEs the package {\sc ODESolve} by Malcalm MacCallum and
1854Francis Wright
1855\cite{Mal} is applied. This package is distributed with {\sc Reduce}
1856and can be used independently of {\sc Crack}. The syntax of
1857{\sc ODESolve} is quite similar to that of {\sc Crack} \\
1858\verb+depend+ {\it function}, {\it variable}; \\
1859\verb+odesolve(+ODE, {\it function}, {\it variable});  \\
1860In the present form (1998) it solves standard first order ODEs
1861(Bernoulli and Euler type, with separable variables, $\ldots$) and linear
1862higher order ODEs with constant coefficients.
1863An improved version is currently under preparation by Francis Wright.
1864The applicability of {\sc ODESolve} is
1865increased by a {\sc Crack}-subroutine which recognizes such PDEs in which
1866there is only one unknown function of all variables and all occurring
1867derivatives of this function
1868are only derivatives w.r.t. one variable of only one partial derivative.
1869For example the PDE for $f(x,y)$
1870\[ 0 = f,_{xxy} + f,_{xxyy} \]
1871can be viewed as a first order ODE in $y$ for $f,_{xxy}.$
1872
1873\section*{Acknowledgement}
1874Andreas Brand is the author of a number of core modules of {\sc
1875Crack}. The currently used data structure and program structure of the
1876kernel of {\sc Crack} are due to him. He contributed to the
1877development of {\sc Crack} until 1997.
1878
1879Francis Wright contributed a module that provides simplifications
1880of expressions involving symbolic derivatives and integrals. Also, {\sc Crack}
1881makes extensive use of the {\sc Reduce} program {\sc ODESolve} written
1882by Malcolm MacCallum and Francis Wright.
1883
1884Arrigo Triulzi contributed in supporting the use of different total
1885orderings of derivatives in doing pseudo differential Gr\"{o}bner
1886basis computations.
1887
1888Work on this package has been supported by the Konrad Zuse
1889Institute / Berlin through a fellowship of T.W..  Winfried
1890Neun and Herbert Melenk are thanked for many discussions and
1891constant support. Many of the low level control features have
1892been provided by Winfried Neun. He ported Parallel Reduce to
1893a Linux PC Beowulf cluster and helped in adapting {\sc Crack}
1894to it. Last not least he helped in enabling to encode PDF features of
1895this document in LaTeX.
1896
1897Anthony Hearn provided free copies of {\sc Reduce} to us as a
1898{\sc Reduce} developers group which also is thankfully acknowledged.
1899
1900\begin{thebibliography}{99}
1901\bibitem{Riq} C. Riquier, Les syst\`{e}mes d'\'{e}quations aux d\'{e}riv\'{e}es
1902partielles, Gauthier--Villars, Paris (1910).
1903\bibitem{Th} J. Thomas, Differential Systems, AMS, Colloquium
1904publications, v. 21, N.Y. (1937).
1905\bibitem{Ja} M. Janet, Le\c{c}ons sur les syst\`{e}mes d'\'{e}quations aux
1906d\'{e}riv\'{e}es, Gauthier--Villars, Paris (1929).
1907\bibitem{Topu} V.L. Topunov, Reducing Systems of Linear Differential
1908Equations to a Passive Form, Acta Appl. Math. 16 (1989) 191--206.
1909\bibitem{Alex} A.V. Bocharov and M.L. Bronstein, Efficiently
1910Implementing Two Methods of the Geometrical Theory of Differential
1911Equations: An Experience in Algorithm and Software Design, Acta. Appl.
1912Math. 16 (1989) 143--166.
1913\bibitem{Reid1} G.J. Reid, A triangularization algorithm which
1914determines the Lie symmetry algebra of any system of PDEs, J.Phys. A:
1915Math. Gen. 23 (1990) L853-L859.
1916\bibitem{Reid2} G. J. Reid, A. D. Wittkopf and A. Boulton, Reduction
1917of systems of nonlinear partial differential equations to simplified
1918involutive forms, European Journal of Applied Mathematics,
1919Vol 7. (1996) 604-635.
1920\bibitem{Reid3} G. J. Reid, A. D. Wittkopf and P. Lin,
1921Differential-Elimination Completion Algorithms for Differential Algebraic
1922Equations and Partial Differential Algebraic Equations, to appear in
1923Studies in Applied Mathematics (Submitted July 1995).
1924\bibitem{FS} F. Schwarz, Automatically Determining Symmetries of Partial
1925Differential Equations, Computing 34, (1985) 91-106.
1926\bibitem{Fush} W.I. Fushchich and V.V. Kornyak, Computer Algebra
1927Application for Determining Lie and Lie--B\"{a}cklund Symmetries of
1928Differential Equations, J. Symb. Comp. 7, (1989) 611--619.
1929\bibitem{Mans} E.L. Mansfield,
1930The differential algebra package diffgrob2, Mapletech 3, (1996) 33-37 .
1931\bibitem{Ka} E. Kamke, Differentialgleichungen, L\"{o}sungsmethoden
1932und L\"{o}sungen, Band 1, Gew\"{o}hnliche Differentialgleichungen,
1933Chelsea Publishing Company, New York, 1959.
1934\bibitem{Wo} T. Wolf, An Analytic Algorithm for Decoupling and Integrating
1935systems of Nonlinear Partial Differential Equations, J. Comp. Phys.,
1936no. 3, 60 (1985) 437-446 and, Zur analytischen Untersuchung und exakten
1937L\"{o}sung von Differentialgleichungen mit Computeralgebrasystemen,
1938Dissertation B, Jena (1989).
1939\bibitem{WM} M.A.H. MacCallum, F.J. Wright, Algebraic Computing with REDUCE,
1940Clarendon Press, Oxford (1991).
1941\bibitem{Mal} M.A.H. MacCallum, An Ordinary Differential Equation
1942Solver for REDUCE, Proc. ISAAC'88, Springer Lect. Notes in Comp Sci.
1943358, 196--205.
1944\bibitem{Step} H. Stephani, Differential equations, Their solution using
1945symmetries, Cambridge University Press (1989).
1946\bibitem{LIEPDE} T. Wolf, An efficiency improved program {\sc LiePDE}
1947for determining Lie - symmetries of PDEs, Proceedings of the workshop on
1948Modern group theory methods in Acireale (Sicily) Nov. (1992)
1949\bibitem{Karp} V.I. Karpman, Phys. Lett. A 136, 216 (1989)
1950\bibitem{Cham} B. Champagne, W. Hereman and P. Winternitz, The computer
1951      calculation of Lie point symmetries of large systems of differential
1952      equation, Comp. Phys. Comm. 66, 319-340 (1991)
1953\bibitem{MelNeun} Melenk, H., Neun, W., RR: Parallel Symbolic
1954      Algorithm Support for PSL Based REDUCE, ZIP preprint (2002). \\
1955{\tt www.zib.de/Optimization/Software/Reduce/moredocs/parallel\_reduce.ps}
1956\bibitem{Wol99b}
1957Wolf, T., Size reduction and partial decoupling of systems of equations,
1958          J.\ Symb.\ Comp.\ 33, no 3 (2002) 367-383.
1959\bibitem{Wol99e}
1960Wolf, T., The Symbolic Integration of Exact PDEs, J.\ Symb.\ Comp.\
1961          {\bf 30} (No.\ 5) (2000), 619-629.
1962\bibitem{Wol02a}
1963Wolf, T., The integration of systems of linear PDEs using conservation
1964          laws of syzygies, J.\ of Symb.\ Comp.\ {\bf 35}, no 5 (2003) 499-526.
1965\bibitem{SokWol01}
1966Sokolov, V.V., Wolf, T., Classification of integrable
1967          polynomial vector evolution equations, J.\ Phys.\ A: Math.\
1968          Gen.\ {\bf 34} (2001) 11139-11148.
1969\bibitem{EWLE02}
1970Euler, N., Wolf, T., Leach, PGL and Euler, M.:
1971          Linearizable Third Order ODEs and Generalised Sundman
1972          Transformations: The Case X'''=0,
1973          Acta Applicandae Mathematicae, Volume 76, (2003),
1974          Issue 1, 89-115.
1975\bibitem{WolEfi03a}
1976Wolf, T., Efimovskaya, O.\ V., Classification of integrable
1977          quadratic Hamiltonians on e(3), preprint, 11 pages (2003).
1978
1979\end{thebibliography}
1980
1981\end{document}
1982
1983