aboutsummaryrefslogtreecommitdiff
path: root/src/algebra/wtpol.spad.pamphlet
diff options
context:
space:
mode:
authordos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
committerdos-reis <gdr@axiomatics.org>2007-08-14 05:14:52 +0000
commitab8cc85adde879fb963c94d15675783f2cf4b183 (patch)
treec202482327f474583b750b2c45dedfc4e4312b1d /src/algebra/wtpol.spad.pamphlet
downloadopen-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz
Initial population.
Diffstat (limited to 'src/algebra/wtpol.spad.pamphlet')
-rw-r--r--src/algebra/wtpol.spad.pamphlet199
1 files changed, 199 insertions, 0 deletions
diff --git a/src/algebra/wtpol.spad.pamphlet b/src/algebra/wtpol.spad.pamphlet
new file mode 100644
index 00000000..c3ee8d28
--- /dev/null
+++ b/src/algebra/wtpol.spad.pamphlet
@@ -0,0 +1,199 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/algebra wtpol.spad}
+\author{James Davenport}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+\section{domain WP WeightedPolynomials}
+<<domain WP WeightedPolynomials>>=
+)abbrev domain WP WeightedPolynomials
+++ Author: James Davenport
+++ Date Created: 17 April 1992
+++ Date Last Updated: 12 July 1992
+++ Basic Functions: Ring, changeWeightLevel
+++ Related Constructors: PolynomialRing
+++ Also See: OrdinaryWeightedPolynomials
+++ AMS Classifications:
+++ Keywords:
+++ References:
+++ Description:
+++ This domain represents truncated weighted polynomials over a general
+++ (not necessarily commutative) polynomial type. The variables must be
+++ specified, as must the weights.
+++ The representation is sparse
+++ in the sense that only non-zero terms are represented.
+
+WeightedPolynomials(R:Ring,VarSet: OrderedSet, E:OrderedAbelianMonoidSup,
+ P:PolynomialCategory(R,E,VarSet),
+ vl:List VarSet, wl:List NonNegativeInteger,
+ wtlevel:NonNegativeInteger):
+ Ring with
+ if R has CommutativeRing then Algebra(R)
+ coerce: $ -> P
+ ++ convert back into a "P", ignoring weights
+ if R has Field then "/": ($,$) -> Union($,"failed")
+ ++ x/y division (only works if minimum weight
+ ++ of divisor is zero, and if R is a Field)
+ coerce: P -> $
+ ++ coerce(p) coerces p into Weighted form, applying weights and ignoring terms
+ changeWeightLevel: NonNegativeInteger -> Void
+ ++ changeWeightLevel(n) changes the weight level to the new value given:
+ ++ NB: previously calculated terms are not affected
+ ==
+ add
+ --representations
+ Rep := PolynomialRing(P,NonNegativeInteger)
+ p:P
+ w,x1,x2:$
+ n:NonNegativeInteger
+ z:Integer
+ changeWeightLevel(n) ==
+ wtlevel:=n
+ lookupList:List Record(var:VarSet, weight:NonNegativeInteger)
+ if #vl ^= #wl then error "incompatible length lists in WeightedPolynomial"
+ lookupList:=[[v,n] for v in vl for n in wl]
+ -- local operation
+ innercoerce:(p,z) -> $
+ lookup:Varset -> NonNegativeInteger
+ lookup v ==
+ l:=lookupList
+ while l ^= [] repeat
+ v = l.first.var => return l.first.weight
+ l:=l.rest
+ 0
+ innercoerce(p,z) ==
+ z<0 => 0
+ zero? p => 0
+ mv:= mainVariable p
+ mv case "failed" => monomial(p,0)
+ n:=lookup(mv)
+ up:=univariate(p,mv)
+ ans:$
+ ans:=0
+ while not zero? up repeat
+ d:=degree up
+ f:=n*d
+ lcup:=leadingCoefficient up
+ up:=up-leadingMonomial up
+ mon:=monomial(1,mv,d)
+ f<=z =>
+ tmp:= innercoerce(lcup,z-f)
+ while not zero? tmp repeat
+ ans:=ans+ monomial(mon*leadingCoefficient(tmp),degree(tmp)+f)
+ tmp:=reductum tmp
+ ans
+ coerce(p):$ == innercoerce(p,wtlevel)
+ coerce(w):P == "+"/[c for c in coefficients w]
+ coerce(p:$):OutputForm ==
+ zero? p => (0$Integer)::OutputForm
+ degree p = 0 => leadingCoefficient(p):: OutputForm
+ reduce("+",(reverse [paren(c::OutputForm) for c in coefficients p])
+ ::List OutputForm)
+ 0 == 0$Rep
+ 1 == 1$Rep
+ x1 = x2 ==
+ -- Note that we must strip out any terms greater than wtlevel
+ while degree x1 > wtlevel repeat
+ x1 := reductum x1
+ while degree x2 > wtlevel repeat
+ x2 := reductum x2
+ x1 =$Rep x2
+ x1 + x2 == x1 +$Rep x2
+ -x1 == -(x1::Rep)
+ x1 * x2 ==
+ -- Note that this is probably an extremely inefficient definition
+ w:=x1 *$Rep x2
+ while degree(w) > wtlevel repeat
+ w:=reductum w
+ w
+
+@
+\section{domain OWP OrdinaryWeightedPolynomials}
+<<domain OWP OrdinaryWeightedPolynomials>>=
+)abbrev domain OWP OrdinaryWeightedPolynomials
+++ Author: James Davenport
+++ Date Created: 17 April 1992
+++ Date Last Updated: 12 July 1992
+++ Basic Functions: Ring, changeWeightLevel
+++ Related Constructors: WeightedPolynomials
+++ Also See: PolynomialRing
+++ AMS classifications:
+++ Keywords:
+++ References:
+++ Description:
+++ This domain represents truncated weighted polynomials over the
+++ "Polynomial" type. The variables must be
+++ specified, as must the weights.
+++ The representation is sparse
+++ in the sense that only non-zero terms are represented.
+
+OrdinaryWeightedPolynomials(R:Ring,
+ vl:List Symbol, wl:List NonNegativeInteger,
+ wtlevel:NonNegativeInteger):
+ Ring with
+ if R has CommutativeRing then Algebra(R)
+ coerce: $ -> Polynomial(R)
+ ++ coerce(p) converts back into a Polynomial(R), ignoring weights
+ coerce: Polynomial(R) -> $
+ ++ coerce(p) coerces a Polynomial(R) into Weighted form,
+ ++ applying weights and ignoring terms
+ if R has Field then "/": ($,$) -> Union($,"failed")
+ ++ x/y division (only works if minimum weight
+ ++ of divisor is zero, and if R is a Field)
+ changeWeightLevel: NonNegativeInteger -> Void
+ ++ changeWeightLevel(n) This changes the weight level to the new value given:
+ ++ NB: previously calculated terms are not affected
+ == WeightedPolynomials(R,Symbol,IndexedExponents(Symbol),
+ Polynomial(R),
+ vl,wl,wtlevel)
+
+@
+\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>>
+
+<<domain WP WeightedPolynomials>>
+<<domain OWP OrdinaryWeightedPolynomials>>
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}