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