Up | Next | Prev | PrevTail | Tail |
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.
\( \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.
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.19.2, but there are a number of up-to-date texts on the subject (eg [BCG\(^{+}\)91, Spi79]).
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 [ASY74, GMM\(^{+}\)81, HT91]). The EDS package owes much to these earlier efforts, and also to related packages for PDE analysis (eg [MF93, Rei91, Sei95]), 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.21 and the exterior ideals package XIDEAL 20.70. 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.
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.
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.
\({\mathbf {R}}^3\) with cobasis \(\{\deriv x,\deriv y,\deriv z\}\) and coordinates \(\{x,y,z\}\).
\({\mathbf {R}}^2\backslash \{0\}\) with cobasis \(\{e^1,e^2\}\), a single coordinate \(\{r\}\), “structure equations” \(\{\deriv r = e^1\), \(\deriv e^1=0\),\(\deriv e^2=e^1\wedge e^2/r\}\) and restrictions \(\{r\neq 0\}\).
\({\mathbf {R}}^2\backslash \{0\}\) with cobasis \(\{\deriv x,\deriv y\}\), coordinates \(\{x,y\}\) and restrictions \(\{x^2+y^2\neq 0\}\).
\(S^1\) with cobasis \(\{\omega \}\) and structure equations \(\{\deriv \omega = 0\}\).
\(S^2\) cannot be encapsulated by an EDS \(\langle \)coframing\(\rangle \) since there is no global cobasis.
A simple \(\langle \)EDS\(\rangle \), or exterior differential system, is a triple \((S,\Omega ,M)\), where \(M\) is a \(\langle \)coframing\(\rangle \) (section 20.19.2.0), \(S\) is a \(\langle \)system\(\rangle \) (section 20.19.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.19.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.19.4.0), and can additionally be
generated using the contact
and pde2eds
operators (sections 20.19.4.0,
20.19.4.0).
The solutions of \((S,\Omega ,M)\) are integral manifolds, or immersions (cf section 20.19.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.19.3.0).
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.19.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.19.3.0).
The \(\langle \)system\(\rangle \) of an \(\langle \)EDS\(\rangle \) can be obtained with the system
operator (section 20.19.5.0).
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.19.2.0,
20.19.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
.
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.
With \(M = {\mathbf {R}}^3 = \{(x,y,z)\}\), \(S = \{\deriv x\wedge \deriv z\}\) and \(\Omega = \{\deriv x,\deriv y\}\), the integral element \(P = \{\partial _x + \partial _z,\partial _y\}\) is equally determined by its annihilator \(P^\perp = \{\deriv z - \deriv x\}\).
For \(S = \{\deriv z - y\deriv x\}\) and \(\Omega = \{\deriv x\}\), the integral element \(P = \{\partial _x + y\partial _z\}\) can be specified simply as \(\{\deriv y\}\).
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.19.5.0).
Properties are usually generated automatically by EDS as required, but may be explicitly checked using the operators in section 20.19.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.19.4.0). Care is needed since such assertions are never checked. Properties can be
erased using the cleanup
operator (section 20.19.14.0).
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.19.6.0).
Maps are applied using the pullback
and restrict
operators (sections 20.19.6.0,
20.19.6.0).
The map \({\mathbf {R}}^2\backslash \{0\}\to {\mathbf {R}}^3\), \((x,y)\mapsto (x,y,z=x^2+y^2)\) is represented \(\{z = x^2+y^2,z\neq 0\}\).
\(\{x=u+v,y=u-v\}\) might represent the coordinate change \({\mathbf {R}}^3\to {\mathbf {R}}^3\), \((u,v,z)\mapsto (x=u+v,y=u-v,z)\).
\(\{x=u+v,y=2u-x\}\) is the same map again.
\(\{x=2v+y,y=2u-x\}\) is unacceptable since \(x\) and \(y\) cannot be eliminated from the right-hand sides by repeated substitution.
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.19.6.0).
\(\{\omega ^1 = x\deriv y - y\deriv x, \omega ^2 = x\deriv x + y\deriv y\}\) gives a transformation between Cartesian and polar cobases on \({\mathbf {R}}^2\backslash \{0\}\).
On \(J^1({\mathbf {R}}^2,{\mathbf {R}})\) with cobasis \(\{\deriv u,\deriv p,\deriv q,\deriv r,\deriv s,\deriv t,\deriv x,\deriv y\}\), the list \(\{\theta ^1=\deriv u - p\deriv x - q\deriv y, \theta ^2=\deriv p - r\deriv x - s\deriv y, \theta ^3=\deriv q - s\deriv x - t\deriv y\}\) specifies a new cobasis in which the contact system is simply \(\{\theta ^1,\theta ^2,\theta ^3\}\).
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
The tableau of an \(\langle \)EDS\(\rangle \) is generated by the tableau
operator (section 20.19.7.0), or can
be entered using the mat
operator. The Cartan characters of a tableau are found using
characters
(section 20.19.7.0).
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
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.19.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.19.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.
On \(M=\{(u,v,w)\in {\mathbf {R}}^3\mid u\neq v\}\), the Pfaffian system
Since the independence condition is defined only modulo the system, the system
Given an \(\langle \)EDS\(\rangle \) \((S,\Omega ,M)\) in normal form (section 20.19.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.
For the system \(S=\{\deriv u - \deriv x - u_y\deriv y\}\), \(\Omega =\deriv x\wedge \deriv y\), the decomposed standard cobasis is \(\{\deriv u\}\cup \{\deriv u_y\}\cup \{\deriv x,\deriv y\}\).
For the contact system
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.19.14.0).
A more basic syntax is
coframing
(\(\langle \)cobasis\(\rangle \)\(\,[\),\(\langle \)coordinates\(\rangle \)\(]\,\) \(\,[\),\(\langle \)restrictions\(\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.19.3.0).
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.19.3.0, 20.19.2.0, 20.19.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.19.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.19.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.19.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.19.5.0, 20.19.5.0, 20.19.5.0 and
20.19.5.0).
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
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.19.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.
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.19.7) can be applied,
it is necessary to convert this to a system generated in positive degree using the lift
operator (section 20.19.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.19.14.0) and mkdepend
(section
20.19.14.0).
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.19.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.
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.19.2.0, 20.19.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.19.2.0, 20.19.3). The coordinates in a list of \(\langle \)expr\(\rangle \) are defined to be those 0-form \(\langle \)kernels\(\rangle \) with no implicit dependencies.
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.19.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.19.2.0, 20.19.3, 20.19.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.
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.19.2.0, 20.19.3). The result is a list of inequalities.
system
system
\(\langle \)EDS\(\rangle \)returns the system component of an \(\langle \)EDS\(\rangle \) (sections 20.19.3, 20.19.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.19.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.19.3, 20.19.3.0) as a list of equations of the form \(\langle \)keyword\(\rangle \) = \(\langle \)value\(\rangle \).
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.19.3, 20.19.3.0).
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.19.3, 20.19.3.0). The alternative syntax nought_forms
does the same
thing.
zero_forms {5,x*y - u,d u - x*d y,d u^d x- x*d y^d x}; {5, - u + x*y}
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.
% 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
cross
\(\langle \)arg2\(\rangle \) \(\,[\)cross
\(\cdots \)\(]\,\)The first argument may be either a \(\langle \)coframing\(\rangle \) (section 20.19.2.0) or an \(\langle \)EDS\(\rangle \) (section
20.19.3). The remaining arguments may be either \(\langle \)coframing\(\rangle \) objects or any valid
argument to the coframing
operator (section 20.19.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.
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.19.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.19.3, 20.19.2.0, 20.19.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.
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.19.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.19.3, 20.19.2.0, 20.19.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.
% 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.19.3, 20.19.2.0, 20.19.3.0) and \(\langle \)transform\(\rangle \) is a list of substitutions (cf section 20.19.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.
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.19.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.19.3) will result. If
edsverbose
is on (section 20.19.9.0), the solutions are displayed as they are
generated.
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
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.19.3.0) generated in positive degree as input, but some can also analyse a \(\langle \)system\(\rangle \) (section 20.19.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.19.7.0).
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.19.3, 20.19.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.
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.19.7.0). The annihilator \(C^\perp \) consists of the Cauchy vectors for the \(S\).
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.19.3, 20.19.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.
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.19.3, 20.19.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.19.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.19.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.19.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.19.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.
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}
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.19.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.
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
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.19.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
returns the dimension of the stratum containing the \(\langle \)integral element\(\rangle \) (cf section 20.19.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.19.3, 20.19.2.0).
involution
involution
\(\langle \)EDS\(\rangle \)repeatedly prolongs an \(\langle \)EDS\(\rangle \) until it reaches involution or inconsistency (cf prolong
,
section 20.19.7.0). The system must be in normal form (section 20.19.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.19.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.19.7.0). The
result of involution
might then not be in involution.
If the edsverbose
switch is on (section 20.19.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.19.8.0),
linearise
\(\langle \)EDS\(\rangle \)returns an equivalent exterior system containing only linear generators.
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.19.3.0). The system must be in normal form (section 20.19.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.19.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.19.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.19.3). Otherwise, the result is a list of variety components,
which fall into three classes:
lift
, section 20.19.6.0).
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.19.3).
If the switch edsverbose
(section 20.19.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...
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.19.3.0) of a quasilinear Pfaffian \(\langle \)EDS\(\rangle \), which must be in normal form and generated in positive degree.
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.19.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.
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.19.7.0) is unable to decompose the variety automatically, grassmann_variety
can be used in combination with zero_forms
(section 20.19.5.0) to calculate the
variety conditions. Any solutions found “by hand” can be incorporated using pullback
(section 20.19.6.0).
Example: Using the system from the example in section 20.19.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.
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.19.6 and 20.19.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.
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.19.3.0) for this to succeed. Systems with 0-forms are non-Pfaffian by definition in EDS.
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.19.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.19.3.0) for this to succeed. Systems with 0-forms are not quasilinear by definition in EDS.
% 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.19.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.19.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.19.11), all quasilinear systems are treated as
if they are semilinear.
% 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.
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
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).
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
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.
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.
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.19.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 edssloppy
on
, all quasilinear systems are
treated as if they were semilinear (cf section 20.19.8.0). edssloppy
is off
by
default.
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.19.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.
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 ranpos
on
, 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.19.7.0 for an
example.
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.19.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.19.3.0) is active, and
edssloppy
(section 20.19.11) is off
, invert
will divide by nowhere-zero
expressions only.
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 \).
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.
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.
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.19.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.
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.19.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.19.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.19.3.0) should be set
appropriately before calling disjoin
. The syntax is
disjoin
{
\(\langle \)map\(\rangle \),\(\cdots \)}
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.19.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.
% 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.
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},{},{})
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.
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.
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.
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.
% 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.
% With the same system as for symbol_relations: characteristic_variety(S,xi); 2 2 {{(xi ) - (xi ) }, x y {xi ,xi }} x y
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.19.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 |
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 |
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 |
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\) |
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 |
Switch | Function |
edsverbose
| if
|
edsdebug
| if
|
edssloppy
| if
|
edsdisjoint
| if
|
ranpos
genpos
| if
|
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
|
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
|
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 |
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\) |
Up | Next | Prev | PrevTail | Front |