REDUCE

20.18 EDS: A Package for Exterior Differential Systems

EDS is a REDUCE package for symbolic analysis of partial differential equations using the geometrical approach of exterior differential systems. The package implements much of exterior differential systems theory, including prolongation and involution analysis, and has been optimised for large, non-linear problems.

Author: David Hartley

\( \newcommand {\deriv }{\mathrm {d}} \)EDS is a REDUCE package for symbolic analysis of partial differential equations using the geometrical approach of exterior differential systems. The package implements much of exterior differential systems theory, including prolongation and involution analysis, and has been optimised for large, non-linear problems.

20.18.1 Introduction

Exterior differential systems give a geometrical framework for partial differential equations and more general differential geometric problems. The geometrical formulation has several advantages stemming from its coordinate-independence, including superior treatment of nonlinear and global problems. There is not sufficient space in this manual for an introduction to exterior differential systems beyond the scant details given in section 20.18.2, but there are a number of up-to-date texts on the subject (eg [BCG\(^{+}\)91Spi79]).

EDS provides a number of tools for setting up and manipulating exterior differential systems and implements many features of the theory. Its main strengths are the ability to use anholonomic or moving frames and the care taken with nonlinear problems.

There has long been interest in implementing the theory of exterior differential systems in a computer algebra system (eg [ASY74GMM\(^{+}\)81HT91]). The EDS package owes much to these earlier efforts, and also to related packages for PDE analysis (eg [MF93Rei91Sei95]), as well as to earlier versions of EDS produced at Lancaster university with R. W. Tucker and P. A. Tuckey. Finally, EDS uses the exterior calculus package EXCALC of E. Schrüfer 20.20 and the exterior ideals package XIDEAL 20.64. XIDEAL and EXCALC are loaded automatically with EDS.

This work has been supported by the Graduate College on Scientific Computing, University of Cologne and GMD St Augustin, funded by the DFG (Deutsche Forschungsgemeinschaft). I would like to express my thanks to R. W. Tucker, E. Schrüfer, P. A. Tuckey, F. W. Hehl and R. B. Gardner for helpful and encouraging discussions.

20.18.2 EDS data structures and concepts

This section presents the various structures used for expressing exterior systems quantities in EDS. In addition, some the concepts used in EDS to aid computation are described.

Coframings

Within the context of EDS, a coframing means a real finite-dimensional differentiable manifold with a given global cobasis. The information about a coframing required by EDS is kept in a \(\langle \)coframing\(\rangle \) object. The cobasis is the identifying element of an EDS \(\langle \)coframing\(\rangle \): distinct cobases for the same differentiable manifold are treated as distinct \(\langle \)coframing\(\rangle \) objects in EDS. The cobasis may be either holonomic or anholonomic, allowing some manifolds with non-trivial topology (eg. group manifolds) to be treated.

In addition to the cobasis, an EDS \(\langle \)coframing\(\rangle \) can be given coordinates, structure equations and restrictions. The coordinates may be an incomplete or overcomplete set. The structure equations express the exterior derivative of the coordinates and cobasis elements as needed. All coordinate differentials must be expressed in terms of the given cobasis, but not all cobasis differentials need be known. The restrictions are a set of inequalities (at present using just \(\neq \)) describing point sets not in the manifold.

The \(\langle \)coframing\(\rangle \) object is, of course, by no means a full description of a differentiable manifold. For example, there is no topology and there are no charts. However, the \(\langle \)coframing\(\rangle \) object carries sufficient information about the underlying manifold to allow a range of exterior systems calculations to be carried out. As such, it is convenient to accept an abuse of language and think of the \(\langle \)coframing\(\rangle \) object as a manifold.

A \(\langle \)coframing\(\rangle \) is constructed or selected using the coframing operator.

Examples:

20.18.3 Exterior differential systems

A simple \(\langle \)EDS\(\rangle \), or exterior differential system, is a triple \((S,\Omega ,M)\), where \(M\) is a \(\langle \)coframing\(\rangle \) (section 20.18.2.0), \(S\) is a \(\langle \)system\(\rangle \) (section 20.18.3.0) on \(M\), and \(\Omega \) is an independence condition: either a decomposable \(\langle \)p-form\(\rangle \) or a \(\langle \)system\(\rangle \) of \(1\)-forms on \(M\) (exterior differential systems without independence condition are not treated by EDS).

More generally, an \(\langle \)EDS\(\rangle \) is a list of simple \(\langle \)EDS\(\rangle \) objects where the various coframings are all disjoint. This last requirement in not enforced within EDS unless the edsdisjoint switch is on (section 20.18.12). These more general \(\langle \)EDS\(\rangle \) objects are represented as a list of simple \(\langle \)EDS\(\rangle \) objects. All operators which take an \(\langle \)EDS\(\rangle \) argument accept both simple and compound types.

The trivial \(\langle \)EDS\(\rangle \), describing an inconsistent problem with no solutions, is defined to be ({1},{},{}).

An \(\langle \)EDS\(\rangle \) is represented by the eds operator (section 20.18.4.0), and can additionally be generated using the contact and pde2eds operators (sections 20.18.4.0, 20.18.4.0).

The solutions of \((S,\Omega ,M)\) are integral manifolds, or immersions (cf section 20.18.3.0) on which \(S\) vanishes and the rank of \(\Omega \) is preserved. Solutions at a single point are described by integral elements (section 20.18.3.0).

Systems

In EDS, the label \(\langle \)system\(\rangle \) refers to a list

{\(\langle \)p-form expr\(\rangle \),\(\cdots \)}

of differential forms. This is distinct from an \(\langle \)EDS\(\rangle \) (section 20.18.3), which has additional structure. However, many EDS operators will accept either an \(\langle \)EDS\(\rangle \) or a \(\langle \)system\(\rangle \) as arguments. In the latter case, any extra information which is required is taken from the background coframing (section 20.18.3.0).

The \(\langle \)system\(\rangle \) of an \(\langle \)EDS\(\rangle \) can be obtained with the system operator (section 20.18.5.0).

Background coframing

The information encapsulated in a coframing operator is usually inactive. However, when operations are performed on a \(\langle \)coframing\(\rangle \) or an \(\langle \)EDS\(\rangle \) object (sections 20.18.2.0, 20.18.3), this information is activated for the duration of those operations. It is possible to activate the rules and orderings of a coframing operator globally, by making it the background coframing. All subsequent EXCALC operations will be governed by those rules. Operations on \(\langle \)EDS\(\rangle \) objects are unaffected, since their coframings are still activated locally. The background coframing can be set and changed with the set_coframing command, and inspected using coframing.

Integral elements

An integral element of an exterior system \((S,\Omega ,M)\) is a subspace \(P\subset T_pM\) of the tangent space at some point \(p\in M\) such that all forms in \(S\) vanish when evaluated on vectors from \(P\). In addition, no non-zero vector in \(P\) may annul every form in \(\Omega \).

Alternatively, an integral element \(P\subset T_pM\) can be represented by its annihilator \(P^\perp \subset T^*_pM\), comprising those \(1\)-forms at \(p\) which annul every vector in \(P\). This can also be understood as a maximal set of \(1\)-forms at \(p\) such that \(S \simeq 0 \pmod {P^\perp }\) and the rank of \(\Omega \) is preserved modulo \(P^\perp \). This is the representation used by EDS. Further, the reference to the point \(p\) is omitted, so an \(\langle \)integral element\(\rangle \) in EDS is a distribution of \(1\)-forms on \(M\), specified as a \(\langle \)system\(\rangle \) of \(1\)-forms.

In specifying an integral element for a particular \(\langle \)EDS\(\rangle \), it is possible to omit the Pfaffian component of the \(\langle \)EDS\(\rangle \), since these \(1\)-forms must be part of any integral element.

Examples:

Properties

For large problems, it can require a great deal of computation to establish whether, for example, a system is closed or not. In order to save recomputing such properties, an \(\langle \)EDS\(\rangle \) object carries a list of \(\langle \)properties\(\rangle \) of the form

{\(\langle \)keyword\(\rangle \) = \(\langle \)value\(\rangle \),\(\cdots \)}

where \(\langle \)keyword\(\rangle \) is one of the following: closed, quasilinear, pfaffian or involutive, and \(\langle \)value\(\rangle \) is either 0 (false) or 1 (true). These properties are suppressed when an \(\langle \)EDS\(\rangle \) is printed, unless the nat switch is off. They can be examined using the properties operator (section 20.18.5.0).

Properties are usually generated automatically by EDS as required, but may be explicitly checked using the operators in section 20.18.8. If a property is not yet present on the list, it is not yet known, and must be checked explicitly if required.

In addition to the properties just described, an \(\langle \)EDS\(\rangle \) object carries a number of hidden properties which record the results of previous calculations, such as the closure or information about the prolongation of the system. These hidden properties speed up many operations which contain common sub-calculations. The hidden properties are stored using internal LISP data structures and so are not available for inspection.

Properties can be asserted when an \(\langle \)EDS\(\rangle \) is constructed with the eds operator (section 20.18.4.0). Care is needed since such assertions are never checked. Properties can be erased using the cleanup operator (section 20.18.14.0).

Maps

Within EDS, a map \(f:M\to N\) is given as a \(\langle \)map\(\rangle \) object, a list

{\(\langle \)coordinate\(\rangle \) = \(\langle \)expr\(\rangle \),\(\cdots \),\(\langle \)expr\(\rangle \) neq \(\langle \)expr\(\rangle \),\(\cdots \)}

of substitutions and restrictions. The substitutions express coordinates on the target manifold \(N\) in terms of those on the source manifold \(M\). The restrictions describe point sets not contained in the source manifold \(M\). The ordering of substitutions and restrictions in the list is unimportant. It is not necessary that the restrictions and right-hand sides of the substitutions be written entirely in \(M\) coordinates, but it must be possible by repeated substitution to produce expressions on \(M\) (see the examples below). Any denominators in the substitutions are automatically added to the list of restrictions. It is not necessary to include trivial equations for coordinates which are present on both \(M\) and \(N\). Note that projections cannot be represented in this fashion (but see the cross operator, section 20.18.6.0).

Maps are applied using the pullback and restrict operators (sections 20.18.6.0, 20.18.6.0).

Examples:

Cobasis transformations

A cobasis transformation is given in EDS by a \(\langle \)transform\(\rangle \), a list

{\(\langle \)cobasis element\(\rangle \) = \(\langle \)1-form expr\(\rangle \),\(\cdots \)}

of substitutions. When applying a transformation to a \(\langle \)p-form\(\rangle \) or \(\langle \)system\(\rangle \), it is necessary to specify the forward transformation just as for a sub substitution. For \(\langle \)EDS\(\rangle \) and \(\langle \)coframing\(\rangle \) objects, it is also possible to specify the inverse of the desired substition: EDS will automatically invert the transformation as required. For a partial change of cobasis, it is not necessary to include trivial equalities. Cobasis transformations are applied by the transform operator (section 20.18.6.0).

Examples:

Tableaux

For a quasilinear Pfaffian exterior differential system \((\{\theta ^a\},\{\omega ^i\},M)\), the tableau \(A=[\pi ^a_i]\) is a matrix of \(1\)-forms such that \[ \deriv \theta ^a + \pi ^a_i\wedge \omega ^i \simeq 0 \pmod {\{\theta ^a,\omega ^i\wedge \omega ^j\}} \] The \(\pi ^a_i\) are not unique: if \(\{\theta ^a,\pi ^\rho ,\omega ^i\}\) is a standard cobasis for the system (section 20.18.3.0), the EDS \(\langle \)tableau\(\rangle \) is a matrix containing linear combinations of the \(\pi ^\rho \) only. Zero rows are omitted.

The tableau of an \(\langle \)EDS\(\rangle \) is generated by the tableau operator (section 20.18.7.0), or can be entered using the mat operator. The Cartan characters of a tableau are found using characters (section 20.18.7.0).

Normal form

Parts of the theory of exterior differential systems apply only at points on the underlying manifold where the system is in some sense non-singular. To ensure the theory applies, EDS automatically works all exterior systems \((S,\Omega ,M)\) into a normal form in which

1.
The Pfaffian (degree 1) component of \(S\) is in solved form, where each expression has a distinguished term with coefficient 1, unique to that expression.
2.
The independence condition \(\Omega \) is also in solved form.
3.
The distinguished terms from the \(1\)-forms in \(S\) have been eliminated from the rest of \(S\) and from \(\Omega \).
4.
Any \(1\)-forms in \(S\) which vanish modulo the independence condition are removed from the system and their coefficients are appended as 0-forms.

Conditions 1 and 2 ensure the \(1\)-forms have constant rank, while 3 is convenient for many tests and calculations. In bringing the system into solved form, divisions will be made only by coefficients which are constants, parameters or functions which are nowhere zero on the manifold. The test for nowhere-zero functions uses the restrictions component of the \(\langle \)coframing\(\rangle \) structure (cf section 20.18.2.0) and is still primitive: facts such as \(x^2+1\neq 0\) on a real manifold are overlooked. See also the switch edssloppy (section 20.18.11).

This “normal form” has, of course, nothing to do with the various normal forms (eg Goursat) into which some exterior systems may be brought by cobasis transformations and choices of generators.

Examples:

Standard cobasis

Given an \(\langle \)EDS\(\rangle \) \((S,\Omega ,M)\) in normal form (section 20.18.3.0), the cobasis of the \(\langle \)coframing\(\rangle \) \(M\) can be decomposed into three sets: \(\{\theta ^a\}\), the distinguished terms from the \(1\)-forms in \(S\), \(\{\omega ^i\}\), the distinguished terms from the \(1\)-forms in \(\Omega \), and the remainder \(\{\pi ^\rho \}\). Within EDS, \(\{\theta ^a,\pi ^\rho ,\omega ^i\}\) is called the standard cobasis, and all expressions are ordered so that \(\theta ^a > \pi ^\rho > \omega ^i\). The ordering within the three sets is determined by the REDUCE \(\langle \)kernel\(\rangle \) ordering.

Examples:

20.18.4 Constructing EDS objects

Before analysing an exterior system, it is necessary to enter it into EDS somehow. Several means are provided for this purpose, and are described in this section.

coframing

An EDS \(\langle \)coframing\(\rangle \) is constructed using the coframing operator. There are several ways in which it can be used.

The simplest syntax

coframing({\(\langle \)expr\(\rangle \),\(\cdots \)})

examines the argument for 0-form and 1-form variables and deduces a full \(\langle \)coframing\(\rangle \) object capable of supporting the given expressions. This includes recursively examining the exterior derivatives of the variables appearing explicitly in the argument, taking into account prevailing let rules. In this form, the ordering of the final cobasis elements follows the prevailing REDUCE ordering. Free indices in indexed expressions are expanded to a list of explicit indices using index_expand (section 20.18.14.0).

A more basic syntax is

coframing(\(\langle \)cobasis\(\rangle \)\(\,[\),\(\langle \)coordinates\(\rangle \)\(]\,\) \(\,[\),\(\langle \)restrictions\(\rangle \)\(]\,\)
\(\,[\),\(\langle \)structure equations\(\rangle \)\(]\,\))

where \(\langle \)cobasis\(\rangle \) is a list of \(\langle \)kernel\(\rangle \) \(1\)-forms, \(\langle \)coordinates\(\rangle \) is a list of \(\langle \)kernel\(\rangle \) \(0\)-forms, \(\langle \)restrictions\(\rangle \) is a list of inequalities (using only \(\neq \) at present), and \(\langle \)structure equations\(\rangle \) is a list of rules giving the exterior derivatives of the coordinates and cobasis elements. All arguments except the cobasis are optional, and the order of arguments is unimportant. As in the first syntax, missing parts are deduced. The ordering of the final cobasis elements follows the ordering specified, rather than the prevailing REDUCE ordering.

Finally,

coframing(\(\langle \)EDS\(\rangle \))

returns the coframing argument of an \(\langle \)EDS\(\rangle \), and

coframing()

returns the current background coframing (section 20.18.3.0).

Examples:

coframing {x,y,z};

   coframing({d x,d y,d z},{x,y,z},{},{})

coframing({e 1,e 2},{r},{r neq 0},
          {d r=>e 1,d e 1=>0,d e 2=>e 1^e 2/r});

            1  2
coframing({e ,e },{r},

                               1  2
              1         2     e ^e           1
          {d e  => 0,d e  => -------,d r => e },
                                r

          {r neq 0})

coframing({e 2})
     where {d r=e 1,d e 1=0,d e 2=e 1^e 2/r};

            1  2
coframing({e ,e },{r},

                               1  2
              1         2     e ^e           1
          {d e  => 0,d e  => -------,d r => e },
                                r

          {r neq 0})

eds

A simple \(\langle \)EDS\(\rangle \) is constructed using the eds operator.

eds(\(\langle \)system\(\rangle \),\(\langle \)indep. condition\(\rangle \)\(\,[\),\(\langle \)coframing\(\rangle \)\(]\,\)\(\,[\),\(\langle \)properties\(\rangle \)\(]\,\))

(cf sections 20.18.3.0, 20.18.2.0, 20.18.3.0). The \(\langle \)indep. condition\(\rangle \) can be either a decomposable \(\langle \)p-form\(\rangle \) or a \(\langle \)system\(\rangle \) of \(1\)-forms. Free indices in indexed expressions are expanded to a list of explicit indices using index_expand (section 20.18.14.0).

The \(\langle \)coframing\(\rangle \) argument can be omitted, in which case the expressions from the \(\langle \)system\(\rangle \) and \(\langle \)indep. condition\(\rangle \) are fed to the coframing operator (section 20.18.4.0) to construct a suitable working space.

The \(\langle \)properties\(\rangle \) argument is optional, allowing the given properties to be asserted. This can save considerable time for large systems, but care is needed since the assertions are never checked.

The \(\langle \)EDS\(\rangle \) is put into normal form (section 20.18.3.0) before being returned.

On output, only the \(\langle \)system\(\rangle \) and \(\langle \)indep. condition\(\rangle \) are displayed, unless the nat switch is off, in which case the \(\langle \)coframing\(\rangle \) and \(\langle \)properties\(\rangle \) are shown too. This is so that an \(\langle \)EDS\(\rangle \) can be written out to a file and read back in.

The parts of an \(\langle \)EDS\(\rangle \) are obtained with the operators system, cobasis, independence and properties (sections 20.18.5.0, 20.18.5.0, 20.18.5.0 and 20.18.5.0).

Examples:

pform {x,y,z,p,q}=0,{e(i),w(i,j)}=1;

indexrange {i,j,k}={1,2},{a,b,c}={3};

eds({d z - p*d x - q*d y, d p^d q},{d x,d y});

   EDS({d z - p*d x - q*d y,d p^d q},{d x,d y})

OMrules :=
   index_expand {d e(i)=>-w(i,-j)^e(j),
                 w(i,-j)+w(j,-i)=>0}$

eds({e(a)},{e(i)}) where OMrules;

         3    1  2
   EDS({e },{e ,e })

coframing ws;
               3  2    1  2         1        2  2
   coframing({e ,w   ,e ,e },{},{d e  =>  - e ^w   ,
                    1                             1
                  2     1  2
               d e  => e ^w   },{})
                             1

contact

Many PDE problems are formulated as exterior systems using a jet bundle contact system. To facilitate construction of these systems, the contact operator is provided. The syntax is

contact(\(\langle \)order\(\rangle \),\(\langle \)source manifold\(\rangle \),\(\langle \)target manifold\(\rangle \))

where \(\langle \)order\(\rangle \) is a non-negative integer, and the two remaining arguments are either \(\langle \)coframing\(\rangle \) objects or lists of \(\langle \)p-form\(\rangle \) expressions. In the latter case, the expressions are fed to the coframing operator (section 20.18.4.0). The contact system for the bundle \(J^r(M,N)\) of \(r\)-jets of maps \(M\to N\) is thus returned by contact(r,M,N). Source and target spaces may have anholonomic cobases. Indexed names for the jet bundle fibre coordinates are constructed using the identifiers in the source and target cobases.

Examples:

pform {x,y,z,u,v}=0,{e i,w a}=1;
indexrange {i}={1,2},{a}=1;
contact(1,{x,y,z},{u,v});

   EDS({d u - u *d x - u *d y - u *d z,
               x        y        z
        d v - v *d x - v *d y - v *d z},{d x,d y,d z})
               x        y        z

OMrules := index_expand{d e(1)=>e(1)^e(2),
                        d e(2)=>0,d w(a)=>0}$

contact(2,{e(i)},{w(a)}) where OMrules;

         1    1    1    1    2
   EDS({w  - w   *e  - w   *e ,
                1         2
           1      1      1    1      2
        d w    - w     *e  - w     *e ,
             1      1 1         1 2
           1          1        1     1    1      2
        d w    + ( - w      + w   )*e  - w     *e },
             2          1 2      1          2 2

         1  2
       {e ,e })

pde2eds

A PDE system can be encoded into an \(\langle \)EDS\(\rangle \) using pde2eds. The syntax is

pde2eds(\(\langle \)pde\(\rangle \)\(\,[\),\(\langle \)dependent\(\rangle \),\(\langle \)independent\(\rangle \)\(]\,\))

where \(\langle \)pde\(\rangle \) is a list of equations or expressions (implicitly assumed to vanish) specifying the PDE system using either the standard REDUCE df operator, or the EXCALC @ operator. If the optional variable lists \(\langle \)dependent\(\rangle \) and \(\langle \)independent\(\rangle \) are not given, pde2eds infers them from the expressions in \(\langle \)pde\(\rangle \). The order of each dependent variable is determined automatically.

The result returned by pde2eds is an \(\langle \)EDS\(\rangle \) based on the contact system of the relevant mixed-order jet bundle. Any of the \(\langle \)pde\(\rangle \) members which is in solved form is used to pull back this contact system. Any remaining expressions or unresolved equations are simply appended as 0-forms: before many of the analysis tools (section 20.18.7) can be applied, it is necessary to convert this to a system generated in positive degree using the lift operator (section 20.18.6.0).

The automatic inference of dependent and independent variables is governed by the following rules. The independent variables are all those with respect to which derivatives appear. The dependent variables are those for which explicit derivatives appear, as well as any which have dependencies (as declared by depend or fdomain) or which are 0-forms. To exclude a variable from the dependent variable list (for example, because it is regarded as given) or to include extra independent variables, use the optional arguments to pde2eds.

One of the awkward points about pde2eds is that implicit dependence is changed globally. In order for the df and @ operators to be used to express the PDE, the \(\langle \)dependent\(\rangle \) variables must depend (via depend or fdomain) on the \(\langle \)independent\(\rangle \) variables. On the other hand, in the \(\langle \)EDS\(\rangle \), these variables are all completely independent coordinates. The pde2eds operator thus removes the implicit dependence so that the \(\langle \)EDS\(\rangle \) is correct upon return. This means that the \(\langle \)pde\(\rangle \) will no longer evaluate properly until such time as the dependence is manually restored, whereupon the \(\langle \)EDS\(\rangle \) will no longer be correct, and so on.

To assist with this difficulty, pde2eds saves a record of the dependencies it has removed in the shared variable dependencies. The operator mkdepend can be used to restore the initial state.

See also the operators pde2jet (section 20.18.14.0) and mkdepend (section 20.18.14.0).

Example:

depend u,x,y; depend v,x,y;
pde2eds({df(u,y,y)=df(v,x),df(v,y)=y*df(v,x)});

   EDS({d u - u *d x - u *d y,
               x        y

        d u  - u   *d x - u   *d y,
           x    x x        y x

        d u  - u   *d x - v *d y,
           y    y x        x

        d v - v *d x - v *y*d y},d x^d y)
               x        x

dependencies;

   {{u,y,x},{v,y,x}}

set_coframing

The background coframing (section 20.18.3.0) is set with set_coframing. The syntax is

set_coframing\(\langle \)arg\(\rangle \)

where \(\langle \)arg\(\rangle \) is a \(\langle \)coframing\(\rangle \) or an \(\langle \)EDS\(\rangle \) and the previous background coframing is returned. All rules, orderings etc pertaining to the previous background coframing are removed and replaced by those for the new \(\langle \)coframing\(\rangle \). The special form

set_coframing()

clears the background coframing entirely and returns the previous one.

20.18.5 Inspecting EDS objects

Given an \(\langle \)EDS\(\rangle \) or some other EDS structure, it is often desirable to inspect or extract some part of it. The operators described in this section do just that. Many of them accept various types of arguments and return the relevant information in each case.

cobasis

cobasis\(\langle \)arg\(\rangle \)

returns the cobasis for \(\langle \)arg\(\rangle \), which may be either a \(\langle \)coframing\(\rangle \) or an \(\langle \)EDS\(\rangle \) (sections 20.18.2.0, 20.18.3). The order of the items in the list gives the \(\langle \)kernel\(\rangle \) ordering which applies when the \(\langle \)coframing\(\rangle \) in \(\langle \)arg\(\rangle \) is active.

coordinates

coordinates\(\langle \)arg\(\rangle \)

returns the coordinates for \(\langle \)arg\(\rangle \), which may be either a \(\langle \)coframing\(\rangle \), an \(\langle \)EDS\(\rangle \), or a list of \(\langle \)expr\(\rangle \) (sections 20.18.2.0, 20.18.3). The coordinates in a list of \(\langle \)expr\(\rangle \) are defined to be those 0-form \(\langle \)kernels\(\rangle \) with no implicit dependencies.

Examples:

coordinates contact(3,{x},{u});

   {x,u,u ,u   ,u     }
         x  x x  x x x

fdomain u=u(x);
coordinates {d u+d y};

   {x,y}

structure_equations

structure_equations\(\langle \)arg\(\rangle \)

returns the structure equations (cf section 20.18.2.0) for \(\langle \)arg\(\rangle \), which may be either a \(\langle \)coframing\(\rangle \), an \(\langle \)EDS\(\rangle \), or a \(\langle \)transform\(\rangle \) (sections 20.18.2.0, 20.18.3, 20.18.3.0). In the case of a \(\langle \)transform\(\rangle \), it is assumed the exterior derivatives of the right-hand sides are known, and a list giving the exterior derivatives of the left-hand sides is returned. This requires inverting the transformation. In case this has already been done, and was time consuming, an alternative syntax

structure_equations(\(\langle \)transform\(\rangle \),\(\langle \)inverse transform\(\rangle \))

avoids recomputing the inverse.

Example:

structure_equations{e 1=d x/x,e 2=x*d y};

       1         2     1  2
   {d e  => 0,d e  => e ^e }

restrictions

restrictions\(\langle \)arg\(\rangle \)

returns the restrictions for \(\langle \)arg\(\rangle \), which may be either a \(\langle \)coframing\(\rangle \) or an \(\langle \)EDS\(\rangle \) (sections 20.18.2.0, 20.18.3). The result is a list of inequalities.

system

system\(\langle \)EDS\(\rangle \)

returns the system component of an \(\langle \)EDS\(\rangle \) (sections 20.18.3, 20.18.3.0) as a list of \(\langle \)p-form\(\rangle \) expressions. (The REDUCE command system operates as before: the syntax

system "\(\langle \)command\(\rangle \)"

executes an operating system command.)

independence

independence\(\langle \)EDS\(\rangle \)

returns the independence condition of an \(\langle \)EDS\(\rangle \) (section 20.18.3) as a list of \(\langle \)1-form\(\rangle \) expressions.

properties

properties\(\langle \)EDS\(\rangle \)

returns the currently known properties of an \(\langle \)EDS\(\rangle \) (sections 20.18.3, 20.18.3.0) as a list of equations of the form \(\langle \)keyword\(\rangle \) = \(\langle \)value\(\rangle \).

Example:

properties closure contact(1,{x},{u});

   {closed=1,pfaffian=1,quasilinear=1}

one_forms

one_forms\(\langle \)arg\(\rangle \)

returns the \(1\)-forms in \(\langle \)arg\(\rangle \), which may be either an \(\langle \)EDS\(\rangle \) or a list of \(\langle \)expr\(\rangle \) (sections 20.18.3, 20.18.3.0).

Example:

one_forms {5,x*y - u,d u - x*d y,d u^d x- x*d y^d x};

   {d u - d y*x}

zero_forms, nought_forms

zero_forms\(\langle \)arg\(\rangle \)

returns the \(0\)-forms in \(\langle \)arg\(\rangle \), which may be either an \(\langle \)EDS\(\rangle \) or a list of \(\langle \)expr\(\rangle \) (sections 20.18.3, 20.18.3.0). The alternative syntax nought_forms does the same thing.

Example:

zero_forms {5,x*y - u,d u - x*d y,d u^d x- x*d y^d x};

   {5, - u + x*y}

20.18.6 Manipulating EDS objects

The abililty to change coordinates or cobasis, or to modify the system or coframing can make the difference between an intractible problem and a solvable one. The facilities described in this section form the low-level core of EDS functions.

Most of the operators in this section can be applied to both \(\langle \)EDS\(\rangle \) and \(\langle \)coframing\(\rangle \) objects. Where it makes sense (eg pullback, restrict and transform), they can be applied to a \(\langle \)system\(\rangle \), or list of differential forms as well.

augment

augment(\(\langle \)EDS\(\rangle \),\(\langle \)system\(\rangle \))

appends the extra forms in the second argument to the system part of the first. If the forms in the \(\langle \)system\(\rangle \) do not live on the coframing of the \(\langle \)EDS\(\rangle \), an error results. The original \(\langle \)EDS\(\rangle \) is unchanged.

Example:

% Non-Pfaffian system for a Monge-Ampere equation
S := contact(1,{x,y},{z})$
S := augment(S,{d z(-x)^d z(-y)});

   s := EDS({d z - z *d x - z *d y,
                    x        y

             d z ^d z },{d x,d y})
                x    y

cross

The infix operator cross gives the direct product of \(\langle \)coframing\(\rangle \) objects. The syntax is

\(\langle \)arg1\(\rangle \) cross\(\langle \)arg2\(\rangle \) \(\,[\)cross\(\cdots \)\(]\,\)

The first argument may be either a \(\langle \)coframing\(\rangle \) (section 20.18.2.0) or an \(\langle \)EDS\(\rangle \) (section 20.18.3). The remaining arguments may be either \(\langle \)coframing\(\rangle \) objects or any valid argument to the coframing operator (section 20.18.4.0), in which case the corresponding \(\langle \)coframing\(\rangle \) is automatically inferred. The arguments may not contain any common coordinates or cobasis elements.

If the first argument is an \(\langle \)EDS\(\rangle \), the result is the \(\langle \)EDS\(\rangle \) lifted to the direct product space. In this way, it is possible to execute a pullback under a projection.

Example:

coordinates(contact(1,{x,y},{u}) cross {v});

   {x,y,u,u ,u ,v}
           x  y

pullback

Pullbacks with respect to an EDS \(\langle \)map\(\rangle \) (section 20.18.3.0) have the syntax

pullback(\(\langle \)arg\(\rangle \),\(\langle \)map\(\rangle \))

where \(\langle \)arg\(\rangle \) can be any one of \(\langle \)EDS\(\rangle \), \(\langle \)coframing\(\rangle \), \(\langle \)system\(\rangle \) or \(\langle \)p-form\(\rangle \) expression (sections 20.18.3, 20.18.2.0, 20.18.3.0). The result is of the same type as \(\langle \)arg\(\rangle \).

For an \(\langle \)EDS\(\rangle \) or \(\langle \)coframing\(\rangle \) with anholonomic cobasis, pullback calculates the pullbacks of the cobasis elements and chooses a cobasis for the source coframing itself. For a \(\langle \)system\(\rangle \), any zeroes in the result are dropped from the list.

Examples:

pullback(contact(1,{x,y},{u}),{u(-y) = u*u(-x)});

   EDS({d u - u *d x - u *u*d y},{d x,d y})
               x        x

M := coframing({e 1,e 2},{r},{r neq 0},
               {d r=>e 1,d e 1=>0,d e 2=>e 1^e 2/r})$

pullback(M,{r=1/x});
                                     2
               2              2     e ^d x
   coframing({e ,d x},{x},{d e  => --------},{x neq 0})
                                      x

pullback(ws,{x=0});

 ***** Map image not within target coframing in pullback

pullback({y*d y,d y - d x},{y=x});

   {d x*x}

restrict

Restrictions with respect to an EDS \(\langle \)map\(\rangle \) (section 20.18.3.0) have the syntax

restrict(\(\langle \)arg\(\rangle \),\(\langle \)map\(\rangle \))

where \(\langle \)arg\(\rangle \) can be any one of \(\langle \)EDS\(\rangle \), \(\langle \)coframing\(\rangle \), \(\langle \)system\(\rangle \) or \(\langle \)p-form\(\rangle \) expression (sections 20.18.3, 20.18.2.0, 20.18.3.0). The result is of the same type as \(\langle \)arg\(\rangle \). The action of restrict is similar to that of pullback, except that only scalar coefficients are affected: 1-form variables are unchanged.

Examples:

% Bring a system into normal form
%  by restricting the coframing

S := eds({u*d v - v*d u},{d x});

   s := EDS({v*d u - u*d v},{d x})

restrict(S,{u neq 0});

               v
   EDS({d v - ---*d u},{d x})
               u

% Difference between restrict and pullback

pullback({x*d x - y*d y},{x=y,y=1});

   {}

restrict({x*d x - y*d y},{x=y,y=1});

   {d x - d y}

transform

A change of cobasis is made using the transform operator

transform(\(\langle \)arg\(\rangle \),\(\langle \)transform\(\rangle \))

where \(\langle \)arg\(\rangle \) can be any one of \(\langle \)EDS\(\rangle \), \(\langle \)coframing\(\rangle \), \(\langle \)system\(\rangle \) or \(\langle \)p-form\(\rangle \) expression (sections 20.18.3, 20.18.2.0, 20.18.3.0) and \(\langle \)transform\(\rangle \) is a list of substitutions (cf section 20.18.3.0). The result is of the same type as \(\langle \)arg\(\rangle \).

For an \(\langle \)EDS\(\rangle \) or \(\langle \)coframing\(\rangle \), transform can detect whether the tranformation is given in the forward or reverse direction and invert accordingly. Structure equations are updated correctly. If an exact cobasis element is eliminated, its expression in terms of the new cobasis is added to the list of structure equations, since the corresponding coordinate may still be present elsewhere in the structure.

Example:

S := contact(1,{x},{u});

   s := EDS({d u - u *d x},{d x})
                    x

new := {e(1) = first system S,w(1) = d x};

            1               1
   new := {e =d u - d x*u ,w =d x}
                         x

S := transform(S,new);

              1    1
   s := EDS({e },{w })

structure_equations s;

       1             1
   {d e  =>  - d u ^w ,
                  x
       1
    d w  => 0,

            1       1
    d u => e  + u *w ,
                 x
            1
    d x => w }

lift

Many of the analysis tools (section 20.18.7) cannot treat systems containing 0-forms. The lift operator

lift\(\langle \)EDS\(\rangle \)

solves the \(0\)-forms in the system and uses the solution to pull back to a smaller manifold. This may generate new \(0\)-form conditions (in the course of bringing the pulled-back system into normal form), in which case the process is repeated until the system is generated in positive degree. In non-linear problems, the solution space of the 0-forms may be a variety, in which case a compound \(\langle \)EDS\(\rangle \) (section 20.18.3) will result. If edsverbose is on (section 20.18.9.0), the solutions are displayed as they are generated.

Example:

S := augment(contact(2,{x,y},{u}),{u(-y,-y)-u(-x,-x)})$
on edsverbose;
lift S;
   Solving 0-forms
   New equations:
   u   =u
    y y  x x

   EDS({d u - u *d x - u *d y,
               x        y

        d u  - u   *d x - u   *d y,
           x    x x        x y

        d u  - u   *d x - u   *d y},{d x,d y})
           y    x y        x x

20.18.7 Analysing exterior systems

This section describes higher level operators for extracting information about exterior systems. Many of them require a \(\langle \)EDS\(\rangle \) in normal form (section 20.18.3.0) generated in positive degree as input, but some can also analyse a \(\langle \)system\(\rangle \) (section 20.18.3.0) or a single \(\langle \)p-form\(\rangle \). Only trivial examples are provided in this section, but many of these operators are used in the longer examples in the test file which accompanies this package.

cartan_system

The Cartan system of a form or system \(S\) is the smallest Pfaffian system \(C\) such that \(\Lambda (C)\) contains a set \(I\) of forms algebraically equivalent to \(S\). The Cartan system is also known as the associated Pfaff system or retracting space. An alternative characterisation is to note that the annihilator \(C^\perp \) comprises all vectors \(V\) satisfying \(i_V S \simeq 0 \pmod {S}\). Note this is a purely algebraic concept: \(S\) need not be closed under differentiation. See also cauchy_system (section 20.18.7.0).

The operator

cartan_system\(\langle \)arg\(\rangle \)

returns the Cartan system of \(\langle \)arg\(\rangle \), which may be an \(\langle \)EDS\(\rangle \), a \(\langle \)system\(\rangle \) or a single \(\langle \)p-form\(\rangle \) expression (sections 20.18.3, 20.18.3.0). For an \(\langle \)EDS\(\rangle \), the result is a Pfaffian \(\langle \)EDS\(\rangle \) on the same manifold, otherwise it is a \(\langle \)system\(\rangle \). The argument must be generated in positive degree.

Example:

cartan_system{d u^d v + d v^d w + d x^d y};

   {d u - d w,d v,d x,d y}

cauchy_system

The Cauchy system \(C\) of a form or system \(S\) is the Cartan system or retracting space of its closure under exterior differentiation (section 20.18.7.0). The annihilator \(C^\perp \) consists of the Cauchy vectors for the \(S\).

The operator

cauchy_system\(\langle \)arg\(\rangle \)

returns the Cauchy system of \(\langle \)arg\(\rangle \), which may be an \(\langle \)EDS\(\rangle \), a \(\langle \)system\(\rangle \) or a single \(\langle \)p-form\(\rangle \) expression (sections 20.18.3, 20.18.3.0). For an \(\langle \)EDS\(\rangle \), the result is a Pfaffian \(\langle \)EDS\(\rangle \) on the same manifold, otherwise it is a \(\langle \)system\(\rangle \). The argument must be generated in positive degree.

Example:

cauchy_system{u*d v + v*d w + x*d y};

   {d u,d v,d w,d x,d y}

characters

The Cartan characters \(\{s_1,...,s_n\}\) of an \(\langle \)EDS\(\rangle \) or \(\langle \)tableau\(\rangle \) (sections 20.18.3, 20.18.3.0) are obtained with

characters\(\langle \)EDS\(\rangle \)
or
characters\(\langle \)tableau\(\rangle \)

The zeroth character \(s_0\) is not returned, it is simply the number of \(1\)-forms in the \(\langle \)EDS\(\rangle \) (cf one_forms, section 20.18.5.0). The definition used for the last character: \(s_n = (d - n) - (s_0 + s_1 + ... + s_{n-1})\), where \(d\) is the manifold dimension, allows Cartan’s test to be used even when Cauchy characteristics are present.

For a nonlinear \(\langle \)EDS\(\rangle \), the Cartan characters can vary from stratum to stratum of the Grassmann bundle variety of ordinary integral elements (cf. the operator grassmann_variety in section 20.18.7.0). Nonetheless, they are constant on each stratum, so it suffices to calculate them at one point (ie at one integral element). This is done using the syntax

characters(\(\langle \)EDS\(\rangle \),\(\langle \)integral element\(\rangle \))

where \(\langle \)integral element\(\rangle \) is a list of \(1\)-forms (cf section 20.18.3.0).

The Cartan characters are calculated from the reduced characters for a fixed flag of integral elements based on the \(1\)-forms in the independence condition of an \(\langle \)EDS\(\rangle \). This can lead to incorrect results if the flag is somehow singular, so two switches are provided to overcome this (section 20.18.13). First, genpos looks at a generic flag by using a general linear transformation to put the system in general position. This guarantees correct results, but can be too slow for practical purposes. Secondly, ranpos performs a linear transformation using a sparse matrix of random integers. In most cases, this is much faster than using general position, and a few repetitions give some confidence in the results.

Example:

S := pullback(contact(2,{x,y},{u}),{u(-x,-y)=0});

   s := EDS({d u - u *d x - u *d y,
                    x        y

             d u  - u   *d x,
                x    x x

             d u  - u   *d y},{d x,d y})
                y    y y

characters S;

   {1,1}

on ranpos; characters S;

   {2,0}

fclosure

closure\(\langle \)EDS\(\rangle \)

returns the closure of the \(\langle \)EDS\(\rangle \) under exterior differentiation.

Owing to conflicts with the requirements of a normal form (section 20.18.3.0), closure cannot guarantee that the resulting system is closed if the \(\langle \)EDS\(\rangle \) contains 0-forms.

derived_system

derived_system\(\langle \)arg\(\rangle \)

returns the first derived system of \(\langle \)arg\(\rangle \), which must be a Pfaffian \(\langle \)EDS\(\rangle \) or \(\langle \)system\(\rangle \). Repeated use gives the derived flag leading to the maximal integrable subsystem.

Example:

pform {p,r,x,y,z}=0; korder z;
derived_system eds({d z - q*d y,d p - e**z*d y,
                    d r - e**z*p*d y,d x},{d y});

               z            z
   EDS({d p - e *d y,d r - e *p*d y,d x},{d y})

derived_system ws;

               1
   EDS({d p - ---*d r,d x},{d y})
               p

derived_system ws;

               1
   EDS({d p - ---*d r,d x},{d y})
               p

fdim_grassmann_variety

dim_grassmann_variety\(\langle \)EDS\(\rangle \)

returns the dimension of the Grassmann bundle variety of ordinary integral elements for an \(\langle \)EDS\(\rangle \) (cf grassmann_variety, section 20.18.7.0). This number is useful, for example, in Cartan’s test. For a nonlinear \(\langle \)EDS\(\rangle \), this can vary from stratum to stratum of the variety, so

dim_grassmann_variety(\(\langle \)EDS\(\rangle \),\(\langle \)integral element\(\rangle \))

returns the dimension of the stratum containing the \(\langle \)integral element\(\rangle \) (cf section 20.18.3.0).

dim

dim\(\langle \)arg\(\rangle \)

returns the dimension of the manifold underlying \(\langle \)arg\(\rangle \), which can be either an \(\langle \)EDS\(\rangle \) or a \(\langle \)coframing\(\rangle \) (sections 20.18.3, 20.18.2.0).

involution

involution\(\langle \)EDS\(\rangle \)

repeatedly prolongs an \(\langle \)EDS\(\rangle \) until it reaches involution or inconsistency (cf prolong, section 20.18.7.0). The system must be in normal form (section 20.18.3.0) and generated in positive degree. For nonlinear problems, all branches of the prolongation tree are followed. The result is an \(\langle \)EDS\(\rangle \) (usually a compound one for nonlinear problems, see section 20.18.3) giving the involutive prolongation. In case some variety couldn’t be resolved during the process, the relevant branch is truncated at that point and represented by a system with 0-forms, as with grassmann_variety (section 20.18.7.0). The result of involution might then not be in involution.

If the edsverbose switch is on (section 20.18.9.0), a trace of the prolongations is produced. See the Janet problem in the test file for an example.

linearise, linearize

A nonlinear exterior system can be linearised at some point on the manifold with respect to any integral element, yielding a constant coefficient exterior system with the same Cartan characters. In EDS, reference to the point is omitted, so the result is an exterior system linearised with respect to a distribution of integral elements. The syntax is

linearise(\(\langle \)EDS\(\rangle \),\(\langle \)integral element\(\rangle \))

but linearize will work just as well. See the isometric embeddings example in the test file.

For a quasilinear \(\langle \)EDS\(\rangle \) (cf. section 20.18.8.0),

linearise\(\langle \)EDS\(\rangle \)

returns an equivalent exterior system containing only linear generators.

Example:

f := d u^d x + d v^d y$
S := eds({f,d v^f},{d x,d y});

   s := EDS({d u^d x + d v^d y,d u^d v^d x},{d x,d y})

linearise S;

   EDS({d u^d x + d v^d y},{d x,d y})

integral_element

integral_element\(\langle \)EDS\(\rangle \)

returns a random \(\langle \)integral element\(\rangle \) of the \(\langle \)EDS\(\rangle \) (section 20.18.3.0). The system must be in normal form (section 20.18.3.0) and generated in positive degree. This integral element is found using the method described by Wahlquist [Wah93] (essentially the Cartan-Kähler construction filling in the free variables from each polar system with random integer values). This method can fail on non-involutive systems, or \(\langle \)EDS\(\rangle \) objects whose independence conditions indicate a singular flag of integral elements (cf the discussion about Cartan characters, section 20.18.7.0).

See the isometric embedding problem in the test file for an example.

prolong

prolong\(\langle \)EDS\(\rangle \)

calculates the prolongation of the \(\langle \)EDS\(\rangle \) to the Grassmann bundle variety of integral elements. The system must be in normal form (section 20.18.3.0) and generated in positive degree. The variety is decomposed using essentially the REDUCE solve operator. If no solutions can be found, the variety is empty, and the prolongation is the inconsistent \(\langle \)EDS\(\rangle \) (section 20.18.3). Otherwise, the result is a list of variety components, which fall into three classes:

1.
a submanifold of the Grassmann bundle which surjects onto the base manifold. The result in this case is the pullback of the Grassmann bundle contact \(\langle \)EDS\(\rangle \) to this submanifold.
2.
a submanifold of the Grassmann bundle which does not surject onto the base manifold (ie cannot be presented by solving for Grassmann bundle fibre coordinates). The result in this case is the pullback of the original \(\langle \)EDS\(\rangle \) to the projection onto the base manifold. If 0-forms arise in bringing the pullback to normal form, these are solved recursively and the system pulled back again until the result is generated in positive degree (cf lift, section 20.18.6.0).
3.
a component of the variety which solve was not able to resolve explicitly. The result in this case is the Grassmann bundle contact \(\langle \)EDS\(\rangle \) augmented with the 0-forms which solve couldn’t treat. This can be extracted from the result of prolong and manipulated further “by hand”,

The result returned by prolong will, in general, be a compound \(\langle \)EDS\(\rangle \) (section 20.18.3). If the switch edsverbose (section 20.18.9.0) is on, a trace of the prolongation is printed.

The \(\langle \)map\(\rangle \)s which are generated in a prolong call are available subsequently in the global variable pullback_maps. This facility is still very primitive and unstructured. It should be extended to the involution operator as well...

Example:

pde := {u(-y,-y)=u(-x,-x)**2/2,u(-x,-y)=u(-x,-x)};

                       2
                 (u   )
                   x x
   pde := {u   =---------,u   =u   }
            y y     2      x y  x x

S := pullback(contact(2,{x,y},{u}),pde)$
on edsverbose;
prolong S;
   Reduction using new equations:
   u   =1
    x x
   Prolongation using new equations:
   u     =0
    x x x
   u     =0
    x x y

   {EDS({d u - u *d x - u *d y,
                x        y

         d u  - d x - d y,
            x
                       1
         d u  - d x - ---*d y},{d x,d y}),
            y          2

    EDS({d u - u *d x - u *d y,
                x        y

         d u  - u   *d x - u   *d y,
            x    x x        x x
                                  2
                            (u   )
                              x x
         d u  - u   *d x - ---------*d y,
                                                                     

                                                                     
            y    x x           2

         d u   },{d x,d y})}
            x x

tableau

tableau\(\langle \)EDS\(\rangle \)

returns the \(\langle \)tableau\(\rangle \) (section 20.18.3.0) of a quasilinear Pfaffian \(\langle \)EDS\(\rangle \), which must be in normal form and generated in positive degree.

Example:

tableau contact(2,{x,y},{u});

   [d u     d u   ]
   [   x x     x y]
   [              ]
   [d u     d u   ]
   [   x y     y y]

torsion

For a semilinear Pfaffian exterior differential system, the torsion corresponds to first-order integrability conditions for the system. Specifically,

torsion\(\langle \)EDS\(\rangle \)

returns a list of 0-forms describing the projection of the Grassmann bundle variety of integral elements onto the base manifold. If the switch edssloppy (section 20.18.11) is on, quasilinear systems are treated as semilinear. A semilinear system is involutive if both the torsion is empty, and Cartan’s test for the reduced characters is satisfied.

Example:

S := pullback(contact(2,{x,y},{u}),
              {u(-y,-y)=u(-x),u(-x,-y)=u});

   s := EDS({d u - u *d x - u *d y,
                    x        y

             d u  - u   *d x - u*d y,
                x    x x

             d u  - u*d x - u *d y},{d x,d y})
                y            x
torsion s;

   {u    - u }
     x x    y

grassmann_variety

Given an exterior system \((S,\Omega ,M)\) with independence condition of rank \(n\), the Grassmann bundle of \(n\)-planes over \(M\) contains a submanifold characterised by those \(n\)-planes compatible with the independence condition. All integral elements must lie in this submanifold. The operator

grassmann_variety\(\langle \)EDS\(\rangle \)

returns the contact system for this part of the Grassmann bundle augmented by the 0-forms specifying the variety of integral elements of \(S\). In cases where prolong (section 20.18.7.0) is unable to decompose the variety automatically, grassmann_variety can be used in combination with zero_forms (section 20.18.5.0) to calculate the variety conditions. Any solutions found “by hand” can be incorporated using pullback (section 20.18.6.0).

Example: Using the system from the example in section 20.18.7.0:

zero_forms grassmann_variety S;

   { - u     *u    + u     ,
        x x x  x x    x x y

     - u      + u     }
        x x x    x x y

solve ws;

   Unknowns: {u     ,u     ,u   }
               x x x  x x y  x x

   {{u     =0,u     =0},
      x x y    x x x

    {u   =1,u     =u     }}
      x x    x x x  x x y

The second solution contains an integrability condition.

20.18.8 Testing exterior systems

The operators in this section allow various properties of an \(\langle \)EDS\(\rangle \) to be checked. These checks are done automatically when required on entry to the routines in sections 20.18.6 and 20.18.7, but sometimes it is useful to know explicitly. The result is either a 1 (true) or a 0 (false), so the operators can be used in boolean expressions within if statements etc. Since checking these properties can be very time-consuming, the result of the first test is stored on the \(\langle \)properties\(\rangle \) record of an \(\langle \)EDS\(\rangle \) to avoid re-checking. This memory can be cleared using the cleanup operator.

closed

closed\(\langle \)arg\(\rangle \)

checks whether \(\langle \)arg\(\rangle \), which may be an \(\langle \)EDS\(\rangle \), a \(\langle \)system\(\rangle \) or a single \(\langle \)p-form\(\rangle \) is closed under exterior differentiation.

Examples:

closed(x*d x);

   1

closed {d u - p*d x,d p - p/y*d x};

   0

involutive

involutive\(\langle \)EDS\(\rangle \)

checks whether \(\langle \)EDS\(\rangle \) is involutive, using Cartan’s test. See the test file for examples.

pfaffian

pfaffian\(\langle \)EDS\(\rangle \)

checks whether \(\langle \)EDS\(\rangle \) is a Pfaffian system: generated by a set of \(1\)-forms and their exterior derivatives. The \(\langle \)EDS\(\rangle \) must be in normal form (section 20.18.3.0) for this to succeed. Systems with 0-forms are non-Pfaffian by definition in EDS.

Examples:

pfaffian eds({d u - p*d x - q*d y,d p^d x+d q^d y},
             {d x,d y});

   1

pfaffian eds({d u - p*d x - q*d y,d p^d q},{d x,d y});

   0

quasilinear

An exterior system \((S,\Omega ,M)\) is said to be quasilinear if, when written in the standard cobasis \(\{\theta ^a,\pi ^\rho ,\omega ^i\}\) (section 20.18.3.0), its closure can be generated by a set of forms which are of combined total degree 1 in \(\{\theta ^a,\pi ^\rho \}\). The operation

quasilinear\(\langle \)EDS\(\rangle \)

checks whether the closure of \(\langle \)EDS\(\rangle \) is a quasilinear system. The \(\langle \)EDS\(\rangle \) must be in normal form (section 20.18.3.0) for this to succeed. Systems with 0-forms are not quasilinear by definition in EDS.

Examples:

% A system where pi(rho)={d p,d q},
%  and which looks non-linear

S := eds({d u - p*d x - q*d y,d p^d q^d y},{d x,d y})$

quasilinear S;

   1

linearise closure S;

   EDS({d u - p*d x - q*d y,
         - d p^d x - d q^d y},{d x,d y})

% One which is really non-linear

quasilinear
     eds({d u - p*d x - q*d y,d p^d q},{d x,d y});

   0

semilinear

Let \((S,\Omega ,M)\) be such that, written in the standard cobasis \(\{\theta ^a,\pi ^\rho ,\omega ^i\}\) (section 20.18.3.0), its closure is explicitly quasilinear. If the coefficients of \(\{\pi ^\rho \}\) depend only on the independent variables, then the system is said to be semilinear. The operation

semilinear\(\langle \)EDS\(\rangle \)

checks whether closure of \(\langle \)EDS\(\rangle \) is a semilinear system. The \(\langle \)EDS\(\rangle \) must be in normal form (section 20.18.3.0) for this to succeed. Systems with 0-forms are not semilinear by definition in EDS.

For semilinear systems, the expressions determining the Grassmann bundle variety of integral elements will be linear in the Grassmann bundle fibre coordinates, with coefficients which depend only upon the independent variables. This allows alternative, faster algorithms to be used in analysis.

If the switch edssloppy is on (section 20.18.11), all quasilinear systems are treated as if they are semilinear.

Examples:

% A semilinear system: @(u,y) = y*@(u,x)
S := eds({d u - p*d x - p*y*d y},{d x,d y})$
semilinear S;

   1
% A quasilinear system: @(u,y) = u*@(u,x)
S := eds({d u - p*d x - p*u*d y},{d x,d y})$
quasilinear S;

   1
semilinear S;

   0
on edssloppy;
semilinear S;

   1

frobenius

frobenius\(\langle \)arg\(\rangle \)

checks whether \(\langle \)arg\(\rangle \), which may be an \(\langle \)EDS\(\rangle \) or a \(\langle \)system\(\rangle \), is a completely integrable Pfaffian system.

Examples:

if frobenius eds({d u -p*(d x+d y)},d x^d y)
  then yes else no;

   no

if frobenius eds({d u -u*(d x+d y)},d x^d y)
  then yes else no;

   yes

equiv

\(\langle \)EDS1\(\rangle \) equiv\(\langle \)EDS2\(\rangle \)

checks whether \(\langle \)EDS1\(\rangle \) and \(\langle \)EDS2\(\rangle \) are algebraically equivalent as exterior systems (ie generate the same algebraic ideal).

Examples:

S1 := contact(2,{x,y},{u})$
S2 := augment(S1,foreach f in system S1
                       join {d f,d x^d f})$
if S1 equiv S2 then yes else no;

   no

if closure S1 equiv S2 then yes else no;

   yes

20.18.9 Switches

EDS provides several switches to govern the display of information and speed or reliability of the results.

edsverbose

If edsverbose is on, a number of operators (eg prolong, involution) will display additional information as the calculation progresses. For large problems, this can produce too much output to be useful, so edsverbose is off by default. This allows only warning (***) and error (*****) messages to be printed.

20.18.10 edsdebug

If edsdebug is on, EDS produces copious quantities of information, in addition to that produced with edsverbose on. This information is for debugging purposes, and may not make much sense without knowledge of the inner workings of EDS. edsdebug is off by default.

20.18.11 edssloppy

Normally, EDS will not divide by any expressions it does not know to be nowhere zero. If an \(\langle \)EDS\(\rangle \) can be brought into normal form only by restricting away from the zeroes of some coefficients, then these restrictions should be made using the restrict operator (section 20.18.6.0). However, if edssloppy is on, then EDS will, as a last resort, divide by whatever is necessary to bring an \(\langle \)EDS\(\rangle \) into normal form, invert a transformation, and so on. The relevant restrictions will be made automatically, so no inconsistency should arise. In addition, with edssloppyon, all quasilinear systems are treated as if they were semilinear (cf section 20.18.8.0). edssloppy is off by default.

20.18.12 edsdisjoint

When decomposing a variety into (something like) smooth components, EDS normally pays no attention to whether the components are disjoint. Turning on the switch edsdisjoint forces EDS to ensure the decomposition is a disjoint union (cf disjoin, section 20.18.14.0). For large problems this can lead to a proliferation of singular pieces. If some of these turn out to be uninteresting, EDS cannot re-join the remaining pieces into a smaller decomposition. edsdisjoint is off by default.

20.18.13 ranpos, genpos

When calculating Cartan characters (eg to check involution), EDS uses the independence condition of an \(\langle \)EDS\(\rangle \) as presented to define a flag of integral elements. Depending on the cobasis and ordering, this flag may be singular, leading to incorrect Cartan characters. To overcome this problem, the switches ranpos and genpos provide a means to select other flags. With ranposon, a flag defined by taking a random linear transformation of the \(1\)-forms in the independence condition will be used. The results may still be incorrect, but the likelihood is much lower. With genpos on, a generic (upper triangular) transformation is used. this guarantees the correct Cartan characters, but reduces performance too much to be useful for large problems. Both switches are off by default, and switching one on automatically switches the other off. See section 20.18.7.0 for an example.

20.18.14 Auxiliary functions

This section describes various operators designed to ease working with exterior forms and exterior systems in REDUCE.

invert

invert\(\langle \)transform\(\rangle \)

returns a \(\langle \)transform\(\rangle \) which is inverse to the given one (section 20.18.6.0). If the \(\langle \)transform\(\rangle \) given is only partial, the 1-form \(\langle \)kernel\(\rangle \)s to eliminate are chosen based on the prevailing kernel ordering. If a background coframing (section 20.18.3.0) is active, and edssloppy (section 20.18.11) is off, invert will divide by nowhere-zero expressions only.

Examples:

set_coframing coframing{u,v,w,x,y,z}$
invert {d u = 3*d x - d y + 5*d z, d v = d x + 2*d z};

   {d x=d v - 2*d z,d y= - d u + 3*d v - d z}

% A y coefficient forces a different choice of inverse

invert {d u = 3*d x - y*d y + 5*d z, d v = d x + 2*d z};

   {d x=2*d u - 5*d v + 2*d y*y,

    d z= - d u + 3*d v - d y*y}

linear_divisors

linear_divisors\(\langle \)pform\(\rangle \)

returns a basis for the space of linear divisors (1-form factors) of a \(\langle \)p-form\(\rangle \).

Example:

f := d p^d q^d u - d p^d q^d x*x + d p^d q^d z*y
     - d u^d v^d x*x + d u^d v^d z*y + d u^d x^d y
     + d x^d y^d z*y$
linear_divisors f;

   {d u - d x*x + d z*y}

exfactors

exfactors\(\langle \)pform\(\rangle \)

returns a list of factors for a \(\langle \)p-form\(\rangle \), consisting of the linear divisors plus one more factor. The list is ordered such that the original expression is a product of the factors in this order.

Example:

f := d p^d q^d u - d p^d q^d x*x + d p^d q^d z*y
     - d u^d v^d x*x + d u^d v^d z*y + d u^d x^d y
     + d x^d y^d z*y$
exfactors f;

   {d p^d q - d v^d x*x + d v^d z*y + d x^d y,
    d u - d x*x + d z*y}

f - (part(ws,0) := ^);

   0

index_expand

EXCALC caters for indexed variables in which various index names have been assigned a specific set of values. Any expression with paired indices is expanded automatically to an explicit sum over the index set (provided the EXCALC command nosum has not been applied). The EDS operator index_expand is designed to expand an expression with free indices to an explicit list over the index set, taking some limited account of the possible index symmetries.

The syntax is

index_expand\(\langle \)arg\(\rangle \)

where \(\langle \)arg\(\rangle \) can be an expression, a rule or equation or a boolean expression, or an arbitrarily nested list of these items. The result is a flattened list.

Examples:

indexrange {i,j,k}={1,2,3},{a,b}={x,y};
pform {e(i),o(a,b)}=1;
index_expand(e(i)^e(j));

     1  2  1  3  2  3
   {e ^e ,e ^e ,e ^e }

index_expand{o(-a,-b)+o(-b,-a) => 0};

   {2*o    => 0,o    + o    => 0, 2*o    => 0}
       x x       x y    y x          y y

pde2jet

A PDE system can be encoded into EDS jet variable notation using pde2jet. The syntax is as for pde2eds:

pde2jet(\(\langle \)pde\(\rangle \)\(\,[\),\(\langle \)dependent\(\rangle \),\(\langle \)independent\(\rangle \)\(]\,\))

where \(\langle \)pde\(\rangle \) is a list of equations or expressions (implicitly assumed to vanish) specifying the PDE system using either the standard REDUCE df operator, or the EXCALC @ operator. If the optional variable lists \(\langle \)dependent\(\rangle \) and \(\langle \)independent\(\rangle \) are not given, pde2jet infers them from the expressions in \(\langle \)pde\(\rangle \), using the same rules as pde2eds (section 20.18.4.0).

The result of pde2jet is the input \(\langle \)pde\(\rangle \), with all derivatives of dependent variables replaced by indexed 0-form variables from the appropriate jet bundle. Unlike pde2eds, pde2jet does not disturb the variable dependencies.

Example:

depend u,x,y; depend v,x,y;
pde2jet({df(u,y,y)=df(v,x),df(v,y)=y*df(v,x)});

   {u   =v ,
     y y  x

    v =v *y}
     y  x

mkdepend

The mkdepend operator is intended for restoring the dependencies destroyed by a call to pde2eds (section 20.18.4.0). The syntax is

mkdepend{\(\langle \)list of variables\(\rangle \),\(\cdots \)}

where the first variable in each list is declared to depend on the remaining ones.

disjoin

The disjoin operator takes a list of \(\langle \)maps\(\rangle \) (section 20.18.3.0) describing a decomposition of a variety, and returns an equivalent list of \(\langle \)maps\(\rangle \) such that the components are all disjoint. The background coframing (section 20.18.3.0) should be set appropriately before calling disjoin. The syntax is

disjoin{\(\langle \)map\(\rangle \),\(\cdots \)}

Example:

set_coframing coframing {x,y};
disjoin {{x=0},{y=0}};

   {{y=0,x neq 0},{x=0,y neq 0},{y=0,x=0}}

cleanup

To avoid lengthy recomputations, EDS stores various properties (section 20.18.3.0) and also many intermediate results in a hidden list attached to each \(\langle \)EDS\(\rangle \). When EDS detects a change in circumstances which could make the information innacurate, it is discarded and recomputed. Unfortunately, this mechanism is not perfect, and occasionally misses something which renders the results incorrect. In such a case, it is possible to discard all the properties and hidden information using the cleanup operator. The call

cleanup\(\langle \)arg\(\rangle \)

returns a copy of \(\langle \)arg\(\rangle \), which may be a \(\langle \)coframing\(\rangle \) or an \(\langle \)EDS\(\rangle \) which has been stripped of this auxilliary information. Note that the original input (with possible innacuracies) is left undisturbed by this operation: the result of cleanup must be used.

Example:

% An erroneous property assertion
S := eds({d u - p*d x},{d x,d y},{closed = 1})$
closure S;

   EDS({d u - p*d x},{d x,d y});

S := cleanup S$
properties S;

   {}

closure S;

   EDS({d u - p*d x, - d p^d x},{d x,d y});

reorder

All operations with a \(\langle \)coframing\(\rangle \) or \(\langle \)EDS\(\rangle \) temporarily override the prevailing kernel order with their own. Thus the ordering of the cobasis elements in a \(\langle \)coframing\(\rangle \) operator remains fixed, even when a REDUCE korder statement is issued. To enforce conformity to the prevailing kernel order, the reorder operator is available. The call

reorder\(\langle \)arg\(\rangle \)

returns a copy of \(\langle \)arg\(\rangle \), which may be a \(\langle \)coframing\(\rangle \) or an \(\langle \)EDS\(\rangle \) which has been reordered. Note that the original input is left undisturbed by this operation: the result of reorder must be used.

Example:

M := coframing {x,y,z};

   m := coframing({d x,d y,d z},{x,y,z},{},{})

korder z,y,x;
reorder m;

   coframing({d z,d y,d x},{z,y,x},{},{})

20.18.15 Experimental facilities

This section describes various operators in EDS which either not algorithmically well-founded, or whose implementation is very unstable, or which have known bugs.

poincare

The poincare operator implements the homotopy integral found in the proof of Poincaré’s lemma. The expansion point is the origin of the coordinates found in the input. The syntax is

poincare\(\langle \)p-form\(\rangle \)

If f is a \(p\)-form, then poincare f is a \((p-1)\)-form, and f - poincare d f is an exact \(p\)-form.

Examples:

poincare(3*d x^d y^d z);

   d x^d y*z - d x^d z*y + d y^d z*x

d ws;

   3*d x^d y^d z

2*x*d y - poincare d(2*x*d y);

   d x*y + d y*x

invariants

The invariants operator implements the algorithm implicit in the inductive proof of the Frobenius theorem. The syntax is

invariants(\(\langle \)system\(\rangle \)\(\,[\),\(\langle \)list of coordinate\(\rangle \)\(]\,\))

where \(\langle \)system\(\rangle \) is a set of \(1\)-forms satisfying the Frobenius condition. The optional second argument specifies the order in which the coordinates are projected away to get a trivially integrable system. The CRACK and ODESOLVE packages are used to solve the ODE systems which arise, so the limitations of these packages constrain the scope of this operator as well.

Examples:

invariants {d x*y + d y*x*z + d z*log(y)*x*y};

        z
   { - y *x}

invariants {d y*z**2 - d y*z + d z*y,
            d x*(1 - z) + d z*x};

       x     y*(z - 1)
   {-------,-----------}
     z - 1       z

symbol_relations

The symbol_relations operator finds the linear relations between the entries of the tableau matrix for a quasilinear system. The syntax is

symbol_relations(\(\langle \)EDS\(\rangle \), \(\langle \)identifier\(\rangle \))

where \(\langle \)EDS\(\rangle \) is a quasilinear Pfaffian system and \(\langle \)identifier\(\rangle \) is used to create a 2-indexed 1-form which will label the tableau entries.

Example:

S := pde2eds {df(u,y,y) = df(u,x,x)};

   s := EDS({d u - u *d x - u *d y,
                    x        y

             d u  - u   *d x - u   *d y,
                x    x x        x y

             d u  - u   *d x - u   *d y},d x^d y)
                y    x y        x x

symbol_relations(S,pi);

      1       2
   {pi    - pi   ,
        x       y
      1       2
    pi    - pi   }
        y       x

symbol_matrix

The symbol_matrix operator returns the symbol matrix for a quasilinear system in terms of a given variable. The syntax is

symbol_matrix(\(\langle \)EDS\(\rangle \), \(\langle \)identifier\(\rangle \))

where \(\langle \)EDS\(\rangle \) is a quasilinear Pfaffian system and \(\langle \)identifier\(\rangle \) is used to create an indexed 0-form which will parameterise the matrix.

Example:

% With the same system as for symbol_relations:

symbol_matrix(S,xi);

   [xi    - xi ]
   [  x       y]
   [           ]
   [xi    - xi ]
   [  y       x]

characteristic_variety

The characteristic_variety operator returns the equations specifying the characteristic variety for a quasilinear system in terms of a given variable. The syntax is

characteristic_variety(\(\langle \)EDS\(\rangle \), \(\langle \)identifier\(\rangle \))

where \(\langle \)EDS\(\rangle \) is a quasilinear Pfaffian system and \(\langle \)identifier\(\rangle \) is used to create an indexed 0-form variable. The result is a list of two lists: the first being the variety equations and the second the variables involved.

Example:

% With the same system as for symbol_relations:

characteristic_variety(S,xi);

          2        2
   {{(xi )  - (xi ) },
        x        y
    {xi ,xi }}
       x   y

20.18.16 Command tables

The tables in this appendix summarise the commands available in EDS. More detailed descriptions of the syntax and function of each command are to be found in the earlier sections. In each case, examples of the command are given, whereby the argument variables have the following types (see section 20.18.2):

\(E\), \(E'\) \(\langle \)EDS\(\rangle \)
\(S\) \(\langle \)system\(\rangle \)
\(M\), \(N\) \(\langle \)coframing\(\rangle \), or a \(\langle \)system\(\rangle \) specifying a \(\langle \)coframing\(\rangle \)
\(r\) \(\langle \)integer\(\rangle \)
\(\Omega \) \(\langle \)p-form\(\rangle \)
\(f\) \(\langle \)map\(\rangle \)
\(rsx\) \(\langle \)list of inequalities\(\rangle \)
\(cob\) \(\langle \)list of 1-form variables\(\rangle \)
\(crd\), \(dep\), \(ind\) \(\langle \)list of 0-form variables\(\rangle \)
\(drv\) \(\langle \)list of rules for exterior derivatives\(\rangle \)
\(pde\) \(\langle \)list of expressions or equations\(\rangle \)
\(X\) \(\langle \)transform\(\rangle \)
\(T\) \(\langle \)tableau\(\rangle \)
\(P\) \(\langle \)integral element\(\rangle \)



Command

Function



coframing(\(cob\),\(crd\),\(rsx\),\(drv\))

constructs a \(\langle \)coframing\(\rangle \) with the given cobasis \(cob\), coordinates \(crd\), restrictions \(rsx\) and structure equations \(drv\): \(crd\), \(rsx\) and \(drv\) are optional



coframing(\(S\))

constructs a \(\langle \)coframing\(\rangle \) capable of supporting the given \(\langle \)system\(\rangle \)



eds(\(S\),\(\Omega \),\(M\))

constructs a simple \(\langle \)EDS\(\rangle \) object with given system and independence condition: if \(M\) is not supplied, it is deduced from the rest



contact(\(r\),\(M\),\(N\))

constructs the \(\langle \)EDS\(\rangle \) for the contact system of the jet bundle \(J^r(M,N)\)



pde2eds(\(pde\),\(dep\),\(ind\))

converts a PDE system to an EDS: dependent and independent variables are deduced if they are not specified (variable dependencies are removed)



set_coframing(\(M\)) set_coframing(\(E\))

sets background coframing and returns previous one



set_coframing()

clears background coframing and returns previous one



Table 20.1: Commands for constructing EDS objects



Command

Function



coframing(\(E\))

extracts the underlying \(\langle \)coframing\(\rangle \)



coframing()

returns the current background coframing



cobasis(\(M\)) cobasis(\(E\))

extracts the underlying cobasis



coordinates(\(M\)) coordinates(\(E\))

extracts the coordinates



structure_equations(\(M\)) structure_equations(\(E\))

extracts the rules for exterior derivatives for cobasis and coordinates



restrictions(\(M\)) restrictions(\(E\))

extracts the inequalities describing the restrictions in the \(\langle \)coframing\(\rangle \)



system(\(E\))

extracts the \(\langle \)system\(\rangle \) part of \(E\)



independence(\(E\))

extracts the independence condition from \(E\) as a Pfaffian \(\langle \)system\(\rangle \)



properties(\(E\))

returns the currently known properties of the \(\langle \)EDS\(\rangle \) \(E\) as a list of equations \(\langle \)keyword\(\rangle \)\( = \)\(\langle \)value\(\rangle \)



one_forms(\(E\)) one_forms(\(S\))

selects the \(1\)-forms from a system



zero_forms(\(E\)) zero_forms(\(S\))

selects the 0-forms from a system



Table 20.2: Commands for inspecting EDS objects



Command

Function



augment(\(E\),\(S\))

appends the extra forms in \(S\) to the system in \(E\)



\(M\) cross \(N\) \(E\) cross \(N\)

forms the direct product of two coframings: an \(\langle \)EDS\(\rangle \) \(E\) is lifted to the extended space



pullback(\(E\),\(f\)) pullback(\(S\),\(f\)) pullback(\(\Omega \),\(f\))

pulls back the first argument using the \(\langle \)map\(\rangle \) \(f\)



pullback(\(M\),\(f\))

returns a \(\langle \)coframing\(\rangle \) \(N\) suitable as the source for \(f:N\to M\)



restrict(\(E\),\(f\)) restrict(\(S\),\(f\)) restrict(\(\Omega \),\(f\))

restricts the first argument to the points specified by the \(\langle \)map\(\rangle \) \(f\)



restrict(\(M\),\(f\))

adds the restrictions in \(f\) to \(M\)



transform(\(M\),\(X\)) transform(\(E\),\(X\)) transform(\(S\),\(X\)) transform(\(\Omega \),\(X\))

applies the change of cobasis \(X\) to the first argument: for a \(\langle \)coframing\(\rangle \) \(M\) or an \(\langle \)EDS\(\rangle \) \(E\), \(X\) may be specified in either the forward or reverse direction



lift(\(E\))

eliminates any 0-forms in \(E\) by solving and pulling back



Table 20.3: Commands for manipulating EDS objects



Command

Function



cartan_system(\(E\)) cartan_system(\(S\)) cartan_system(\(\Omega \))

calculates the Cartan system (associated Pfaff system, retracting space): no differentiations are performed



cauchy_system(\(E\)) cauchy_system(\(S\)) cauchy_system(\(\Omega \))

calculates the Cauchy system: the Cartan system of the closure under exterior differentiation



characters(\(E\)) characters(\(T\))

calculates the (reduced) Cartan characters \(\{s_1,...,s_n\}\) (\(E\) quasilinear)



characters(\(E\),\(P\))

Cartan characters for a non-linear \(E\) at integral element \(P\)



closure(\(E\))

calculates the closure of \(E\) under exterior differentiation



derived_system(\(E\)) derived_system(\(S\))

calculates the first derived system of the Pfaffian system \(E\) or \(S\)



dim_grassmann_variety(\(E\)) dim_grassmann_variety(\(E\),\(P\))

dimension of the Grassman bundle variety of integral elements: for non-linear \(E\), the base element \(P\) must be given



dim(\(M\)) dim(\(E\))

returns the manifold dimension



involution(\(E\))

repeatedly prolongs \(E\) to involution (or inconsistency)



linearise(\(E\),\(P\))

linearise the (non-linear) EDS \(E\) with respect to the integral element \(P\)



integral_element(\(E\))

find a random \(\langle \)integral element\(\rangle \) of \(E\)



prolong(\(E\))

prolongs \(E\), and projects back down to a subvariety of the original manifold if integrability conditions arise



tableau(\(E\))

calculates the \(\langle \)tableau\(\rangle \) of the quasilinear Pfaffian \(\langle \)EDS\(\rangle \) \(E\)



torsion(\(E\))

returns a \(\langle \)system\(\rangle \) of 0-forms specifying the integrability conditions for the semilinear or quasilinear Pfaffian \(\langle \)EDS\(\rangle \) \(E\)



grassmann_variety(\(E\))

returns the contact \(\langle \)EDS\(\rangle \) for the Grassmann bundle of \(n\)-planes over the manifold of \(E\), augmented by the 0-forms specifying the variety of integral elements of \(E\)



Table 20.4: Commands for analysing exterior systems



Command

Function



closed(\(E\)) closed(\(S\)) closed(\(\Omega \))

checks for closure under exterior differentiation



involutive(\(E\))

applies Cartan’s test for involution



pfaffian(\(E\))

checks if \(E\) is generated by \(1\)-forms and their exterior derivatives



quasilinear(\(E\))

tests if the closure of \(E\) can be generated by forms at most linear in the complement of the independence condition



semilinear(\(E\))

tests if the closure of \(E\) is quasilinear and, in addition, the coefficients of the linear terms contain only independent variables or constants



\(E\) equiv \(E'\)

checks whether \(E\) and \(E'\) are algebraically equivalent



Table 20.5: Commands for testing exterior systems



Switch

Function



edsverbose

if on, displays additional information as calculations progress



edsdebug

if on, produces copious quantities of internal information, in addition to that produced by edsverbose



edssloppy

if on, allows EDS to divide by expressions not known to be non-zero and treats quasilinear systems as semilinear



edsdisjoint

if on, forces varieties to be decomposed into disjoint components



ranpos genpos

if on, uses a random or generic flag of integral elements when calculating Cartan characters: otherwise the independence condition as presented guides the choice of flag



Table 20.6: Switches (all off by default)



Command

Function



coordinates(\(S\))

scans the expressions in \(S\) for coordinates



invert(\(X\))

returns the inverse \(\langle \)transform\(\rangle \) \(X^{-1}\)



structure_equations(\(X\)) structure_equations(\(X\),\(X^{-1}\))

returns exterior derivatives of \(\mathop {\hbox {lhs}}(X)\)



linear_divisors(\(\Omega \))

calculates a basis for the space of 1-form factors of \(\Omega \)



exfactors(\(\Omega \))

as for linear_divisors, but with the additional (non-linear) factor



index_expand(\(any\))

returns a list of copies of its argument, with free EXCALC indices replaced by successive values from the relevant index range



pde2jet(\(pde\),\(dep\),\(ind\))

converts a PDE system into jet bundle notation, replacing derivatives by jet bundle coordinates (variable dependencies are not affected)



mkdepend(\(list\))

restores variable dependencies destroyed by pde2eds



disjoin(\(\{f,g,...\}\))

decomposes the variety specified by the given \(\langle \)map\(\rangle \) variables into a disjoint union



cleanup(\(E\)) cleanup(\(M\))

returns a fresh copy of \(E\) or \(M\) with all properties and stored results removed



reorder(\(E\)) reorder(\(M\))

returns a fresh copy of \(E\) or \(M\), conforming to the prevailing REDUCE kernel order



Table 20.7: Auxilliary functions



Command

Function



poincare(\(\Omega \))

calculates the homotopy integral from the proof of Poincaré’s lemma: if \(\Omega \) is exact, then the result is a form whose exterior derivative gives back \(\Omega \)



invariants(\(E\),\(crd\)) invariants(\(S\),\(crd\))

calculates the invariants (first integrals) of a completely integrable Pfaffian system using the inductive proof of the Frobenius theorem: the optional second argument specifies the order in which the coordinates are to be projected away



symbol_relations(\(E\),\(\pi \))

returns relations between the entries of the tableau matrix, represented by 2-indexed \(\langle \)1-form\(\rangle \) variables \(\pi ^a{}_i\)



symbol_matrix(\(E\),\(\xi \))

returns the symbol matrix for a quasilinear \(\langle \)EDS\(\rangle \) \(E\) as a function of \(\langle \)0-form\(\rangle \) variables \(\xi _i\)



characteristic_variety(\(E\),\(\xi \))

returns equations describing the characteristic variety of \(E\) in terms of \(\langle \)0-form\(\rangle \) variables \(\xi _i\)



Table 20.8: Experimental functions (unstable)


Hosted by Download REDUCE Powered by MathJax