aboutsummaryrefslogtreecommitdiff
path: root/src/algebra/dpolcat.spad.pamphlet
diff options
context:
space:
mode:
Diffstat (limited to 'src/algebra/dpolcat.spad.pamphlet')
-rw-r--r--src/algebra/dpolcat.spad.pamphlet591
1 files changed, 591 insertions, 0 deletions
diff --git a/src/algebra/dpolcat.spad.pamphlet b/src/algebra/dpolcat.spad.pamphlet
new file mode 100644
index 00000000..2a170259
--- /dev/null
+++ b/src/algebra/dpolcat.spad.pamphlet
@@ -0,0 +1,591 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/algebra dpolcat.spad}
+\author{William Sit}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+\section{category DVARCAT DifferentialVariableCategory}
+<<category DVARCAT DifferentialVariableCategory>>=
+)abbrev category DVARCAT DifferentialVariableCategory
+++ Author: William Sit
+++ Date Created: 19 July 1990
+++ Date Last Updated: 13 September 1991
+++ Basic Operations:
+++ Related Constructors:DifferentialPolynomialCategory
+++ See Also:OrderedDifferentialVariable,
+++ SequentialDifferentialVariable,
+++ DifferentialSparseMultivariatePolynomial.
+++ AMS Classifications:12H05
+++ Keywords: differential indeterminates, ranking, order, weight
+++ References:Ritt, J.F. "Differential Algebra" (Dover, 1950).
+++ Description:
+++ \spadtype{DifferentialVariableCategory} constructs the
+++ set of derivatives of a given set of
+++ (ordinary) differential indeterminates.
+++ If x,...,y is an ordered set of differential indeterminates,
+++ and the prime notation is used for differentiation, then
+++ the set of derivatives (including
+++ zero-th order) of the differential indeterminates is
+++ x,\spad{x'},\spad{x''},..., y,\spad{y'},\spad{y''},...
+++ (Note: in the interpreter, the n-th derivative of y is displayed as
+++ y with a subscript n.) This set is
+++ viewed as a set of algebraic indeterminates, totally ordered in a
+++ way compatible with differentiation and the given order on the
+++ differential indeterminates. Such a total order is called a
+++ ranking of the differential indeterminates.
+++
+++ A domain in this category is needed to construct a differential
+++ polynomial domain. Differential polynomials are ordered
+++ by a ranking on the derivatives, and by an order (extending the
+++ ranking) on
+++ on the set of differential monomials. One may thus associate
+++ a domain in this category with a ranking of the differential
+++ indeterminates, just as one associates a domain in the category
+++ \spadtype{OrderedAbelianMonoidSup} with an ordering of the set of
+++ monomials in a set of algebraic indeterminates. The ranking
+++ is specified through the binary relation \spadfun{<}.
+++ For example, one may define
+++ one derivative to be less than another by lexicographically comparing
+++ first the \spadfun{order}, then the given order of the differential
+++ indeterminates appearing in the derivatives. This is the default
+++ implementation.
+++
+++ The notion of weight generalizes that of degree. A
+++ polynomial domain may be made into a graded ring
+++ if a weight function is given on the set of indeterminates,
+++ Very often, a grading is the first step in ordering the set of
+++ monomials. For differential polynomial domains, this
+++ constructor provides a function \spadfun{weight}, which
+++ allows the assignment of a non-negative number to each derivative of a
+++ differential indeterminate. For example, one may define
+++ the weight of a derivative to be simply its \spadfun{order}
+++ (this is the default assignment).
+++ This weight function can then be extended to the set of
+++ all differential polynomials, providing a graded ring
+++ structure.
+DifferentialVariableCategory(S:OrderedSet): Category ==
+ Join(OrderedSet, RetractableTo S) with
+ -- Examples:
+ -- v:=makeVariable('s,5)
+ makeVariable : (S, NonNegativeInteger) -> $
+ ++ makeVariable(s, n) returns the n-th derivative of a
+ ++ differential indeterminate s as an algebraic indeterminate.
+ -- Example: makeVariable('s, 5)
+ order : $ -> NonNegativeInteger
+ ++ order(v) returns n if v is the n-th derivative of any
+ ++ differential indeterminate.
+ -- Example: order(v)
+ variable : $ -> S
+ ++ variable(v) returns s if v is any derivative of the differential
+ ++ indeterminate s.
+ -- Example: variable(v)
+ -- default implementation using above primitives --
+
+ weight : $ -> NonNegativeInteger
+ ++ weight(v) returns the weight of the derivative v.
+ -- Example: weight(v)
+ differentiate : $ -> $
+ ++ differentiate(v) returns the derivative of v.
+ -- Example: differentiate(v)
+ differentiate : ($, NonNegativeInteger) -> $
+ ++ differentiate(v, n) returns the n-th derivative of v.
+ -- Example: differentiate(v,2)
+ coerce : S -> $
+ ++ coerce(s) returns s, viewed as the zero-th order derivative of s.
+ -- Example: coerce('s); differentiate(%,5)
+ add
+ import NumberFormats
+ coerce (s:S):$ == makeVariable(s, 0)
+ differentiate v == differentiate(v, 1)
+ differentiate(v, n) == makeVariable(variable v, n + order v)
+ retractIfCan v == (zero?(order v) => variable v; "failed")
+ v = u == (variable v = variable u) and (order v = order u)
+
+ coerce(v:$):OutputForm ==
+ a := variable(v)::OutputForm
+ zero?(nn := order v) => a
+ sub(a, outputForm nn)
+ retract v ==
+ zero?(order v) => variable v
+ error "Not retractable"
+ v < u ==
+ -- the ranking below is orderly, and is the default --
+ order v = order u => variable v < variable u
+ order v < order u
+ weight v == order v
+ -- the default weight is just the order
+
+@
+\section{domain ODVAR OrderlyDifferentialVariable}
+<<domain ODVAR OrderlyDifferentialVariable>>=
+)abbrev domain ODVAR OrderlyDifferentialVariable
+++ Author: William Sit
+++ Date Created: 19 July 1990
+++ Date Last Updated: 13 September 1991
+++ Basic Operations:differentiate, order, variable,<
+++ Related Domains: OrderedVariableList,
+++ SequentialDifferentialVariable.
+++ See Also: DifferentialVariableCategory
+++ AMS Classifications:12H05
+++ Keywords: differential indeterminates, orderly ranking.
+++ References:Kolchin, E.R. "Differential Algebra and Algebraic Groups"
+++ (Academic Press, 1973).
+++ Description:
+++ \spadtype{OrderlyDifferentialVariable} adds a commonly used orderly
+++ ranking to the set of derivatives of an ordered list of differential
+++ indeterminates. An orderly ranking is a ranking \spadfun{<} of the
+++ derivatives with the property that for two derivatives u and v,
+++ u \spadfun{<} v if the \spadfun{order} of u is less than that
+++ of v.
+++ This domain belongs to \spadtype{DifferentialVariableCategory}. It
+++ defines \spadfun{weight} to be just \spadfun{order}, and it
+++ defines an orderly ranking \spadfun{<} on derivatives u via the
+++ lexicographic order on the pair
+++ (\spadfun{order}(u), \spadfun{variable}(u)).
+OrderlyDifferentialVariable(S:OrderedSet):DifferentialVariableCategory(S)
+ == add
+ Rep := Record(var:S, ord:NonNegativeInteger)
+ makeVariable(s,n) == [s, n]
+ variable v == v.var
+ order v == v.ord
+
+@
+\section{domain SDVAR SequentialDifferentialVariable}
+<<domain SDVAR SequentialDifferentialVariable>>=
+)abbrev domain SDVAR SequentialDifferentialVariable
+++ Author: William Sit
+++ Date Created: 19 July 1990
+++ Date Last Updated: 13 September 1991
+++ Basic Operations:differentiate, order, variable, <
+++ Related Domains: OrderedVariableList,
+++ OrderlyDifferentialVariable.
+++ See Also:DifferentialVariableCategory
+++ AMS Classifications:12H05
+++ Keywords: differential indeterminates, sequential ranking.
+++ References:Kolchin, E.R. "Differential Algebra and Algebraic Groups"
+++ (Academic Press, 1973).
+++ Description:
+++ \spadtype{OrderlyDifferentialVariable} adds a commonly used sequential
+++ ranking to the set of derivatives of an ordered list of differential
+++ indeterminates. A sequential ranking is a ranking \spadfun{<} of the
+++ derivatives with the property that for any derivative v,
+++ there are only a finite number of derivatives u with u \spadfun{<} v.
+++ This domain belongs to \spadtype{DifferentialVariableCategory}. It
+++ defines \spadfun{weight} to be just \spadfun{order}, and it
+++ defines a sequential ranking \spadfun{<} on derivatives u by the
+++ lexicographic order on the pair
+++ (\spadfun{variable}(u), \spadfun{order}(u)).
+
+SequentialDifferentialVariable(S:OrderedSet):DifferentialVariableCategory(S)
+ == add
+ Rep := Record(var:S, ord:NonNegativeInteger)
+ makeVariable(s,n) == [s, n]
+ variable v == v.var
+ order v == v.ord
+ v < u ==
+ variable v = variable u => order v < order u
+ variable v < variable u
+
+@
+\section{category DPOLCAT DifferentialPolynomialCategory}
+<<category DPOLCAT DifferentialPolynomialCategory>>=
+)abbrev category DPOLCAT DifferentialPolynomialCategory
+++ Author: William Sit
+++ Date Created: 19 July 1990
+++ Date Last Updated: 13 September 1991
+++ Basic Operations:PolynomialCategory
+++ Related Constructors:DifferentialVariableCategory
+++ See Also:
+++ AMS Classifications:12H05
+++ Keywords: differential indeterminates, ranking, differential polynomials,
+++ order, weight, leader, separant, initial, isobaric
+++ References:Kolchin, E.R. "Differential Algebra and Algebraic Groups"
+++ (Academic Press, 1973).
+++ Description:
+++ \spadtype{DifferentialPolynomialCategory} is a category constructor
+++ specifying basic functions in an ordinary differential polynomial
+++ ring with a given ordered set of differential indeterminates.
+++ In addition, it implements defaults for the basic functions.
+++ The functions \spadfun{order} and \spadfun{weight} are extended
+++ from the set of derivatives of differential indeterminates
+++ to the set of differential polynomials. Other operations
+++ provided on differential polynomials are
+++ \spadfun{leader}, \spadfun{initial},
+++ \spadfun{separant}, \spadfun{differentialVariables}, and
+++ \spadfun{isobaric?}. Furthermore, if the ground ring is
+++ a differential ring, then evaluation (substitution
+++ of differential indeterminates by elements of the ground ring
+++ or by differential polynomials) is
+++ provided by \spadfun{eval}.
+++ A convenient way of referencing derivatives is provided by
+++ the functions \spadfun{makeVariable}.
+++
+++ To construct a domain using this constructor, one needs
+++ to provide a ground ring R, an ordered set S of differential
+++ indeterminates, a ranking V on the set of derivatives
+++ of the differential indeterminates, and a set E of
+++ exponents in bijection with the set of differential monomials
+++ in the given differential indeterminates.
+++
+
+DifferentialPolynomialCategory(R:Ring,S:OrderedSet,
+ V:DifferentialVariableCategory S, E:OrderedAbelianMonoidSup):
+ Category ==
+ Join(PolynomialCategory(R,E,V),
+ DifferentialExtension R, RetractableTo S) with
+ -- Examples:
+ -- s:=makeVariable('s)
+ -- p:= 3*(s 1)**2 + s*(s 2)**3
+ -- all functions below have default implementations
+ -- using primitives from V
+
+ makeVariable: S -> (NonNegativeInteger -> $)
+ ++ makeVariable(s) views s as a differential
+ ++ indeterminate, in such a way that the n-th
+ ++ derivative of s may be simply referenced as z.n
+ ++ where z :=makeVariable(s).
+ ++ Note: In the interpreter, z is
+ ++ given as an internal map, which may be ignored.
+ -- Example: makeVariable('s); %.5
+
+ differentialVariables: $ -> List S
+ ++ differentialVariables(p) returns a list of differential
+ ++ indeterminates occurring in a differential polynomial p.
+ order : ($, S) -> NonNegativeInteger
+ ++ order(p,s) returns the order of the differential
+ ++ polynomial p in differential indeterminate s.
+ order : $ -> NonNegativeInteger
+ ++ order(p) returns the order of the differential polynomial p,
+ ++ which is the maximum number of differentiations of a
+ ++ differential indeterminate, among all those appearing in p.
+ degree: ($, S) -> NonNegativeInteger
+ ++ degree(p, s) returns the maximum degree of
+ ++ the differential polynomial p viewed as a differential polynomial
+ ++ in the differential indeterminate s alone.
+ weights: $ -> List NonNegativeInteger
+ ++ weights(p) returns a list of weights of differential monomials
+ ++ appearing in differential polynomial p.
+ weight: $ -> NonNegativeInteger
+ ++ weight(p) returns the maximum weight of all differential monomials
+ ++ appearing in the differential polynomial p.
+ weights: ($, S) -> List NonNegativeInteger
+ ++ weights(p, s) returns a list of
+ ++ weights of differential monomials
+ ++ appearing in the differential polynomial p when p is viewed
+ ++ as a differential polynomial in the differential indeterminate s
+ ++ alone.
+ weight: ($, S) -> NonNegativeInteger
+ ++ weight(p, s) returns the maximum weight of all differential
+ ++ monomials appearing in the differential polynomial p
+ ++ when p is viewed as a differential polynomial in
+ ++ the differential indeterminate s alone.
+ isobaric?: $ -> Boolean
+ ++ isobaric?(p) returns true if every differential monomial appearing
+ ++ in the differential polynomial p has same weight,
+ ++ and returns false otherwise.
+ leader: $ -> V
+ ++ leader(p) returns the derivative of the highest rank
+ ++ appearing in the differential polynomial p
+ ++ Note: an error occurs if p is in the ground ring.
+ initial:$ -> $
+ ++ initial(p) returns the
+ ++ leading coefficient when the differential polynomial p
+ ++ is written as a univariate polynomial in its leader.
+ separant:$ -> $
+ ++ separant(p) returns the
+ ++ partial derivative of the differential polynomial p
+ ++ with respect to its leader.
+ if R has DifferentialRing then
+ InnerEvalable(S, R)
+ InnerEvalable(S, $)
+ Evalable $
+ makeVariable: $ -> (NonNegativeInteger -> $)
+ ++ makeVariable(p) views p as an element of a differential
+ ++ ring, in such a way that the n-th
+ ++ derivative of p may be simply referenced as z.n
+ ++ where z := makeVariable(p).
+ ++ Note: In the interpreter, z is
+ ++ given as an internal map, which may be ignored.
+ -- Example: makeVariable(p); %.5; makeVariable(%**2); %.2
+
+ add
+ p:$
+ s:S
+ makeVariable s == makeVariable(s,#1)::$
+
+ if R has IntegralDomain then
+ differentiate(p:$, d:R -> R) ==
+ ans:$ := 0
+ l := variables p
+ while (u:=retractIfCan(p)@Union(R, "failed")) case "failed" repeat
+ t := leadingMonomial p
+ lc := leadingCoefficient t
+ ans := ans + d(lc)::$ * (t exquo lc)::$
+ + +/[differentiate(t, v) * (differentiate v)::$ for v in l]
+ p := reductum p
+ ans + d(u::R)::$
+
+ order (p:$):NonNegativeInteger ==
+ ground? p => 0
+ "max"/[order v for v in variables p]
+ order (p:$,s:S):NonNegativeInteger ==
+ ground? p => 0
+ empty? (vv:= [order v for v in variables p | (variable v) = s ]) =>0
+ "max"/vv
+
+ degree (p, s) ==
+ d:NonNegativeInteger:=0
+ for lp in monomials p repeat
+ lv:= [v for v in variables lp | (variable v) = s ]
+ if not empty? lv then d:= max(d, +/degree(lp, lv))
+ d
+
+ weights p ==
+ ws:List NonNegativeInteger := nil
+ empty? (mp:=monomials p) => ws
+ for lp in mp repeat
+ lv:= variables lp
+ if not empty? lv then
+ dv:= degree(lp, lv)
+ w:=+/[(weight v) * d for v in lv for d in dv]$(List NonNegativeInteger)
+ ws:= concat(ws, w)
+ ws
+ weight p ==
+ empty? (ws:=weights p) => 0
+ "max"/ws
+
+ weights (p, s) ==
+ ws:List NonNegativeInteger := nil
+ empty?(mp:=monomials p) => ws
+ for lp in mp repeat
+ lv:= [v for v in variables lp | (variable v) = s ]
+ if not empty? lv then
+ dv:= degree(lp, lv)
+ w:=+/[(weight v) * d for v in lv for d in dv]$(List NonNegativeInteger)
+ ws:= concat(ws, w)
+ ws
+ weight (p,s) ==
+ empty? (ws:=weights(p,s)) => 0
+ "max"/ws
+
+ isobaric? p == (# removeDuplicates weights p) = 1
+
+ leader p == -- depends on the ranking
+ vl:= variables p
+ -- it's not enough just to look at leadingMonomial p
+ -- the term-ordering need not respect the ranking
+ empty? vl => error "leader is not defined "
+ "max"/vl
+ initial p == leadingCoefficient univariate(p,leader p)
+ separant p == differentiate(p, leader p)
+
+ coerce(s:S):$ == s::V::$
+
+ retractIfCan(p:$):Union(S, "failed") ==
+ (v := retractIfCan(p)@Union(V,"failed")) case "failed" => "failed"
+ retractIfCan(v::V)
+
+ differentialVariables p ==
+ removeDuplicates [variable v for v in variables p]
+
+ if R has DifferentialRing then
+
+ makeVariable p == differentiate(p, #1)
+
+ eval(p:$, sl:List S, rl:List R) ==
+ ordp:= order p
+ vl := concat [[makeVariable(s,j)$V for j in 0..ordp]
+ for s in sl]$List(List V)
+ rrl:=nil$List(R)
+ for r in rl repeat
+ t:= r
+ rrl:= concat(rrl,
+ concat(r, [t := differentiate t for i in 1..ordp]))
+ eval(p, vl, rrl)
+
+ eval(p:$, sl:List S, rl:List $) ==
+ ordp:= order p
+ vl := concat [[makeVariable(s,j)$V for j in 0..ordp]
+ for s in sl]$List(List V)
+ rrl:=nil$List($)
+ for r in rl repeat
+ t:=r
+ rrl:=concat(rrl,
+ concat(r, [t:=differentiate t for i in 1..ordp]))
+ eval(p, vl, rrl)
+ eval(p:$, l:List Equation $) ==
+ eval(p, [retract(lhs e)@S for e in l]$List(S),
+ [rhs e for e in l]$List($))
+
+@
+\section{domain DSMP DifferentialSparseMultivariatePolynomial}
+<<domain DSMP DifferentialSparseMultivariatePolynomial>>=
+)abbrev domain DSMP DifferentialSparseMultivariatePolynomial
+++ Author: William Sit
+++ Date Created: 19 July 1990
+++ Date Last Updated: 13 September 1991
+++ Basic Operations:DifferentialPolynomialCategory
+++ Related Constructors:
+++ See Also:
+++ AMS Classifications:12H05
+++ Keywords: differential indeterminates, ranking, differential polynomials,
+++ order, weight, leader, separant, initial, isobaric
+++ References:Kolchin, E.R. "Differential Algebra and Algebraic Groups"
+++ (Academic Press, 1973).
+++ Description:
+++ \spadtype{DifferentialSparseMultivariatePolynomial} implements
+++ an ordinary differential polynomial ring by combining a
+++ domain belonging to the category \spadtype{DifferentialVariableCategory}
+++ with the domain \spadtype{SparseMultivariatePolynomial}.
+++
+
+DifferentialSparseMultivariatePolynomial(R, S, V):
+ Exports == Implementation where
+ R: Ring
+ S: OrderedSet
+ V: DifferentialVariableCategory S
+ E ==> IndexedExponents(V)
+ PC ==> PolynomialCategory(R,IndexedExponents(V),V)
+ PCL ==> PolynomialCategoryLifting
+ P ==> SparseMultivariatePolynomial(R, V)
+ SUP ==> SparseUnivariatePolynomial
+ SMP ==> SparseMultivariatePolynomial(R, S)
+
+ Exports ==> Join(DifferentialPolynomialCategory(R,S,V,E),
+ RetractableTo SMP)
+
+ Implementation ==> P add
+ retractIfCan(p:$):Union(SMP, "failed") ==
+ zero? order p =>
+ map(retract(#1)@S :: SMP, #1::SMP, p)$PCL(
+ IndexedExponents V, V, R, $, SMP)
+ "failed"
+
+ coerce(p:SMP):$ ==
+ map(#1::V::$, #1::$, p)$PCL(IndexedExponents S, S, R, SMP, $)
+
+@
+\section{domain ODPOL OrderlyDifferentialPolynomial}
+<<domain ODPOL OrderlyDifferentialPolynomial>>=
+)abbrev domain ODPOL OrderlyDifferentialPolynomial
+++ Author: William Sit
+++ Date Created: 24 September, 1991
+++ Date Last Updated: 7 February, 1992
+++ Basic Operations:DifferentialPolynomialCategory
+++ Related Constructors: DifferentialSparseMultivariatePolynomial
+++ See Also:
+++ AMS Classifications:12H05
+++ Keywords: differential indeterminates, ranking, differential polynomials,
+++ order, weight, leader, separant, initial, isobaric
+++ References:Kolchin, E.R. "Differential Algebra and Algebraic Groups"
+++ (Academic Press, 1973).
+++ Description:
+++ \spadtype{OrderlyDifferentialPolynomial} implements
+++ an ordinary differential polynomial ring in arbitrary number
+++ of differential indeterminates, with coefficients in a
+++ ring. The ranking on the differential indeterminate is orderly.
+++ This is analogous to the domain \spadtype{Polynomial}.
+++
+
+OrderlyDifferentialPolynomial(R):
+ Exports == Implementation where
+ R: Ring
+ S ==> Symbol
+ V ==> OrderlyDifferentialVariable S
+ E ==> IndexedExponents(V)
+ SMP ==> SparseMultivariatePolynomial(R, S)
+ Exports ==> Join(DifferentialPolynomialCategory(R,S,V,E),
+ RetractableTo SMP)
+
+ Implementation ==> DifferentialSparseMultivariatePolynomial(R,S,V)
+
+@
+\section{domain SDPOL SequentialDifferentialPolynomial}
+<<domain SDPOL SequentialDifferentialPolynomial>>=
+)abbrev domain SDPOL SequentialDifferentialPolynomial
+++ Author: William Sit
+++ Date Created: 24 September, 1991
+++ Date Last Updated: 7 February, 1992
+++ Basic Operations:DifferentialPolynomialCategory
+++ Related Constructors: DifferentialSparseMultivariatePolynomial
+++ See Also:
+++ AMS Classifications:12H05
+++ Keywords: differential indeterminates, ranking, differential polynomials,
+++ order, weight, leader, separant, initial, isobaric
+++ References:Kolchin, E.R. "Differential Algebra and Algebraic Groups"
+++ (Academic Press, 1973).
+++ Description:
+++ \spadtype{SequentialDifferentialPolynomial} implements
+++ an ordinary differential polynomial ring in arbitrary number
+++ of differential indeterminates, with coefficients in a
+++ ring. The ranking on the differential indeterminate is sequential.
+++
+
+SequentialDifferentialPolynomial(R):
+ Exports == Implementation where
+ R: Ring
+ S ==> Symbol
+ V ==> SequentialDifferentialVariable S
+ E ==> IndexedExponents(V)
+ SMP ==> SparseMultivariatePolynomial(R, S)
+ Exports ==> Join(DifferentialPolynomialCategory(R,S,V,E),
+ RetractableTo SMP)
+
+ Implementation ==> DifferentialSparseMultivariatePolynomial(R,S,V)
+
+@
+\section{License}
+<<license>>=
+--Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
+--All rights reserved.
+--
+--Redistribution and use in source and binary forms, with or without
+--modification, are permitted provided that the following conditions are
+--met:
+--
+-- - Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+--
+-- - Redistributions in binary form must reproduce the above copyright
+-- notice, this list of conditions and the following disclaimer in
+-- the documentation and/or other materials provided with the
+-- distribution.
+--
+-- - Neither the name of The Numerical ALgorithms Group Ltd. nor the
+-- names of its contributors may be used to endorse or promote products
+-- derived from this software without specific prior written permission.
+--
+--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+--IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+--TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+--PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+--OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+--EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+--PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+--PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+--LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+--NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+--SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+@
+<<*>>=
+<<license>>
+
+<<category DVARCAT DifferentialVariableCategory>>
+<<domain ODVAR OrderlyDifferentialVariable>>
+<<domain SDVAR SequentialDifferentialVariable>>
+<<category DPOLCAT DifferentialPolynomialCategory>>
+<<domain DSMP DifferentialSparseMultivariatePolynomial>>
+<<domain ODPOL OrderlyDifferentialPolynomial>>
+<<domain SDPOL SequentialDifferentialPolynomial>>
+
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}