diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet
index f165480..a4fb558 100644
--- a/books/bookvol10.3.pamphlet
+++ b/books/bookvol10.3.pamphlet
@@ -67877,37 +67877,73 @@ OrderedDirectProduct(dim:NonNegativeInteger,
--S 1 of 24
m1:=(x*y*y*z)$OFMONOID(Symbol)
+--R
+--R
+--R 2
+--R (1) x y z
+--R Type: OrderedFreeMonoid Symbol
--E 1
--S 2 of 24
m2:=(x*y)$OFMONOID(Symbol)
+--R
+--R
+--R (2) x y
+--R Type: OrderedFreeMonoid Symbol
--E 2
--S 3 of 24
lquo(m1,m2)
+--R
+--R
+--R (3) y z
+--R Type: Union(OrderedFreeMonoid Symbol,...)
--E 3
--S 4 of 24
m3:=(y*y)$OFMONOID(Symbol)
+--R
+--R
+--R 2
+--R (4) y
+--R Type: OrderedFreeMonoid Symbol
--E 4
--S 5 of 24
divide(m1,m2)
+--R
+--R
+--R (5) [lm= y z,rm= "failed"]
+--RType: Union(Record(lm: Union(OrderedFreeMonoid Symbol,"failed"),rm: Union(OrderedFreeMonoid Symbol,"failed")),...)
--E 5
--S 6 of 24
divide(m1,m3)
+--R
+--R
+--R (6) [lm= "failed",rm= "failed"]
+--RType: Union(Record(lm: Union(OrderedFreeMonoid Symbol,"failed"),rm: Union(OrderedFreeMonoid Symbol,"failed")),...)
--E 6
--S 7 of 24
m4:=(y^3)$OFMONOID(Symbol)
+--R
+--R
+--R 3
+--R (7) y
+--R Type: OrderedFreeMonoid Symbol
--E 7
--S 8 of 24
divide(m1,m4)
+--R
+--R
+--R (8) [lm= "failed",rm= "failed"]
+--RType: Union(Record(lm: Union(OrderedFreeMonoid Symbol,"failed"),rm: Union(OrderedFreeMonoid Symbol,"failed")),...)
--E 8
)set function compile on
+
-- Build the non-commutative algebra h=k[x,y] and then make computations
-- in h using some predefined rules for x and y. For example, giving
@@ -67925,6 +67961,8 @@ divide(m1,m4)
--S 9 of 24
C ==> OVAR [a,b]
+--R
+--R Type: Void
--E 9
-- Commutative Field: k = Q[a,b]
@@ -67933,12 +67971,16 @@ C ==> OVAR [a,b]
--S 10 of 24
K ==> SMP(FRAC INT,C)
+--R
+--R Type: Void
--E 10
-- Non-commutative variables
--S 11 of 24
V ==> OVAR [x,y]
+--R
+--R Type: Void
--E 11
-- Non-commuative algebra k=k[x,y]
@@ -67946,12 +67988,16 @@ V ==> OVAR [x,y]
--S 12 of 24
H ==> XDPOLY(V,K)
+--R
+--R Type: Void
--E 12
-- Free Monoid
--S 13 of 24
M ==> OFMONOID V
+--R
+--R Type: Void
--E 13
-- Substitution rules are applied to words from the monoid over the
@@ -67971,35 +68017,127 @@ subs(w:M):H ==
monom(n3,1)$H * (a::K*y::V+b::K)$M * monom(n3,1)$H
monom(n2,1)$H * (a::K*x::V+b::K)$H * monom(n2,1)$H
monom(n1,1)$H * (y::V*x::V*y::V)$H * monom(n1,1)$H
+--R
+--R Function declaration subs : OrderedFreeMonoid OrderedVariableList [x
+--R ,y] -> XDistributedPolynomial(OrderedVariableList [x,y],
+--R SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList
+--R [a,b])) has been added to workspace.
+--R Type: Void
--E 14
-- Apply rules to a term. Keep coefficients
--S 15 of 24
newterm(x:Record(k:M,c:K)):H == x.c*subs(x,k)
+--R
+--R Function declaration newterm : Record(k: OrderedFreeMonoid
+--R OrderedVariableList [x,y],c: SparseMultivariatePolynomial(
+--R Fraction Integer,OrderedVariableList [a,b])) ->
+--R XDistributedPolynomial(OrderedVariableList [x,y],
+--R SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList
+--R [a,b])) has been added to workspace.
+--R Type: Void
--E 15
-- Reconstruct the polynomial term by term
--S 16 of 24
newpoly(t:H):H == reduce(+,map(newterm,listOfTerms(t)))
+--R
+--R Function declaration newpoly : XDistributedPolynomial(
+--R OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction
+--R Integer,OrderedVariableList [a,b])) -> XDistributedPolynomial(
+--R OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction
+--R Integer,OrderedVariableList [a,b])) has been added to workspace.
+--R Type: Void
--E 16
-- Example calcuations
--S 17 of 24
p1:(x::V+y::V)$H^2
+--R
+--R
+--RDaly Bug
+--R Category, domain or package constructor ^ is not available.
--E 17
--S 18 of 24
newpoly(p1)
+--R
+--R There are no library operations named listOfTerms
+--R Use HyperDoc Browse or issue
+--R )what op listOfTerms
+--R to learn if there is any operation containing " listOfTerms " in
+--R its name.
+--R Cannot find a definition or applicable library operation named
+--R listOfTerms with argument type(s)
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R
+--R Perhaps you should use "@" to indicate the required return type,
+--R or "$" to specify which version of the function you need.
+--R AXIOM will attempt to step through and interpret the code.
+--R Compiling function newpoly with type XDistributedPolynomial(
+--R OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction
+--R Integer,OrderedVariableList [a,b])) -> XDistributedPolynomial(
+--R OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction
+--R Integer,OrderedVariableList [a,b]))
+--R There are no library operations named listOfTerms
+--R Use HyperDoc Browse or issue
+--R )what op listOfTerms
+--R to learn if there is any operation containing " listOfTerms " in
+--R its name.
+--R
+--RDaly Bug
+--R Cannot find a definition or applicable library operation named
+--R listOfTerms with argument type(s)
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R
+--R Perhaps you should use "@" to indicate the required return type,
+--R or "$" to specify which version of the function you need.
--E 18
--S 19 of 24
p2:=(x::V+y::V)$H^3
+--R
+--R
+--R 3 2 2 2 2 3
+--R (17) y + y x + y x y + y x + x y + x y x + x y + x
+--RType: XDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
--E 19
--S 20 of 24
pNew:=newpoly(p2)
+--R
+--R There are no library operations named listOfTerms
+--R Use HyperDoc Browse or issue
+--R )what op listOfTerms
+--R to learn if there is any operation containing " listOfTerms " in
+--R its name.
+--R Cannot find a definition or applicable library operation named
+--R listOfTerms with argument type(s)
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R
+--R Perhaps you should use "@" to indicate the required return type,
+--R or "$" to specify which version of the function you need.
+--R AXIOM will attempt to step through and interpret the code.
+--R Compiling function newpoly with type XDistributedPolynomial(
+--R OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction
+--R Integer,OrderedVariableList [a,b])) -> XDistributedPolynomial(
+--R OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction
+--R Integer,OrderedVariableList [a,b]))
+--R There are no library operations named listOfTerms
+--R Use HyperDoc Browse or issue
+--R )what op listOfTerms
+--R to learn if there is any operation containing " listOfTerms " in
+--R its name.
+--R
+--RDaly Bug
+--R Cannot find a definition or applicable library operation named
+--R listOfTerms with argument type(s)
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R
+--R Perhaps you should use "@" to indicate the required return type,
+--R or "$" to specify which version of the function you need.
--E 20
-- But the rules should be applied more than once
@@ -68007,10 +68145,45 @@ pNew:=newpoly(p2)
while pNew ~= p2 repeat
p2 := pNew
pNew := newpoly(p2)
+--R
+--R There are no library operations named listOfTerms
+--R Use HyperDoc Browse or issue
+--R )what op listOfTerms
+--R to learn if there is any operation containing " listOfTerms " in
+--R its name.
+--R Cannot find a definition or applicable library operation named
+--R listOfTerms with argument type(s)
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R
+--R Perhaps you should use "@" to indicate the required return type,
+--R or "$" to specify which version of the function you need.
+--R AXIOM will attempt to step through and interpret the code.
+--R Compiling function newpoly with type XDistributedPolynomial(
+--R OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction
+--R Integer,OrderedVariableList [a,b])) -> XDistributedPolynomial(
+--R OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction
+--R Integer,OrderedVariableList [a,b]))
+--R There are no library operations named listOfTerms
+--R Use HyperDoc Browse or issue
+--R )what op listOfTerms
+--R to learn if there is any operation containing " listOfTerms " in
+--R its name.
+--R
+--RDaly Bug
+--R Cannot find a definition or applicable library operation named
+--R listOfTerms with argument type(s)
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R
+--R Perhaps you should use "@" to indicate the required return type,
+--R or "$" to specify which version of the function you need.
--E 21
--S 22 of 24
pNew
+--R
+--R
+--R (18) pNew
+--R Type: Variable pNew
--E 22
--S 23 of 24
@@ -68021,10 +68194,54 @@ reduce(p:H):H ==
p2 := p3
p3 := newpoly(p2)
p3
+--R
+--R Function declaration reduce : XDistributedPolynomial(
+--R OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction
+--R Integer,OrderedVariableList [a,b])) -> XDistributedPolynomial(
+--R OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction
+--R Integer,OrderedVariableList [a,b])) has been added to workspace.
+--R Compiled code for newpoly has been cleared.
+--R Type: Void
--E 23
--S 24 of 24
reduce(p2)
+--R
+--R There are no library operations named listOfTerms
+--R Use HyperDoc Browse or issue
+--R )what op listOfTerms
+--R to learn if there is any operation containing " listOfTerms " in
+--R its name.
+--R Cannot find a definition or applicable library operation named
+--R listOfTerms with argument type(s)
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R
+--R Perhaps you should use "@" to indicate the required return type,
+--R or "$" to specify which version of the function you need.
+--R AXIOM will attempt to step through and interpret the code.
+--R Compiling function newpoly with type XDistributedPolynomial(
+--R OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction
+--R Integer,OrderedVariableList [a,b])) -> XDistributedPolynomial(
+--R OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction
+--R Integer,OrderedVariableList [a,b]))
+--R Compiling function reduce with type XDistributedPolynomial(
+--R OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction
+--R Integer,OrderedVariableList [a,b])) -> XDistributedPolynomial(
+--R OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction
+--R Integer,OrderedVariableList [a,b]))
+--R There are no library operations named listOfTerms
+--R Use HyperDoc Browse or issue
+--R )what op listOfTerms
+--R to learn if there is any operation containing " listOfTerms " in
+--R its name.
+--R
+--RDaly Bug
+--R Cannot find a definition or applicable library operation named
+--R listOfTerms with argument type(s)
+--RXDistributedPolynomial(OrderedVariableList [x,y],SparseMultivariatePolynomial(Fraction Integer,OrderedVariableList [a,b]))
+--R
+--R Perhaps you should use "@" to indicate the required return type,
+--R or "$" to specify which version of the function you need.
--E 24
)spool
@@ -71387,6 +71604,9 @@ PartialFraction(R: EuclideanDomain): Cat == Capsule where
coerce: % -> Fraction R
++ coerce(p) sums up the components of the partial fraction and
++ returns a single fraction.
+ ++
+ ++X a:=(13/74)::PFR(INT)
+ ++X a::FRAC(INT)
coerce: Fraction FRR -> %
++ coerce(f) takes a fraction with numerator and denominator in
@@ -71394,32 +71614,52 @@ PartialFraction(R: EuclideanDomain): Cat == Capsule where
++ necessary for the parts to be factored because it is not
++ known in general how to factor elements of \spad{R} and
++ this is needed to decompose into partial fractions.
+ ++
+ ++X (13/74)::PFR(INT)
compactFraction: % -> %
++ compactFraction(p) normalizes the partial fraction \spad{p}
++ to the compact representation. In this form, the partial
++ fraction has only one fractional term per prime in the
++ denominator.
+ ++
+ ++X a:=partialFraction(1,factorial 10)
+ ++X b:=padicFraction(a)
+ ++X compactFraction(b)
firstDenom: % -> FRR
++ firstDenom(p) extracts the denominator of the first fractional
++ term. This returns 1 if there is no fractional part (use
++ \spadfunFrom{wholePart}{PartialFraction} to get the whole part).
+ ++
+ ++X a:=partialFraction(1,factorial 10)
+ ++X firstDenom(a)
firstNumer: % -> R
++ firstNumer(p) extracts the numerator of the first fractional
++ term. This returns 0 if there is no fractional part (use
++ \spadfunFrom{wholePart}{PartialFraction} to get the whole part).
+ ++
+ ++X a:=partialFraction(1,factorial 10)
+ ++X firstNumer(a)
nthFractionalTerm: (%,Integer) -> %
++ nthFractionalTerm(p,n) extracts the nth fractional term from
++ the partial fraction \spad{p}. This returns 0 if the index
++ \spad{n} is out of range.
+ ++
+ ++X a:=partialFraction(1,factorial 10)
+ ++X b:=padicFraction(a)
+ ++X nthFractionalTerm(b,3)
numberOfFractionalTerms: % -> Integer
++ numberOfFractionalTerms(p) computes the number of fractional
++ terms in \spad{p}. This returns 0 if there is no fractional
++ part.
+ ++
+ ++X a:=partialFraction(1,factorial 10)
+ ++X b:=padicFraction(a)
+ ++X numberOfFractionalTerms(b)
padicallyExpand: (R,R) -> SUPR
++ padicallyExpand(p,x) is a utility function that expands
@@ -71430,16 +71670,25 @@ PartialFraction(R: EuclideanDomain): Cat == Capsule where
++ padicFraction(q) expands the fraction p-adically in the primes
++ \spad{p} in the denominator of \spad{q}. For example,
++ \spad{padicFraction(3/(2**2)) = 1/2 + 1/(2**2)}.
- ++ Use \spadfunFrom{compactFraction}{PartialFraction} to return to compact form.
+ ++ Use \spadfunFrom{compactFraction}{PartialFraction} to
+ ++ return to compact form.
+ ++
+ ++X a:=partialFraction(1,factorial 10)
+ ++X padicFraction(a)
partialFraction: (R, FRR) -> %
++ partialFraction(numer,denom) is the main function for
++ constructing partial fractions. The second argument is the
++ denominator and should be factored.
+ ++
+ ++X partialFraction(1,factorial 10)
wholePart: % -> R
++ wholePart(p) extracts the whole part of the partial fraction
++ \spad{p}.
+ ++
+ ++X a:=(74/13)::PFR(INT)
+ ++X wholePart(a)
Capsule == add
diff --git a/changelog b/changelog
index 0e8816d..e096256 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,5 @@
+20091030 tpd src/axiom-website/patches.html 20091030.04.tpd.patch
+20091030 tpd books/bookvol10.3 partial fix OrderedFreeMonoid
20091030 tpd src/axiom-website/patches.html 20091030.03.tpd.patch
20091030 tpd src/algebra/Makefile add PartialFractionPackage.help
20091030 tpd books/bookvol10.4 document PartialFractionPackage
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index fef7922..208e80a 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -2203,5 +2203,7 @@ src/input/donsimple.input added
books/bookvol10.3 document OrderedFreeMonoid
20091030.03.tpd.patch
books/bookvol10.4 document PartialFractionPackage
+20091030.04.tpd.patch
+books/bookvol10.3 partial fix OrderedFreeMonoid