diff --git a/books/Makefile.pamphlet b/books/Makefile.pamphlet index d5e906d..28b6176 100644 --- a/books/Makefile.pamphlet +++ b/books/Makefile.pamphlet @@ -11,8 +11,14 @@ as pdf files in the final output tree. \eject \tableofcontents \eject +Note that we need to set the SHELL variable here because the +default shell appears to be /bin/sh which does not follow the +semantics of echo used by /bin/bash. Thus, while trying to +write the backslash-newpage lines the backslash-n gets interpreted +as a newline. \section{The Makefile} <<*>>= +SHELL=bash PDF=${AXIOM}/doc IN=${SPD}/books LATEX=latex diff --git a/books/bookvol10.3.pamphlet b/books/bookvol10.3.pamphlet index 919003f..3510eef 100644 --- a/books/bookvol10.3.pamphlet +++ b/books/bookvol10.3.pamphlet @@ -12999,6 +12999,83 @@ DifferentialSparseMultivariatePolynomial(R, S, V): @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{domain DPMM DirectProductMatrixModule} +\pagehead{DirectProductMatrixModule}{DPMM} +\pagepic{ps/v103directproductmatrixmodule.ps}{DPMM}{1.00} +See also:\\ +\refto{OppositeMonogenicLinearOperator}{OMLO} +\refto{OrdinaryDifferentialRing}{ODR} +\refto{DirectProductModule}{DPMO} +<>= +)abbrev domain DPMM DirectProductMatrixModule +++ Author: Stephen M. Watt +++ Date Created: 1986 +++ Date Last Updated: June 4, 1991 +++ Basic Operations: +++ Related Domains: +++ Also See: +++ AMS Classifications: +++ Keywords: equation +++ Examples: +++ References: +++ Description: +++ This constructor provides a direct product type with a +++ left matrix-module view. + +DirectProductMatrixModule(n, R, M, S): DPcategory == DPcapsule where + n: PositiveInteger + R: Ring + RowCol ==> DirectProduct(n,R) + M: SquareMatrixCategory(n,R,RowCol,RowCol) + S: LeftModule(R) + + DPcategory == Join(DirectProductCategory(n,S), LeftModule(R), LeftModule(M)) + + DPcapsule == DirectProduct(n, S) add + Rep := Vector(S) + r:R * x:$ == [r*x.i for i in 1..n] + m:M * x:$ == [ +/[m(i,j)*x.j for j in 1..n] for i in 1..n] + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{domain DPMO DirectProductModule} +\pagehead{DirectProductModule}{DPMO} +\pagepic{ps/v103directproductmodule.ps}{DPMO}{1.00} +See also:\\ +\refto{OppositeMonogenicLinearOperator}{OMLO} +\refto{OrdinaryDifferentialRing}{ODR} +\refto{DirectProductMatrixModule}{DPMM} +<>= +)abbrev domain DPMO DirectProductModule +++ Author: Stephen M. Watt +++ Date Created: 1986 +++ Date Last Updated: June 4, 1991 +++ Basic Operations: +++ Related Domains: +++ Also See: +++ AMS Classifications: +++ Keywords: equation +++ Examples: +++ References: +++ Description: +++ This constructor provides a direct product of R-modules +++ with an R-module view. + +DirectProductModule(n, R, S): DPcategory == DPcapsule where + n: NonNegativeInteger + R: Ring + S: LeftModule(R) + + DPcategory == Join(DirectProductCategory(n,S), LeftModule(R)) + -- with if S has Algebra(R) then Algebra(R) + -- + + DPcapsule == DirectProduct(n,S) add + Rep := Vector(S) + r:R * x:$ == [r * x.i for i in 1..n] + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{domain DMP DistributedMultivariatePolynomial} <>= -- gdpoly.spad.pamphlet DistributedMultivariatePolynomial.input @@ -31820,6 +31897,1600 @@ Library(): TableAggregate(String, Any) with @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{domain LSQM LieSquareMatrix} +\pagehead{LieSquareMatrix}{LSQM} +\pagepic{ps/v103liesquarematrix.ps}{LSQM}{1.00} +See also:\\ +\refto{AssociatedLieAlgebra}{LIE} +\refto{AssociatedJordanAlgebra}{JORDAN} +<>= +)abbrev domain LSQM LieSquareMatrix +++ Author: J. Grabmeier +++ Date Created: 07 March 1991 +++ Date Last Updated: 08 March 1991 +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ LieSquareMatrix(n,R) implements the Lie algebra of the n by n +++ matrices over the commutative ring R. +++ The Lie bracket (commutator) of the algebra is given by +++ \spad{a*b := (a *$SQMATRIX(n,R) b - b *$SQMATRIX(n,R) a)}, +++ where \spadfun{*$SQMATRIX(n,R)} is the usual matrix multiplication. +LieSquareMatrix(n,R): Exports == Implementation where + + n : PositiveInteger + R : CommutativeRing + + Row ==> DirectProduct(n,R) + Col ==> DirectProduct(n,R) + + Exports ==> Join(SquareMatrixCategory(n,R,Row,Col), CoercibleTo Matrix R,_ + FramedNonAssociativeAlgebra R) --with + + Implementation ==> AssociatedLieAlgebra (R,SquareMatrix(n, R)) add + + Rep := AssociatedLieAlgebra (R,SquareMatrix(n, R)) + -- local functions + n2 : PositiveInteger := n*n + + convDM : DirectProduct(n2,R) -> % + conv : DirectProduct(n2,R) -> SquareMatrix(n,R) + --++ converts n2-vector to (n,n)-matrix row by row + conv v == + cond : Matrix(R) := new(n,n,0$R)$Matrix(R) + z : Integer := 0 + for i in 1..n repeat + for j in 1..n repeat + z := z+1 + setelt(cond,i,j,v.z) + squareMatrix(cond)$SquareMatrix(n, R) + + + coordinates(a:%,b:Vector(%)):Vector(R) == + -- only valid for b canonicalBasis + res : Vector R := new(n2,0$R) + z : Integer := 0 + for i in 1..n repeat + for j in 1..n repeat + z := z+1 + res.z := elt(a,i,j)$% + res + + + convDM v == + sq := conv v + coerce(sq)$Rep :: % + + basis() == + n2 : PositiveInteger := n*n + ldp : List DirectProduct(n2,R) := + [unitVector(i::PositiveInteger)$DirectProduct(n2,R) for i in 1..n2] + res:Vector % := vector map(convDM,_ + ldp)$ListFunctions2(DirectProduct(n2,R), %) + + someBasis() == basis() + rank() == n*n + + +-- transpose: % -> % +-- ++ computes the transpose of a matrix +-- squareMatrix: Matrix R -> % +-- ++ converts a Matrix to a LieSquareMatrix +-- coerce: % -> Matrix R +-- ++ converts a LieSquareMatrix to a Matrix +-- symdecomp : % -> Record(sym:%,antisym:%) +-- if R has commutative("*") then +-- minorsVect: -> Vector(Union(R,"uncomputed")) --range: 1..2**n-1 +-- if R has commutative("*") then central +-- if R has commutative("*") and R has unitsKnown then unitsKnown + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{domain LODO LinearOrdinaryDifferentialOperator} +<>= +-- lodo.spad.pamphlet LinearOrdinaryDifferentialOperator.input +)spool LinearOrdinaryDifferentialOperator.output +)set message test on +)set message auto off +)clear all +--S 1 of 16 +Dx: LODO(EXPR INT, f +-> D(f, x)) +--R +--R Type: Void +--E 1 + +--S 2 of 16 +Dx := D() +--R +--R +--R (2) D +--IType: LinearOrdinaryDifferentialOperator(Expression Integer,theMap LAMBDA-CLOSURE(NIL,NIL,NIL,G1404 envArg,SPADCALL(G1404,QUOTE x,ELT(*1;anonymousFunction;0;frame0;internal;MV,0)))) +--E 2 + +--S 3 of 16 +Dop:= Dx^3 + G/x^2*Dx + H/x^3 - 1 +--R +--R +--R 3 +--R 3 G - x + H +--R (3) D + -- D + -------- +--R 2 3 +--R x x +--IType: LinearOrdinaryDifferentialOperator(Expression Integer,theMap LAMBDA-CLOSURE(NIL,NIL,NIL,G1404 envArg,SPADCALL(G1404,QUOTE x,ELT(*1;anonymousFunction;0;frame0;internal;MV,0)))) +--E 3 + +--S 4 of 16 +n == 3 +--R +--R Type: Void +--E 4 + +--S 5 of 16 +phi == reduce(+,[subscript(s,[i])*exp(x)/x^i for i in 0..n]) +--R +--R Type: Void +--E 5 + +--S 6 of 16 +phi1 == Dop(phi) / exp x +--R +--R Type: Void +--E 6 + +--S 7 of 16 +phi2 == phi1 *x**(n+3) +--R +--R Type: Void +--E 7 + +--S 8 of 16 +phi3 == retract(phi2)@(POLY INT) +--R +--R Type: Void +--E 8 + +--S 9 of 16 +pans == phi3 ::UP(x,POLY INT) +--R +--R Type: Void +--E 9 + +--S 10 of 16 +pans1 == [coefficient(pans, (n+3-i) :: NNI) for i in 2..n+1] +--R +--R Type: Void +--E 10 + +--S 11 of 16 +leq == solve(pans1,[subscript(s,[i]) for i in 1..n]) +--R +--R Type: Void +--E 11 + +--S 12 of 16 +leq +--R +--R Compiling body of rule n to compute value of type PositiveInteger +--R Compiling body of rule phi to compute value of type Expression +--R Integer +--R Compiling body of rule phi1 to compute value of type Expression +--R Integer +--R Compiling body of rule phi2 to compute value of type Expression +--R Integer +--R Compiling body of rule phi3 to compute value of type Polynomial +--R Integer +--R Compiling body of rule pans to compute value of type +--R UnivariatePolynomial(x,Polynomial Integer) +--R Compiling body of rule pans1 to compute value of type List +--R Polynomial Integer +--R Compiling body of rule leq to compute value of type List List +--R Equation Fraction Polynomial Integer +--I Compiling function G3349 with type Integer -> Boolean +--R +--R (12) +--R 2 3 2 +--R s G 3s H + s G + 6s G (9s G + 54s )H + s G + 18s G + 72s G +--R 0 0 0 0 0 0 0 0 0 +--R [[s = ---,s = ------------------,s = --------------------------------------]] +--R 1 3 2 18 3 162 +--R Type: List List Equation Fraction Polynomial Integer +--E 12 + +--S 13 of 16 +n==4 +--R +--R Compiled code for n has been cleared. +--R Compiled code for leq has been cleared. +--R Compiled code for pans1 has been cleared. +--R Compiled code for phi2 has been cleared. +--R Compiled code for phi has been cleared. +--R Compiled code for phi3 has been cleared. +--R Compiled code for phi1 has been cleared. +--R Compiled code for pans has been cleared. +--R 1 old definition(s) deleted for function or rule n +--R Type: Void +--E 13 + +--S 14 of 16 +leq +--R +--R Compiling body of rule n to compute value of type PositiveInteger +--R Compiling body of rule phi to compute value of type Expression +--R Integer +--R Compiling body of rule phi1 to compute value of type Expression +--R Integer +--R Compiling body of rule phi2 to compute value of type Expression +--R Integer +--R Compiling body of rule phi3 to compute value of type Polynomial +--R Integer +--R Compiling body of rule pans to compute value of type +--R UnivariatePolynomial(x,Polynomial Integer) +--R Compiling body of rule pans1 to compute value of type List +--R Polynomial Integer +--R Compiling body of rule leq to compute value of type List List +--R Equation Fraction Polynomial Integer +--R +--R (14) +--R [ +--R 2 +--R s G 3s H + s G + 6s G +--R 0 0 0 0 +--R [s = ---, s = ------------------, +--R 1 3 2 18 +--R 3 2 +--R (9s G + 54s )H + s G + 18s G + 72s G +--R 0 0 0 0 0 +--R s = --------------------------------------, +--R 3 162 +--R +--R s = +--R 4 +--R 2 2 4 3 2 +--R 27s H + (18s G + 378s G + 1296s )H + s G + 36s G + 396s G +--R 0 0 0 0 0 0 0 +--R + +--R 1296s G +--R 0 +--R / +--R 1944 +--R ] +--R ] +--R Type: List List Equation Fraction Polynomial Integer +--E 14 + +--S 15 of 16 +n==7 +--R +--R Compiled code for n has been cleared. +--R Compiled code for leq has been cleared. +--R Compiled code for pans1 has been cleared. +--R Compiled code for phi2 has been cleared. +--R Compiled code for phi has been cleared. +--R Compiled code for phi3 has been cleared. +--R Compiled code for phi1 has been cleared. +--R Compiled code for pans has been cleared. +--R 1 old definition(s) deleted for function or rule n +--R Type: Void +--E 15 + +--S 16 of 16 +leq +--R +--R Compiling body of rule n to compute value of type PositiveInteger +--R Compiling body of rule phi to compute value of type Expression +--R Integer +--R Compiling body of rule phi1 to compute value of type Expression +--R Integer +--R Compiling body of rule phi2 to compute value of type Expression +--R Integer +--R Compiling body of rule phi3 to compute value of type Polynomial +--R Integer +--R Compiling body of rule pans to compute value of type +--R UnivariatePolynomial(x,Polynomial Integer) +--R Compiling body of rule pans1 to compute value of type List +--R Polynomial Integer +--R Compiling body of rule leq to compute value of type List List +--R Equation Fraction Polynomial Integer +--R +--R (16) +--R [ +--R 2 +--R s G 3s H + s G + 6s G +--R 0 0 0 0 +--R [s = ---, s = ------------------, +--R 1 3 2 18 +--R 3 2 +--R (9s G + 54s )H + s G + 18s G + 72s G +--R 0 0 0 0 0 +--R s = --------------------------------------, +--R 3 162 +--R +--R s = +--R 4 +--R 2 2 4 3 2 +--R 27s H + (18s G + 378s G + 1296s )H + s G + 36s G + 396s G +--R 0 0 0 0 0 0 0 +--R + +--R 1296s G +--R 0 +--R / +--R 1944 +--R , +--R +--R s = +--R 5 +--R 2 3 2 +--R (135s G + 2268s )H + (30s G + 1350s G + 16416s G + 38880s )H +--R 0 0 0 0 0 0 +--R + +--R 5 4 3 2 +--R s G + 60s G + 1188s G + 9504s G + 25920s G +--R 0 0 0 0 0 +--R / +--R 29160 +--R , +--R +--R s = +--R 6 +--R 3 2 2 +--R 405s H + (405s G + 18468s G + 174960s )H +--R 0 0 0 0 +--R + +--R 4 3 2 6 +--R (45s G + 3510s G + 88776s G + 777600s G + 1166400s )H + s G +--R 0 0 0 0 0 0 +--R + +--R 5 4 3 2 +--R 90s G + 2628s G + 27864s G + 90720s G +--R 0 0 0 0 +--R / +--R 524880 +--R , +--R +--R s = +--R 7 +--R 3 +--R (2835s G + 91854s )H +--R 0 0 +--R + +--R 3 2 2 +--R (945s G + 81648s G + 2082996s G + 14171760s )H +--R 0 0 0 0 +--R + +--R 5 4 3 2 +--R (63s G + 7560s G + 317520s G + 5554008s G + 34058880s G)H +--R 0 0 0 0 0 +--R + +--R 7 6 5 4 3 2 +--R s G + 126s G + 4788s G + 25272s G - 1744416s G - 26827200s G +--R 0 0 0 0 0 0 +--R + +--R - 97977600s G +--R 0 +--R / +--R 11022480 +--R ] +--R ] +--R Type: List List Equation Fraction Polynomial Integer +--E 16 +)spool + +Dx: LODO(EXPR INT, f +-> D(f, x)) +Dx := D() +Dop:= Dx^3 + G/x^2*Dx + H/x^3 - 1 +n == 3 +phi == reduce(+,[subscript(s,[i])*exp(x)/x^i for i in 0..n]) +phi1 == Dop(phi) / exp x +phi2 == phi1 *x**(n+3) +phi3 == retract(phi2)@(POLY INT) +pans == phi3 ::UP(x,POLY INT) +pans1 == [coefficient(pans, (n+3-i) :: NNI) for i in 2..n+1] +leq == solve(pans1,[subscript(s,[i]) for i in 1..n]) +leq +n==4 +leq +n==7 +leq +)spool +)lisp (bye) +@ +<>= +==================================================================== +LinearOrdinaryDifferentialOperator examples +==================================================================== + +LinearOrdinaryDifferentialOperator(A, diff) is the domain of linear +ordinary differential operators with coefficients in a ring A with a +given derivation. + +==================================================================== +Differential Operators with Series Coefficients +==================================================================== + +Problem: + Find the first few coefficients of exp(x)/x^i of Dop phi where + + Dop := D^3 + G/x^2 * D + H/x^3 - 1 + phi := sum(s[i]*exp(x)/x^i, i = 0..) + +Solution: + +Define the differential. + + Dx: LODO(EXPR INT, f +-> D(f, x)) + Type: Void + + Dx := D() + D + Type: LinearOrdinaryDifferentialOperator(Expression Integer, + theMap LAMBDA-CLOSURE(NIL,NIL,NIL,G1404 envArg, + SPADCALL(G1404,QUOTE x, + ELT(*1;anonymousFunction;0;frame0;internal;MV,0)))) + +Now define the differential operator Dop. + + Dop:= Dx^3 + G/x^2*Dx + H/x^3 - 1 + 3 + 3 G - x + H + D + -- D + -------- + 2 3 + x x + Type: LinearOrdinaryDifferentialOperator(Expression Integer, + theMap LAMBDA-CLOSURE(NIL,NIL,NIL,G1404 envArg, + SPADCALL(G1404,QUOTE x, + ELT(*1;anonymousFunction;0;frame0;internal;MV,0)))) + + n == 3 + Type: Void + + phi == reduce(+,[subscript(s,[i])*exp(x)/x^i for i in 0..n]) + Type: Void + + phi1 == Dop(phi) / exp x + Type: Void + + phi2 == phi1 *x**(n+3) + Type: Void + + phi3 == retract(phi2)@(POLY INT) + Type: Void + + pans == phi3 ::UP(x,POLY INT) + Type: Void + + pans1 == [coefficient(pans, (n+3-i) :: NNI) for i in 2..n+1] + Type: Void + + leq == solve(pans1,[subscript(s,[i]) for i in 1..n]) + Type: Void + +Evaluate this for several values of n. + + leq + 2 3 2 + s G 3s H + s G + 6s G (9s G + 54s )H + s G + 18s G + 72s G + 0 0 0 0 0 0 0 0 0 + [[s = ---,s = ------------------,s = --------------------------------------]] + 1 3 2 18 3 162 + Type: List List Equation Fraction Polynomial Integer + + n==4 + Type: Void + + leq + [ + 2 + s G 3s H + s G + 6s G + 0 0 0 0 + [s = ---, s = ------------------, + 1 3 2 18 + 3 2 + (9s G + 54s )H + s G + 18s G + 72s G + 0 0 0 0 0 + s = --------------------------------------, + 3 162 + + s = + 4 + 2 2 4 3 2 + 27s H + (18s G + 378s G + 1296s )H + s G + 36s G + 396s G + 0 0 0 0 0 0 0 + + + 1296s G + 0 + / + 1944 + ] + ] + Type: List List Equation Fraction Polynomial Integer + + n==7 + Type: Void + + leq + [ + 2 + s G 3s H + s G + 6s G + 0 0 0 0 + [s = ---, s = ------------------, + 1 3 2 18 + 3 2 + (9s G + 54s )H + s G + 18s G + 72s G + 0 0 0 0 0 + s = --------------------------------------, + 3 162 + + s = + 4 + 2 2 4 3 2 + 27s H + (18s G + 378s G + 1296s )H + s G + 36s G + 396s G + 0 0 0 0 0 0 0 + + + 1296s G + 0 + / + 1944 + , + + s = + 5 + 2 3 2 + (135s G + 2268s )H + (30s G + 1350s G + 16416s G + 38880s )H + 0 0 0 0 0 0 + + + 5 4 3 2 + s G + 60s G + 1188s G + 9504s G + 25920s G + 0 0 0 0 0 + / + 29160 + , + + s = + 6 + 3 2 2 + 405s H + (405s G + 18468s G + 174960s )H + 0 0 0 0 + + + 4 3 2 6 + (45s G + 3510s G + 88776s G + 777600s G + 1166400s )H + s G + 0 0 0 0 0 0 + + + 5 4 3 2 + 90s G + 2628s G + 27864s G + 90720s G + 0 0 0 0 + / + 524880 + , + + s = + 7 + 3 + (2835s G + 91854s )H + 0 0 + + + 3 2 2 + (945s G + 81648s G + 2082996s G + 14171760s )H + 0 0 0 0 + + + 5 4 3 2 + (63s G + 7560s G + 317520s G + 5554008s G + 34058880s G)H + 0 0 0 0 0 + + + 7 6 5 4 3 2 + s G + 126s G + 4788s G + 25272s G - 1744416s G - 26827200s G + 0 0 0 0 0 0 + + + - 97977600s G + 0 + / + 11022480 + ] + ] + Type: List List Equation Fraction Polynomial Integer + +See Also: +o )show LinearOrdinaryDifferentialOperator +o $AXIOM/doc/src/algebra/lodo.spad.dvi + +@ +\pagehead{LinearOrdinaryDifferentialOperator}{LODO} +\pagepic{ps/v103linearordinarydifferentialoperator.ps}{LODO}{1.00} +<>= +)abbrev domain LODO LinearOrdinaryDifferentialOperator +++ Author: Manuel Bronstein +++ Date Created: 9 December 1993 +++ Date Last Updated: 15 April 1994 +++ Keywords: differential operator +++ Description: +++ \spad{LinearOrdinaryDifferentialOperator} defines a ring of +++ differential operators with coefficients in a ring A with a given +++ derivation. +++ Multiplication of operators corresponds to functional composition: +++ \spad{(L1 * L2).(f) = L1 L2 f} +LinearOrdinaryDifferentialOperator(A:Ring, diff: A -> A): + LinearOrdinaryDifferentialOperatorCategory A + == SparseUnivariateSkewPolynomial(A, 1, diff) add + Rep := SparseUnivariateSkewPolynomial(A, 1, diff) + + outputD := "D"@String :: Symbol :: OutputForm + + coerce(l:%):OutputForm == outputForm(l, outputD) + elt(p:%, a:A):A == apply(p, 0, a) + + if A has Field then + import LinearOrdinaryDifferentialOperatorsOps(A, %) + + symmetricProduct(a, b) == symmetricProduct(a, b, diff) + symmetricPower(a, n) == symmetricPower(a, n, diff) + directSum(a, b) == directSum(a, b, diff) + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{domain LODO1 LinearOrdinaryDifferentialOperator1} +<>= +-- lodo.spad.pamphlet LinearOrdinaryDifferentialOperator1.input +)spool LinearOrdinaryDifferentialOperator1.output +)set message test on +)set message auto off +)clear all +--S 1 of 20 +RFZ := Fraction UnivariatePolynomial('x, Integer) +--R +--R +--R (1) Fraction UnivariatePolynomial(x,Integer) +--R Type: Domain +--E 1 + +--S 2 of 20 +x : RFZ := 'x +--R +--R +--R (2) x +--R Type: Fraction UnivariatePolynomial(x,Integer) +--E 2 + +--S 3 of 20 +Dx : LODO1 RFZ := D() +--R +--R +--R (3) D +--RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) +--E 3 + +--S 4 of 20 +b : LODO1 RFZ := 3*x**2*Dx**2 + 2*Dx + 1/x +--R +--R +--R 2 2 1 +--R (4) 3x D + 2D + - +--R x +--RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) +--E 4 + +--S 5 of 20 +a : LODO1 RFZ := b*(5*x*Dx + 7) +--R +--R +--R 3 3 2 2 7 +--R (5) 15x D + (51x + 10x)D + 29D + - +--R x +--RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) +--E 5 + +--S 6 of 20 +p := x**2 + 1/x**2 +--R +--R +--R 4 +--R x + 1 +--R (6) ------ +--R 2 +--R x +--R Type: Fraction UnivariatePolynomial(x,Integer) +--E 6 + +--S 7 of 20 +(a*b - b*a) p +--R +--R +--R 4 +--R - 75x + 540x - 75 +--R (7) ------------------ +--R 4 +--R x +--R Type: Fraction UnivariatePolynomial(x,Integer) +--E 7 + +--S 8 of 20 +ld := leftDivide(a,b) +--R +--R +--R (8) [quotient= 5x D + 7,remainder= 0] +--RType: Record(quotient: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer),remainder: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer)) +--E 8 + +--S 9 of 20 +a = b * ld.quotient + ld.remainder +--R +--R +--R 3 3 2 2 7 3 3 2 2 7 +--R (9) 15x D + (51x + 10x)D + 29D + -= 15x D + (51x + 10x)D + 29D + - +--R x x +--RType: Equation LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) +--E 9 + +--S 10 of 20 +rd := rightDivide(a,b) +--R +--R +--R 5 +--R (10) [quotient= 5x D + 7,remainder= 10D + -] +--R x +--RType: Record(quotient: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer),remainder: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer)) +--E 10 + +--S 11 of 20 +a = rd.quotient * b + rd.remainder +--R +--R +--R 3 3 2 2 7 3 3 2 2 7 +--R (11) 15x D + (51x + 10x)D + 29D + -= 15x D + (51x + 10x)D + 29D + - +--R x x +--RType: Equation LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) +--E 11 + +--S 12 of 20 +rightQuotient(a,b) +--R +--R +--R (12) 5x D + 7 +--RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) +--E 12 + +--S 13 of 20 +rightRemainder(a,b) +--R +--R +--R 5 +--R (13) 10D + - +--R x +--RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) +--E 13 + +--S 14 of 20 +leftExactQuotient(a,b) +--R +--R +--R (14) 5x D + 7 +--RType: Union(LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer),...) +--E 14 + +--S 15 of 20 +e := leftGcd(a,b) +--R +--R +--R 2 2 1 +--R (15) 3x D + 2D + - +--R x +--RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) +--E 15 + +--S 16 of 20 +leftRemainder(a, e) +--R +--R +--R (16) 0 +--RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) +--E 16 + +--S 17 of 20 +rightRemainder(a, e) +--R +--R +--R 5 +--R (17) 10D + - +--R x +--RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) +--E 17 + +--S 18 of 20 +f := rightLcm(a,b) +--R +--R +--R 3 3 2 2 7 +--R (18) 15x D + (51x + 10x)D + 29D + - +--R x +--RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) +--E 18 + +--S 19 of 20 +rightRemainder(f, b) +--R +--R +--R 5 +--R (19) 10D + - +--R x +--RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) +--E 19 + +--S 20 of 20 +leftRemainder(f, b) +--R +--R +--R (20) 0 +--RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) +--E 20 +)spool +)lisp (bye) +@ + +<>= +==================================================================== +LinearOrdinaryDifferentialOperator1 example +==================================================================== + +LinearOrdinaryDifferentialOperator1(A) is the domain of linear +ordinary differential operators with coefficients in the differential +ring A. + +==================================================================== +Differential Operators with Rational Function Coefficients +==================================================================== + +This example shows differential operators with rational function +coefficients. In this case operator multiplication is non-commutative and, +since the coefficients form a field, an operator division algorithm exists. + +We begin by defining RFZ to be the rational functions in x with +integer coefficients and Dx to be the differential operator for d/dx. + + RFZ := Fraction UnivariatePolynomial('x, Integer) + Fraction UnivariatePolynomial(x,Integer) + Type: Domain + + x : RFZ := 'x + x + Type: Fraction UnivariatePolynomial(x,Integer) + + Dx : LODO1 RFZ := D() + D + Type: LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer) + +Operators are created using the usual arithmetic operations. + + b : LODO1 RFZ := 3*x**2*Dx**2 + 2*Dx + 1/x + 2 2 1 + 3x D + 2D + - + x + Type: LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer) + + a : LODO1 RFZ := b*(5*x*Dx + 7) + 3 3 2 2 7 + 15x D + (51x + 10x)D + 29D + - + x + Type: LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer) + +Operator multiplication corresponds to functional composition. + + p := x**2 + 1/x**2 + 4 + x + 1 + ------ + 2 + x + Type: Fraction UnivariatePolynomial(x,Integer) + +Since operator coefficients depend on x, the multiplication is not +commutative. + + (a*b - b*a) p + 4 + - 75x + 540x - 75 + ------------------ + 4 + x + Type: Fraction UnivariatePolynomial(x,Integer) + +When the coefficients of operator polynomials come from a field, as in +this case, it is possible to define operator division. Division on +the left and division on the right yield different results when the +multiplication is non-commutative. + +The results of leftDivide and rightDivide are quotient-remainder pairs +satisfying: + + leftDivide(a,b) = [q, r] such that a = b*q + r + rightDivide(a,b) = [q, r] such that a = q*b + r + +In both cases, the degree of the remainder, r, is less than the degree +of b. + + ld := leftDivide(a,b) + [quotient= 5x D + 7,remainder= 0] + Type: Record(quotient: LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer), + remainder: LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer)) + + a = b * ld.quotient + ld.remainder + 3 3 2 2 7 3 3 2 2 7 + 15x D + (51x + 10x)D + 29D + -= 15x D + (51x + 10x)D + 29D + - + Type: Equation LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer) + +The operations of left and right division are so-called because the +quotient is obtained by dividing a on that side by b. + + rd := rightDivide(a,b) + [quotient= 5x D + 7,remainder= 10D + -] + Type: Record(quotient: LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer), + remainder: LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer)) + + a = rd.quotient * b + rd.remainder + 3 3 2 2 7 3 3 2 2 7 + 15x D + (51x + 10x)D + 29D + -= 15x D + (51x + 10x)D + 29D + - + Type: Equation LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer) + +Operations rightQuotient and rightRemainder are available if only one +of the quotient or remainder are of interest to you. This is the +quotient from right division. + + rightQuotient(a,b) + 5x D + 7 + Type: LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer) + +This is the remainder from right division. The corresponding "left" +functions, leftQuotient and leftRemainder are also available. + + rightRemainder(a,b) + 5 + 10D + - + x + Type: LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer) + +For exact division, operations leftExactQuotient and rightExactQuotient +are supplied. These return the quotient but only if the remainder is zero. +The call rightExactQuotient(a,b) would yield an error. + + leftExactQuotient(a,b) + 5x D + 7 + Type: Union(LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer),...) + +The division operations allow the computation of left and right greatest +common divisors, leftGcd and rightGcd via remainder sequences, and +consequently the computation of left and right least common multiples, +rightLcm and leftLcm. + + e := leftGcd(a,b) + 2 2 1 + 3x D + 2D + - + x + Type: LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer) + +Note that a greatest common divisor doesn't necessarily divide a and b +on both sides. Here the left greatest common divisor does not divide +a on the right. + + leftRemainder(a, e) + 0 + Type: LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer) + + rightRemainder(a, e) + 5 + 10D + - + x + Type: LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer) + +Similarly, a least common multiple is not necessarily divisible from +both sides. + + f := rightLcm(a,b) + 3 3 2 2 7 + 15x D + (51x + 10x)D + 29D + - + Type: LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer) + + rightRemainder(f, b) + 5 + 10D + - + x + Type: LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer) + + leftRemainder(f, b) + 0 + Type: LinearOrdinaryDifferentialOperator1 + Fraction UnivariatePolynomial(x,Integer) + +See Also: +o )show LinearOrdinaryDifferentialOperator1 +o $AXIOM/doc/src/algebra/lodo.spad.dvi + +@ +\pagehead{LinearOrdinaryDifferentialOperator1}{LODO1} +\pagepic{ps/v103linearordinarydifferentialoperator1.ps}{LODO1}{1.00} +<>= +)abbrev domain LODO1 LinearOrdinaryDifferentialOperator1 +++ Author: Manuel Bronstein +++ Date Created: 9 December 1993 +++ Date Last Updated: 31 January 1994 +++ Keywords: differential operator +++ Description: +++ \spad{LinearOrdinaryDifferentialOperator1} defines a ring of +++ differential operators with coefficients in a differential ring A. +++ Multiplication of operators corresponds to functional composition: +++ \spad{(L1 * L2).(f) = L1 L2 f} +LinearOrdinaryDifferentialOperator1(A:DifferentialRing) == + LinearOrdinaryDifferentialOperator(A, differentiate$A) + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{domain LODO2 LinearOrdinaryDifferentialOperator2} +<>= +-- lodo.spad.pamphlet LinearOrdinaryDifferentialOperator2.input +)spool LinearOrdinaryDifferentialOperator2.output +)set message test on +)set message auto off +)clear all +--S 1 of 26 +Q := Fraction Integer +--R +--R +--R (1) Fraction Integer +--R Type: Domain +--E 1 + +--S 2 of 26 +PQ := UnivariatePolynomial('x, Q) +--R +--R +--R (2) UnivariatePolynomial(x,Fraction Integer) +--R Type: Domain +--E 2 + +--S 3 of 26 +x: PQ := 'x +--R +--R +--R (3) x +--R Type: UnivariatePolynomial(x,Fraction Integer) +--E 3 + +--S 4 of 26 +Dx: LODO2(Q, PQ) := D() +--R +--R +--R (4) D +--RType: LinearOrdinaryDifferentialOperator2(Fraction Integer,UnivariatePolynomial(x,Fraction Integer)) +--E 4 + +--S 5 of 26 +a := Dx + 1 +--R +--R +--R (5) D + 1 +--RType: LinearOrdinaryDifferentialOperator2(Fraction Integer,UnivariatePolynomial(x,Fraction Integer)) +--E 5 + +--S 6 of 26 +b := a + 1/2*Dx**2 - 1/2 +--R +--R +--R 1 2 1 +--R (6) - D + D + - +--R 2 2 +--RType: LinearOrdinaryDifferentialOperator2(Fraction Integer,UnivariatePolynomial(x,Fraction Integer)) +--E 6 + +--S 7 of 26 +p := 4*x**2 + 2/3 +--R +--R +--R 2 2 +--R (7) 4x + - +--R 3 +--R Type: UnivariatePolynomial(x,Fraction Integer) +--E 7 + +--S 8 of 26 +a p +--R +--R +--R 2 2 +--R (8) 4x + 8x + - +--R 3 +--R Type: UnivariatePolynomial(x,Fraction Integer) +--E 8 + +--S 9 of 26 +(a * b) p = a b p +--R +--R +--R 2 37 2 37 +--R (9) 2x + 12x + --= 2x + 12x + -- +--R 3 3 +--R Type: Equation UnivariatePolynomial(x,Fraction Integer) +--E 9 + +--S 10 of 26 +c := (1/9)*b*(a + b)^2 +--R +--R +--R 1 6 5 5 13 4 19 3 79 2 7 1 +--R (10) -- D + -- D + -- D + -- D + -- D + -- D + - +--R 72 36 24 18 72 12 8 +--RType: LinearOrdinaryDifferentialOperator2(Fraction Integer,UnivariatePolynomial(x,Fraction Integer)) +--E 10 + +--S 11 of 26 +(a**2 - 3/4*b + c) (p + 1) +--R +--R +--R 2 44 541 +--R (11) 3x + -- x + --- +--R 3 36 +--R Type: UnivariatePolynomial(x,Fraction Integer) +--E 11 +)clear all +--S 12 of 26 +PZ := UnivariatePolynomial(x,Integer) +--R +--R +--R (1) UnivariatePolynomial(x,Integer) +--R Type: Domain +--E 12 + +--S 13 of 26 +x:PZ := 'x +--R +--R +--R (2) x +--R Type: UnivariatePolynomial(x,Integer) +--E 13 + +--S 14 of 26 +Mat := SquareMatrix(3,PZ) +--R +--R +--R (3) SquareMatrix(3,UnivariatePolynomial(x,Integer)) +--R Type: Domain +--E 14 + +--S 15 of 26 +Vect := DPMM(3, PZ, Mat, PZ) +--R +--R +--R (4) +--R DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,Un +--R ivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer)) +--R Type: Domain +--E 15 + +--S 16 of 26 +Modo := LODO2(Mat, Vect) +--R +--R +--R (5) +--R LinearOrdinaryDifferentialOperator2(SquareMatrix(3,UnivariatePolynomial(x,Int +--R eger)),DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatr +--R ix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer))) +--R Type: Domain +--E 16 + +--S 17 of 26 +m:Mat := matrix [ [x^2,1,0],[1,x^4,0],[0,0,4*x^2] ] +--R +--R +--R + 2 + +--R |x 1 0 | +--R | | +--R (6) | 4 | +--R |1 x 0 | +--R | | +--R | 2| +--R +0 0 4x + +--R Type: SquareMatrix(3,UnivariatePolynomial(x,Integer)) +--E 17 + +--S 18 of 26 +p:Vect := directProduct [3*x^2+1,2*x,7*x^3+2*x] +--R +--R +--R 2 3 +--R (7) [3x + 1,2x,7x + 2x] +--RType: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer)) +--E 18 + +--S 19 of 26 +q: Vect := m * p +--R +--R +--R 4 2 5 2 5 3 +--R (8) [3x + x + 2x,2x + 3x + 1,28x + 8x ] +--RType: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer)) +--E 19 + +--S 20 of 26 +Dx : Modo := D() +--R +--R +--R (9) D +--RType: LinearOrdinaryDifferentialOperator2(SquareMatrix(3,UnivariatePolynomial(x,Integer)),DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer))) +--E 20 + +--S 21 of 26 +a : Modo := Dx + m +--R +--R +--R + 2 + +--R |x 1 0 | +--R | | +--R (10) D + | 4 | +--R |1 x 0 | +--R | | +--R | 2| +--R +0 0 4x + +--RType: LinearOrdinaryDifferentialOperator2(SquareMatrix(3,UnivariatePolynomial(x,Integer)),DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer))) +--E 21 + +--S 22 of 26 +b : Modo := m*Dx + 1 +--R +--R +--R + 2 + +--R |x 1 0 | +1 0 0+ +--R | | | | +--R (11) | 4 |D + |0 1 0| +--R |1 x 0 | | | +--R | | +0 0 1+ +--R | 2| +--R +0 0 4x + +--RType: LinearOrdinaryDifferentialOperator2(SquareMatrix(3,UnivariatePolynomial(x,Integer)),DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer))) +--E 22 + +--S 23 of 26 +c := a*b +--R +--R +--R (12) +--R + 2 + + 4 4 2 + + 2 + +--R |x 1 0 | |x + 2x + 2 x + x 0 | |x 1 0 | +--R | | 2 | | | | +--R | 4 |D + | 4 2 8 3 |D + | 4 | +--R |1 x 0 | | x + x x + 4x + 2 0 | |1 x 0 | +--R | | | | | | +--R | 2| | 4 | | 2| +--R +0 0 4x + + 0 0 16x + 8x + 1+ +0 0 4x + +--RType: LinearOrdinaryDifferentialOperator2(SquareMatrix(3,UnivariatePolynomial(x,Integer)),DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer))) +--E 23 + +--S 24 of 26 +a p +--R +--R +--R 4 2 5 2 5 3 2 +--R (13) [3x + x + 8x,2x + 3x + 3,28x + 8x + 21x + 2] +--RType: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer)) +--E 24 + +--S 25 of 26 +b p +--R +--R +--R 3 2 4 4 3 2 +--R (14) [6x + 3x + 3,2x + 8x,84x + 7x + 8x + 2x] +--RType: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer)) +--E 25 + +--S 26 of 26 +(a + b + c) (p + q) +--R +--R +--R (15) +--R 8 7 6 5 4 3 2 +--R [10x + 12x + 16x + 30x + 85x + 94x + 40x + 40x + 17, +--R 12 9 8 7 6 5 4 3 2 +--R 10x + 10x + 12x + 92x + 6x + 32x + 72x + 28x + 49x + 32x + 19, +--R 8 7 6 5 4 3 2 +--R 2240x + 224x + 1280x + 3508x + 492x + 751x + 98x + 18x + 4] +--RType: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer)) +--E 26 +)spool +)lisp (bye) +@ +<>= +==================================================================== +LinearOrdinaryDifferentialOperator2 +==================================================================== + +LinearOrdinaryDifferentialOperator2(A, M) is the domain of linear +ordinary differential operators with coefficients in the differential +ring A and operating on M, an A-module. This includes the cases of +operators which are polynomials in D acting upon scalar or vector +expressions of a single variable. The coefficients of the operator +polynomials can be integers, rational functions, matrices or elements +of other domains. + +==================================================================== +Differential Operators with Constant Coefficients +==================================================================== + +This example shows differential operators with rational number +coefficients operating on univariate polynomials. + +We begin by making type assignments so we can conveniently refer +to univariate polynomials in x over the rationals. + + Q := Fraction Integer + Fraction Integer + Type: Domain + + PQ := UnivariatePolynomial('x, Q) + UnivariatePolynomial(x,Fraction Integer) + Type: Domain + + x: PQ := 'x + x + Type: UnivariatePolynomial(x,Fraction Integer) + +Now we assign Dx to be the differential operator D corresponding to d/dx. + + Dx: LODO2(Q, PQ) := D() + D + Type: LinearOrdinaryDifferentialOperator2(Fraction Integer, + UnivariatePolynomial(x,Fraction Integer)) + +New operators are created as polynomials in D(). + + a := Dx + 1 + D + 1 + Type: LinearOrdinaryDifferentialOperator2(Fraction Integer, + UnivariatePolynomial(x,Fraction Integer)) + + b := a + 1/2*Dx**2 - 1/2 + 1 2 1 + - D + D + - + 2 2 + Type: LinearOrdinaryDifferentialOperator2(Fraction Integer, + UnivariatePolynomial(x,Fraction Integer)) + +To apply the operator a to the value p the usual function call syntax +is used. + + p := 4*x**2 + 2/3 + 2 2 + 4x + - + 3 + Type: UnivariatePolynomial(x,Fraction Integer) + + a p + 2 2 + 4x + 8x + - + 3 + Type: UnivariatePolynomial(x,Fraction Integer) + +Operator multiplication is defined by the identity (a*b)p = a(b(p)) + + (a * b) p = a b p + 2 37 2 37 + 2x + 12x + --= 2x + 12x + -- + 3 3 + Type: Equation UnivariatePolynomial(x,Fraction Integer) + +Exponentiation follows from multiplication. + + c := (1/9)*b*(a + b)^2 + 1 6 5 5 13 4 19 3 79 2 7 1 + -- D + -- D + -- D + -- D + -- D + -- D + - + 72 36 24 18 72 12 8 + Type: LinearOrdinaryDifferentialOperator2(Fraction Integer, + UnivariatePolynomial(x,Fraction Integer)) + +Finally, note that operator expressions may be applied directly. + + (a**2 - 3/4*b + c) (p + 1) + 2 44 541 + 3x + -- x + --- + 3 36 + Type: UnivariatePolynomial(x,Fraction Integer) + +==================================================================== +Differential Operators with Matrix Coefficients Operating on Vectors} +==================================================================== + +This is another example of linear ordinary differential operators with +non-commutative multiplication. Unlike the rational function case, +the differential ring of square matrices (of a given dimension) with +univariate polynomial entries does not form a field. Thus the number +of operations available is more limited. + +In this section, the operators have three by three matrix coefficients +with polynomial entries. + + PZ := UnivariatePolynomial(x,Integer) + UnivariatePolynomial(x,Integer) + Type: Domain + + x:PZ := 'x + x + Type: UnivariatePolynomial(x,Integer) + + Mat := SquareMatrix(3,PZ) + SquareMatrix(3,UnivariatePolynomial(x,Integer)) + Type: Domain + +The operators act on the vectors considered as a Mat-module. + + Vect := DPMM(3, PZ, Mat, PZ) + DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,Un + ivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer)) + Type: Domain + + Modo := LODO2(Mat, Vect) + LinearOrdinaryDifferentialOperator2(SquareMatrix(3,UnivariatePolynomial(x,Int + eger)),DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatr + ix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer))) + Type: Domain + +The matrix m is used as a coefficient and the vectors p and q are +operated upon. + + m:Mat := matrix [ [x^2,1,0],[1,x^4,0],[0,0,4*x^2] ] + + 2 + + |x 1 0 | + | | + | 4 | + |1 x 0 | + | | + | 2| + +0 0 4x + + Type: SquareMatrix(3,UnivariatePolynomial(x,Integer)) + + p:Vect := directProduct [3*x^2+1,2*x,7*x^3+2*x] + 2 3 + [3x + 1,2x,7x + 2x] + Type: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), + SquareMatrix(3,UnivariatePolynomial(x,Integer)), + UnivariatePolynomial(x,Integer)) + + q: Vect := m * p + 4 2 5 2 5 3 + [3x + x + 2x,2x + 3x + 1,28x + 8x ] + Type: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), + SquareMatrix(3,UnivariatePolynomial(x,Integer)), + UnivariatePolynomial(x,Integer)) + +Now form a few operators. + + Dx : Modo := D() + D + Type: LinearOrdinaryDifferentialOperator2( + SquareMatrix(3,UnivariatePolynomial(x,Integer)), + DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), + SquareMatrix(3,UnivariatePolynomial(x,Integer)), + UnivariatePolynomial(x,Integer))) + + a : Modo := Dx + m + + 2 + + |x 1 0 | + | | + D + | 4 | + |1 x 0 | + | | + | 2| + +0 0 4x + + Type: LinearOrdinaryDifferentialOperator2( + SquareMatrix(3,UnivariatePolynomial(x,Integer)), + DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), + SquareMatrix(3,UnivariatePolynomial(x,Integer)), + UnivariatePolynomial(x,Integer))) + + b : Modo := m*Dx + 1 + + 2 + + |x 1 0 | +1 0 0+ + | | | | + | 4 |D + |0 1 0| + |1 x 0 | | | + | | +0 0 1+ + | 2| + +0 0 4x + + Type: LinearOrdinaryDifferentialOperator2( + SquareMatrix(3,UnivariatePolynomial(x,Integer)), + DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), + SquareMatrix(3,UnivariatePolynomial(x,Integer)), + UnivariatePolynomial(x,Integer))) + + c := a*b + + 2 + + 4 4 2 + + 2 + + |x 1 0 | |x + 2x + 2 x + x 0 | |x 1 0 | + | | 2 | | | | + | 4 |D + | 4 2 8 3 |D + | 4 | + |1 x 0 | | x + x x + 4x + 2 0 | |1 x 0 | + | | | | | | + | 2| | 4 | | 2| + +0 0 4x + + 0 0 16x + 8x + 1+ +0 0 4x + + Type: LinearOrdinaryDifferentialOperator2( + SquareMatrix(3,UnivariatePolynomial(x,Integer)), + DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), + SquareMatrix(3,UnivariatePolynomial(x,Integer)), + UnivariatePolynomial(x,Integer))) + +These operators can be applied to vector values. + + a p + 4 2 5 2 5 3 2 + [3x + x + 8x,2x + 3x + 3,28x + 8x + 21x + 2] + Type: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), + SquareMatrix(3,UnivariatePolynomial(x,Integer)), + UnivariatePolynomial(x,Integer)) + + b p + 3 2 4 4 3 2 + [6x + 3x + 3,2x + 8x,84x + 7x + 8x + 2x] + Type: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), + SquareMatrix(3,UnivariatePolynomial(x,Integer)), + UnivariatePolynomial(x,Integer)) + + (a + b + c) (p + q) + 8 7 6 5 4 3 2 + [10x + 12x + 16x + 30x + 85x + 94x + 40x + 40x + 17, + 12 9 8 7 6 5 4 3 2 + 10x + 10x + 12x + 92x + 6x + 32x + 72x + 28x + 49x + 32x + 19, + 8 7 6 5 4 3 2 + 2240x + 224x + 1280x + 3508x + 492x + 751x + 98x + 18x + 4] + Type: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), + SquareMatrix(3,UnivariatePolynomial(x,Integer)), + UnivariatePolynomial(x,Integer)) + +See Also: +o )show LinearOrdinaryDifferentialOperator2 +o $AXIOM/doc/src/algebra/lodo.spad.dvi + +@ +\pagehead{LinearOrdinaryDifferentialOperator2}{LODO2} +\pagepic{ps/v103linearordinarydifferentialoperator2.ps}{LODO2}{1.00} +<>= +)abbrev domain LODO2 LinearOrdinaryDifferentialOperator2 +++ Author: Stephen M. Watt, Manuel Bronstein +++ Date Created: 1986 +++ Date Last Updated: 1 February 1994 +++ Keywords: differential operator +++ Description: +++ \spad{LinearOrdinaryDifferentialOperator2} defines a ring of +++ differential operators with coefficients in a differential ring A +++ and acting on an A-module M. +++ Multiplication of operators corresponds to functional composition: +++ \spad{(L1 * L2).(f) = L1 L2 f} +LinearOrdinaryDifferentialOperator2(A, M): Exports == Implementation where + A: DifferentialRing + M: LeftModule A with + differentiate: $ -> $ + ++ differentiate(x) returns the derivative of x + + Exports ==> Join(LinearOrdinaryDifferentialOperatorCategory A, Eltable(M, M)) + + Implementation ==> LinearOrdinaryDifferentialOperator(A, differentiate$A) add + elt(p:%, m:M):M == + apply(p, differentiate, m)$ApplyUnivariateSkewPolynomial(A, M, %) + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{domain LIST List} <>= -- list.spad.pamphlet List.input @@ -32521,99 +34192,6 @@ List(S:Type): Exports == Implementation where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{domain LSQM LieSquareMatrix} -\pagehead{LieSquareMatrix}{LSQM} -\pagepic{ps/v103liesquarematrix.ps}{LSQM}{1.00} -See also:\\ -\refto{AssociatedLieAlgebra}{LIE} -\refto{AssociatedJordanAlgebra}{JORDAN} -<>= -)abbrev domain LSQM LieSquareMatrix -++ Author: J. Grabmeier -++ Date Created: 07 March 1991 -++ Date Last Updated: 08 March 1991 -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ LieSquareMatrix(n,R) implements the Lie algebra of the n by n -++ matrices over the commutative ring R. -++ The Lie bracket (commutator) of the algebra is given by -++ \spad{a*b := (a *$SQMATRIX(n,R) b - b *$SQMATRIX(n,R) a)}, -++ where \spadfun{*$SQMATRIX(n,R)} is the usual matrix multiplication. -LieSquareMatrix(n,R): Exports == Implementation where - - n : PositiveInteger - R : CommutativeRing - - Row ==> DirectProduct(n,R) - Col ==> DirectProduct(n,R) - - Exports ==> Join(SquareMatrixCategory(n,R,Row,Col), CoercibleTo Matrix R,_ - FramedNonAssociativeAlgebra R) --with - - Implementation ==> AssociatedLieAlgebra (R,SquareMatrix(n, R)) add - - Rep := AssociatedLieAlgebra (R,SquareMatrix(n, R)) - -- local functions - n2 : PositiveInteger := n*n - - convDM : DirectProduct(n2,R) -> % - conv : DirectProduct(n2,R) -> SquareMatrix(n,R) - --++ converts n2-vector to (n,n)-matrix row by row - conv v == - cond : Matrix(R) := new(n,n,0$R)$Matrix(R) - z : Integer := 0 - for i in 1..n repeat - for j in 1..n repeat - z := z+1 - setelt(cond,i,j,v.z) - squareMatrix(cond)$SquareMatrix(n, R) - - - coordinates(a:%,b:Vector(%)):Vector(R) == - -- only valid for b canonicalBasis - res : Vector R := new(n2,0$R) - z : Integer := 0 - for i in 1..n repeat - for j in 1..n repeat - z := z+1 - res.z := elt(a,i,j)$% - res - - - convDM v == - sq := conv v - coerce(sq)$Rep :: % - - basis() == - n2 : PositiveInteger := n*n - ldp : List DirectProduct(n2,R) := - [unitVector(i::PositiveInteger)$DirectProduct(n2,R) for i in 1..n2] - res:Vector % := vector map(convDM,_ - ldp)$ListFunctions2(DirectProduct(n2,R), %) - - someBasis() == basis() - rank() == n*n - - --- transpose: % -> % --- ++ computes the transpose of a matrix --- squareMatrix: Matrix R -> % --- ++ converts a Matrix to a LieSquareMatrix --- coerce: % -> Matrix R --- ++ converts a LieSquareMatrix to a Matrix --- symdecomp : % -> Record(sym:%,antisym:%) --- if R has commutative("*") then --- minorsVect: -> Vector(Union(R,"uncomputed")) --range: 1..2**n-1 --- if R has commutative("*") then central --- if R has commutative("*") and R has unitsKnown then unitsKnown - -@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{domain LMOPS ListMonoidOps} \pagehead{ListMonoidOps}{LMOPS} \pagepic{ps/v103listmonoidops.ps}{LMOPS}{1.00} @@ -32778,6 +34356,155 @@ ListMonoidOps(S, E, un): Exports == Implementation where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{domain LMDICT ListMultiDictionary} +\pagehead{ListMultiDictionary}{LMDICT} +\pagepic{ps/v103listmultidictionary.ps}{LMDICT}{1.00} +<>= +)abbrev domain LMDICT ListMultiDictionary +++ Author: MBM Nov/87, MB Oct/89 +++ Date Created: +++ Date Last Updated: 13 June 1994 Frederic Lehobey +++ Basic Operations: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: The \spadtype{ListMultiDictionary} domain implements a +++ dictionary with duplicates +++ allowed. The representation is a list with duplicates represented +++ explicitly. Hence most operations will be relatively inefficient +++ when the number of entries in the dictionary becomes large. +-- The operations \spadfun{pick}, \spadfun{count} and \spadfun{delete} can be used to iterate +-- over the objects in the dictionary. +-- [FDLL : those functions have not been implemented in the parent Categories] +++ If the objects in the +++ dictionary belong to an ordered set, the entries are maintained in +++ ascending order. + +NNI ==> NonNegativeInteger +D ==> Record(entry:S, count:NonNegativeInteger) + +ListMultiDictionary(S:SetCategory): MultiDictionary(S) with + finiteAggregate + duplicates?: % -> Boolean + ++ duplicates?(d) tests if dictionary d has duplicate entries. + substitute : (S, S, %) -> % + ++ substitute(x,y,d) replace x's with y's in dictionary d. + == add + Rep := Reference List S + + sub: (S, S, S) -> S + + coerce(s:%):OutputForm == + prefix("dictionary"::OutputForm, [x::OutputForm for x in parts s]) + + #s == # parts s + copy s == dictionary copy parts s + empty? s == empty? parts s + bag l == dictionary l + dictionary() == dictionary empty() + + empty():% == ref empty() + + dictionary(ls:List S):% == + empty? ls => empty() + lmd := empty() + for x in ls repeat insert_!(x,lmd) + lmd + + if S has ConvertibleTo InputForm then + convert(lmd:%):InputForm == + convert [convert("dictionary"::Symbol)@InputForm, + convert(parts lmd)@InputForm] + + map(f, s) == dictionary map(f, parts s) + map_!(f, s) == dictionary map_!(f, parts s) + parts s == deref s + sub(x, y, z) == (z = x => y; z) + insert_!(x, s, n) == (for i in 1..n repeat insert_!(x, s); s) + substitute(x, y, s) == dictionary map(sub(x, y, #1), parts s) + removeDuplicates_! s == dictionary removeDuplicates_! parts s + + inspect s == + empty? s => error "empty dictionary" + first parts s + + extract_! s == + empty? s => error "empty dictionary" + x := first(p := parts s) + setref(s, rest p) + x + + duplicates? s == + empty?(p := parts s) => false + q := rest p + while not empty? q repeat + first p = first q => return true + p := q + q := rest q + false + + remove_!(p: S->Boolean, lmd:%):% == + for x in removeDuplicates parts lmd | p(x) repeat remove_!(x,lmd) + lmd + + select_!(p: S->Boolean, lmd:%):% == remove_!(not p(#1), lmd) + + duplicates(lmd:%):List D == + ld: List D := empty() + for x in removeDuplicates parts lmd | (n := count(x, lmd)) > + 1$NonNegativeInteger repeat + ld := cons([x, n], ld) + ld + + if S has OrderedSet then + s = t == parts s = parts t + + remove_!(x:S, s:%) == + p := deref s + while not empty? p and x = first p repeat p := rest p + setref(s, p) + empty? p => s + q := rest p + while not empty? q and x > first q repeat (p := q; q := rest q) + while not empty? q and x = first q repeat q := rest q + p.rest := q + s + + insert_!(x, s) == + p := deref s + empty? p or x < first p => + setref(s, concat(x, p)) + s + q := rest p + while not empty? q and x > first q repeat (p := q; q := rest q) + p.rest := concat(x, q) + s + + else + remove_!(x:S, s:%) == (setref(s, remove_!(x, parts s)); s) + + s = t == + a := copy s + while not empty? a repeat + x := inspect a + count(x, s) ^= count(x, t) => return false + remove_!(x, a) + true + + insert_!(x, s) == + p := deref s + while not empty? p repeat + x = first p => + p.rest := concat(x, rest p) + s + p := rest p + setref(s, concat(x, deref s)) + s + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{domain LA LocalAlgebra} \pagehead{LocalAlgebra}{LA} \pagepic{ps/v103localalgebra.ps}{LA}{1.00} @@ -34153,6 +35880,51 @@ OnePointCompletion(R:SetCategory): Exports == Implementation where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{domain OMLO OppositeMonogenicLinearOperator} +\pagehead{OppositeMonogenicLinearOperator}{OMLO} +\pagepic{ps/v103oppositemonogeniclinearoperator.ps}{OMLO}{1.00} +See also:\\ +\refto{OrdinaryDifferentialRing}{ODR} +\refto{DirectProductModule}{DPMO} +\refto{DirectProductMatrixModule}{DPMM} +<>= +)abbrev domain OMLO OppositeMonogenicLinearOperator +++ Author: Stephen M. Watt +++ Date Created: 1986 +++ Date Last Updated: May 30, 1991 +++ Basic Operations: +++ Related Domains: MonogenicLinearOperator +++ Also See: +++ AMS Classifications: +++ Keywords: opposite ring +++ Examples: +++ References: +++ Description: +++ This constructor creates the \spadtype{MonogenicLinearOperator} domain +++ which is ``opposite'' in the ring sense to P. +++ That is, as sets \spad{P = $} but \spad{a * b} in \spad{$} is equal to +++ \spad{b * a} in P. + +OppositeMonogenicLinearOperator(P, R): OPRcat == OPRdef where + P: MonogenicLinearOperator(R) + R: Ring + + OPRcat == MonogenicLinearOperator(R) with + if P has DifferentialRing then DifferentialRing + op: P -> $ ++ op(p) creates a value in $ equal to p in P. + po: $ -> P ++ po(q) creates a value in P equal to q in $. + + OPRdef == P add + Rep := P + x, y: $ + a: P + op a == a: $ + po x == x: P + x*y == (y:P) *$P (x:P) + coerce(x): OutputForm == prefix(op::OutputForm, [coerce(x:P)$P]) + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{domain ORDCOMP OrderedCompletion} <>= "ORDCOMP" -> "SETCAT" @@ -35070,6 +36842,53 @@ OrderlyDifferentialVariable(S:OrderedSet):DifferentialVariableCategory(S) @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{domain ODR OrdinaryDifferentialRing} +\pagehead{OrdinaryDifferentialRing}{ODR} +\pagepic{ps/v103ordinarydifferentialring.ps}{ODR}{1.00} +See also:\\ +\refto{OppositeMonogenicLinearOperator}{OMLO} +\refto{DirectProductModule}{DPMO} +\refto{DirectProductMatrixModule}{DPMM} +<>= +)abbrev domain ODR OrdinaryDifferentialRing +++ Author: Stephen M. Watt +++ Date Created: 1986 +++ Date Last Updated: June 3, 1991 +++ Basic Operations: +++ Related Domains: +++ Also See: +++ AMS Classifications: +++ Keywords: differential ring +++ Examples: +++ References: +++ Description: +++ This constructor produces an ordinary differential ring from +++ a partial differential ring by specifying a variable. + +OrdinaryDifferentialRing(Kernels,R,var): DRcategory == DRcapsule where + Kernels:SetCategory + R: PartialDifferentialRing(Kernels) + var : Kernels + DRcategory == Join(BiModule($,$), DifferentialRing) with + if R has Field then Field + coerce: R -> $ + ++ coerce(r) views r as a value in the ordinary differential ring. + coerce: $ -> R + ++ coerce(p) views p as a valie in the partial differential ring. + DRcapsule == R add + n: Integer + Rep := R + coerce(u:R):$ == u::Rep::$ + coerce(p:$):R == p::Rep::R + differentiate p == differentiate(p, var) + + if R has Field then + p / q == ((p::R) /$R (q::R))::$ + p ** n == ((p::R) **$R n)::$ + inv(p) == (inv(p::R)$R)::$ + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{domain OSI OrdSetInts} \pagehead{OrdSetInts}{OSI} \pagepic{ps/v103ordsetints.ps}{OSI}{1.00} @@ -38259,6 +40078,156 @@ ScriptFormulaFormat(): public == private where @ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{domain SETMN SetOfMIntegersInOneToN} +\pagehead{SetOfMIntegersInOneToN}{SETMN} +\pagepic{ps/v103setofmintegersinoneton.ps}{SETMN}{1.00} +<>= +)abbrev domain SETMN SetOfMIntegersInOneToN +++ Author: Manuel Bronstein +++ Date Created: 10 January 1994 +++ Date Last Updated: 10 January 1994 +++ Description: +++ \spadtype{SetOfMIntegersInOneToN} implements the subsets of M integers +++ in the interval \spad{[1..n]} +SetOfMIntegersInOneToN(m, n): Exports == Implementation where + PI ==> PositiveInteger + N ==> NonNegativeInteger + U ==> Union(%, "failed") + n,m: PI + + Exports ==> Finite with + incrementKthElement: (%, PI) -> U + ++ incrementKthElement(S,k) increments the k^{th} element of S, + ++ and returns "failed" if the result is not a set of M integers + ++ in \spad{1..n} any more. + replaceKthElement: (%, PI, PI) -> U + ++ replaceKthElement(S,k,p) replaces the k^{th} element of S by p, + ++ and returns "failed" if the result is not a set of M integers + ++ in \spad{1..n} any more. + elements: % -> List PI + ++ elements(S) returns the list of the elements of S in increasing order. + setOfMinN: List PI -> % + ++ setOfMinN([a_1,...,a_m]) returns the set {a_1,...,a_m}. + ++ Error if {a_1,...,a_m} is not a set of M integers in \spad{1..n}. + enumerate: () -> Vector % + ++ enumerate() returns a vector of all the sets of M integers in + ++ \spad{1..n}. + member?: (PI, %) -> Boolean + ++ member?(p, s) returns true is p is in s, false otherwise. + delta: (%, PI, PI) -> N + ++ delta(S,k,p) returns the number of elements of S which are strictly + ++ between p and the k^{th} element of S. + + Implementation ==> add + Rep := Record(bits:Bits, pos:N) + + reallyEnumerate: () -> Vector % + enum: (N, N, PI) -> List Bits + + all:Reference Vector % := ref empty() + sz:Reference N := ref 0 + + s1 = s2 == s1.bits =$Bits s2.bits + coerce(s:%):OutputForm == brace [i::OutputForm for i in elements s] + random() == index((1 + (random()$Integer rem size()))::PI) + reallyEnumerate() == [[b, i] for b in enum(m, n, n) for i in 1..] + member?(p, s) == s.bits.p + + enumerate() == + if empty? all() then all() := reallyEnumerate() + all() + +-- enumerates the sets of p integers in 1..q, returns them as sets in 1..n +-- must have p <= q + enum(p, q, n) == + zero? p or zero? q => empty() + p = q => + b := new(n, false)$Bits + for i in 1..p repeat b.i := true + [b] + q1 := (q - 1)::N + l := enum((p - 1)::N, q1, n) + if empty? l then l := [new(n, false)$Bits] + for s in l repeat s.q := true + concat_!(enum(p, q1, n), l) + + size() == + if zero? sz() then + sz() := binomial(n, m)$IntegerCombinatoricFunctions(Integer) :: N + sz() + + lookup s == + if empty? all() then all() := reallyEnumerate() + if zero?(s.pos) then s.pos := position(s, all()) :: N + s.pos :: PI + + index p == + p > size() => error "index: argument too large" + if empty? all() then all() := reallyEnumerate() + all().p + + setOfMinN l == + s := new(n, false)$Bits + count:N := 0 + for i in l repeat + count := count + 1 + count > m or zero? i or i > n or s.i => + error "setOfMinN: improper set of integers" + s.i := true + count < m => error "setOfMinN: improper set of integers" + [s, 0] + + elements s == + b := s.bits + l:List PI := empty() + found:N := 0 + i:PI := 1 + while found < m repeat + if b.i then + l := concat(i, l) + found := found + 1 + i := i + 1 + reverse_! l + + incrementKthElement(s, k) == + b := s.bits + found:N := 0 + i:N := 1 + while found < k repeat + if b.i then found := found + 1 + i := i + 1 + i > n or b.i => "failed" + newb := copy b + newb.i := true + newb.((i-1)::N) := false + [newb, 0] + + delta(s, k, p) == + b := s.bits + count:N := found:N := 0 + i:PI := 1 + while found < k repeat + if b.i then + found := found + 1 + if i > p and found < k then count := count + 1 + i := i + 1 + count + + replaceKthElement(s, k, p) == + b := s.bits + found:N := 0 + i:PI := 1 + while found < k repeat + if b.i then found := found + 1 + if found < k then i := i + 1 + b.p and i ^= p => "failed" + newb := copy b + newb.p := true + newb.i := false + [newb, (i = p => s.pos; 0)] + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{domain SDPOL SequentialDifferentialPolynomial} \pagehead{SequentialDifferentialPolynomial}{SDPOL} \pagepic{ps/v103sequentialdifferentialpolynomial.ps}{SDPOL}{1.00} @@ -43412,6 +45381,8 @@ Note that this code is not included in the generated catdef.spad file. <> <> <> +<> +<> <> <> <> @@ -43515,8 +45486,12 @@ Note that this code is not included in the generated catdef.spad file. <> <> <> +<> +<> +<> <> <> +<> <> <> @@ -43535,10 +45510,12 @@ Note that this code is not included in the generated catdef.spad file. <> <> <> +<> <> <> <> <> +<> <> <> @@ -43562,6 +45539,7 @@ Note that this code is not included in the generated catdef.spad file. <> <> <> +<> <> <> <> diff --git a/books/ps/v103directproductmatrixmodule.ps b/books/ps/v103directproductmatrixmodule.ps new file mode 100644 index 0000000..131df11 --- /dev/null +++ b/books/ps/v103directproductmatrixmodule.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 222 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 222 80 +%%PageOrientation: Portrait +gsave +36 36 186 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +184 42 lineto +184 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +184 42 lineto +184 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% DirectProductMatrixModule +[ /Rect [ 0 0 178 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=DPMM) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 178 36 moveto +0 36 lineto +0 0 lineto +178 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 178 36 moveto +0 36 lineto +0 0 lineto +178 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 13 moveto +(DirectProductMatrixModule) +[10.08 3.84 4.8 6.24 6.24 3.84 7.68 4.8 6.96 6.96 6.96 6.24 3.84 12.48 6.24 3.84 5.04 3.84 6.96 12.48 6.96 6.96 6.96 3.84 6.24] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103directproductmodule.ps b/books/ps/v103directproductmodule.ps new file mode 100644 index 0000000..b1a3360 --- /dev/null +++ b/books/ps/v103directproductmodule.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 184 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 184 80 +%%PageOrientation: Portrait +gsave +36 36 148 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +146 42 lineto +146 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +146 42 lineto +146 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% DirectProductModule +[ /Rect [ 0 0 140 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=DPMO) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 140 36 moveto +0 36 lineto +0 0 lineto +140 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 140 36 moveto +0 36 lineto +0 0 lineto +140 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 13 moveto +(DirectProductModule) +[10.08 3.84 4.8 6.24 6.24 3.84 7.68 4.8 6.96 6.96 6.96 6.24 3.84 12.48 6.96 6.96 6.96 3.84 6.24] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103euclideanmodularring.ps b/books/ps/v103euclideanmodularring.ps new file mode 100644 index 0000000..c55b2b8 --- /dev/null +++ b/books/ps/v103euclideanmodularring.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 192 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 192 80 +%%PageOrientation: Portrait +gsave +36 36 156 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +154 42 lineto +154 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +154 42 lineto +154 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% EuclideanModularRing +[ /Rect [ 0 0 148 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=EMR) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 148 36 moveto +0 36 lineto +0 0 lineto +148 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 148 36 moveto +0 36 lineto +0 0 lineto +148 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 13 moveto +(EuclideanModularRing) +[8.64 6.96 6.24 3.84 3.84 6.96 6.24 6.24 6.96 12.48 6.96 6.96 6.96 3.84 6.24 4.8 9.36 3.84 6.96 6.96] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103generalmodulepolynomial.ps b/books/ps/v103generalmodulepolynomial.ps new file mode 100644 index 0000000..663dd2e --- /dev/null +++ b/books/ps/v103generalmodulepolynomial.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 212 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 212 80 +%%PageOrientation: Portrait +gsave +36 36 176 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +174 42 lineto +174 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +174 42 lineto +174 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% GeneralModulePolynomial +[ /Rect [ 0 0 168 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=GMODPOL) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 168 36 moveto +0 36 lineto +0 0 lineto +168 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 168 36 moveto +0 36 lineto +0 0 lineto +168 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 13 moveto +(GeneralModulePolynomial) +[10.08 6.24 6.96 6.24 4.8 6.24 3.84 12.48 6.96 6.96 6.96 3.84 6.24 7.44 6.96 3.6 6.96 6.96 6.96 10.8 3.84 6.24 3.84] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103indexedexponents.ps b/books/ps/v103indexedexponents.ps new file mode 100644 index 0000000..553681a --- /dev/null +++ b/books/ps/v103indexedexponents.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 164 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 164 80 +%%PageOrientation: Portrait +gsave +36 36 128 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +126 42 lineto +126 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +126 42 lineto +126 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% IndexedExponents +[ /Rect [ 0 0 120 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=INDE) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 120 36 moveto +0 36 lineto +0 0 lineto +120 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 120 36 moveto +0 36 lineto +0 0 lineto +120 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(IndexedExponents) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 8.64 6.96 6.96 6.96 6.96 6.24 6.96 3.84 5.52] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103indexedmatrix.ps b/books/ps/v103indexedmatrix.ps new file mode 100644 index 0000000..e89036e --- /dev/null +++ b/books/ps/v103indexedmatrix.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 144 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 144 80 +%%PageOrientation: Portrait +gsave +36 36 108 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +106 42 lineto +106 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +106 42 lineto +106 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% IndexedMatrix +[ /Rect [ 0 0 100 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=IMATRIX) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 100 36 moveto +0 36 lineto +0 0 lineto +100 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 100 36 moveto +0 36 lineto +0 0 lineto +100 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 13 moveto +(IndexedMatrix) +[4.56 6.96 6.96 5.76 6.48 6.24 6.96 12.48 6.24 3.84 5.04 3.84 6.96] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103inputform.ps b/books/ps/v103inputform.ps new file mode 100644 index 0000000..8f75926 --- /dev/null +++ b/books/ps/v103inputform.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 120 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 120 80 +%%PageOrientation: Portrait +gsave +36 36 84 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +82 42 lineto +82 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +82 42 lineto +82 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% InputForm +[ /Rect [ 0 0 76 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=INFORM) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 76 36 moveto +0 36 lineto +0 0 lineto +76 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 76 36 moveto +0 36 lineto +0 0 lineto +76 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(InputForm) +[4.56 6.72 6.96 6.96 3.84 7.44 6.96 5.04 10.8] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103linearordinarydifferentialoperator.ps b/books/ps/v103linearordinarydifferentialoperator.ps new file mode 100644 index 0000000..140fdfd --- /dev/null +++ b/books/ps/v103linearordinarydifferentialoperator.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 262 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 262 80 +%%PageOrientation: Portrait +gsave +36 36 226 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +224 42 lineto +224 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +224 42 lineto +224 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% LinearOrdinaryDifferentialOperator +[ /Rect [ 0 0 218 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=LODO) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 218 36 moveto +0 36 lineto +0 0 lineto +218 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 218 36 moveto +0 36 lineto +0 0 lineto +218 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 13 moveto +(LinearOrdinaryDifferentialOperator) +[8.64 3.84 6.96 6.24 6.24 4.8 10.08 4.56 6.96 3.84 6.96 6.24 5.04 6.96 10.08 3.84 4.56 4.08 6.24 4.8 6.24 6.96 3.84 3.84 6.24 3.84 10.08 6.96 6.24 4.8 6.24 3.84 6.96 4.8] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103linearordinarydifferentialoperator1.ps b/books/ps/v103linearordinarydifferentialoperator1.ps new file mode 100644 index 0000000..48736c5 --- /dev/null +++ b/books/ps/v103linearordinarydifferentialoperator1.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 268 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 268 80 +%%PageOrientation: Portrait +gsave +36 36 232 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +230 42 lineto +230 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +230 42 lineto +230 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% LinearOrdinaryDifferentialOperator1 +[ /Rect [ 0 0 224 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=LODO1) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 224 36 moveto +0 36 lineto +0 0 lineto +224 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 224 36 moveto +0 36 lineto +0 0 lineto +224 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(LinearOrdinaryDifferentialOperator1) +[8.64 3.84 6.96 6.24 6.24 4.8 10.08 4.56 6.96 3.84 6.96 6.24 5.04 6.96 10.08 3.84 4.56 4.08 6.24 4.8 6.24 6.96 3.84 3.84 6.24 3.84 10.08 6.96 6.24 4.8 6.24 3.84 6.96 4.8 6.96] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103linearordinarydifferentialoperator2.ps b/books/ps/v103linearordinarydifferentialoperator2.ps new file mode 100644 index 0000000..681db13 --- /dev/null +++ b/books/ps/v103linearordinarydifferentialoperator2.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 268 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 268 80 +%%PageOrientation: Portrait +gsave +36 36 232 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +230 42 lineto +230 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +230 42 lineto +230 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% LinearOrdinaryDifferentialOperator2 +[ /Rect [ 0 0 224 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=LODO2) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 224 36 moveto +0 36 lineto +0 0 lineto +224 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 224 36 moveto +0 36 lineto +0 0 lineto +224 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(LinearOrdinaryDifferentialOperator2) +[8.64 3.84 6.96 6.24 6.24 4.8 10.08 4.56 6.96 3.84 6.96 6.24 5.04 6.96 10.08 3.84 4.56 4.08 6.24 4.8 6.24 6.96 3.84 3.84 6.24 3.84 10.08 6.96 6.24 4.8 6.24 3.84 6.96 4.8 6.96] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103listmultidictionary.ps b/books/ps/v103listmultidictionary.ps new file mode 100644 index 0000000..42d381f --- /dev/null +++ b/books/ps/v103listmultidictionary.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 172 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 172 80 +%%PageOrientation: Portrait +gsave +36 36 136 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +134 42 lineto +134 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +134 42 lineto +134 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% ListMultiDictionary +[ /Rect [ 0 0 128 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=LMDICT) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 128 36 moveto +0 36 lineto +0 0 lineto +128 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 128 36 moveto +0 36 lineto +0 0 lineto +128 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(ListMultiDictionary) +[8.64 3.84 5.28 3.84 12.48 6.96 3.84 3.84 3.84 10.08 3.84 6.24 3.84 3.84 6.96 6.96 6.24 5.04 6.96] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103matrix.ps b/books/ps/v103matrix.ps new file mode 100644 index 0000000..b74dc5e --- /dev/null +++ b/books/ps/v103matrix.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 100 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 100 80 +%%PageOrientation: Portrait +gsave +36 36 64 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +62 42 lineto +62 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +62 42 lineto +62 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% Matrix +[ /Rect [ 0 0 56 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=MATRIX) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 56 36 moveto +0 36 lineto +0 0 lineto +56 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 56 36 moveto +0 36 lineto +0 0 lineto +56 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 13 moveto +(Matrix) +[12.48 6.24 3.84 5.04 3.84 6.96] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103modmonic.ps b/books/ps/v103modmonic.ps new file mode 100644 index 0000000..5dffe18 --- /dev/null +++ b/books/ps/v103modmonic.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 124 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 124 80 +%%PageOrientation: Portrait +gsave +36 36 88 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +86 42 lineto +86 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +86 42 lineto +86 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% ModMonic +[ /Rect [ 0 0 80 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=MODMON) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 80 36 moveto +0 36 lineto +0 0 lineto +80 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 80 36 moveto +0 36 lineto +0 0 lineto +80 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(ModMonic) +[12.48 6.96 6.96 12.48 6.96 6.96 3.84 6.24] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103modularfield.ps b/books/ps/v103modularfield.ps new file mode 100644 index 0000000..c55b2b8 --- /dev/null +++ b/books/ps/v103modularfield.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 192 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 192 80 +%%PageOrientation: Portrait +gsave +36 36 156 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +154 42 lineto +154 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +154 42 lineto +154 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% EuclideanModularRing +[ /Rect [ 0 0 148 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=EMR) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 148 36 moveto +0 36 lineto +0 0 lineto +148 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 148 36 moveto +0 36 lineto +0 0 lineto +148 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 13 moveto +(EuclideanModularRing) +[8.64 6.96 6.24 3.84 3.84 6.96 6.24 6.24 6.96 12.48 6.96 6.96 6.96 3.84 6.24 4.8 9.36 3.84 6.96 6.96] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103modularring.ps b/books/ps/v103modularring.ps new file mode 100644 index 0000000..747abc9 --- /dev/null +++ b/books/ps/v103modularring.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 136 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 136 80 +%%PageOrientation: Portrait +gsave +36 36 100 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +98 42 lineto +98 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +98 42 lineto +98 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% ModularRing +[ /Rect [ 0 0 92 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=MODRING) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 92 36 moveto +0 36 lineto +0 0 lineto +92 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 92 36 moveto +0 36 lineto +0 0 lineto +92 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(ModularRing) +[12.48 6.96 6.96 6.96 3.84 6.24 4.8 9.36 3.84 6.96 6.96] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103modulemonomial.ps b/books/ps/v103modulemonomial.ps new file mode 100644 index 0000000..2bb0f3f --- /dev/null +++ b/books/ps/v103modulemonomial.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 162 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 162 80 +%%PageOrientation: Portrait +gsave +36 36 126 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +124 42 lineto +124 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +124 42 lineto +124 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% ModuleMonomial +[ /Rect [ 0 0 118 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=MODMONOM) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 118 36 moveto +0 36 lineto +0 0 lineto +118 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 118 36 moveto +0 36 lineto +0 0 lineto +118 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(ModuleMonomial) +[12.48 6.96 6.96 6.96 3.84 6.24 12.48 6.96 6.96 6.96 10.8 3.84 6.24 3.84] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103moebiustransform.ps b/books/ps/v103moebiustransform.ps new file mode 100644 index 0000000..23c47f3 --- /dev/null +++ b/books/ps/v103moebiustransform.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 168 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 168 80 +%%PageOrientation: Portrait +gsave +36 36 132 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +130 42 lineto +130 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +130 42 lineto +130 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% MoebiusTransform +[ /Rect [ 0 0 124 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=MOEBIUS) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 124 36 moveto +0 36 lineto +0 0 lineto +124 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 124 36 moveto +0 36 lineto +0 0 lineto +124 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(MoebiusTransform) +[12.48 6.96 6.24 6.96 3.84 6.96 5.52 7.92 4.8 6.24 6.96 5.52 4.08 6.96 5.04 10.8] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103monoidring.ps b/books/ps/v103monoidring.ps new file mode 100644 index 0000000..97cbaac --- /dev/null +++ b/books/ps/v103monoidring.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 132 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 132 80 +%%PageOrientation: Portrait +gsave +36 36 96 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +94 42 lineto +94 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +94 42 lineto +94 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% MonoidRing +[ /Rect [ 0 0 88 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=MRING) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 88 36 moveto +0 36 lineto +0 0 lineto +88 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 88 36 moveto +0 36 lineto +0 0 lineto +88 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(MonoidRing) +[12.48 6.96 6.96 6.96 3.84 6.96 9.36 3.84 6.96 6.96] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103multiset.ps b/books/ps/v103multiset.ps new file mode 100644 index 0000000..bdb126f --- /dev/null +++ b/books/ps/v103multiset.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 108 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 108 80 +%%PageOrientation: Portrait +gsave +36 36 72 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +70 42 lineto +70 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +70 42 lineto +70 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% Multiset +[ /Rect [ 0 0 64 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=MSET) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 64 36 moveto +0 36 lineto +0 0 lineto +64 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 64 36 moveto +0 36 lineto +0 0 lineto +64 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 13 moveto +(Multiset) +[12.48 6.96 3.84 3.84 3.84 5.52 6 3.84] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103multivariatepolynomial.ps b/books/ps/v103multivariatepolynomial.ps new file mode 100644 index 0000000..b4d53cd --- /dev/null +++ b/books/ps/v103multivariatepolynomial.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 194 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 194 80 +%%PageOrientation: Portrait +gsave +36 36 158 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +156 42 lineto +156 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +156 42 lineto +156 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% MultivariatePolynomial +[ /Rect [ 0 0 150 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=MPOLY) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 150 36 moveto +0 36 lineto +0 0 lineto +150 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 150 36 moveto +0 36 lineto +0 0 lineto +150 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 13 moveto +(MultivariatePolynomial) +[12.48 6.96 3.84 3.84 3.84 6.72 6.24 5.04 3.84 6.24 3.84 6.24 7.44 6.96 3.6 6.96 6.96 6.96 10.8 3.84 6.24 3.84] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103oppositemonogeniclinearoperator.ps b/books/ps/v103oppositemonogeniclinearoperator.ps new file mode 100644 index 0000000..22788ce --- /dev/null +++ b/books/ps/v103oppositemonogeniclinearoperator.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 260 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 260 80 +%%PageOrientation: Portrait +gsave +36 36 224 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +222 42 lineto +222 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +222 42 lineto +222 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% OppositeMonogenicLinearOperator +[ /Rect [ 0 0 216 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=OMLO) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 216 36 moveto +0 36 lineto +0 0 lineto +216 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 216 36 moveto +0 36 lineto +0 0 lineto +216 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(OppositeMonogenicLinearOperator) +[10.08 6.96 6.96 6.96 5.52 3.84 3.84 6.24 12.48 6.96 6.96 6.96 6.72 6.24 6.96 3.84 6.24 8.64 3.84 6.96 6.24 6.24 4.8 10.08 6.96 6.24 4.8 6.24 3.84 6.96 4.8] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103ordinarydifferentialring.ps b/books/ps/v103ordinarydifferentialring.ps new file mode 100644 index 0000000..8f6603e --- /dev/null +++ b/books/ps/v103ordinarydifferentialring.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 202 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 202 80 +%%PageOrientation: Portrait +gsave +36 36 166 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +164 42 lineto +164 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +164 42 lineto +164 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% OrdinaryDifferentialRing +[ /Rect [ 0 0 158 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=ODR) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 158 36 moveto +0 36 lineto +0 0 lineto +158 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 158 36 moveto +0 36 lineto +0 0 lineto +158 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(OrdinaryDifferentialRing) +[10.08 4.56 6.96 3.84 6.96 6.24 5.04 6.96 10.08 3.84 4.56 4.08 6.24 4.8 6.24 6.96 3.84 3.84 6.24 3.84 9.36 3.84 6.96 6.96] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103polynomial.ps b/books/ps/v103polynomial.ps new file mode 100644 index 0000000..0c89b02 --- /dev/null +++ b/books/ps/v103polynomial.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 124 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 124 80 +%%PageOrientation: Portrait +gsave +36 36 88 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +86 42 lineto +86 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +86 42 lineto +86 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% Polynomial +[ /Rect [ 0 0 80 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=POLY) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 80 36 moveto +0 36 lineto +0 0 lineto +80 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 80 36 moveto +0 36 lineto +0 0 lineto +80 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(Polynomial) +[7.44 6.96 3.6 6.96 6.96 6.96 10.8 3.84 6.24 3.84] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103rectangularmatrix.ps b/books/ps/v103rectangularmatrix.ps new file mode 100644 index 0000000..f78067c --- /dev/null +++ b/books/ps/v103rectangularmatrix.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 166 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 166 80 +%%PageOrientation: Portrait +gsave +36 36 130 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +128 42 lineto +128 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +128 42 lineto +128 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% RectangularMatrix +[ /Rect [ 0 0 122 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=RMATRIX) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 122 36 moveto +0 36 lineto +0 0 lineto +122 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 122 36 moveto +0 36 lineto +0 0 lineto +122 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(RectangularMatrix) +[9.12 6.24 6.24 4.08 6.24 6.96 6.96 6.96 3.84 6.24 4.8 12.48 6.24 3.84 5.04 3.84 6.96] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103setofmintegersinoneton.ps b/books/ps/v103setofmintegersinoneton.ps new file mode 100644 index 0000000..e0a245a --- /dev/null +++ b/books/ps/v103setofmintegersinoneton.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 208 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 208 80 +%%PageOrientation: Portrait +gsave +36 36 172 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +170 42 lineto +170 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +170 42 lineto +170 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% SetOfMIntegersInOneToN +[ /Rect [ 0 0 164 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=SETMN) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 164 36 moveto +0 36 lineto +0 0 lineto +164 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 164 36 moveto +0 36 lineto +0 0 lineto +164 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(SetOfMIntegersInOneToN) +[7.68 6 3.84 10.08 4.56 12.48 4.56 6.96 3.84 6.24 6.72 6.24 4.8 5.52 4.56 6.96 10.08 6.96 6.24 7.44 6.96 10.08] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103singletonasorderedset.ps b/books/ps/v103singletonasorderedset.ps new file mode 100644 index 0000000..0c54f67 --- /dev/null +++ b/books/ps/v103singletonasorderedset.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 192 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 192 80 +%%PageOrientation: Portrait +gsave +36 36 156 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +154 42 lineto +154 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +154 42 lineto +154 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% SingletonAsOrderedSet +[ /Rect [ 0 0 148 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=SAOS) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 148 36 moveto +0 36 lineto +0 0 lineto +148 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 148 36 moveto +0 36 lineto +0 0 lineto +148 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(SingletonAsOrderedSet) +[7.68 3.84 6.96 6.96 3.84 6 3.84 6.96 6.96 10.08 5.52 10.08 4.56 6.96 6.24 4.8 6.24 6.96 7.68 6 3.84] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103sparsemultivariatepolynomial.ps b/books/ps/v103sparsemultivariatepolynomial.ps new file mode 100644 index 0000000..e5010de --- /dev/null +++ b/books/ps/v103sparsemultivariatepolynomial.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 230 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 230 80 +%%PageOrientation: Portrait +gsave +36 36 194 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +192 42 lineto +192 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +192 42 lineto +192 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% SparseMultivariatePolynomial +[ /Rect [ 0 0 186 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=SMP) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 186 36 moveto +0 36 lineto +0 0 lineto +186 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 186 36 moveto +0 36 lineto +0 0 lineto +186 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(SparseMultivariatePolynomial) +[7.68 6.96 6.24 4.8 5.52 6.24 12.48 6.96 3.84 3.84 3.84 6.72 6.24 5.04 3.84 6.24 3.84 6.24 7.44 6.96 3.6 6.96 6.96 6.96 10.8 3.84 6.24 3.84] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103sparsemultivariatetaylorseries.ps b/books/ps/v103sparsemultivariatetaylorseries.ps new file mode 100644 index 0000000..c5fda05 --- /dev/null +++ b/books/ps/v103sparsemultivariatetaylorseries.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 236 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 236 80 +%%PageOrientation: Portrait +gsave +36 36 200 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +198 42 lineto +198 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +198 42 lineto +198 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% SparseMultivariateTaylorSeries +[ /Rect [ 0 0 192 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=SMTS) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 192 36 moveto +0 36 lineto +0 0 lineto +192 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 192 36 moveto +0 36 lineto +0 0 lineto +192 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(SparseMultivariateTaylorSeries) +[7.68 6.96 6.24 4.8 5.52 6.24 12.48 6.96 3.84 3.84 3.84 6.72 6.24 5.04 3.84 6.24 3.84 6.24 7.68 5.76 6.48 3.84 6.96 4.8 7.68 6.24 5.04 3.84 6.24 5.52] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103squarematrix.ps b/books/ps/v103squarematrix.ps new file mode 100644 index 0000000..7ebd1ed --- /dev/null +++ b/books/ps/v103squarematrix.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 138 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 138 80 +%%PageOrientation: Portrait +gsave +36 36 102 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +100 42 lineto +100 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +100 42 lineto +100 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% SquareMatrix +[ /Rect [ 0 0 94 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=SQMATRIX) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 94 36 moveto +0 36 lineto +0 0 lineto +94 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 94 36 moveto +0 36 lineto +0 0 lineto +94 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +8 13 moveto +(SquareMatrix) +[7.68 6.72 6.96 6.24 4.8 6.24 12.48 6.24 3.84 5.04 3.84 6.96] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/books/ps/v103taylorseries.ps b/books/ps/v103taylorseries.ps new file mode 100644 index 0000000..e9b78ba --- /dev/null +++ b/books/ps/v103taylorseries.ps @@ -0,0 +1,248 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.8 (Thu Sep 14 20:34:11 UTC 2006) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: 36 36 130 80 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval +EncodingVector 45 /hyphen put + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 130 80 +%%PageOrientation: Portrait +gsave +36 36 94 44 boxprim clip newpath +36 36 translate +0 0 1 beginpage +1.0000 set_scale +4 4 translate 0 rotate +0.167 0.600 1.000 graphcolor +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +92 42 lineto +92 -6 lineto +closepath +fill +0.167 0.600 1.000 graphcolor +newpath -6 -6 moveto +-6 42 lineto +92 42 lineto +92 -6 lineto +closepath +stroke +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font +% TaylorSeries +[ /Rect [ 0 0 86 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=TS) >> + /Subtype /Link +/ANN pdfmark +gsave 10 dict begin +filled +0.537 0.247 0.902 nodecolor +0.537 0.247 0.902 nodecolor +newpath 86 36 moveto +0 36 lineto +0 0 lineto +86 0 lineto +closepath +fill +0.537 0.247 0.902 nodecolor +newpath 86 36 moveto +0 36 lineto +0 0 lineto +86 0 lineto +closepath +stroke +gsave 10 dict begin +0.000 0.000 0.000 nodecolor +7 13 moveto +(TaylorSeries) +[7.68 5.76 6.48 3.84 6.96 4.8 7.68 6.24 5.04 3.84 6.24 5.52] +xshow +end grestore +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/changelog b/changelog index 7a891b5..b949a12 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,40 @@ +20081210 tpd src/input/test.input fix reference to multpoly.spad +20081210 tpd books/Makefile set SHELL to bash to fix echo behavior in toc +20081210 tpd src/algebra/multpoly.spad moved domains to bookvol10.3 +20081210 tpd src/algebra/Makefile remove mts.spad +20081210 tpd src/algebra/mts.spad removed, moved domains to bookvol10.3 +20081210 tpd src/algebra/Makefile remove mset.spad +20081210 tpd src/algebra/mset.spad removed, moved domains to bookvol10.3 +20081210 tpd src/algebra/mring.spad moved domains to bookvol10.3 +20081210 tpd src/algebra/Makefile remove moebius.spad +20081210 tpd src/algebra/moebius.spad removed, moved domains to bookvol10.3 +20081210 tpd src/algebra/Makefile remove modring.spad +20081210 tpd src/algebra/modring.spad removed, moved domains to bookvol10.3 +20081210 tpd src/algebra/Makefile remove modmon.spad +20081210 tpd src/algebra/modmon.spad removed, moved domains to bookvol10.3 +20081210 tpd src/algebra/Makefile remove monmonom.spad +20081210 tpd src/algebra/modmonom.spad removed, moved domains to bookvol10.3 +20081210 tpd src/algebra/mkfunc.spad move domains to bookvol10.3 +20081210 tpd src/algebra/Makefile remove misc.spad +20081210 tpd src/algebra/misc.spad removed, moved domains to bookvol10.3 +20081210 tpd src/input/Makefile remove matrix.spad +20081210 tpd src/algebra/Makefile remove matrix.spad +20081210 tpd src/algebra/matrix.spad removed, moved domains to bookvol10.3 +20081210 tpd books/ps/v103setofmintegersinoneton.ps added +20081210 tpd books/ps/v103ordinarydifferentialring.ps added +20081210 tpd books/ps/v103oppositemonogeniclinearoperator.ps added +20081210 tpd books/ps/v103listmultidictionary.ps added +20081210 tpd books/ps/v103linearordinarydifferentialoperator2.ps added +20081210 tpd books/ps/v103linearordinarydifferentialoperator1.ps added +20081210 tpd books/ps/v103linearordinarydifferentialoperator.ps added +20081210 tpd books/ps/v103directproductmodule.ps added +20081210 tpd books/ps/v103directproductmatrixmodule.ps added +20081210 tpd src/algebra/Makefile convert lodo help files +20081210 tpd src/algebra/lodo.spad move domains to bookvol10.3 +20081210 tpd src/algebra/lodop.spad move domains to bookvol10.3 +20081210 tpd src/algebra/lodof.spad move domain to bookvol10.3 +20081210 tpd src/algebra/Makefile remove lmdict.spad +20081210 tpd src/algebra/lmdict.spad removed, move domain to bookvol10.3 20081209 tpd books/ps/v103univariatelaurentseriesconstructor.ps added 20081209 tpd books/ps/v103univariatelaurentseries.ps added 20081209 tpd books/ps/v103splithomogeneousdirectproduct.ps added diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet index f7366c5..8c74041 100644 --- a/src/algebra/Makefile.pamphlet +++ b/src/algebra/Makefile.pamphlet @@ -368,8 +368,6 @@ drawpak.spad.pamphlet (DRAWCX) mappkg.spad.pamphlet (MAPHACK1 MAPHACK2 MAPHACK3 MAPHACK4 MAPPKG1 MAPPKG2 MAPPKG3 MAPPKG4) mesh.spad.pamphlet (MESH) -moebius.spad.pamphlet (MOEBIUS) -mring.spad.pamphlet (MRING MRF2) opalg.spad.pamphlet (MODOP OP) partperm.spad.pamphlet (PARTPERM) pgrobner.spad.pamphlet (PGROEB) @@ -538,9 +536,6 @@ matfuns.spad.pamphlet (IMATLIN MATCAT2 RMCAT2 IMATQF MATLIN) mfinfact.spad.pamphlet (MFINFACT) mlift.spad.pamphlet (MLIST) moddfact.spad.pamphlet (MDDFACT) -modmon.spad.pamphlet (MODMON) -modring.spad.pamphlet (MODRING EMR MODFIELD) -mts.spad.pamphlet (SMTS TS) multsqfr.spad.pamphlet (MULTSQFR) newpoint.spad.pamphlet (PTCAT POINT COMPPROP SUBSPACE PTPACK PTFUNC2) numtheor.spad.pamphlet (INTHEORY PNTHEORY) @@ -756,12 +751,8 @@ intaux.spad.pamphlet (IR IR2) intclos.spad.pamphlet (TRIMAT IBATOOL FFINTBAS WFFINTBS NFINTBAS) integer.spad.pamphlet (INTSLPE INT NNI PI ROMAN) kl.spad.pamphlet (CACHSET SCACHE MKCHSET KERNEL KERNEL2) -lmdict.spad.pamphlet (LMDICT) -matrix.spad.pamphlet (IMATRIX MATRIX RMATRIX SQMATRIX) -misc.spad.pamphlet (SAOS) mkfunc.spad.pamphlet (INFORM INFORM1 MKFUNC MKUCFUNC MKBCFUNC MKFLCFN) modgcd.spad.pamphlet (INMODGCD) -mset.spad.pamphlet (MSET) multpoly.spad.pamphlet (POLY POLY2 MPOLY SMP INDE) newdata.spad.pamphlet (IPRNTPK TBCMPPK SPLNODE SPLTREE) omerror.spad.pamphlet (OMERRK OMERR) @@ -1181,17 +1172,15 @@ SPADFILES= \ ${OUTSRC}/laplace.spad ${OUTSRC}/laurent.spad ${OUTSRC}/leadcdet.spad \ ${OUTSRC}/limitps.spad ${OUTSRC}/lindep.spad \ ${OUTSRC}/lingrob.spad ${OUTSRC}/liouv.spad ${OUTSRC}/listgcd.spad \ - ${OUTSRC}/list.spad ${OUTSRC}/lmdict.spad ${OUTSRC}/lodof.spad \ + ${OUTSRC}/list.spad ${OUTSRC}/lodof.spad \ ${OUTSRC}/lodop.spad ${OUTSRC}/lodo.spad \ ${OUTSRC}/manip.spad ${OUTSRC}/mappkg.spad \ ${OUTSRC}/matfuns.spad ${OUTSRC}/mathml.spad \ - ${OUTSRC}/matrix.spad ${OUTSRC}/matstor.spad \ - ${OUTSRC}/mesh.spad ${OUTSRC}/mfinfact.spad ${OUTSRC}/misc.spad \ + ${OUTSRC}/matstor.spad \ + ${OUTSRC}/mesh.spad ${OUTSRC}/mfinfact.spad \ ${OUTSRC}/mkfunc.spad ${OUTSRC}/mkrecord.spad \ ${OUTSRC}/mlift.spad ${OUTSRC}/moddfact.spad ${OUTSRC}/modgcd.spad \ - ${OUTSRC}/modmonom.spad ${OUTSRC}/modmon.spad ${OUTSRC}/modring.spad \ - ${OUTSRC}/moebius.spad ${OUTSRC}/mring.spad ${OUTSRC}/mset.spad \ - ${OUTSRC}/mts.spad ${OUTSRC}/multfact.spad ${OUTSRC}/multpoly.spad \ + ${OUTSRC}/multfact.spad ${OUTSRC}/multpoly.spad \ ${OUTSRC}/multsqfr.spad \ ${OUTSRC}/naalg.spad \ ${OUTSRC}/newdata.spad ${OUTSRC}/newpoint.spad \ @@ -1337,17 +1326,15 @@ DOCFILES= \ ${DOC}/laplace.spad.dvi ${DOC}/laurent.spad.dvi ${DOC}/leadcdet.spad.dvi \ ${DOC}/limitps.spad.dvi ${DOC}/lindep.spad.dvi \ ${DOC}/lingrob.spad.dvi ${DOC}/liouv.spad.dvi ${DOC}/listgcd.spad.dvi \ - ${DOC}/list.spad.dvi ${DOC}/lmdict.spad.dvi ${DOC}/lodof.spad.dvi \ + ${DOC}/list.spad.dvi ${DOC}/lodof.spad.dvi \ ${DOC}/lodop.spad.dvi ${DOC}/lodo.spad.dvi \ ${DOC}/manip.spad.dvi ${DOC}/mappkg.spad.dvi \ ${DOC}/matfuns.spad.dvi ${DOC}/mathml.spad.dvi \ - ${DOC}/matrix.spad.dvi ${DOC}/matstor.spad.dvi \ - ${DOC}/mesh.spad.dvi ${DOC}/mfinfact.spad.dvi ${DOC}/misc.spad.dvi \ + ${DOC}/matstor.spad.dvi \ + ${DOC}/mesh.spad.dvi ${DOC}/mfinfact.spad.dvi \ ${DOC}/mkfunc.spad.dvi ${DOC}/mkrecord.spad.dvi ${DOC}/mlift.spad.jhd.dvi \ ${DOC}/mlift.spad.dvi ${DOC}/moddfact.spad.dvi ${DOC}/modgcd.spad.dvi \ - ${DOC}/modmonom.spad.dvi ${DOC}/modmon.spad.dvi ${DOC}/modring.spad.dvi \ - ${DOC}/moebius.spad.dvi ${DOC}/mring.spad.dvi ${DOC}/mset.spad.dvi \ - ${DOC}/mts.spad.dvi ${DOC}/multfact.spad.dvi ${DOC}/multpoly.spad.dvi \ + ${DOC}/multfact.spad.dvi ${DOC}/multpoly.spad.dvi \ ${DOC}/multsqfr.spad.dvi \ ${DOC}/naalg.spad.dvi ${DOC}/ndftip.as.dvi \ ${DOC}/nepip.as.dvi ${DOC}/newdata.spad.dvi ${DOC}/newpoint.spad.dvi \ @@ -1943,12 +1930,13 @@ which is essentially a list of all of the algebra help files. Each item in this list refers to a stanza that looks like: \begin{verbatim} -${HELP}/AssociationList.help: ${IN}/list.spad.pamphlet - @echo 7000 create AssociationList.help from ${IN}/list.spad.pamphlet - @${TANGLE} -R"AssociationList.help" ${IN}/list.spad.pamphlet \ +${HELP}/AssociationList.help: ${BOOKS}/bookvol10.3.pamphlet + @echo 7000 create AssociationList.help from \ + ${BOOKS}/bookvol10.3.pamphlet + @${TANGLE} -R"AssociationList.help" ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/AssociationList.help @cp ${HELP}/AssociationList.help ${HELP}/ALIST.help - @${TANGLE} -R"AssociationList.input" ${IN}/list.spad.pamphlet \ + @${TANGLE} -R"AssociationList.input" ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/AssociationList.input \end{verbatim} @@ -2148,12 +2136,13 @@ all: ${REGRESS} @echo algebra test cases complete. @ <>= -${HELP}/AssociationList.help: ${IN}/list.spad.pamphlet - @echo 7000 create AssociationList.help from ${IN}/list.spad.pamphlet - @${TANGLE} -R"AssociationList.help" ${IN}/list.spad.pamphlet \ +${HELP}/AssociationList.help: ${BOOKS}/bookvol10.3.pamphlet + @echo 7000 create AssociationList.help from \ + ${BOOKS}/bookvol10.3.pamphlet + @${TANGLE} -R"AssociationList.help" ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/AssociationList.help @cp ${HELP}/AssociationList.help ${HELP}/ALIST.help - @${TANGLE} -R"AssociationList.input" ${IN}/list.spad.pamphlet \ + @${TANGLE} -R"AssociationList.input" ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/AssociationList.input ${HELP}/BalancedBinaryTree.help: ${IN}/tree.spad.pamphlet @@ -2231,12 +2220,12 @@ ${HELP}/CliffordAlgebra.help: ${BOOKS}/bookvol10.3.pamphlet @${TANGLE} -R"CliffordAlgebra.input" ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/CliffordAlgebra.input -${HELP}/Complex.help: ${IN}/gaussian.spad.pamphlet - @echo 7010 create Complex.help from ${IN}/gaussian.spad.pamphlet - @${TANGLE} -R"Complex.help" ${IN}/gaussian.spad.pamphlet \ +${HELP}/Complex.help: ${BOOKS}/bookvol10.3.pamphlet + @echo 7010 create Complex.help from ${BOOKS}/bookvol10.3.pamphlet + @${TANGLE} -R"Complex.help" ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/Complex.help @-cp ${HELP}/Complex.help ${HELP}/COMPLEX.help - @${TANGLE} -R"Complex.input" ${IN}/gaussian.spad.pamphlet \ + @${TANGLE} -R"Complex.input" ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/Complex.input ${HELP}/ContinuedFraction.help: ${BOOKS}/bookvol10.3.pamphlet @@ -2447,12 +2436,12 @@ ${HELP}/HomogeneousDistributedMultivariatePolynomial.help: \ ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/HomogeneousDistributedMultivariatePolynomial.input -${HELP}/Integer.help: ${IN}/integer.spad.pamphlet - @echo 7033 create Integer.help from ${IN}/integer.spad.pamphlet - @${TANGLE} -R"Integer.help" ${IN}/integer.spad.pamphlet \ +${HELP}/Integer.help: ${BOOKS}/bookvol10.3.pamphlet + @echo 7033 create Integer.help from ${BOOKS}/bookvol10.3.pamphlet + @${TANGLE} -R"Integer.help" ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/Integer.help @cp ${HELP}/Integer.help ${HELP}/INT.help - @${TANGLE} -R"Integer.input" ${IN}/integer.spad.pamphlet \ + @${TANGLE} -R"Integer.input" ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/Integer.input ${HELP}/IntegerLinearDependence.help: ${IN}/lindep.spad.pamphlet @@ -2478,12 +2467,12 @@ ${HELP}/IntegerNumberTheoryFunctions.help: ${IN}/numtheor.spad.pamphlet ${IN}/numtheor.spad.pamphlet \ >${INPUT}/IntegerNumberTheoryFunctions.input -${HELP}/Kernel.help: ${IN}/kl.spad.pamphlet - @echo 7036 create Kernel.help from ${IN}/kl.spad.pamphlet - @${TANGLE} -R"Kernel.help" ${IN}/kl.spad.pamphlet \ +${HELP}/Kernel.help: ${BOOKS}/bookvol10.3.pamphlet + @echo 7036 create Kernel.help from ${BOOKS}/bookvol10.3.pamphlet + @${TANGLE} -R"Kernel.help" ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/Kernel.help @-cp ${HELP}/Kernel.help ${HELP}/KERNEL.help - @${TANGLE} -R"Kernel.input" ${IN}/kl.spad.pamphlet \ + @${TANGLE} -R"Kernel.input" ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/Kernel.input ${HELP}/KeyedAccessFile.help: ${BOOKS}/bookvol10.3.pamphlet @@ -2528,45 +2517,47 @@ ${HELP}/LiePolynomial.help: ${IN}/xlpoly.spad.pamphlet @${TANGLE} -R"LiePolynomial.input" ${IN}/xlpoly.spad.pamphlet \ >${INPUT}/LiePolynomial.input -${HELP}/LinearOrdinaryDifferentialOperator.help: ${IN}/lodo.spad.pamphlet +${HELP}/LinearOrdinaryDifferentialOperator.help: ${BOOKS}/bookvol10.3.pamphlet @echo 7042 create LinearOrdinaryDifferentialOperator.help \ - from ${IN}/lodo.spad.pamphlet + from ${BOOKS}/bookvol10.3.pamphlet @${TANGLE} -R"LinearOrdinaryDifferentialOperator.help" \ - ${IN}/lodo.spad.pamphlet \ + ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/LinearOrdinaryDifferentialOperator.help @cp ${HELP}/LinearOrdinaryDifferentialOperator.help ${HELP}/LODO.help @${TANGLE} -R"LinearOrdinaryDifferentialOperator.input" \ - ${IN}/lodo.spad.pamphlet \ + ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/LinearOrdinaryDifferentialOperator.input -${HELP}/LinearOrdinaryDifferentialOperator1.help: ${IN}/lodo.spad.pamphlet +${HELP}/LinearOrdinaryDifferentialOperator1.help: \ + ${BOOKS}/bookvol10.3.pamphlet @echo 7043 create LinearOrdinaryDifferentialOperator1.help \ - from ${IN}/lodo.spad.pamphlet + from ${BOOKS}/bookvol10.3.pamphlet @${TANGLE} -R"LinearOrdinaryDifferentialOperator1.help" \ - ${IN}/lodo.spad.pamphlet \ + ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/LinearOrdinaryDifferentialOperator1.help @cp ${HELP}/LinearOrdinaryDifferentialOperator1.help ${HELP}/LODO1.help @${TANGLE} -R"LinearOrdinaryDifferentialOperator1.input" \ - ${IN}/lodo.spad.pamphlet \ + ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/LinearOrdinaryDifferentialOperator1.input -${HELP}/LinearOrdinaryDifferentialOperator2.help: ${IN}/lodo.spad.pamphlet +${HELP}/LinearOrdinaryDifferentialOperator2.help: \ + ${BOOKS}/bookvol10.3.pamphlet @echo 7044 create LinearOrdinaryDifferentialOperator2.help \ - from ${IN}/lodo.spad.pamphlet + from ${BOOKS}/bookvol10.3.pamphlet @${TANGLE} -R"LinearOrdinaryDifferentialOperator2.help" \ - ${IN}/lodo.spad.pamphlet \ + ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/LinearOrdinaryDifferentialOperator2.help @cp ${HELP}/LinearOrdinaryDifferentialOperator2.help ${HELP}/LODO2.help @${TANGLE} -R"LinearOrdinaryDifferentialOperator2.input" \ - ${IN}/lodo.spad.pamphlet \ + ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/LinearOrdinaryDifferentialOperator2.input -${HELP}/List.help: ${IN}/list.spad.pamphlet - @echo 7045 create List.help from ${IN}/list.spad.pamphlet - @${TANGLE} -R"List.help" ${IN}/list.spad.pamphlet \ +${HELP}/List.help: ${BOOKS}/bookvol10.3.pamphlet + @echo 7045 create List.help from ${BOOKS}/bookvol10.3.pamphlet + @${TANGLE} -R"List.help" ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/List.help @-cp ${HELP}/List.help ${HELP}/LIST.help - @${TANGLE} -R"List.input" ${IN}/list.spad.pamphlet \ + @${TANGLE} -R"List.input" ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/List.input ${HELP}/LyndonWord.help: ${IN}/xlpoly.spad.pamphlet @@ -2617,31 +2608,31 @@ ${HELP}/MappingPackage3.help: ${IN}/mappkg.spad.pamphlet @${TANGLE} -R"MappingPackage3.input" ${IN}/mappkg.spad.pamphlet \ >${INPUT}/MappingPackage3.input -${HELP}/Matrix.help: ${IN}/matrix.spad.pamphlet - @echo 7052 create Matrix.help from ${IN}/matrix.spad.pamphlet - @${TANGLE} -R"Matrix.help" ${IN}/matrix.spad.pamphlet \ +${HELP}/Matrix.help: ${BOOKS}/bookvol10.3.pamphlet + @echo 7052 create Matrix.help from ${BOOKS}/bookvol10.3.pamphlet + @${TANGLE} -R"Matrix.help" ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/Matrix.help @-cp ${HELP}/Matrix.help ${HELP}/MATRIX.help - @${TANGLE} -R"Matrix.input" ${IN}/matrix.spad.pamphlet \ + @${TANGLE} -R"Matrix.input" ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/Matrix.input -${HELP}/Multiset.help: ${IN}/mset.spad.pamphlet - @echo 7053 create Multiset.help from ${IN}/mset.spad.pamphlet - @${TANGLE} -R"Multiset.help" ${IN}/mset.spad.pamphlet \ +${HELP}/Multiset.help: ${BOOKS}/bookvol10.3.pamphlet + @echo 7053 create Multiset.help from ${BOOKS}/bookvol10.3.pamphlet + @${TANGLE} -R"Multiset.help" ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/Multiset.help @cp ${HELP}/Multiset.help ${HELP}/MSET.help - @${TANGLE} -R"Multiset.input" ${IN}/mset.spad.pamphlet \ + @${TANGLE} -R"Multiset.input" ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/Multiset.input -${HELP}/MultivariatePolynomial.help: ${IN}/multpoly.spad.pamphlet +${HELP}/MultivariatePolynomial.help: ${BOOKS}/bookvol10.3.pamphlet @echo 7054 create MultivariatePolynomial.help from \ - ${IN}/multpoly.spad.pamphlet + ${BOOKS}/bookvol10.3.pamphlet @${TANGLE} -R"MultivariatePolynomial.help" \ - ${IN}/multpoly.spad.pamphlet \ + ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/MultivariatePolynomial.help @cp ${HELP}/MultivariatePolynomial.help ${HELP}/MPOLY.help @${TANGLE} -R"MultivariatePolynomial.input" \ - ${IN}/multpoly.spad.pamphlet \ + ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/MultivariatePolynomial.input ${HELP}/None.help: ${BOOKS}/bookvol10.3.pamphlet @@ -2739,12 +2730,12 @@ ${HELP}/Plot.help: ${IN}/plot.spad.pamphlet @-cp ${HELP}/Plot.help ${HELP}/PLOT.help @${TANGLE} -R"Plot.input" ${IN}/plot.spad.pamphlet >${INPUT}/Plot.input -${HELP}/Polynomial.help: ${IN}/multpoly.spad.pamphlet - @echo 7065 create Polynomial.help from ${IN}/multpoly.spad.pamphlet - @${TANGLE} -R"Polynomial.help" ${IN}/multpoly.spad.pamphlet \ +${HELP}/Polynomial.help: ${BOOKS}/bookvol10.3.pamphlet + @echo 7065 create Polynomial.help from ${BOOKS}/bookvol10.3.pamphlet + @${TANGLE} -R"Polynomial.help" ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/Polynomial.help @cp ${HELP}/Polynomial.help ${HELP}/POLY.help - @${TANGLE} -R"Polynomial.input" ${IN}/multpoly.spad.pamphlet \ + @${TANGLE} -R"Polynomial.input" ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/Polynomial.input ${HELP}/Quaternion.help: ${IN}/quat.spad.pamphlet @@ -2788,12 +2779,12 @@ ${HELP}/RegularTriangularSet.help: ${IN}/regset.spad.pamphlet @${TANGLE} -R"RegularTriangularSet.input" ${IN}/regset.spad.pamphlet \ >${INPUT}/RegularTriangularSet.input -${HELP}/RomanNumeral.help: ${IN}/integer.spad.pamphlet - @echo 7071 create RomanNumeral.help from ${IN}/integer.spad.pamphlet - @${TANGLE} -R"RomanNumeral.help" ${IN}/integer.spad.pamphlet \ +${HELP}/RomanNumeral.help: ${BOOKS}/bookvol10.3.pamphlet + @echo 7071 create RomanNumeral.help from ${BOOKS}/bookvol10.3.pamphlet + @${TANGLE} -R"RomanNumeral.help" ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/RomanNumeral.help @cp ${HELP}/RomanNumeral.help ${HELP}/ROMAN.help - @${TANGLE} -R"RomanNumeral.input" ${IN}/integer.spad.pamphlet \ + @${TANGLE} -R"RomanNumeral.input" ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/RomanNumeral.input ${HELP}/Segment.help: ${IN}/seg.spad.pamphlet @@ -2828,12 +2819,12 @@ ${HELP}/SparseTable.help: ${IN}/table.spad.pamphlet @${TANGLE} -R"SparseTable.input" ${IN}/table.spad.pamphlet \ >${INPUT}/SparseTable.input -${HELP}/SquareMatrix.help: ${IN}/matrix.spad.pamphlet - @echo 7076 create SquareMatrix.help from ${IN}/matrix.spad.pamphlet - @${TANGLE} -R"SquareMatrix.help" ${IN}/matrix.spad.pamphlet \ +${HELP}/SquareMatrix.help: ${BOOKS}/bookvol10.3.pamphlet + @echo 7076 create SquareMatrix.help from ${BOOKS}/bookvol10.3.pamphlet + @${TANGLE} -R"SquareMatrix.help" ${BOOKS}/bookvol10.3.pamphlet \ >${HELP}/SquareMatrix.help @cp ${HELP}/SquareMatrix.help ${HELP}/SQMATRIX.help - @${TANGLE} -R"SquareMatrix.input" ${IN}/matrix.spad.pamphlet \ + @${TANGLE} -R"SquareMatrix.input" ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/SquareMatrix.input ${HELP}/SquareFreeRegularTriangularSet.help: ${IN}/sregset.spad.pamphlet diff --git a/src/algebra/lmdict.spad.pamphlet b/src/algebra/lmdict.spad.pamphlet deleted file mode 100644 index cba196e..0000000 --- a/src/algebra/lmdict.spad.pamphlet +++ /dev/null @@ -1,200 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra lmdict.spad} -\author{Michael Monagan, Frederic Lehobey} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{domain LMDICT ListMultiDictionary} -<>= -)abbrev domain LMDICT ListMultiDictionary -++ Author: MBM Nov/87, MB Oct/89 -++ Date Created: -++ Date Last Updated: 13 June 1994 Frederic Lehobey -++ Basic Operations: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: The \spadtype{ListMultiDictionary} domain implements a -++ dictionary with duplicates -++ allowed. The representation is a list with duplicates represented -++ explicitly. Hence most operations will be relatively inefficient -++ when the number of entries in the dictionary becomes large. --- The operations \spadfun{pick}, \spadfun{count} and \spadfun{delete} can be used to iterate --- over the objects in the dictionary. --- [FDLL : those functions have not been implemented in the parent Categories] -++ If the objects in the -++ dictionary belong to an ordered set, the entries are maintained in -++ ascending order. - -NNI ==> NonNegativeInteger -D ==> Record(entry:S, count:NonNegativeInteger) - -ListMultiDictionary(S:SetCategory): MultiDictionary(S) with - finiteAggregate - duplicates?: % -> Boolean - ++ duplicates?(d) tests if dictionary d has duplicate entries. - substitute : (S, S, %) -> % - ++ substitute(x,y,d) replace x's with y's in dictionary d. - == add - Rep := Reference List S - - sub: (S, S, S) -> S - - coerce(s:%):OutputForm == - prefix("dictionary"::OutputForm, [x::OutputForm for x in parts s]) - - #s == # parts s - copy s == dictionary copy parts s - empty? s == empty? parts s - bag l == dictionary l - dictionary() == dictionary empty() - - empty():% == ref empty() - - dictionary(ls:List S):% == - empty? ls => empty() - lmd := empty() - for x in ls repeat insert_!(x,lmd) - lmd - - if S has ConvertibleTo InputForm then - convert(lmd:%):InputForm == - convert [convert("dictionary"::Symbol)@InputForm, - convert(parts lmd)@InputForm] - - map(f, s) == dictionary map(f, parts s) - map_!(f, s) == dictionary map_!(f, parts s) - parts s == deref s - sub(x, y, z) == (z = x => y; z) - insert_!(x, s, n) == (for i in 1..n repeat insert_!(x, s); s) - substitute(x, y, s) == dictionary map(sub(x, y, #1), parts s) - removeDuplicates_! s == dictionary removeDuplicates_! parts s - - inspect s == - empty? s => error "empty dictionary" - first parts s - - extract_! s == - empty? s => error "empty dictionary" - x := first(p := parts s) - setref(s, rest p) - x - - duplicates? s == - empty?(p := parts s) => false - q := rest p - while not empty? q repeat - first p = first q => return true - p := q - q := rest q - false - - remove_!(p: S->Boolean, lmd:%):% == - for x in removeDuplicates parts lmd | p(x) repeat remove_!(x,lmd) - lmd - - select_!(p: S->Boolean, lmd:%):% == remove_!(not p(#1), lmd) - - duplicates(lmd:%):List D == - ld: List D := empty() - for x in removeDuplicates parts lmd | (n := count(x, lmd)) > - 1$NonNegativeInteger repeat - ld := cons([x, n], ld) - ld - - if S has OrderedSet then - s = t == parts s = parts t - - remove_!(x:S, s:%) == - p := deref s - while not empty? p and x = first p repeat p := rest p - setref(s, p) - empty? p => s - q := rest p - while not empty? q and x > first q repeat (p := q; q := rest q) - while not empty? q and x = first q repeat q := rest q - p.rest := q - s - - insert_!(x, s) == - p := deref s - empty? p or x < first p => - setref(s, concat(x, p)) - s - q := rest p - while not empty? q and x > first q repeat (p := q; q := rest q) - p.rest := concat(x, q) - s - - else - remove_!(x:S, s:%) == (setref(s, remove_!(x, parts s)); s) - - s = t == - a := copy s - while not empty? a repeat - x := inspect a - count(x, s) ^= count(x, t) => return false - remove_!(x, a) - true - - insert_!(x, s) == - p := deref s - while not empty? p repeat - x = first p => - p.rest := concat(x, rest p) - s - p := rest p - setref(s, concat(x, deref s)) - s - -@ -\section{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. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/lodo.spad.pamphlet b/src/algebra/lodo.spad.pamphlet index fd3136a..939f355 100644 --- a/src/algebra/lodo.spad.pamphlet +++ b/src/algebra/lodo.spad.pamphlet @@ -113,1498 +113,6 @@ LinearOrdinaryDifferentialOperatorsOps(A, L): Exports == Implementation where p @ -\section{domain LODO LinearOrdinaryDifferentialOperator} -<>= --- lodo.spad.pamphlet LinearOrdinaryDifferentialOperator.input -)spool LinearOrdinaryDifferentialOperator.output -)set message test on -)set message auto off -)clear all ---S 1 of 16 -Dx: LODO(EXPR INT, f +-> D(f, x)) ---R ---R Type: Void ---E 1 - ---S 2 of 16 -Dx := D() ---R ---R ---R (2) D ---IType: LinearOrdinaryDifferentialOperator(Expression Integer,theMap LAMBDA-CLOSURE(NIL,NIL,NIL,G1404 envArg,SPADCALL(G1404,QUOTE x,ELT(*1;anonymousFunction;0;frame0;internal;MV,0)))) ---E 2 - ---S 3 of 16 -Dop:= Dx^3 + G/x^2*Dx + H/x^3 - 1 ---R ---R ---R 3 ---R 3 G - x + H ---R (3) D + -- D + -------- ---R 2 3 ---R x x ---IType: LinearOrdinaryDifferentialOperator(Expression Integer,theMap LAMBDA-CLOSURE(NIL,NIL,NIL,G1404 envArg,SPADCALL(G1404,QUOTE x,ELT(*1;anonymousFunction;0;frame0;internal;MV,0)))) ---E 3 - ---S 4 of 16 -n == 3 ---R ---R Type: Void ---E 4 - ---S 5 of 16 -phi == reduce(+,[subscript(s,[i])*exp(x)/x^i for i in 0..n]) ---R ---R Type: Void ---E 5 - ---S 6 of 16 -phi1 == Dop(phi) / exp x ---R ---R Type: Void ---E 6 - ---S 7 of 16 -phi2 == phi1 *x**(n+3) ---R ---R Type: Void ---E 7 - ---S 8 of 16 -phi3 == retract(phi2)@(POLY INT) ---R ---R Type: Void ---E 8 - ---S 9 of 16 -pans == phi3 ::UP(x,POLY INT) ---R ---R Type: Void ---E 9 - ---S 10 of 16 -pans1 == [coefficient(pans, (n+3-i) :: NNI) for i in 2..n+1] ---R ---R Type: Void ---E 10 - ---S 11 of 16 -leq == solve(pans1,[subscript(s,[i]) for i in 1..n]) ---R ---R Type: Void ---E 11 - ---S 12 of 16 -leq ---R ---R Compiling body of rule n to compute value of type PositiveInteger ---R Compiling body of rule phi to compute value of type Expression ---R Integer ---R Compiling body of rule phi1 to compute value of type Expression ---R Integer ---R Compiling body of rule phi2 to compute value of type Expression ---R Integer ---R Compiling body of rule phi3 to compute value of type Polynomial ---R Integer ---R Compiling body of rule pans to compute value of type ---R UnivariatePolynomial(x,Polynomial Integer) ---R Compiling body of rule pans1 to compute value of type List ---R Polynomial Integer ---R Compiling body of rule leq to compute value of type List List ---R Equation Fraction Polynomial Integer ---I Compiling function G3349 with type Integer -> Boolean ---R ---R (12) ---R 2 3 2 ---R s G 3s H + s G + 6s G (9s G + 54s )H + s G + 18s G + 72s G ---R 0 0 0 0 0 0 0 0 0 ---R [[s = ---,s = ------------------,s = --------------------------------------]] ---R 1 3 2 18 3 162 ---R Type: List List Equation Fraction Polynomial Integer ---E 12 - ---S 13 of 16 -n==4 ---R ---R Compiled code for n has been cleared. ---R Compiled code for leq has been cleared. ---R Compiled code for pans1 has been cleared. ---R Compiled code for phi2 has been cleared. ---R Compiled code for phi has been cleared. ---R Compiled code for phi3 has been cleared. ---R Compiled code for phi1 has been cleared. ---R Compiled code for pans has been cleared. ---R 1 old definition(s) deleted for function or rule n ---R Type: Void ---E 13 - ---S 14 of 16 -leq ---R ---R Compiling body of rule n to compute value of type PositiveInteger ---R Compiling body of rule phi to compute value of type Expression ---R Integer ---R Compiling body of rule phi1 to compute value of type Expression ---R Integer ---R Compiling body of rule phi2 to compute value of type Expression ---R Integer ---R Compiling body of rule phi3 to compute value of type Polynomial ---R Integer ---R Compiling body of rule pans to compute value of type ---R UnivariatePolynomial(x,Polynomial Integer) ---R Compiling body of rule pans1 to compute value of type List ---R Polynomial Integer ---R Compiling body of rule leq to compute value of type List List ---R Equation Fraction Polynomial Integer ---R ---R (14) ---R [ ---R 2 ---R s G 3s H + s G + 6s G ---R 0 0 0 0 ---R [s = ---, s = ------------------, ---R 1 3 2 18 ---R 3 2 ---R (9s G + 54s )H + s G + 18s G + 72s G ---R 0 0 0 0 0 ---R s = --------------------------------------, ---R 3 162 ---R ---R s = ---R 4 ---R 2 2 4 3 2 ---R 27s H + (18s G + 378s G + 1296s )H + s G + 36s G + 396s G ---R 0 0 0 0 0 0 0 ---R + ---R 1296s G ---R 0 ---R / ---R 1944 ---R ] ---R ] ---R Type: List List Equation Fraction Polynomial Integer ---E 14 - ---S 15 of 16 -n==7 ---R ---R Compiled code for n has been cleared. ---R Compiled code for leq has been cleared. ---R Compiled code for pans1 has been cleared. ---R Compiled code for phi2 has been cleared. ---R Compiled code for phi has been cleared. ---R Compiled code for phi3 has been cleared. ---R Compiled code for phi1 has been cleared. ---R Compiled code for pans has been cleared. ---R 1 old definition(s) deleted for function or rule n ---R Type: Void ---E 15 - ---S 16 of 16 -leq ---R ---R Compiling body of rule n to compute value of type PositiveInteger ---R Compiling body of rule phi to compute value of type Expression ---R Integer ---R Compiling body of rule phi1 to compute value of type Expression ---R Integer ---R Compiling body of rule phi2 to compute value of type Expression ---R Integer ---R Compiling body of rule phi3 to compute value of type Polynomial ---R Integer ---R Compiling body of rule pans to compute value of type ---R UnivariatePolynomial(x,Polynomial Integer) ---R Compiling body of rule pans1 to compute value of type List ---R Polynomial Integer ---R Compiling body of rule leq to compute value of type List List ---R Equation Fraction Polynomial Integer ---R ---R (16) ---R [ ---R 2 ---R s G 3s H + s G + 6s G ---R 0 0 0 0 ---R [s = ---, s = ------------------, ---R 1 3 2 18 ---R 3 2 ---R (9s G + 54s )H + s G + 18s G + 72s G ---R 0 0 0 0 0 ---R s = --------------------------------------, ---R 3 162 ---R ---R s = ---R 4 ---R 2 2 4 3 2 ---R 27s H + (18s G + 378s G + 1296s )H + s G + 36s G + 396s G ---R 0 0 0 0 0 0 0 ---R + ---R 1296s G ---R 0 ---R / ---R 1944 ---R , ---R ---R s = ---R 5 ---R 2 3 2 ---R (135s G + 2268s )H + (30s G + 1350s G + 16416s G + 38880s )H ---R 0 0 0 0 0 0 ---R + ---R 5 4 3 2 ---R s G + 60s G + 1188s G + 9504s G + 25920s G ---R 0 0 0 0 0 ---R / ---R 29160 ---R , ---R ---R s = ---R 6 ---R 3 2 2 ---R 405s H + (405s G + 18468s G + 174960s )H ---R 0 0 0 0 ---R + ---R 4 3 2 6 ---R (45s G + 3510s G + 88776s G + 777600s G + 1166400s )H + s G ---R 0 0 0 0 0 0 ---R + ---R 5 4 3 2 ---R 90s G + 2628s G + 27864s G + 90720s G ---R 0 0 0 0 ---R / ---R 524880 ---R , ---R ---R s = ---R 7 ---R 3 ---R (2835s G + 91854s )H ---R 0 0 ---R + ---R 3 2 2 ---R (945s G + 81648s G + 2082996s G + 14171760s )H ---R 0 0 0 0 ---R + ---R 5 4 3 2 ---R (63s G + 7560s G + 317520s G + 5554008s G + 34058880s G)H ---R 0 0 0 0 0 ---R + ---R 7 6 5 4 3 2 ---R s G + 126s G + 4788s G + 25272s G - 1744416s G - 26827200s G ---R 0 0 0 0 0 0 ---R + ---R - 97977600s G ---R 0 ---R / ---R 11022480 ---R ] ---R ] ---R Type: List List Equation Fraction Polynomial Integer ---E 16 -)spool - -Dx: LODO(EXPR INT, f +-> D(f, x)) -Dx := D() -Dop:= Dx^3 + G/x^2*Dx + H/x^3 - 1 -n == 3 -phi == reduce(+,[subscript(s,[i])*exp(x)/x^i for i in 0..n]) -phi1 == Dop(phi) / exp x -phi2 == phi1 *x**(n+3) -phi3 == retract(phi2)@(POLY INT) -pans == phi3 ::UP(x,POLY INT) -pans1 == [coefficient(pans, (n+3-i) :: NNI) for i in 2..n+1] -leq == solve(pans1,[subscript(s,[i]) for i in 1..n]) -leq -n==4 -leq -n==7 -leq -)spool -)lisp (bye) -@ -<>= -==================================================================== -LinearOrdinaryDifferentialOperator examples -==================================================================== - -LinearOrdinaryDifferentialOperator(A, diff) is the domain of linear -ordinary differential operators with coefficients in a ring A with a -given derivation. - -==================================================================== -Differential Operators with Series Coefficients -==================================================================== - -Problem: - Find the first few coefficients of exp(x)/x^i of Dop phi where - - Dop := D^3 + G/x^2 * D + H/x^3 - 1 - phi := sum(s[i]*exp(x)/x^i, i = 0..) - -Solution: - -Define the differential. - - Dx: LODO(EXPR INT, f +-> D(f, x)) - Type: Void - - Dx := D() - D - Type: LinearOrdinaryDifferentialOperator(Expression Integer, - theMap LAMBDA-CLOSURE(NIL,NIL,NIL,G1404 envArg, - SPADCALL(G1404,QUOTE x, - ELT(*1;anonymousFunction;0;frame0;internal;MV,0)))) - -Now define the differential operator Dop. - - Dop:= Dx^3 + G/x^2*Dx + H/x^3 - 1 - 3 - 3 G - x + H - D + -- D + -------- - 2 3 - x x - Type: LinearOrdinaryDifferentialOperator(Expression Integer, - theMap LAMBDA-CLOSURE(NIL,NIL,NIL,G1404 envArg, - SPADCALL(G1404,QUOTE x, - ELT(*1;anonymousFunction;0;frame0;internal;MV,0)))) - - n == 3 - Type: Void - - phi == reduce(+,[subscript(s,[i])*exp(x)/x^i for i in 0..n]) - Type: Void - - phi1 == Dop(phi) / exp x - Type: Void - - phi2 == phi1 *x**(n+3) - Type: Void - - phi3 == retract(phi2)@(POLY INT) - Type: Void - - pans == phi3 ::UP(x,POLY INT) - Type: Void - - pans1 == [coefficient(pans, (n+3-i) :: NNI) for i in 2..n+1] - Type: Void - - leq == solve(pans1,[subscript(s,[i]) for i in 1..n]) - Type: Void - -Evaluate this for several values of n. - - leq - 2 3 2 - s G 3s H + s G + 6s G (9s G + 54s )H + s G + 18s G + 72s G - 0 0 0 0 0 0 0 0 0 - [[s = ---,s = ------------------,s = --------------------------------------]] - 1 3 2 18 3 162 - Type: List List Equation Fraction Polynomial Integer - - n==4 - Type: Void - - leq - [ - 2 - s G 3s H + s G + 6s G - 0 0 0 0 - [s = ---, s = ------------------, - 1 3 2 18 - 3 2 - (9s G + 54s )H + s G + 18s G + 72s G - 0 0 0 0 0 - s = --------------------------------------, - 3 162 - - s = - 4 - 2 2 4 3 2 - 27s H + (18s G + 378s G + 1296s )H + s G + 36s G + 396s G - 0 0 0 0 0 0 0 - + - 1296s G - 0 - / - 1944 - ] - ] - Type: List List Equation Fraction Polynomial Integer - - n==7 - Type: Void - - leq - [ - 2 - s G 3s H + s G + 6s G - 0 0 0 0 - [s = ---, s = ------------------, - 1 3 2 18 - 3 2 - (9s G + 54s )H + s G + 18s G + 72s G - 0 0 0 0 0 - s = --------------------------------------, - 3 162 - - s = - 4 - 2 2 4 3 2 - 27s H + (18s G + 378s G + 1296s )H + s G + 36s G + 396s G - 0 0 0 0 0 0 0 - + - 1296s G - 0 - / - 1944 - , - - s = - 5 - 2 3 2 - (135s G + 2268s )H + (30s G + 1350s G + 16416s G + 38880s )H - 0 0 0 0 0 0 - + - 5 4 3 2 - s G + 60s G + 1188s G + 9504s G + 25920s G - 0 0 0 0 0 - / - 29160 - , - - s = - 6 - 3 2 2 - 405s H + (405s G + 18468s G + 174960s )H - 0 0 0 0 - + - 4 3 2 6 - (45s G + 3510s G + 88776s G + 777600s G + 1166400s )H + s G - 0 0 0 0 0 0 - + - 5 4 3 2 - 90s G + 2628s G + 27864s G + 90720s G - 0 0 0 0 - / - 524880 - , - - s = - 7 - 3 - (2835s G + 91854s )H - 0 0 - + - 3 2 2 - (945s G + 81648s G + 2082996s G + 14171760s )H - 0 0 0 0 - + - 5 4 3 2 - (63s G + 7560s G + 317520s G + 5554008s G + 34058880s G)H - 0 0 0 0 0 - + - 7 6 5 4 3 2 - s G + 126s G + 4788s G + 25272s G - 1744416s G - 26827200s G - 0 0 0 0 0 0 - + - - 97977600s G - 0 - / - 11022480 - ] - ] - Type: List List Equation Fraction Polynomial Integer - -See Also: -o )show LinearOrdinaryDifferentialOperator -o $AXIOM/doc/src/algebra/lodo.spad.dvi - -@ -<>= -)abbrev domain LODO LinearOrdinaryDifferentialOperator -++ Author: Manuel Bronstein -++ Date Created: 9 December 1993 -++ Date Last Updated: 15 April 1994 -++ Keywords: differential operator -++ Description: -++ \spad{LinearOrdinaryDifferentialOperator} defines a ring of -++ differential operators with coefficients in a ring A with a given -++ derivation. -++ Multiplication of operators corresponds to functional composition: -++ \spad{(L1 * L2).(f) = L1 L2 f} -LinearOrdinaryDifferentialOperator(A:Ring, diff: A -> A): - LinearOrdinaryDifferentialOperatorCategory A - == SparseUnivariateSkewPolynomial(A, 1, diff) add - Rep := SparseUnivariateSkewPolynomial(A, 1, diff) - - outputD := "D"@String :: Symbol :: OutputForm - - coerce(l:%):OutputForm == outputForm(l, outputD) - elt(p:%, a:A):A == apply(p, 0, a) - - if A has Field then - import LinearOrdinaryDifferentialOperatorsOps(A, %) - - symmetricProduct(a, b) == symmetricProduct(a, b, diff) - symmetricPower(a, n) == symmetricPower(a, n, diff) - directSum(a, b) == directSum(a, b, diff) - -@ -\section{domain LODO1 LinearOrdinaryDifferentialOperator1} -<>= --- lodo.spad.pamphlet LinearOrdinaryDifferentialOperator1.input -)spool LinearOrdinaryDifferentialOperator1.output -)set message test on -)set message auto off -)clear all ---S 1 of 20 -RFZ := Fraction UnivariatePolynomial('x, Integer) ---R ---R ---R (1) Fraction UnivariatePolynomial(x,Integer) ---R Type: Domain ---E 1 - ---S 2 of 20 -x : RFZ := 'x ---R ---R ---R (2) x ---R Type: Fraction UnivariatePolynomial(x,Integer) ---E 2 - ---S 3 of 20 -Dx : LODO1 RFZ := D() ---R ---R ---R (3) D ---RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) ---E 3 - ---S 4 of 20 -b : LODO1 RFZ := 3*x**2*Dx**2 + 2*Dx + 1/x ---R ---R ---R 2 2 1 ---R (4) 3x D + 2D + - ---R x ---RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) ---E 4 - ---S 5 of 20 -a : LODO1 RFZ := b*(5*x*Dx + 7) ---R ---R ---R 3 3 2 2 7 ---R (5) 15x D + (51x + 10x)D + 29D + - ---R x ---RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) ---E 5 - ---S 6 of 20 -p := x**2 + 1/x**2 ---R ---R ---R 4 ---R x + 1 ---R (6) ------ ---R 2 ---R x ---R Type: Fraction UnivariatePolynomial(x,Integer) ---E 6 - ---S 7 of 20 -(a*b - b*a) p ---R ---R ---R 4 ---R - 75x + 540x - 75 ---R (7) ------------------ ---R 4 ---R x ---R Type: Fraction UnivariatePolynomial(x,Integer) ---E 7 - ---S 8 of 20 -ld := leftDivide(a,b) ---R ---R ---R (8) [quotient= 5x D + 7,remainder= 0] ---RType: Record(quotient: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer),remainder: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer)) ---E 8 - ---S 9 of 20 -a = b * ld.quotient + ld.remainder ---R ---R ---R 3 3 2 2 7 3 3 2 2 7 ---R (9) 15x D + (51x + 10x)D + 29D + -= 15x D + (51x + 10x)D + 29D + - ---R x x ---RType: Equation LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) ---E 9 - ---S 10 of 20 -rd := rightDivide(a,b) ---R ---R ---R 5 ---R (10) [quotient= 5x D + 7,remainder= 10D + -] ---R x ---RType: Record(quotient: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer),remainder: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer)) ---E 10 - ---S 11 of 20 -a = rd.quotient * b + rd.remainder ---R ---R ---R 3 3 2 2 7 3 3 2 2 7 ---R (11) 15x D + (51x + 10x)D + 29D + -= 15x D + (51x + 10x)D + 29D + - ---R x x ---RType: Equation LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) ---E 11 - ---S 12 of 20 -rightQuotient(a,b) ---R ---R ---R (12) 5x D + 7 ---RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) ---E 12 - ---S 13 of 20 -rightRemainder(a,b) ---R ---R ---R 5 ---R (13) 10D + - ---R x ---RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) ---E 13 - ---S 14 of 20 -leftExactQuotient(a,b) ---R ---R ---R (14) 5x D + 7 ---RType: Union(LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer),...) ---E 14 - ---S 15 of 20 -e := leftGcd(a,b) ---R ---R ---R 2 2 1 ---R (15) 3x D + 2D + - ---R x ---RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) ---E 15 - ---S 16 of 20 -leftRemainder(a, e) ---R ---R ---R (16) 0 ---RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) ---E 16 - ---S 17 of 20 -rightRemainder(a, e) ---R ---R ---R 5 ---R (17) 10D + - ---R x ---RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) ---E 17 - ---S 18 of 20 -f := rightLcm(a,b) ---R ---R ---R 3 3 2 2 7 ---R (18) 15x D + (51x + 10x)D + 29D + - ---R x ---RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) ---E 18 - ---S 19 of 20 -rightRemainder(f, b) ---R ---R ---R 5 ---R (19) 10D + - ---R x ---RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) ---E 19 - ---S 20 of 20 -leftRemainder(f, b) ---R ---R ---R (20) 0 ---RType: LinearOrdinaryDifferentialOperator1 Fraction UnivariatePolynomial(x,Integer) ---E 20 -)spool -)lisp (bye) -@ - -<>= -==================================================================== -LinearOrdinaryDifferentialOperator1 example -==================================================================== - -LinearOrdinaryDifferentialOperator1(A) is the domain of linear -ordinary differential operators with coefficients in the differential -ring A. - -==================================================================== -Differential Operators with Rational Function Coefficients -==================================================================== - -This example shows differential operators with rational function -coefficients. In this case operator multiplication is non-commutative and, -since the coefficients form a field, an operator division algorithm exists. - -We begin by defining RFZ to be the rational functions in x with -integer coefficients and Dx to be the differential operator for d/dx. - - RFZ := Fraction UnivariatePolynomial('x, Integer) - Fraction UnivariatePolynomial(x,Integer) - Type: Domain - - x : RFZ := 'x - x - Type: Fraction UnivariatePolynomial(x,Integer) - - Dx : LODO1 RFZ := D() - D - Type: LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer) - -Operators are created using the usual arithmetic operations. - - b : LODO1 RFZ := 3*x**2*Dx**2 + 2*Dx + 1/x - 2 2 1 - 3x D + 2D + - - x - Type: LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer) - - a : LODO1 RFZ := b*(5*x*Dx + 7) - 3 3 2 2 7 - 15x D + (51x + 10x)D + 29D + - - x - Type: LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer) - -Operator multiplication corresponds to functional composition. - - p := x**2 + 1/x**2 - 4 - x + 1 - ------ - 2 - x - Type: Fraction UnivariatePolynomial(x,Integer) - -Since operator coefficients depend on x, the multiplication is not -commutative. - - (a*b - b*a) p - 4 - - 75x + 540x - 75 - ------------------ - 4 - x - Type: Fraction UnivariatePolynomial(x,Integer) - -When the coefficients of operator polynomials come from a field, as in -this case, it is possible to define operator division. Division on -the left and division on the right yield different results when the -multiplication is non-commutative. - -The results of leftDivide and rightDivide are quotient-remainder pairs -satisfying: - - leftDivide(a,b) = [q, r] such that a = b*q + r - rightDivide(a,b) = [q, r] such that a = q*b + r - -In both cases, the degree of the remainder, r, is less than the degree -of b. - - ld := leftDivide(a,b) - [quotient= 5x D + 7,remainder= 0] - Type: Record(quotient: LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer), - remainder: LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer)) - - a = b * ld.quotient + ld.remainder - 3 3 2 2 7 3 3 2 2 7 - 15x D + (51x + 10x)D + 29D + -= 15x D + (51x + 10x)D + 29D + - - Type: Equation LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer) - -The operations of left and right division are so-called because the -quotient is obtained by dividing a on that side by b. - - rd := rightDivide(a,b) - [quotient= 5x D + 7,remainder= 10D + -] - Type: Record(quotient: LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer), - remainder: LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer)) - - a = rd.quotient * b + rd.remainder - 3 3 2 2 7 3 3 2 2 7 - 15x D + (51x + 10x)D + 29D + -= 15x D + (51x + 10x)D + 29D + - - Type: Equation LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer) - -Operations rightQuotient and rightRemainder are available if only one -of the quotient or remainder are of interest to you. This is the -quotient from right division. - - rightQuotient(a,b) - 5x D + 7 - Type: LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer) - -This is the remainder from right division. The corresponding "left" -functions, leftQuotient and leftRemainder are also available. - - rightRemainder(a,b) - 5 - 10D + - - x - Type: LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer) - -For exact division, operations leftExactQuotient and rightExactQuotient -are supplied. These return the quotient but only if the remainder is zero. -The call rightExactQuotient(a,b) would yield an error. - - leftExactQuotient(a,b) - 5x D + 7 - Type: Union(LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer),...) - -The division operations allow the computation of left and right greatest -common divisors, leftGcd and rightGcd via remainder sequences, and -consequently the computation of left and right least common multiples, -rightLcm and leftLcm. - - e := leftGcd(a,b) - 2 2 1 - 3x D + 2D + - - x - Type: LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer) - -Note that a greatest common divisor doesn't necessarily divide a and b -on both sides. Here the left greatest common divisor does not divide -a on the right. - - leftRemainder(a, e) - 0 - Type: LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer) - - rightRemainder(a, e) - 5 - 10D + - - x - Type: LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer) - -Similarly, a least common multiple is not necessarily divisible from -both sides. - - f := rightLcm(a,b) - 3 3 2 2 7 - 15x D + (51x + 10x)D + 29D + - - Type: LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer) - - rightRemainder(f, b) - 5 - 10D + - - x - Type: LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer) - - leftRemainder(f, b) - 0 - Type: LinearOrdinaryDifferentialOperator1 - Fraction UnivariatePolynomial(x,Integer) - -See Also: -o )show LinearOrdinaryDifferentialOperator1 -o $AXIOM/doc/src/algebra/lodo.spad.dvi - -@ -<>= -)abbrev domain LODO1 LinearOrdinaryDifferentialOperator1 -++ Author: Manuel Bronstein -++ Date Created: 9 December 1993 -++ Date Last Updated: 31 January 1994 -++ Keywords: differential operator -++ Description: -++ \spad{LinearOrdinaryDifferentialOperator1} defines a ring of -++ differential operators with coefficients in a differential ring A. -++ Multiplication of operators corresponds to functional composition: -++ \spad{(L1 * L2).(f) = L1 L2 f} -LinearOrdinaryDifferentialOperator1(A:DifferentialRing) == - LinearOrdinaryDifferentialOperator(A, differentiate$A) - -@ -\section{domain LODO2 LinearOrdinaryDifferentialOperator2} -<>= --- lodo.spad.pamphlet LinearOrdinaryDifferentialOperator2.input -)spool LinearOrdinaryDifferentialOperator2.output -)set message test on -)set message auto off -)clear all ---S 1 of 26 -Q := Fraction Integer ---R ---R ---R (1) Fraction Integer ---R Type: Domain ---E 1 - ---S 2 of 26 -PQ := UnivariatePolynomial('x, Q) ---R ---R ---R (2) UnivariatePolynomial(x,Fraction Integer) ---R Type: Domain ---E 2 - ---S 3 of 26 -x: PQ := 'x ---R ---R ---R (3) x ---R Type: UnivariatePolynomial(x,Fraction Integer) ---E 3 - ---S 4 of 26 -Dx: LODO2(Q, PQ) := D() ---R ---R ---R (4) D ---RType: LinearOrdinaryDifferentialOperator2(Fraction Integer,UnivariatePolynomial(x,Fraction Integer)) ---E 4 - ---S 5 of 26 -a := Dx + 1 ---R ---R ---R (5) D + 1 ---RType: LinearOrdinaryDifferentialOperator2(Fraction Integer,UnivariatePolynomial(x,Fraction Integer)) ---E 5 - ---S 6 of 26 -b := a + 1/2*Dx**2 - 1/2 ---R ---R ---R 1 2 1 ---R (6) - D + D + - ---R 2 2 ---RType: LinearOrdinaryDifferentialOperator2(Fraction Integer,UnivariatePolynomial(x,Fraction Integer)) ---E 6 - ---S 7 of 26 -p := 4*x**2 + 2/3 ---R ---R ---R 2 2 ---R (7) 4x + - ---R 3 ---R Type: UnivariatePolynomial(x,Fraction Integer) ---E 7 - ---S 8 of 26 -a p ---R ---R ---R 2 2 ---R (8) 4x + 8x + - ---R 3 ---R Type: UnivariatePolynomial(x,Fraction Integer) ---E 8 - ---S 9 of 26 -(a * b) p = a b p ---R ---R ---R 2 37 2 37 ---R (9) 2x + 12x + --= 2x + 12x + -- ---R 3 3 ---R Type: Equation UnivariatePolynomial(x,Fraction Integer) ---E 9 - ---S 10 of 26 -c := (1/9)*b*(a + b)^2 ---R ---R ---R 1 6 5 5 13 4 19 3 79 2 7 1 ---R (10) -- D + -- D + -- D + -- D + -- D + -- D + - ---R 72 36 24 18 72 12 8 ---RType: LinearOrdinaryDifferentialOperator2(Fraction Integer,UnivariatePolynomial(x,Fraction Integer)) ---E 10 - ---S 11 of 26 -(a**2 - 3/4*b + c) (p + 1) ---R ---R ---R 2 44 541 ---R (11) 3x + -- x + --- ---R 3 36 ---R Type: UnivariatePolynomial(x,Fraction Integer) ---E 11 -)clear all ---S 12 of 26 -PZ := UnivariatePolynomial(x,Integer) ---R ---R ---R (1) UnivariatePolynomial(x,Integer) ---R Type: Domain ---E 12 - ---S 13 of 26 -x:PZ := 'x ---R ---R ---R (2) x ---R Type: UnivariatePolynomial(x,Integer) ---E 13 - ---S 14 of 26 -Mat := SquareMatrix(3,PZ) ---R ---R ---R (3) SquareMatrix(3,UnivariatePolynomial(x,Integer)) ---R Type: Domain ---E 14 - ---S 15 of 26 -Vect := DPMM(3, PZ, Mat, PZ) ---R ---R ---R (4) ---R DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,Un ---R ivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer)) ---R Type: Domain ---E 15 - ---S 16 of 26 -Modo := LODO2(Mat, Vect) ---R ---R ---R (5) ---R LinearOrdinaryDifferentialOperator2(SquareMatrix(3,UnivariatePolynomial(x,Int ---R eger)),DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatr ---R ix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer))) ---R Type: Domain ---E 16 - ---S 17 of 26 -m:Mat := matrix [ [x^2,1,0],[1,x^4,0],[0,0,4*x^2] ] ---R ---R ---R + 2 + ---R |x 1 0 | ---R | | ---R (6) | 4 | ---R |1 x 0 | ---R | | ---R | 2| ---R +0 0 4x + ---R Type: SquareMatrix(3,UnivariatePolynomial(x,Integer)) ---E 17 - ---S 18 of 26 -p:Vect := directProduct [3*x^2+1,2*x,7*x^3+2*x] ---R ---R ---R 2 3 ---R (7) [3x + 1,2x,7x + 2x] ---RType: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer)) ---E 18 - ---S 19 of 26 -q: Vect := m * p ---R ---R ---R 4 2 5 2 5 3 ---R (8) [3x + x + 2x,2x + 3x + 1,28x + 8x ] ---RType: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer)) ---E 19 - ---S 20 of 26 -Dx : Modo := D() ---R ---R ---R (9) D ---RType: LinearOrdinaryDifferentialOperator2(SquareMatrix(3,UnivariatePolynomial(x,Integer)),DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer))) ---E 20 - ---S 21 of 26 -a : Modo := Dx + m ---R ---R ---R + 2 + ---R |x 1 0 | ---R | | ---R (10) D + | 4 | ---R |1 x 0 | ---R | | ---R | 2| ---R +0 0 4x + ---RType: LinearOrdinaryDifferentialOperator2(SquareMatrix(3,UnivariatePolynomial(x,Integer)),DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer))) ---E 21 - ---S 22 of 26 -b : Modo := m*Dx + 1 ---R ---R ---R + 2 + ---R |x 1 0 | +1 0 0+ ---R | | | | ---R (11) | 4 |D + |0 1 0| ---R |1 x 0 | | | ---R | | +0 0 1+ ---R | 2| ---R +0 0 4x + ---RType: LinearOrdinaryDifferentialOperator2(SquareMatrix(3,UnivariatePolynomial(x,Integer)),DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer))) ---E 22 - ---S 23 of 26 -c := a*b ---R ---R ---R (12) ---R + 2 + + 4 4 2 + + 2 + ---R |x 1 0 | |x + 2x + 2 x + x 0 | |x 1 0 | ---R | | 2 | | | | ---R | 4 |D + | 4 2 8 3 |D + | 4 | ---R |1 x 0 | | x + x x + 4x + 2 0 | |1 x 0 | ---R | | | | | | ---R | 2| | 4 | | 2| ---R +0 0 4x + + 0 0 16x + 8x + 1+ +0 0 4x + ---RType: LinearOrdinaryDifferentialOperator2(SquareMatrix(3,UnivariatePolynomial(x,Integer)),DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer))) ---E 23 - ---S 24 of 26 -a p ---R ---R ---R 4 2 5 2 5 3 2 ---R (13) [3x + x + 8x,2x + 3x + 3,28x + 8x + 21x + 2] ---RType: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer)) ---E 24 - ---S 25 of 26 -b p ---R ---R ---R 3 2 4 4 3 2 ---R (14) [6x + 3x + 3,2x + 8x,84x + 7x + 8x + 2x] ---RType: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer)) ---E 25 - ---S 26 of 26 -(a + b + c) (p + q) ---R ---R ---R (15) ---R 8 7 6 5 4 3 2 ---R [10x + 12x + 16x + 30x + 85x + 94x + 40x + 40x + 17, ---R 12 9 8 7 6 5 4 3 2 ---R 10x + 10x + 12x + 92x + 6x + 32x + 72x + 28x + 49x + 32x + 19, ---R 8 7 6 5 4 3 2 ---R 2240x + 224x + 1280x + 3508x + 492x + 751x + 98x + 18x + 4] ---RType: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer)) ---E 26 -)spool -)lisp (bye) -@ -<>= -==================================================================== -LinearOrdinaryDifferentialOperator2 -==================================================================== - -LinearOrdinaryDifferentialOperator2(A, M) is the domain of linear -ordinary differential operators with coefficients in the differential -ring A and operating on M, an A-module. This includes the cases of -operators which are polynomials in D acting upon scalar or vector -expressions of a single variable. The coefficients of the operator -polynomials can be integers, rational functions, matrices or elements -of other domains. - -==================================================================== -Differential Operators with Constant Coefficients -==================================================================== - -This example shows differential operators with rational number -coefficients operating on univariate polynomials. - -We begin by making type assignments so we can conveniently refer -to univariate polynomials in x over the rationals. - - Q := Fraction Integer - Fraction Integer - Type: Domain - - PQ := UnivariatePolynomial('x, Q) - UnivariatePolynomial(x,Fraction Integer) - Type: Domain - - x: PQ := 'x - x - Type: UnivariatePolynomial(x,Fraction Integer) - -Now we assign Dx to be the differential operator D corresponding to d/dx. - - Dx: LODO2(Q, PQ) := D() - D - Type: LinearOrdinaryDifferentialOperator2(Fraction Integer, - UnivariatePolynomial(x,Fraction Integer)) - -New operators are created as polynomials in D(). - - a := Dx + 1 - D + 1 - Type: LinearOrdinaryDifferentialOperator2(Fraction Integer, - UnivariatePolynomial(x,Fraction Integer)) - - b := a + 1/2*Dx**2 - 1/2 - 1 2 1 - - D + D + - - 2 2 - Type: LinearOrdinaryDifferentialOperator2(Fraction Integer, - UnivariatePolynomial(x,Fraction Integer)) - -To apply the operator a to the value p the usual function call syntax -is used. - - p := 4*x**2 + 2/3 - 2 2 - 4x + - - 3 - Type: UnivariatePolynomial(x,Fraction Integer) - - a p - 2 2 - 4x + 8x + - - 3 - Type: UnivariatePolynomial(x,Fraction Integer) - -Operator multiplication is defined by the identity (a*b)p = a(b(p)) - - (a * b) p = a b p - 2 37 2 37 - 2x + 12x + --= 2x + 12x + -- - 3 3 - Type: Equation UnivariatePolynomial(x,Fraction Integer) - -Exponentiation follows from multiplication. - - c := (1/9)*b*(a + b)^2 - 1 6 5 5 13 4 19 3 79 2 7 1 - -- D + -- D + -- D + -- D + -- D + -- D + - - 72 36 24 18 72 12 8 - Type: LinearOrdinaryDifferentialOperator2(Fraction Integer, - UnivariatePolynomial(x,Fraction Integer)) - -Finally, note that operator expressions may be applied directly. - - (a**2 - 3/4*b + c) (p + 1) - 2 44 541 - 3x + -- x + --- - 3 36 - Type: UnivariatePolynomial(x,Fraction Integer) - -==================================================================== -Differential Operators with Matrix Coefficients Operating on Vectors} -==================================================================== - -This is another example of linear ordinary differential operators with -non-commutative multiplication. Unlike the rational function case, -the differential ring of square matrices (of a given dimension) with -univariate polynomial entries does not form a field. Thus the number -of operations available is more limited. - -In this section, the operators have three by three matrix coefficients -with polynomial entries. - - PZ := UnivariatePolynomial(x,Integer) - UnivariatePolynomial(x,Integer) - Type: Domain - - x:PZ := 'x - x - Type: UnivariatePolynomial(x,Integer) - - Mat := SquareMatrix(3,PZ) - SquareMatrix(3,UnivariatePolynomial(x,Integer)) - Type: Domain - -The operators act on the vectors considered as a Mat-module. - - Vect := DPMM(3, PZ, Mat, PZ) - DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatrix(3,Un - ivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer)) - Type: Domain - - Modo := LODO2(Mat, Vect) - LinearOrdinaryDifferentialOperator2(SquareMatrix(3,UnivariatePolynomial(x,Int - eger)),DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer),SquareMatr - ix(3,UnivariatePolynomial(x,Integer)),UnivariatePolynomial(x,Integer))) - Type: Domain - -The matrix m is used as a coefficient and the vectors p and q are -operated upon. - - m:Mat := matrix [ [x^2,1,0],[1,x^4,0],[0,0,4*x^2] ] - + 2 + - |x 1 0 | - | | - | 4 | - |1 x 0 | - | | - | 2| - +0 0 4x + - Type: SquareMatrix(3,UnivariatePolynomial(x,Integer)) - - p:Vect := directProduct [3*x^2+1,2*x,7*x^3+2*x] - 2 3 - [3x + 1,2x,7x + 2x] - Type: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), - SquareMatrix(3,UnivariatePolynomial(x,Integer)), - UnivariatePolynomial(x,Integer)) - - q: Vect := m * p - 4 2 5 2 5 3 - [3x + x + 2x,2x + 3x + 1,28x + 8x ] - Type: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), - SquareMatrix(3,UnivariatePolynomial(x,Integer)), - UnivariatePolynomial(x,Integer)) - -Now form a few operators. - - Dx : Modo := D() - D - Type: LinearOrdinaryDifferentialOperator2( - SquareMatrix(3,UnivariatePolynomial(x,Integer)), - DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), - SquareMatrix(3,UnivariatePolynomial(x,Integer)), - UnivariatePolynomial(x,Integer))) - - a : Modo := Dx + m - + 2 + - |x 1 0 | - | | - D + | 4 | - |1 x 0 | - | | - | 2| - +0 0 4x + - Type: LinearOrdinaryDifferentialOperator2( - SquareMatrix(3,UnivariatePolynomial(x,Integer)), - DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), - SquareMatrix(3,UnivariatePolynomial(x,Integer)), - UnivariatePolynomial(x,Integer))) - - b : Modo := m*Dx + 1 - + 2 + - |x 1 0 | +1 0 0+ - | | | | - | 4 |D + |0 1 0| - |1 x 0 | | | - | | +0 0 1+ - | 2| - +0 0 4x + - Type: LinearOrdinaryDifferentialOperator2( - SquareMatrix(3,UnivariatePolynomial(x,Integer)), - DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), - SquareMatrix(3,UnivariatePolynomial(x,Integer)), - UnivariatePolynomial(x,Integer))) - - c := a*b - + 2 + + 4 4 2 + + 2 + - |x 1 0 | |x + 2x + 2 x + x 0 | |x 1 0 | - | | 2 | | | | - | 4 |D + | 4 2 8 3 |D + | 4 | - |1 x 0 | | x + x x + 4x + 2 0 | |1 x 0 | - | | | | | | - | 2| | 4 | | 2| - +0 0 4x + + 0 0 16x + 8x + 1+ +0 0 4x + - Type: LinearOrdinaryDifferentialOperator2( - SquareMatrix(3,UnivariatePolynomial(x,Integer)), - DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), - SquareMatrix(3,UnivariatePolynomial(x,Integer)), - UnivariatePolynomial(x,Integer))) - -These operators can be applied to vector values. - - a p - 4 2 5 2 5 3 2 - [3x + x + 8x,2x + 3x + 3,28x + 8x + 21x + 2] - Type: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), - SquareMatrix(3,UnivariatePolynomial(x,Integer)), - UnivariatePolynomial(x,Integer)) - - b p - 3 2 4 4 3 2 - [6x + 3x + 3,2x + 8x,84x + 7x + 8x + 2x] - Type: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), - SquareMatrix(3,UnivariatePolynomial(x,Integer)), - UnivariatePolynomial(x,Integer)) - - (a + b + c) (p + q) - 8 7 6 5 4 3 2 - [10x + 12x + 16x + 30x + 85x + 94x + 40x + 40x + 17, - 12 9 8 7 6 5 4 3 2 - 10x + 10x + 12x + 92x + 6x + 32x + 72x + 28x + 49x + 32x + 19, - 8 7 6 5 4 3 2 - 2240x + 224x + 1280x + 3508x + 492x + 751x + 98x + 18x + 4] - Type: DirectProductMatrixModule(3,UnivariatePolynomial(x,Integer), - SquareMatrix(3,UnivariatePolynomial(x,Integer)), - UnivariatePolynomial(x,Integer)) - -See Also: -o )show LinearOrdinaryDifferentialOperator2 -o $AXIOM/doc/src/algebra/lodo.spad.dvi - -@ -<>= -)abbrev domain LODO2 LinearOrdinaryDifferentialOperator2 -++ Author: Stephen M. Watt, Manuel Bronstein -++ Date Created: 1986 -++ Date Last Updated: 1 February 1994 -++ Keywords: differential operator -++ Description: -++ \spad{LinearOrdinaryDifferentialOperator2} defines a ring of -++ differential operators with coefficients in a differential ring A -++ and acting on an A-module M. -++ Multiplication of operators corresponds to functional composition: -++ \spad{(L1 * L2).(f) = L1 L2 f} -LinearOrdinaryDifferentialOperator2(A, M): Exports == Implementation where - A: DifferentialRing - M: LeftModule A with - differentiate: $ -> $ - ++ differentiate(x) returns the derivative of x - - Exports ==> Join(LinearOrdinaryDifferentialOperatorCategory A, Eltable(M, M)) - - Implementation ==> LinearOrdinaryDifferentialOperator(A, differentiate$A) add - elt(p:%, m:M):M == - apply(p, differentiate, m)$ApplyUnivariateSkewPolynomial(A, M, %) - -@ \section{License} <>= --Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. @@ -1642,9 +150,6 @@ LinearOrdinaryDifferentialOperator2(A, M): Exports == Implementation where <> <> -<> -<> -<> @ \eject \begin{thebibliography}{99} diff --git a/src/algebra/lodof.spad.pamphlet b/src/algebra/lodof.spad.pamphlet index fd72c15..daaedcb 100644 --- a/src/algebra/lodof.spad.pamphlet +++ b/src/algebra/lodof.spad.pamphlet @@ -9,153 +9,6 @@ \eject \tableofcontents \eject -\section{domain SETMN SetOfMIntegersInOneToN} -<>= -)abbrev domain SETMN SetOfMIntegersInOneToN -++ Author: Manuel Bronstein -++ Date Created: 10 January 1994 -++ Date Last Updated: 10 January 1994 -++ Description: -++ \spadtype{SetOfMIntegersInOneToN} implements the subsets of M integers -++ in the interval \spad{[1..n]} -SetOfMIntegersInOneToN(m, n): Exports == Implementation where - PI ==> PositiveInteger - N ==> NonNegativeInteger - U ==> Union(%, "failed") - n,m: PI - - Exports ==> Finite with - incrementKthElement: (%, PI) -> U - ++ incrementKthElement(S,k) increments the k^{th} element of S, - ++ and returns "failed" if the result is not a set of M integers - ++ in \spad{1..n} any more. - replaceKthElement: (%, PI, PI) -> U - ++ replaceKthElement(S,k,p) replaces the k^{th} element of S by p, - ++ and returns "failed" if the result is not a set of M integers - ++ in \spad{1..n} any more. - elements: % -> List PI - ++ elements(S) returns the list of the elements of S in increasing order. - setOfMinN: List PI -> % - ++ setOfMinN([a_1,...,a_m]) returns the set {a_1,...,a_m}. - ++ Error if {a_1,...,a_m} is not a set of M integers in \spad{1..n}. - enumerate: () -> Vector % - ++ enumerate() returns a vector of all the sets of M integers in - ++ \spad{1..n}. - member?: (PI, %) -> Boolean - ++ member?(p, s) returns true is p is in s, false otherwise. - delta: (%, PI, PI) -> N - ++ delta(S,k,p) returns the number of elements of S which are strictly - ++ between p and the k^{th} element of S. - - Implementation ==> add - Rep := Record(bits:Bits, pos:N) - - reallyEnumerate: () -> Vector % - enum: (N, N, PI) -> List Bits - - all:Reference Vector % := ref empty() - sz:Reference N := ref 0 - - s1 = s2 == s1.bits =$Bits s2.bits - coerce(s:%):OutputForm == brace [i::OutputForm for i in elements s] - random() == index((1 + (random()$Integer rem size()))::PI) - reallyEnumerate() == [[b, i] for b in enum(m, n, n) for i in 1..] - member?(p, s) == s.bits.p - - enumerate() == - if empty? all() then all() := reallyEnumerate() - all() - --- enumerates the sets of p integers in 1..q, returns them as sets in 1..n --- must have p <= q - enum(p, q, n) == - zero? p or zero? q => empty() - p = q => - b := new(n, false)$Bits - for i in 1..p repeat b.i := true - [b] - q1 := (q - 1)::N - l := enum((p - 1)::N, q1, n) - if empty? l then l := [new(n, false)$Bits] - for s in l repeat s.q := true - concat_!(enum(p, q1, n), l) - - size() == - if zero? sz() then - sz() := binomial(n, m)$IntegerCombinatoricFunctions(Integer) :: N - sz() - - lookup s == - if empty? all() then all() := reallyEnumerate() - if zero?(s.pos) then s.pos := position(s, all()) :: N - s.pos :: PI - - index p == - p > size() => error "index: argument too large" - if empty? all() then all() := reallyEnumerate() - all().p - - setOfMinN l == - s := new(n, false)$Bits - count:N := 0 - for i in l repeat - count := count + 1 - count > m or zero? i or i > n or s.i => - error "setOfMinN: improper set of integers" - s.i := true - count < m => error "setOfMinN: improper set of integers" - [s, 0] - - elements s == - b := s.bits - l:List PI := empty() - found:N := 0 - i:PI := 1 - while found < m repeat - if b.i then - l := concat(i, l) - found := found + 1 - i := i + 1 - reverse_! l - - incrementKthElement(s, k) == - b := s.bits - found:N := 0 - i:N := 1 - while found < k repeat - if b.i then found := found + 1 - i := i + 1 - i > n or b.i => "failed" - newb := copy b - newb.i := true - newb.((i-1)::N) := false - [newb, 0] - - delta(s, k, p) == - b := s.bits - count:N := found:N := 0 - i:PI := 1 - while found < k repeat - if b.i then - found := found + 1 - if i > p and found < k then count := count + 1 - i := i + 1 - count - - replaceKthElement(s, k, p) == - b := s.bits - found:N := 0 - i:PI := 1 - while found < k repeat - if b.i then found := found + 1 - if found < k then i := i + 1 - b.p and i ^= p => "failed" - newb := copy b - newb.p := true - newb.i := false - [newb, (i = p => s.pos; 0)] - -@ \section{package PREASSOC PrecomputedAssociatedEquations} <>= )abbrev package PREASSOC PrecomputedAssociatedEquations @@ -521,7 +374,6 @@ LinearOrdinaryDifferentialOperatorFactorizer(F, UP): Exports == Impl where -- oderf.spad odealg.spad nlode.spad nlinsol.spad riccati.spad -- kovacic.spad lodof.spad odeef.spad -<> <> <> <> diff --git a/src/algebra/lodop.spad.pamphlet b/src/algebra/lodop.spad.pamphlet index 37d3567..61ce08e 100644 --- a/src/algebra/lodop.spad.pamphlet +++ b/src/algebra/lodop.spad.pamphlet @@ -9,44 +9,6 @@ \eject \tableofcontents \eject -\section{domain OMLO OppositeMonogenicLinearOperator} -<>= -)abbrev domain OMLO OppositeMonogenicLinearOperator -++ Author: Stephen M. Watt -++ Date Created: 1986 -++ Date Last Updated: May 30, 1991 -++ Basic Operations: -++ Related Domains: MonogenicLinearOperator -++ Also See: -++ AMS Classifications: -++ Keywords: opposite ring -++ Examples: -++ References: -++ Description: -++ This constructor creates the \spadtype{MonogenicLinearOperator} domain -++ which is ``opposite'' in the ring sense to P. -++ That is, as sets \spad{P = $} but \spad{a * b} in \spad{$} is equal to -++ \spad{b * a} in P. - -OppositeMonogenicLinearOperator(P, R): OPRcat == OPRdef where - P: MonogenicLinearOperator(R) - R: Ring - - OPRcat == MonogenicLinearOperator(R) with - if P has DifferentialRing then DifferentialRing - op: P -> $ ++ op(p) creates a value in $ equal to p in P. - po: $ -> P ++ po(q) creates a value in P equal to q in $. - - OPRdef == P add - Rep := P - x, y: $ - a: P - op a == a: $ - po x == x: P - x*y == (y:P) *$P (x:P) - coerce(x): OutputForm == prefix(op::OutputForm, [coerce(x:P)$P]) - -@ \section{package NCODIV NonCommutativeOperatorDivision} <>= )abbrev package NCODIV NonCommutativeOperatorDivision @@ -143,109 +105,6 @@ NonCommutativeOperatorDivision(P, F): PDcat == PDdef where b0*u @ -\section{domain ODR OrdinaryDifferentialRing} -<>= -)abbrev domain ODR OrdinaryDifferentialRing -++ Author: Stephen M. Watt -++ Date Created: 1986 -++ Date Last Updated: June 3, 1991 -++ Basic Operations: -++ Related Domains: -++ Also See: -++ AMS Classifications: -++ Keywords: differential ring -++ Examples: -++ References: -++ Description: -++ This constructor produces an ordinary differential ring from -++ a partial differential ring by specifying a variable. - -OrdinaryDifferentialRing(Kernels,R,var): DRcategory == DRcapsule where - Kernels:SetCategory - R: PartialDifferentialRing(Kernels) - var : Kernels - DRcategory == Join(BiModule($,$), DifferentialRing) with - if R has Field then Field - coerce: R -> $ - ++ coerce(r) views r as a value in the ordinary differential ring. - coerce: $ -> R - ++ coerce(p) views p as a valie in the partial differential ring. - DRcapsule == R add - n: Integer - Rep := R - coerce(u:R):$ == u::Rep::$ - coerce(p:$):R == p::Rep::R - differentiate p == differentiate(p, var) - - if R has Field then - p / q == ((p::R) /$R (q::R))::$ - p ** n == ((p::R) **$R n)::$ - inv(p) == (inv(p::R)$R)::$ - -@ -\section{domain DPMO DirectProductModule} -<>= -)abbrev domain DPMO DirectProductModule -++ Author: Stephen M. Watt -++ Date Created: 1986 -++ Date Last Updated: June 4, 1991 -++ Basic Operations: -++ Related Domains: -++ Also See: -++ AMS Classifications: -++ Keywords: equation -++ Examples: -++ References: -++ Description: -++ This constructor provides a direct product of R-modules -++ with an R-module view. - -DirectProductModule(n, R, S): DPcategory == DPcapsule where - n: NonNegativeInteger - R: Ring - S: LeftModule(R) - - DPcategory == Join(DirectProductCategory(n,S), LeftModule(R)) - -- with if S has Algebra(R) then Algebra(R) - -- - - DPcapsule == DirectProduct(n,S) add - Rep := Vector(S) - r:R * x:$ == [r * x.i for i in 1..n] - -@ -\section{domain DPMM DirectProductMatrixModule} -<>= -)abbrev domain DPMM DirectProductMatrixModule -++ Author: Stephen M. Watt -++ Date Created: 1986 -++ Date Last Updated: June 4, 1991 -++ Basic Operations: -++ Related Domains: -++ Also See: -++ AMS Classifications: -++ Keywords: equation -++ Examples: -++ References: -++ Description: -++ This constructor provides a direct product type with a -++ left matrix-module view. - -DirectProductMatrixModule(n, R, M, S): DPcategory == DPcapsule where - n: PositiveInteger - R: Ring - RowCol ==> DirectProduct(n,R) - M: SquareMatrixCategory(n,R,RowCol,RowCol) - S: LeftModule(R) - - DPcategory == Join(DirectProductCategory(n,S), LeftModule(R), LeftModule(M)) - - DPcapsule == DirectProduct(n, S) add - Rep := Vector(S) - r:R * x:$ == [r*x.i for i in 1..n] - m:M * x:$ == [ +/[m(i,j)*x.j for j in 1..n] for i in 1..n] - -@ \section{License} <>= --Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. @@ -282,11 +141,7 @@ DirectProductMatrixModule(n, R, M, S): DPcategory == DPcapsule where <<*>>= <> -<> <> -<> -<> -<> @ \eject \begin{thebibliography}{99} diff --git a/src/algebra/matrix.spad.pamphlet b/src/algebra/matrix.spad.pamphlet deleted file mode 100644 index 590cd3e..0000000 --- a/src/algebra/matrix.spad.pamphlet +++ /dev/null @@ -1,1586 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra matrix.spad} -\author{Johannes Grabmeier, Oswald Gschnitzer, Clifton J. Williamson} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{domain IMATRIX IndexedMatrix} -<>= -)abbrev domain IMATRIX IndexedMatrix -++ Author: Grabmeier, Gschnitzer, Williamson -++ Date Created: 1987 -++ Date Last Updated: July 1990 -++ Basic Operations: -++ Related Domains: Matrix, RectangularMatrix, SquareMatrix, -++ StorageEfficientMatrixOperations -++ Also See: -++ AMS Classifications: -++ Keywords: matrix, linear algebra -++ Examples: -++ References: -++ Description: -++ An \spad{IndexedMatrix} is a matrix where the minimal row and column -++ indices are parameters of the type. The domains Row and Col -++ are both IndexedVectors. -++ The index of the 'first' row may be obtained by calling the -++ function \spadfun{minRowIndex}. The index of the 'first' column may -++ be obtained by calling the function \spadfun{minColIndex}. The index of -++ the first element of a 'Row' is the same as the index of the -++ first column in a matrix and vice versa. -IndexedMatrix(R,mnRow,mnCol): Exports == Implementation where - R : Ring - mnRow, mnCol : Integer - Row ==> IndexedVector(R,mnCol) - Col ==> IndexedVector(R,mnRow) - MATLIN ==> MatrixLinearAlgebraFunctions(R,Row,Col,$) - - Exports ==> MatrixCategory(R,Row,Col) - - Implementation ==> - InnerIndexedTwoDimensionalArray(R,mnRow,mnCol,Row,Col) add - - swapRows_!(x,i1,i2) == - (i1 < minRowIndex(x)) or (i1 > maxRowIndex(x)) or _ - (i2 < minRowIndex(x)) or (i2 > maxRowIndex(x)) => - error "swapRows!: index out of range" - i1 = i2 => x - minRow := minRowIndex x - xx := x pretend PrimitiveArray(PrimitiveArray(R)) - n1 := i1 - minRow; n2 := i2 - minRow - row1 := qelt(xx,n1) - qsetelt_!(xx,n1,qelt(xx,n2)) - qsetelt_!(xx,n2,row1) - xx pretend $ - - if R has commutative("*") then - - determinant x == determinant(x)$MATLIN - minordet x == minordet(x)$MATLIN - - if R has EuclideanDomain then - - rowEchelon x == rowEchelon(x)$MATLIN - - if R has IntegralDomain then - - rank x == rank(x)$MATLIN - nullity x == nullity(x)$MATLIN - nullSpace x == nullSpace(x)$MATLIN - - if R has Field then - - inverse x == inverse(x)$MATLIN - -@ -\section{domain MATRIX Matrix} -<>= --- matrix.spad.pamphlet Matrix.input -)spool Matrix.output -)set message test on -)set message auto off -)clear all ---S 1 of 38 -m : Matrix(Integer) := new(3,3,0) ---R ---R ---R +0 0 0+ ---R | | ---R (1) |0 0 0| ---R | | ---R +0 0 0+ ---R Type: Matrix Integer ---E 1 - ---S 2 of 38 -setelt(m,2,3,5) ---R ---R ---R (2) 5 ---R Type: PositiveInteger ---E 2 - ---S 3 of 38 -m(1,2) := 10 ---R ---R ---R (3) 10 ---R Type: PositiveInteger ---E 3 - ---S 4 of 38 -m ---R ---R ---R +0 10 0+ ---R | | ---R (4) |0 0 5| ---R | | ---R +0 0 0+ ---R Type: Matrix Integer ---E 4 - ---S 5 of 38 -matrix [ [1,2,3,4],[0,9,8,7] ] ---R ---R ---R +1 2 3 4+ ---R (5) | | ---R +0 9 8 7+ ---R Type: Matrix Integer ---E 5 - ---S 6 of 38 -dm := diagonalMatrix [1,x**2,x**3,x**4,x**5] ---R ---R ---R +1 0 0 0 0 + ---R | | ---R | 2 | ---R |0 x 0 0 0 | ---R | | ---R | 3 | ---R (6) |0 0 x 0 0 | ---R | | ---R | 4 | ---R |0 0 0 x 0 | ---R | | ---R | 5| ---R +0 0 0 0 x + ---R Type: Matrix Polynomial Integer ---E 6 - ---S 7 of 38 -setRow!(dm,5,vector [1,1,1,1,1]) ---R ---R ---R +1 0 0 0 0+ ---R | | ---R | 2 | ---R |0 x 0 0 0| ---R | | ---R (7) | 3 | ---R |0 0 x 0 0| ---R | | ---R | 4 | ---R |0 0 0 x 0| ---R | | ---R +1 1 1 1 1+ ---R Type: Matrix Polynomial Integer ---E 7 - ---S 8 of 38 -setColumn!(dm,2,vector [y,y,y,y,y]) ---R ---R ---R +1 y 0 0 0+ ---R | | ---R |0 y 0 0 0| ---R | | ---R | 3 | ---R (8) |0 y x 0 0| ---R | | ---R | 4 | ---R |0 y 0 x 0| ---R | | ---R +1 y 1 1 1+ ---R Type: Matrix Polynomial Integer ---E 8 - ---S 9 of 38 -cdm := copy(dm) ---R ---R ---R +1 y 0 0 0+ ---R | | ---R |0 y 0 0 0| ---R | | ---R | 3 | ---R (9) |0 y x 0 0| ---R | | ---R | 4 | ---R |0 y 0 x 0| ---R | | ---R +1 y 1 1 1+ ---R Type: Matrix Polynomial Integer ---E 9 - ---S 10 of 38 -setelt(dm,4,1,1-x**7) ---R ---R ---R 7 ---R (10) - x + 1 ---R Type: Polynomial Integer ---E 10 - ---S 11 of 38 -[dm,cdm] ---R ---R ---R + 1 y 0 0 0+ +1 y 0 0 0+ ---R | | | | ---R | 0 y 0 0 0| |0 y 0 0 0| ---R | | | | ---R | 3 | | 3 | ---R (11) [| 0 y x 0 0|,|0 y x 0 0|] ---R | | | | ---R | 7 4 | | 4 | ---R |- x + 1 y 0 x 0| |0 y 0 x 0| ---R | | | | ---R + 1 y 1 1 1+ +1 y 1 1 1+ ---R Type: List Matrix Polynomial Integer ---E 11 - ---S 12 of 38 -subMatrix(dm,2,3,2,4) ---R ---R ---R +y 0 0+ ---R (12) | | ---R | 3 | ---R +y x 0+ ---R Type: Matrix Polynomial Integer ---E 12 - ---S 13 of 38 -d := diagonalMatrix [1.2,-1.3,1.4,-1.5] ---R ---R ---R +1.2 0.0 0.0 0.0 + ---R | | ---R |0.0 - 1.3 0.0 0.0 | ---R (13) | | ---R |0.0 0.0 1.4 0.0 | ---R | | ---R +0.0 0.0 0.0 - 1.5+ ---R Type: Matrix Float ---E 13 - ---S 14 of 38 -e := matrix [ [6.7,9.11],[-31.33,67.19] ] ---R ---R ---R + 6.7 9.11 + ---R (14) | | ---R +- 31.33 67.19+ ---R Type: Matrix Float ---E 14 - ---S 15 of 38 -setsubMatrix!(d,1,2,e) ---R ---R ---R +1.2 6.7 9.11 0.0 + ---R | | ---R |0.0 - 31.33 67.19 0.0 | ---R (15) | | ---R |0.0 0.0 1.4 0.0 | ---R | | ---R +0.0 0.0 0.0 - 1.5+ ---R Type: Matrix Float ---E 15 - ---S 16 of 38 -d ---R ---R ---R +1.2 6.7 9.11 0.0 + ---R | | ---R |0.0 - 31.33 67.19 0.0 | ---R (16) | | ---R |0.0 0.0 1.4 0.0 | ---R | | ---R +0.0 0.0 0.0 - 1.5+ ---R Type: Matrix Float ---E 16 - ---S 17 of 38 -a := matrix [ [1/2,1/3,1/4],[1/5,1/6,1/7] ] ---R ---R ---R +1 1 1+ ---R |- - -| ---R |2 3 4| ---R (17) | | ---R |1 1 1| ---R |- - -| ---R +5 6 7+ ---R Type: Matrix Fraction Integer ---E 17 - ---S 18 of 38 -b := matrix [ [3/5,3/7,3/11],[3/13,3/17,3/19] ] ---R ---R ---R +3 3 3+ ---R |- - --| ---R |5 7 11| ---R (18) | | ---R | 3 3 3| ---R |-- -- --| ---R +13 17 19+ ---R Type: Matrix Fraction Integer ---E 18 - ---S 19 of 38 -horizConcat(a,b) ---R ---R ---R +1 1 1 3 3 3+ ---R |- - - - - --| ---R |2 3 4 5 7 11| ---R (19) | | ---R |1 1 1 3 3 3| ---R |- - - -- -- --| ---R +5 6 7 13 17 19+ ---R Type: Matrix Fraction Integer ---E 19 - ---S 20 of 38 -vab := vertConcat(a,b) ---R ---R ---R +1 1 1 + ---R |- - - | ---R |2 3 4 | ---R | | ---R |1 1 1 | ---R |- - - | ---R |5 6 7 | ---R (20) | | ---R |3 3 3| ---R |- - --| ---R |5 7 11| ---R | | ---R | 3 3 3| ---R |-- -- --| ---R +13 17 19+ ---R Type: Matrix Fraction Integer ---E 20 - ---S 21 of 38 -transpose vab ---R ---R ---R +1 1 3 3+ ---R |- - - --| ---R |2 5 5 13| ---R | | ---R |1 1 3 3| ---R (21) |- - - --| ---R |3 6 7 17| ---R | | ---R |1 1 3 3| ---R |- - -- --| ---R +4 7 11 19+ ---R Type: Matrix Fraction Integer ---E 21 - ---S 22 of 38 -m := matrix [ [1,2],[3,4] ] ---R ---R ---R +1 2+ ---R (22) | | ---R +3 4+ ---R Type: Matrix Integer ---E 22 - ---S 23 of 38 -4 * m * (-5) ---R ---R ---R +- 20 - 40+ ---R (23) | | ---R +- 60 - 80+ ---R Type: Matrix Integer ---E 23 - ---S 24 of 38 -n := matrix([ [1,0,-2],[-3,5,1] ]) ---R ---R ---R + 1 0 - 2+ ---R (24) | | ---R +- 3 5 1 + ---R Type: Matrix Integer ---E 24 - ---S 25 of 38 -m * n ---R ---R ---R +- 5 10 0 + ---R (25) | | ---R +- 9 20 - 2+ ---R Type: Matrix Integer ---E 25 - ---S 26 of 38 -vec := column(n,3) ---R ---R ---R (26) [- 2,1] ---R Type: Vector Integer ---E 26 - ---S 27 of 38 -vec * m ---R ---R ---R (27) [1,0] ---R Type: Vector Integer ---E 27 - ---S 28 of 38 -m * vec ---R ---R ---R (28) [0,- 2] ---R Type: Vector Integer ---E 28 - ---S 29 of 38 -hilb := matrix([ [1/(i + j) for i in 1..3] for j in 1..3]) ---R ---R ---R +1 1 1+ ---R |- - -| ---R |2 3 4| ---R | | ---R |1 1 1| ---R (29) |- - -| ---R |3 4 5| ---R | | ---R |1 1 1| ---R |- - -| ---R +4 5 6+ ---R Type: Matrix Fraction Integer ---E 29 - ---S 30 of 38 -inverse(hilb) ---R ---R ---R + 72 - 240 180 + ---R | | ---R (30) |- 240 900 - 720| ---R | | ---R + 180 - 720 600 + ---R Type: Union(Matrix Fraction Integer,...) ---E 30 - ---S 31 of 38 -mm := matrix([ [1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16] ]) ---R ---R ---R +1 2 3 4 + ---R | | ---R |5 6 7 8 | ---R (31) | | ---R |9 10 11 12| ---R | | ---R +13 14 15 16+ ---R Type: Matrix Integer ---E 31 - ---S 32 of 38 -inverse(mm) ---R ---R ---R (32) "failed" ---R Type: Union("failed",...) ---E 32 - ---S 33 of 38 -determinant(mm) ---R ---R ---R (33) 0 ---R Type: NonNegativeInteger ---E 33 - ---S 34 of 38 -trace(mm) ---R ---R ---R (34) 34 ---R Type: PositiveInteger ---E 34 - ---S 35 of 38 -rank(mm) ---R ---R ---R (35) 2 ---R Type: PositiveInteger ---E 35 - ---S 36 of 38 -nullity(mm) ---R ---R ---R (36) 2 ---R Type: PositiveInteger ---E 36 - ---S 37 of 38 -nullSpace(mm) ---R ---R ---R (37) [[1,- 2,1,0],[2,- 3,0,1]] ---R Type: List Vector Integer ---E 37 - ---S 38 of 38 -rowEchelon(mm) ---R ---R ---R +1 2 3 4 + ---R | | ---R |0 4 8 12| ---R (38) | | ---R |0 0 0 0 | ---R | | ---R +0 0 0 0 + ---R Type: Matrix Integer ---E 38 -)spool -)lisp (bye) -@ -<>= -==================================================================== -Matrix examples -==================================================================== - -The Matrix domain provides arithmetic operations on matrices -and standard functions from linear algebra. -This domain is similar to the TwoDimensionalArray domain, except -that the entries for Matrix must belong to a Ring. - -==================================================================== -Creating Matrices -==================================================================== - -There are many ways to create a matrix from a collection of values or -from existing matrices. - -If the matrix has almost all items equal to the same value, use new to -create a matrix filled with that value and then reset the entries that -are different. - - m : Matrix(Integer) := new(3,3,0) - +0 0 0+ - | | - |0 0 0| - | | - +0 0 0+ - Type: Matrix Integer - -To change the entry in the second row, third column to 5, use setelt. - - setelt(m,2,3,5) - 5 - Type: PositiveInteger - -An alternative syntax is to use assignment. - - m(1,2) := 10 - 10 - Type: PositiveInteger - -The matrix was destructively modified. - - m - +0 10 0+ - | | - |0 0 5| - | | - +0 0 0+ - Type: Matrix Integer - -If you already have the matrix entries as a list of lists, use matrix. - - matrix [ [1,2,3,4],[0,9,8,7] ] - +1 2 3 4+ - | | - +0 9 8 7+ - Type: Matrix Integer - -If the matrix is diagonal, use diagonalMatrix. - - dm := diagonalMatrix [1,x**2,x**3,x**4,x**5] - +1 0 0 0 0 + - | | - | 2 | - |0 x 0 0 0 | - | | - | 3 | - |0 0 x 0 0 | - | | - | 4 | - |0 0 0 x 0 | - | | - | 5| - +0 0 0 0 x + - Type: Matrix Polynomial Integer - -Use setRow and setColumn to change a row or column of a matrix. - - setRow!(dm,5,vector [1,1,1,1,1]) - +1 0 0 0 0+ - | | - | 2 | - |0 x 0 0 0| - | | - | 3 | - |0 0 x 0 0| - | | - | 4 | - |0 0 0 x 0| - | | - +1 1 1 1 1+ - Type: Matrix Polynomial Integer - - setColumn!(dm,2,vector [y,y,y,y,y]) - +1 y 0 0 0+ - | | - |0 y 0 0 0| - | | - | 3 | - |0 y x 0 0| - | | - | 4 | - |0 y 0 x 0| - | | - +1 y 1 1 1+ - Type: Matrix Polynomial Integer - -Use copy to make a copy of a matrix. - - cdm := copy(dm) - +1 y 0 0 0+ - | | - |0 y 0 0 0| - | | - | 3 | - |0 y x 0 0| - | | - | 4 | - |0 y 0 x 0| - | | - +1 y 1 1 1+ - Type: Matrix Polynomial Integer - -This is useful if you intend to modify a matrix destructively but -want a copy of the original. - - setelt(dm,4,1,1-x**7) - 7 - - x + 1 - Type: Polynomial Integer - - [dm,cdm] - + 1 y 0 0 0+ +1 y 0 0 0+ - | | | | - | 0 y 0 0 0| |0 y 0 0 0| - | | | | - | 3 | | 3 | - [| 0 y x 0 0|,|0 y x 0 0|] - | | | | - | 7 4 | | 4 | - |- x + 1 y 0 x 0| |0 y 0 x 0| - | | | | - + 1 y 1 1 1+ +1 y 1 1 1+ - Type: List Matrix Polynomial Integer - -Use subMatrix to extract part of an existing matrix. The syntax is -subMatrix(m, firstrow, lastrow, firstcol, lastcol). - - subMatrix(dm,2,3,2,4) - +y 0 0+ - | | - | 3 | - +y x 0+ - Type: Matrix Polynomial Integer - -To change a submatrix, use setsubMatrix. - - d := diagonalMatrix [1.2,-1.3,1.4,-1.5] - +1.2 0.0 0.0 0.0 + - | | - |0.0 - 1.3 0.0 0.0 | - | | - |0.0 0.0 1.4 0.0 | - | | - +0.0 0.0 0.0 - 1.5+ - Type: Matrix Float - -If e is too big to fit where you specify, an error message is -displayed. Use subMatrix to extract part of e, if necessary. - - e := matrix [ [6.7,9.11],[-31.33,67.19] ] - + 6.7 9.11 + - | | - +- 31.33 67.19+ - Type: Matrix Float - -This changes the submatrix of d whose upper left corner is at the -first row and second column and whose size is that of e. - - setsubMatrix!(d,1,2,e) - +1.2 6.7 9.11 0.0 + - | | - |0.0 - 31.33 67.19 0.0 | - | | - |0.0 0.0 1.4 0.0 | - | | - +0.0 0.0 0.0 - 1.5+ - Type: Matrix Float - - d - +1.2 6.7 9.11 0.0 + - | | - |0.0 - 31.33 67.19 0.0 | - | | - |0.0 0.0 1.4 0.0 | - | | - +0.0 0.0 0.0 - 1.5+ - Type: Matrix Float - -Matrices can be joined either horizontally or vertically to make -new matrices. - - a := matrix [ [1/2,1/3,1/4],[1/5,1/6,1/7] ] - +1 1 1+ - |- - -| - |2 3 4| - | | - |1 1 1| - |- - -| - +5 6 7+ - Type: Matrix Fraction Integer - - b := matrix [ [3/5,3/7,3/11],[3/13,3/17,3/19] ] - +3 3 3+ - |- - --| - |5 7 11| - | | - | 3 3 3| - |-- -- --| - +13 17 19+ - Type: Matrix Fraction Integer - -Use horizConcat to append them side to side. The two matrices must -have the same number of rows. - - horizConcat(a,b) - +1 1 1 3 3 3+ - |- - - - - --| - |2 3 4 5 7 11| - | | - |1 1 1 3 3 3| - |- - - -- -- --| - +5 6 7 13 17 19+ - Type: Matrix Fraction Integer - -Use vertConcat to stack one upon the other. The two matrices must -have the same number of columns. - - vab := vertConcat(a,b) - +1 1 1 + - |- - - | - |2 3 4 | - | | - |1 1 1 | - |- - - | - |5 6 7 | - | | - |3 3 3| - |- - --| - |5 7 11| - | | - | 3 3 3| - |-- -- --| - +13 17 19+ - Type: Matrix Fraction Integer - -The operation transpose is used to create a new matrix by reflection -across the main diagonal. - - transpose vab - +1 1 3 3+ - |- - - --| - |2 5 5 13| - | | - |1 1 3 3| - |- - - --| - |3 6 7 17| - | | - |1 1 3 3| - |- - -- --| - +4 7 11 19+ - Type: Matrix Fraction Integer - -==================================================================== -Operations on Matrices -==================================================================== - -Axiom provides both left and right scalar multiplication. - - m := matrix [ [1,2],[3,4] ] - +1 2+ - | | - +3 4+ - Type: Matrix Integer - - 4 * m * (-5) - +- 20 - 40+ - | | - +- 60 - 80+ - Type: Matrix Integer - -You can add, subtract, and multiply matrices provided, of course, that -the matrices have compatible dimensions. If not, an error message is -displayed. - - n := matrix([ [1,0,-2],[-3,5,1] ]) - + 1 0 - 2+ - | | - +- 3 5 1 + - Type: Matrix Integer - -This following product is defined but n * m is not. - - m * n - +- 5 10 0 + - | | - +- 9 20 - 2+ - Type: Matrix Integer - -The operations nrows and ncols return the number of rows and columns -of a matrix. You can extract a row or a column of a matrix using the -operations row and column. The object returned is a Vector. - -Here is the third column of the matrix n. - - vec := column(n,3) - [- 2,1] - Type: Vector Integer - -You can multiply a matrix on the left by a "row vector" and on the right -by a "column vector". - - vec * m - [1,0] - Type: Vector Integer - -Of course, the dimensions of the vector and the matrix must be compatible -or an error message is returned. - - m * vec - [0,- 2] - Type: Vector Integer - -The operation inverse computes the inverse of a matrix if the matrix -is invertible, and returns "failed" if not. - -This Hilbert matrix is invertible. - - hilb := matrix([ [1/(i + j) for i in 1..3] for j in 1..3]) - +1 1 1+ - |- - -| - |2 3 4| - | | - |1 1 1| - |- - -| - |3 4 5| - | | - |1 1 1| - |- - -| - +4 5 6+ - Type: Matrix Fraction Integer - - inverse(hilb) - + 72 - 240 180 + - | | - |- 240 900 - 720| - | | - + 180 - 720 600 + - Type: Union(Matrix Fraction Integer,...) - -This matrix is not invertible. - - mm := matrix([ [1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16] ]) - +1 2 3 4 + - | | - |5 6 7 8 | - | | - |9 10 11 12| - | | - +13 14 15 16+ - Type: Matrix Integer - - inverse(mm) - "failed" - Type: Union("failed",...) - -The operation determinant computes the determinant of a matrix -provided that the entries of the matrix belong to a CommutativeRing. - -The above matrix mm is not invertible and, hence, must have determinant 0. - - determinant(mm) - 0 - Type: NonNegativeInteger - -The operation trace computes the trace of a square matrix. - - trace(mm) - 34 - Type: PositiveInteger - -The operation rank computes the rank of a matrix: the maximal number -of linearly independent rows or columns. - - rank(mm) - 2 - Type: PositiveInteger - -The operation nullity computes the nullity of a matrix: the dimension -of its null space. - - nullity(mm) - 2 - Type: PositiveInteger - -The operation nullSpace returns a list containing a basis for the null -space of a matrix. Note that the nullity is the number of elements in -a basis for the null space. - - nullSpace(mm) - [[1,- 2,1,0],[2,- 3,0,1]] - Type: List Vector Integer - -The operation rowEchelon returns the row echelon form of a matrix. It -is easy to see that the rank of this matrix is two and that its -nullity is also two. - - rowEchelon(mm) - +1 2 3 4 + - | | - |0 4 8 12| - | | - |0 0 0 0 | - | | - +0 0 0 0 + - Type: Matrix Integer - -See Also -o )help OneDimensionalArray -o )help TwoDimensionalArray -o )help Vector -o )help Permanent -o )show Matrix -o $AXIOM/doc/src/algebra/matrix.spad.dvi - -@ -<>= -)abbrev domain MATRIX Matrix -++ Author: Grabmeier, Gschnitzer, Williamson -++ Date Created: 1987 -++ Date Last Updated: July 1990 -++ Basic Operations: -++ Related Domains: IndexedMatrix, RectangularMatrix, SquareMatrix -++ Also See: -++ AMS Classifications: -++ Keywords: matrix, linear algebra -++ Examples: -++ References: -++ Description: -++ \spadtype{Matrix} is a matrix domain where 1-based indexing is used -++ for both rows and columns. -Matrix(R): Exports == Implementation where - R : Ring - Row ==> Vector R - Col ==> Vector R - mnRow ==> 1 - mnCol ==> 1 - MATLIN ==> MatrixLinearAlgebraFunctions(R,Row,Col,$) - MATSTOR ==> StorageEfficientMatrixOperations(R) - - Exports ==> MatrixCategory(R,Row,Col) with - diagonalMatrix: Vector R -> $ - ++ \spad{diagonalMatrix(v)} returns a diagonal matrix where the elements - ++ of v appear on the diagonal. - - if R has ConvertibleTo InputForm then ConvertibleTo InputForm - - if R has Field then - inverse: $ -> Union($,"failed") - ++ \spad{inverse(m)} returns the inverse of the matrix m. - ++ If the matrix is not invertible, "failed" is returned. - ++ Error: if the matrix is not square. --- matrix: Vector Vector R -> $ --- ++ \spad{matrix(v)} converts the vector of vectors v to a matrix, where --- ++ the vector of vectors is viewed as a vector of the rows of the --- ++ matrix --- diagonalMatrix: Vector $ -> $ --- ++ \spad{diagonalMatrix([m1,...,mk])} creates a block diagonal matrix --- ++ M with block matrices {\em m1},...,{\em mk} down the diagonal, --- ++ with 0 block matrices elsewhere. --- vectorOfVectors: $ -> Vector Vector R --- ++ \spad{vectorOfVectors(m)} returns the rows of the matrix m as a --- ++ vector of vectors - - Implementation ==> - InnerIndexedTwoDimensionalArray(R,mnRow,mnCol,Row,Col) add - minr ==> minRowIndex - maxr ==> maxRowIndex - minc ==> minColIndex - maxc ==> maxColIndex - mini ==> minIndex - maxi ==> maxIndex - - minRowIndex x == mnRow - minColIndex x == mnCol - - swapRows_!(x,i1,i2) == - (i1 < minRowIndex(x)) or (i1 > maxRowIndex(x)) or _ - (i2 < minRowIndex(x)) or (i2 > maxRowIndex(x)) => - error "swapRows!: index out of range" - i1 = i2 => x - minRow := minRowIndex x - xx := x pretend PrimitiveArray(PrimitiveArray(R)) - n1 := i1 - minRow; n2 := i2 - minRow - row1 := qelt(xx,n1) - qsetelt_!(xx,n1,qelt(xx,n2)) - qsetelt_!(xx,n2,row1) - xx pretend $ - - positivePower:($,Integer,NonNegativeInteger) -> $ - positivePower(x,n,nn) == --- one? n => x - (n = 1) => x - -- no need to allocate space for 3 additional matrices - n = 2 => x * x - n = 3 => x * x * x - n = 4 => (y := x * x; y * y) - a := new(nn,nn,0) pretend Matrix(R) - b := new(nn,nn,0) pretend Matrix(R) - c := new(nn,nn,0) pretend Matrix(R) - xx := x pretend Matrix(R) - power_!(a,b,c,xx,n :: NonNegativeInteger)$MATSTOR pretend $ - - x:$ ** n:NonNegativeInteger == - not((nn := nrows x) = ncols x) => - error "**: matrix must be square" - zero? n => scalarMatrix(nn,1) - positivePower(x,n,nn) - - if R has commutative("*") then - - determinant x == determinant(x)$MATLIN - minordet x == minordet(x)$MATLIN - - if R has EuclideanDomain then - - rowEchelon x == rowEchelon(x)$MATLIN - - if R has IntegralDomain then - - rank x == rank(x)$MATLIN - nullity x == nullity(x)$MATLIN - nullSpace x == nullSpace(x)$MATLIN - - if R has Field then - - inverse x == inverse(x)$MATLIN - - x:$ ** n:Integer == - nn := nrows x - not(nn = ncols x) => - error "**: matrix must be square" - zero? n => scalarMatrix(nn,1) - positive? n => positivePower(x,n,nn) - (xInv := inverse x) case "failed" => - error "**: matrix must be invertible" - positivePower(xInv :: $,-n,nn) - --- matrix(v: Vector Vector R) == --- (rows := # v) = 0 => new(0,0,0) --- -- error check: this is a top level function --- cols := # v.mini(v) --- for k in (mini(v) + 1)..maxi(v) repeat --- cols ^= # v.k => error "matrix: rows of different lengths" --- ans := new(rows,cols,0) --- for i in minr(ans)..maxr(ans) for k in mini(v)..maxi(v) repeat --- vv := v.k --- for j in minc(ans)..maxc(ans) for l in mini(vv)..maxi(vv) repeat --- ans(i,j) := vv.l --- ans - - diagonalMatrix(v: Vector R) == - n := #v; ans := zero(n,n) - for i in minr(ans)..maxr(ans) for j in minc(ans)..maxc(ans) _ - for k in mini(v)..maxi(v) repeat qsetelt_!(ans,i,j,qelt(v,k)) - ans - --- diagonalMatrix(vec: Vector $) == --- rows : NonNegativeInteger := 0 --- cols : NonNegativeInteger := 0 --- for r in mini(vec)..maxi(vec) repeat --- mat := vec.r --- rows := rows + nrows mat; cols := cols + ncols mat --- ans := zero(rows,cols) --- loR := minr ans; loC := minc ans --- for r in mini(vec)..maxi(vec) repeat --- mat := vec.r --- hiR := loR + nrows(mat) - 1; hiC := loC + nrows(mat) - 1 --- for i in loR..hiR for k in minr(mat)..maxr(mat) repeat --- for j in loC..hiC for l in minc(mat)..maxc(mat) repeat --- ans(i,j) := mat(k,l) --- loR := hiR + 1; loC := hiC + 1 --- ans - --- vectorOfVectors x == --- vv : Vector Vector R := new(nrows x,0) --- cols := ncols x --- for k in mini(vv)..maxi(vv) repeat --- vv.k := new(cols,0) --- for i in minr(x)..maxr(x) for k in mini(vv)..maxi(vv) repeat --- v := vv.k --- for j in minc(x)..maxc(x) for l in mini(v)..maxi(v) repeat --- v.l := x(i,j) --- vv - - if R has ConvertibleTo InputForm then - convert(x:$):InputForm == - convert [convert("matrix"::Symbol)@InputForm, - convert listOfLists x]$List(InputForm) - -@ -\section{domain RMATRIX RectangularMatrix} -<>= -)abbrev domain RMATRIX RectangularMatrix -++ Author: Grabmeier, Gschnitzer, Williamson -++ Date Created: 1987 -++ Date Last Updated: July 1990 -++ Basic Operations: -++ Related Domains: IndexedMatrix, Matrix, SquareMatrix -++ Also See: -++ AMS Classifications: -++ Keywords: matrix, linear algebra -++ Examples: -++ References: -++ Description: -++ \spadtype{RectangularMatrix} is a matrix domain where the number of rows -++ and the number of columns are parameters of the domain. -RectangularMatrix(m,n,R): Exports == Implementation where - m,n : NonNegativeInteger - R : Ring - Row ==> DirectProduct(n,R) - Col ==> DirectProduct(m,R) - Exports ==> Join(RectangularMatrixCategory(m,n,R,Row,Col),_ - CoercibleTo Matrix R) with - - if R has Field then VectorSpace R - - if R has ConvertibleTo InputForm then ConvertibleTo InputForm - - rectangularMatrix: Matrix R -> $ - ++ \spad{rectangularMatrix(m)} converts a matrix of type \spadtype{Matrix} - ++ to a matrix of type \spad{RectangularMatrix}. - coerce: $ -> Matrix R - ++ \spad{coerce(m)} converts a matrix of type \spadtype{RectangularMatrix} - ++ to a matrix of type \spad{Matrix}. - - Implementation ==> Matrix R add - minr ==> minRowIndex - maxr ==> maxRowIndex - minc ==> minColIndex - maxc ==> maxColIndex - mini ==> minIndex - maxi ==> maxIndex - - ZERO := new(m,n,0)$Matrix(R) pretend $ - 0 == ZERO - - coerce(x:$):OutputForm == coerce(x pretend Matrix R)$Matrix(R) - - matrix(l: List List R) == - -- error check: this is a top level function - #l ^= m => error "matrix: wrong number of rows" - for ll in l repeat - #ll ^= n => error "matrix: wrong number of columns" - ans : Matrix R := new(m,n,0) - for i in minr(ans)..maxr(ans) for ll in l repeat - for j in minc(ans)..maxc(ans) for r in ll repeat - qsetelt_!(ans,i,j,r) - ans pretend $ - - row(x,i) == directProduct row(x pretend Matrix(R),i) - column(x,j) == directProduct column(x pretend Matrix(R),j) - - coerce(x:$):Matrix(R) == copy(x pretend Matrix(R)) - - rectangularMatrix x == - (nrows(x) ^= m) or (ncols(x) ^= n) => - error "rectangularMatrix: matrix of bad dimensions" - copy(x) pretend $ - - if R has EuclideanDomain then - - rowEchelon x == rowEchelon(x pretend Matrix(R)) pretend $ - - if R has IntegralDomain then - - rank x == rank(x pretend Matrix(R)) - nullity x == nullity(x pretend Matrix(R)) - nullSpace x == - [directProduct c for c in nullSpace(x pretend Matrix(R))] - - if R has Field then - - dimension() == (m * n) :: CardinalNumber - - if R has ConvertibleTo InputForm then - convert(x:$):InputForm == - convert [convert("rectangularMatrix"::Symbol)@InputForm, - convert(x::Matrix(R))]$List(InputForm) - -@ -\section{domain SQMATRIX SquareMatrix} -<>= --- matrix.spad.pamphlet SquareMatrix.input -)spool SquareMatrix.output -)set message test on -)set message auto off -)clear all ---S 1 of 6 -)set expose add constructor SquareMatrix ---R ---I SquareMatrix is now explicitly exposed in frame frame0 ---E 1 - ---S 2 of 6 -m := squareMatrix [ [1,-%i],[%i,4] ] ---R ---R ---R +1 - %i+ ---R (1) | | ---R +%i 4 + ---R Type: SquareMatrix(2,Complex Integer) ---E 2 - ---S 3 of 6 -m*m - m ---R ---R ---R + 1 - 4%i+ ---R (2) | | ---R +4%i 13 + ---R Type: SquareMatrix(2,Complex Integer) ---E 3 - ---S 4 of 6 -mm := squareMatrix [ [m, 1], [1-m, m**2] ] ---R ---R ---R ++1 - %i+ +1 0+ + ---R || | | | | ---R |+%i 4 + +0 1+ | ---R (3) | | ---R |+ 0 %i + + 2 - 5%i+| ---R || | | || ---R ++- %i - 3+ +5%i 17 ++ ---R Type: SquareMatrix(2,SquareMatrix(2,Complex Integer)) ---E 4 - ---S 5 of 6 -p := (x + m)**2 ---R ---R ---R 2 + 2 - 2%i+ + 2 - 5%i+ ---R (4) x + | |x + | | ---R +2%i 8 + +5%i 17 + ---R Type: Polynomial SquareMatrix(2,Complex Integer) ---E 5 - ---S 6 of 6 -p::SquareMatrix(2, ?) ---R ---R ---R + 2 + ---R |x + 2x + 2 - 2%i x - 5%i| ---R (5) | | ---R | 2 | ---R +2%i x + 5%i x + 8x + 17 + ---R Type: SquareMatrix(2,Polynomial Complex Integer) ---E 6 -)spool -)lisp (bye) -@ -<>= -==================================================================== -SquareMatrix examples -==================================================================== - -The top level matrix type in Axiom is Matrix, which provides basic -arithmetic and linear algebra functions. However, since the matrices -can be of any size it is not true that any pair can be added or -multiplied. Thus Matrix has little algebraic structure. - -Sometimes you want to use matrices as coefficients for polynomials or -in other algebraic contexts. In this case, SquareMatrix should be -used. The domain SquareMatrix(n,R) gives the ring of n by n square -matrices over R. - -Since SquareMatrix is not normally exposed at the top level, you must -expose it before it can be used. - - )set expose add constructor SquareMatrix - -Once SQMATRIX has been exposed, values can be created using the -squareMatrix function. - - m := squareMatrix [ [1,-%i],[%i,4] ] - +1 - %i+ - | | - +%i 4 + - Type: SquareMatrix(2,Complex Integer) - -The usual arithmetic operations are available. - - m*m - m - + 1 - 4%i+ - | | - +4%i 13 + - Type: SquareMatrix(2,Complex Integer) - -Square matrices can be used where ring elements are required. -For example, here is a matrix with matrix entries. - - mm := squareMatrix [ [m, 1], [1-m, m**2] ] - ++1 - %i+ +1 0+ + - || | | | | - |+%i 4 + +0 1+ | - | | - |+ 0 %i + + 2 - 5%i+| - || | | || - ++- %i - 3+ +5%i 17 ++ - Type: SquareMatrix(2,SquareMatrix(2,Complex Integer)) - -Or you can construct a polynomial with square matrix coefficients. - - p := (x + m)**2 - 2 + 2 - 2%i+ + 2 - 5%i+ - x + | |x + | | - +2%i 8 + +5%i 17 + - Type: Polynomial SquareMatrix(2,Complex Integer) - -This value can be converted to a square matrix with polynomial coefficients. - - p::SquareMatrix(2, ?) - + 2 + - |x + 2x + 2 - 2%i x - 5%i| - | | - | 2 | - +2%i x + 5%i x + 8x + 17 + - Type: SquareMatrix(2,Polynomial Complex Integer) - -See Also: -o )help Matrix -o )show SquareMatrix -o $AXIOM/doc/src/algebra/matrix.spad.dvi - -@ -<>= -)abbrev domain SQMATRIX SquareMatrix -++ Author: Grabmeier, Gschnitzer, Williamson -++ Date Created: 1987 -++ Date Last Updated: July 1990 -++ Basic Operations: -++ Related Domains: IndexedMatrix, Matrix, RectangularMatrix -++ Also See: -++ AMS Classifications: -++ Keywords: matrix, linear algebra -++ Examples: -++ References: -++ Description: -++ \spadtype{SquareMatrix} is a matrix domain of square matrices, where the -++ number of rows (= number of columns) is a parameter of the type. -SquareMatrix(ndim,R): Exports == Implementation where - ndim : NonNegativeInteger - R : Ring - Row ==> DirectProduct(ndim,R) - Col ==> DirectProduct(ndim,R) - MATLIN ==> MatrixLinearAlgebraFunctions(R,Row,Col,$) - - Exports ==> Join(SquareMatrixCategory(ndim,R,Row,Col),_ - CoercibleTo Matrix R) with - - transpose: $ -> $ - ++ \spad{transpose(m)} returns the transpose of the matrix m. - squareMatrix: Matrix R -> $ - ++ \spad{squareMatrix(m)} converts a matrix of type \spadtype{Matrix} - ++ to a matrix of type \spadtype{SquareMatrix}. - coerce: $ -> Matrix R - ++ \spad{coerce(m)} converts a matrix of type \spadtype{SquareMatrix} - ++ to a matrix of type \spadtype{Matrix}. --- symdecomp : $ -> Record(sym:$,antisym:$) --- ++ \spad{symdecomp(m)} decomposes the matrix m as a sum of a symmetric --- ++ matrix \spad{m1} and an antisymmetric matrix \spad{m2}. The object --- ++ returned is the Record \spad{[m1,m2]} --- if R has commutative("*") then --- minorsVect: -> Vector(Union(R,"uncomputed")) --range: 1..2**n-1 --- ++ \spad{minorsVect(m)} returns a vector of the minors of the matrix m - if R has commutative("*") then central - ++ the elements of the Ring R, viewed as diagonal matrices, commute - ++ with all matrices and, indeed, are the only matrices which commute - ++ with all matrices. - if R has commutative("*") and R has unitsKnown then unitsKnown - ++ the invertible matrices are simply the matrices whose determinants - ++ are units in the Ring R. - if R has ConvertibleTo InputForm then ConvertibleTo InputForm - - Implementation ==> Matrix R add - minr ==> minRowIndex - maxr ==> maxRowIndex - minc ==> minColIndex - maxc ==> maxColIndex - mini ==> minIndex - maxi ==> maxIndex - - ZERO := scalarMatrix 0 - 0 == ZERO - ONE := scalarMatrix 1 - 1 == ONE - - characteristic() == characteristic()$R - - matrix(l: List List R) == - -- error check: this is a top level function - #l ^= ndim => error "matrix: wrong number of rows" - for ll in l repeat - #ll ^= ndim => error "matrix: wrong number of columns" - ans : Matrix R := new(ndim,ndim,0) - for i in minr(ans)..maxr(ans) for ll in l repeat - for j in minc(ans)..maxc(ans) for r in ll repeat - qsetelt_!(ans,i,j,r) - ans pretend $ - - row(x,i) == directProduct row(x pretend Matrix(R),i) - column(x,j) == directProduct column(x pretend Matrix(R),j) - coerce(x:$):OutputForm == coerce(x pretend Matrix R)$Matrix(R) - - scalarMatrix r == scalarMatrix(ndim,r)$Matrix(R) pretend $ - - diagonalMatrix l == - #l ^= ndim => - error "diagonalMatrix: wrong number of entries in list" - diagonalMatrix(l)$Matrix(R) pretend $ - - coerce(x:$):Matrix(R) == copy(x pretend Matrix(R)) - - squareMatrix x == - (nrows(x) ^= ndim) or (ncols(x) ^= ndim) => - error "squareMatrix: matrix of bad dimensions" - copy(x) pretend $ - - x:$ * v:Col == - directProduct((x pretend Matrix(R)) * (v :: Vector(R))) - - v:Row * x:$ == - directProduct((v :: Vector(R)) * (x pretend Matrix(R))) - - x:$ ** n:NonNegativeInteger == - ((x pretend Matrix(R)) ** n) pretend $ - - if R has commutative("*") then - - determinant x == determinant(x pretend Matrix(R)) - minordet x == minordet(x pretend Matrix(R)) - - if R has EuclideanDomain then - - rowEchelon x == rowEchelon(x pretend Matrix(R)) pretend $ - - if R has IntegralDomain then - - rank x == rank(x pretend Matrix(R)) - nullity x == nullity(x pretend Matrix(R)) - nullSpace x == - [directProduct c for c in nullSpace(x pretend Matrix(R))] - - if R has Field then - - dimension() == (m * n) :: CardinalNumber - - inverse x == - (u := inverse(x pretend Matrix(R))) case "failed" => "failed" - (u :: Matrix(R)) pretend $ - - x:$ ** n:Integer == - ((x pretend Matrix(R)) ** n) pretend $ - - recip x == inverse x - - if R has ConvertibleTo InputForm then - convert(x:$):InputForm == - convert [convert("squareMatrix"::Symbol)@InputForm, - convert(x::Matrix(R))]$List(InputForm) - - -@ -\section{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. -@ -<<*>>= -<> - -<> -<> -<> -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/misc.spad.pamphlet b/src/algebra/misc.spad.pamphlet deleted file mode 100644 index 837e326..0000000 --- a/src/algebra/misc.spad.pamphlet +++ /dev/null @@ -1,78 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra misc.spad} -\author{The Axiom Team} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{domain SAOS SingletonAsOrderedSet} -<>= -"SAOS" -> "ORDSET" -"SingletonAsOrderedSet()" -> "OrderedSet()" -@ -<>= -)abbrev domain SAOS SingletonAsOrderedSet -++ This trivial domain lets us build Univariate Polynomials -++ in an anonymous variable -SingletonAsOrderedSet(): OrderedSet with - create:() -> % - convert:% -> Symbol - == add - create() == "?" pretend % - a>= ---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. -@ -<<*>>= -<> - ---bug fix TTT Nov 11 1992. (add convert $ to Symbol) - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/mkfunc.spad.pamphlet b/src/algebra/mkfunc.spad.pamphlet index 6f7c67a..08e2838 100644 --- a/src/algebra/mkfunc.spad.pamphlet +++ b/src/algebra/mkfunc.spad.pamphlet @@ -9,195 +9,6 @@ \eject \tableofcontents \eject -\section{domain INFORM InputForm} -<>= -)abbrev domain INFORM InputForm -++ Parser forms -++ Author: Manuel Bronstein -++ Date Created: ??? -++ Date Last Updated: 19 April 1991 -++ Description: -++ Domain of parsed forms which can be passed to the interpreter. -++ This is also the interface between algebra code and facilities -++ in the interpreter. - ---)boot $noSubsumption := true - -InputForm(): - Join(SExpressionCategory(String,Symbol,Integer,DoubleFloat,OutputForm), - ConvertibleTo SExpression) with - interpret: % -> Any - ++ interpret(f) passes f to the interpreter. - convert : SExpression -> % - ++ convert(s) makes s into an input form. - binary : (%, List %) -> % - ++ \spad{binary(op, [a1,...,an])} returns the input form - ++ corresponding to \spad{a1 op a2 op ... op an}. - ++ - ++X a:=[1,2,3]::List(InputForm) - ++X binary(_+::InputForm,a) - - function : (%, List Symbol, Symbol) -> % - ++ \spad{function(code, [x1,...,xn], f)} returns the input form - ++ corresponding to \spad{f(x1,...,xn) == code}. - lambda : (%, List Symbol) -> % - ++ \spad{lambda(code, [x1,...,xn])} returns the input form - ++ corresponding to \spad{(x1,...,xn) +-> code} if \spad{n > 1}, - ++ or to \spad{x1 +-> code} if \spad{n = 1}. - "+" : (%, %) -> % - ++ \spad{a + b} returns the input form corresponding to \spad{a + b}. - "*" : (%, %) -> % - ++ \spad{a * b} returns the input form corresponding to \spad{a * b}. - "/" : (%, %) -> % - ++ \spad{a / b} returns the input form corresponding to \spad{a / b}. - "**" : (%, NonNegativeInteger) -> % - ++ \spad{a ** b} returns the input form corresponding to \spad{a ** b}. - "**" : (%, Integer) -> % - ++ \spad{a ** b} returns the input form corresponding to \spad{a ** b}. - 0 : constant -> % - ++ \spad{0} returns the input form corresponding to 0. - 1 : constant -> % - ++ \spad{1} returns the input form corresponding to 1. - flatten : % -> % - ++ flatten(s) returns an input form corresponding to s with - ++ all the nested operations flattened to triples using new - ++ local variables. - ++ If s is a piece of code, this speeds up - ++ the compilation tremendously later on. - unparse : % -> String - ++ unparse(f) returns a string s such that the parser - ++ would transform s to f. - ++ Error: if f is not the parsed form of a string. - parse : String -> % - ++ parse is the inverse of unparse. It parses a string to InputForm. - declare : List % -> Symbol - ++ declare(t) returns a name f such that f has been - ++ declared to the interpreter to be of type t, but has - ++ not been assigned a value yet. - ++ Note: t should be created as \spad{devaluate(T)$Lisp} where T is the - ++ actual type of f (this hack is required for the case where - ++ T is a mapping type). - compile : (Symbol, List %) -> Symbol - ++ \spad{compile(f, [t1,...,tn])} forces the interpreter to compile - ++ the function f with signature \spad{(t1,...,tn) -> ?}. - ++ returns the symbol f if successful. - ++ Error: if f was not defined beforehand in the interpreter, - ++ or if the ti's are not valid types, or if the compiler fails. - == SExpression add - Rep := SExpression - - mkProperOp: Symbol -> % - strsym : % -> String - tuplify : List Symbol -> % - flatten0 : (%, Symbol, NonNegativeInteger) -> - Record(lst: List %, symb:%) - - 0 == convert(0::Integer) - 1 == convert(1::Integer) - convert(x:%):SExpression == x pretend SExpression - convert(x:SExpression):% == x - - conv(ll : List %): % == - convert(ll pretend List SExpression)$SExpression pretend % - - lambda(f,l) == conv([convert("+->"::Symbol),tuplify l,f]$List(%)) - - interpret x == - v := interpret(x)$Lisp - mkObj(unwrap(objVal(v)$Lisp)$Lisp, objMode(v)$Lisp)$Lisp - - convert(x:DoubleFloat):% == - zero? x => 0 --- one? x => 1 - (x = 1) => 1 - convert(x)$Rep - - flatten s == - -- will not compile if I use 'or' - atom? s => s - every?(atom?,destruct s)$List(%) => s - sy := new()$Symbol - n:NonNegativeInteger := 0 - l2 := [flatten0(x, sy, n := n + 1) for x in rest(l := destruct s)] - conv(concat(convert("SEQ"::Symbol)@%, - concat(concat [u.lst for u in l2], conv( - [convert("exit"::Symbol)@%, 1$%, conv(concat(first l, - [u.symb for u in l2]))@%]$List(%))@%)))@% - - flatten0(s, sy, n) == - atom? s => [nil(), s] - a := convert(concat(string sy, convert(n)@String)::Symbol)@% - l2 := [flatten0(x, sy, n := n+1) for x in rest(l := destruct s)] - [concat(concat [u.lst for u in l2], conv([convert( - "LET"::Symbol)@%, a, conv(concat(first l, - [u.symb for u in l2]))@%]$List(%))@%), a] - - strsym s == - string? s => string s - symbol? s => string symbol s - error "strsym: form is neither a string or symbol" - - unparse x == - atom?(s:% := form2String(x)$Lisp) => strsym s - concat [strsym a for a in destruct s] - - parse(s:String):% == - ncParseFromString(s)$Lisp - - declare signature == - declare(name := new()$Symbol, signature)$Lisp - name - - compile(name, types) == - symbol car cdr car - selectLocalMms(mkProperOp name, convert(name)@%, - types, nil$List(%))$Lisp - - mkProperOp name == - op := mkAtree(nme := convert(name)@%)$Lisp - transferPropsToNode(nme, op)$Lisp - convert op - - binary(op, args) == - (n := #args) < 2 => error "Need at least 2 arguments" - n = 2 => convert([op, first args, last args]$List(%)) - convert([op, first args, binary(op, rest args)]$List(%)) - - tuplify l == - empty? rest l => convert first l - conv - concat(convert("Tuple"::Symbol), [convert x for x in l]$List(%)) - - function(f, l, name) == - nn := convert(new(1 + #l, convert(nil()$List(%)))$List(%))@% - conv([convert("DEF"::Symbol), conv(cons(convert(name)@%, - [convert(x)@% for x in l])), nn, nn, f]$List(%)) - - s1 + s2 == - s1 = 0 => s2 - s2 = 0 => s1 - conv [convert("+"::Symbol), s1, s2]$List(%) - - s1 * s2 == - s1 = 0 or s2 = 0 => 0 - s1 = 1 => s2 - s2 = 1 => s1 - conv [convert("*"::Symbol), s1, s2]$List(%) - - s1:% ** n:Integer == - s1 = 0 and n > 0 => 0 - s1 = 1 or zero? n => 1 --- one? n => s1 - (n = 1) => s1 - conv [convert("**"::Symbol), s1, convert n]$List(%) - - s1:% ** n:NonNegativeInteger == s1 ** (n::Integer) - - s1 / s2 == - s2 = 1 => s1 - conv [convert("/"::Symbol), s1, s2]$List(%) - -@ \section{package INFORM1 InputFormFunctions1} <>= )abbrev package INFORM1 InputFormFunctions1 @@ -699,7 +510,6 @@ MakeFloatCompiledFunction(S): Exports == Implementation where <<*>>= <> -<> <> <> <> diff --git a/src/algebra/modmon.spad.pamphlet b/src/algebra/modmon.spad.pamphlet deleted file mode 100644 index cc8bebe..0000000 --- a/src/algebra/modmon.spad.pamphlet +++ /dev/null @@ -1,224 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra modmon.spad} -\author{The Axiom Team} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{domain MODMON ModMonic} -<>= -)abbrev domain MODMON ModMonic -++ Description: -++ This package \undocumented --- following line prevents caching ModMonic -)bo PUSH('ModMonic, $mutableDomains) - -ModMonic(R,Rep): C == T - where - R: Ring - Rep: UnivariatePolynomialCategory(R) - C == UnivariatePolynomialCategory(R) with - --operations - setPoly : Rep -> Rep - ++ setPoly(x) \undocumented - modulus : -> Rep - ++ modulus() \undocumented - reduce: Rep -> % - ++ reduce(x) \undocumented - lift: % -> Rep --reduce lift = identity - ++ lift(x) \undocumented - coerce: Rep -> % - ++ coerce(x) \undocumented - Vectorise: % -> Vector(R) - ++ Vectorise(x) \undocumented - UnVectorise: Vector(R) -> % - ++ UnVectorise(v) \undocumented - An: % -> Vector(R) - ++ An(x) \undocumented - pow : -> PrimitiveArray(%) - ++ pow() \undocumented - computePowers : -> PrimitiveArray(%) - ++ computePowers() \undocumented - if R has FiniteFieldCategory then - frobenius: % -> % - ++ frobenius(x) \undocumented - --LinearTransf: (%,Vector(R)) -> SquareMatrix R - --assertions - if R has Finite then Finite - T == add - --constants - m:Rep := monomial(1,1)$Rep --| degree(m) > 0 and LeadingCoef(m) = R$1 - d := degree(m)$Rep - d1 := (d-1):NonNegativeInteger - twod := 2*d1+1 - frobenius?:Boolean := R has FiniteFieldCategory - --VectorRep:= DirectProduct(d:NonNegativeInteger,R) - --declarations - x,y: % - p: Rep - d,n: Integer - e,k1,k2: NonNegativeInteger - c: R - --vect: Vector(R) - power:PrimitiveArray(%) - frobeniusPower:PrimitiveArray(%) - computeFrobeniusPowers : () -> PrimitiveArray(%) - --representations - --mutable m --take this out?? - --define - power := new(0,0) - frobeniusPower := new(0,0) - setPoly (mon : Rep) == - mon =$Rep m => mon - oldm := m - leadingCoefficient mon ^= 1 => error "polynomial must be monic" - -- following copy code needed since FFPOLY can modify mon - copymon:Rep:= 0 - while not zero? mon repeat - copymon := monomial(leadingCoefficient mon, degree mon)$Rep + copymon - mon := reductum mon - m := copymon - d := degree(m)$Rep - d1 := (d-1)::NonNegativeInteger - twod := 2*d1+1 - power := computePowers() - if frobenius? then - degree(oldm)>1 and not((oldm exquo$Rep m) case "failed") => - for i in 1..d1 repeat - frobeniusPower(i) := reduce lift frobeniusPower(i) - frobeniusPower := computeFrobeniusPowers() - m - modulus == m - if R has Finite then - size == d * size$R - random == UnVectorise([random()$R for i in 0..d1]) - 0 == 0$Rep - 1 == 1$Rep - c * x == c *$Rep x - n * x == (n::R) *$Rep x - coerce(c:R):% == monomial(c,0)$Rep - coerce(x:%):OutputForm == coerce(x)$Rep - coefficient(x,e):R == coefficient(x,e)$Rep - reductum(x) == reductum(x)$Rep - leadingCoefficient x == (leadingCoefficient x)$Rep - degree x == (degree x)$Rep - lift(x) == x pretend Rep - reduce(p) == (monicDivide(p,m)$Rep).remainder - coerce(p) == reduce(p) - x = y == x =$Rep y - x + y == x +$Rep y - - x == -$Rep x - x * y == - p := x *$Rep y - ans:=0$Rep - while (n:=degree p)>d1 repeat - ans:=ans + leadingCoefficient(p)*power.(n-d) - p := reductum p - ans+p - Vectorise(x) == [coefficient(lift(x),i) for i in 0..d1] - UnVectorise(vect) == - reduce(+/[monomial(vect.(i+1),i) for i in 0..d1]) - computePowers == - mat : PrimitiveArray(%):= new(d,0) - mat.0:= reductum(-m)$Rep - w: % := monomial$Rep (1,1) - for i in 1..d1 repeat - mat.i := w *$Rep mat.(i-1) - if degree mat.i=d then - mat.i:= reductum mat.i + leadingCoefficient mat.i * mat.0 - mat - if frobenius? then - computeFrobeniusPowers() == - mat : PrimitiveArray(%):= new(d,1) - mat.1:= mult := monomial(1, size$R)$% - for i in 2..d1 repeat - mat.i := mult * mat.(i-1) - mat - - frobenius(a:%):% == - aq:% := 0 - while a^=0 repeat - aq:= aq + leadingCoefficient(a)*frobeniusPower(degree a) - a := reductum a - aq - - pow == power - monomial(c,e)== - if e "failed" - return reduce(uv.coef1) - - recip(y:%):Union(%, "failed") == 1 exquo y - divide(x:%, y:%) == - (q := (x exquo y)) case "failed" => error "not divisible" - [q, 0] - --- An(MM) == Vectorise(-(reduce(reductum(m))::MM)) --- LinearTransf(vect,MM) == --- ans:= 0::SquareMatrix(R) --- for i in 1..d do setelt(ans,i,1,vect.i) --- for j in 2..d do --- setelt(ans,1,j, elt(ans,d,j-1) * An(MM).1) --- for i in 2..d do --- setelt(ans,i,j, elt(ans,i-1,j-1) + elt(ans,d,j-1) * An(MM).i) --- ans - -@ -\section{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. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/modmonom.spad.pamphlet b/src/algebra/modmonom.spad.pamphlet deleted file mode 100644 index f96b812..0000000 --- a/src/algebra/modmonom.spad.pamphlet +++ /dev/null @@ -1,158 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra modmonom.spad} -\author{The Axiom Team} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{domain MODMONOM ModuleMonomial} -<>= -)abbrev domain MODMONOM ModuleMonomial -++ Description: -++ This package \undocumented -ModuleMonomial(IS: OrderedSet, - E: SetCategory, - ff:(MM, MM) -> Boolean): T == C where - - MM ==> Record(index:IS, exponent:E) - - T == OrderedSet with - exponent: $ -> E - ++ exponent(x) \undocumented - index: $ -> IS - ++ index(x) \undocumented - coerce: MM -> $ - ++ coerce(x) \undocumented - coerce: $ -> MM - ++ coerce(x) \undocumented - construct: (IS, E) -> $ - ++ construct(i,e) \undocumented - C == MM add - Rep:= MM - x:$ < y:$ == ff(x::Rep, y::Rep) - exponent(x:$):E == x.exponent - index(x:$): IS == x.index - coerce(x:$):MM == x::Rep::MM - coerce(x:MM):$ == x::Rep::$ - construct(i:IS, e:E):$ == [i, e]$MM::Rep::$ - -@ -\section{domain GMODPOL GeneralModulePolynomial} -<>= -)abbrev domain GMODPOL GeneralModulePolynomial -++ Description: -++ This package \undocumented -GeneralModulePolynomial(vl, R, IS, E, ff, P): public == private where - vl: List(Symbol) - R: CommutativeRing - IS: OrderedSet - NNI ==> NonNegativeInteger - E: DirectProductCategory(#vl, NNI) - MM ==> Record(index:IS, exponent:E) - ff: (MM, MM) -> Boolean - OV ==> OrderedVariableList(vl) - P: PolynomialCategory(R, E, OV) - ModMonom ==> ModuleMonomial(IS, E, ff) - - - public == Join(Module(P), Module(R)) with - leadingCoefficient: $ -> R - ++ leadingCoefficient(x) \undocumented - leadingMonomial: $ -> ModMonom - ++ leadingMonomial(x) \undocumented - leadingExponent: $ -> E - ++ leadingExponent(x) \undocumented - leadingIndex: $ -> IS - ++ leadingIndex(x) \undocumented - reductum: $ -> $ - ++ reductum(x) \undocumented - monomial: (R, ModMonom) -> $ - ++ monomial(r,x) \undocumented - unitVector: IS -> $ - ++ unitVector(x) \undocumented - build: (R, IS, E) -> $ - ++ build(r,i,e) \undocumented - multMonom: (R, E, $) -> $ - ++ multMonom(r,e,x) \undocumented - "*": (P,$) -> $ - ++ p*x \undocumented - - - private == FreeModule(R, ModMonom) add - Rep:= FreeModule(R, ModMonom) - leadingMonomial(p:$):ModMonom == leadingSupport(p)$Rep - leadingExponent(p:$):E == exponent(leadingMonomial p) - leadingIndex(p:$):IS == index(leadingMonomial p) - unitVector(i:IS):$ == monomial(1,[i, 0$E]$ModMonom) - - - ----------------------------------------------------------------------------- - - build(c:R, i:IS, e:E):$ == monomial(c, construct(i, e)) - - ----------------------------------------------------------------------------- - - ---- WARNING: assumes c ^= 0 - - multMonom(c:R, e:E, mp:$):$ == - zero? mp => mp - monomial(c * leadingCoefficient mp, [leadingIndex mp, - e + leadingExponent mp]) + multMonom(c, e, reductum mp) - - ----------------------------------------------------------------------------- - - - ((p:P) * (mp:$)):$ == - zero? p => 0 - multMonom(leadingCoefficient p, degree p, mp) + - reductum(p) * mp - -@ -\section{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. -@ -<<*>>= -<> - -<> -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/modring.spad.pamphlet b/src/algebra/modring.spad.pamphlet deleted file mode 100644 index 015a5c8..0000000 --- a/src/algebra/modring.spad.pamphlet +++ /dev/null @@ -1,280 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra modring.spad} -\author{Patrizia Gianni, Barry Trager} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{domain MODRING ModularRing} -<>= -)abbrev domain MODRING ModularRing -++ Author: P.Gianni, B.Trager -++ Date Created: -++ Date Last Updated: -++ Basic Functions: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ These domains are used for the factorization and gcds -++ of univariate polynomials over the integers in order to work modulo -++ different primes. -++ See \spadtype{EuclideanModularRing} ,\spadtype{ModularField} - -ModularRing(R,Mod,reduction:(R,Mod) -> R, - merge:(Mod,Mod) -> Union(Mod,"failed"), - exactQuo : (R,R,Mod) -> Union(R,"failed")) : C == T - where - R : CommutativeRing - Mod : AbelianMonoid - - C == Ring with - modulus : % -> Mod - ++ modulus(x) \undocumented - coerce : % -> R - ++ coerce(x) \undocumented - reduce : (R,Mod) -> % - ++ reduce(r,m) \undocumented - exQuo : (%,%) -> Union(%,"failed") - ++ exQuo(x,y) \undocumented - recip : % -> Union(%,"failed") - ++ recip(x) \undocumented - inv : % -> % - ++ inv(x) \undocumented - - T == add - --representation - Rep:= Record(val:R,modulo:Mod) - --declarations - x,y: % - - --define - modulus(x) == x.modulo - coerce(x) == x.val - coerce(i:Integer):% == [i::R,0]$Rep - i:Integer * x:% == (i::%)*x - coerce(x):OutputForm == (x.val)::OutputForm - reduce (a:R,m:Mod) == [reduction(a,m),m]$Rep - - characteristic():NonNegativeInteger == characteristic()$R - 0 == [0$R,0$Mod]$Rep - 1 == [1$R,0$Mod]$Rep - zero? x == zero? x.val --- one? x == one? x.val - one? x == (x.val = 1) - - newmodulo(m1:Mod,m2:Mod) : Mod == - r:=merge(m1,m2) - r case "failed" => error "incompatible moduli" - r::Mod - - x=y == - x.val = y.val => true - x.modulo = y.modulo => false - (x-y).val = 0 - x+y == reduce((x.val +$R y.val),newmodulo(x.modulo,y.modulo)) - x-y == reduce((x.val -$R y.val),newmodulo(x.modulo,y.modulo)) - -x == reduce ((-$R x.val),x.modulo) - x*y == reduce((x.val *$R y.val),newmodulo(x.modulo,y.modulo)) - - exQuo(x,y) == - xm:=x.modulo - if xm ^=$Mod y.modulo then xm:=newmodulo(xm,y.modulo) - r:=exactQuo(x.val,y.val,xm) - r case "failed"=> "failed" - [r::R,xm]$Rep - - --if R has EuclideanDomain then - recip x == - r:=exactQuo(1$R,x.val,x.modulo) - r case "failed" => "failed" - [r,x.modulo]$Rep - - inv x == - if (u:=recip x) case "failed" then error("not invertible") - else u::% - -@ -\section{domain EMR EuclideanModularRing} -<>= -)abbrev domain EMR EuclideanModularRing -++ Description: -++ These domains are used for the factorization and gcds -++ of univariate polynomials over the integers in order to work modulo -++ different primes. -++ See \spadtype{ModularRing}, \spadtype{ModularField} -EuclideanModularRing(S,R,Mod,reduction:(R,Mod) -> R, - merge:(Mod,Mod) -> Union(Mod,"failed"), - exactQuo : (R,R,Mod) -> Union(R,"failed")) : C == T - where - S : CommutativeRing - R : UnivariatePolynomialCategory S - Mod : AbelianMonoid - - C == EuclideanDomain with - modulus : % -> Mod - ++ modulus(x) \undocumented - coerce : % -> R - ++ coerce(x) \undocumented - reduce : (R,Mod) -> % - ++ reduce(r,m) \undocumented - exQuo : (%,%) -> Union(%,"failed") - ++ exQuo(x,y) \undocumented - recip : % -> Union(%,"failed") - ++ recip(x) \undocumented - inv : % -> % - ++ inv(x) \undocumented - elt : (%, R) -> R - ++ elt(x,r) or x.r \undocumented - - T == ModularRing(R,Mod,reduction,merge,exactQuo) add - - --representation - Rep:= Record(val:R,modulo:Mod) - --declarations - x,y,z: % - - divide(x,y) == - t:=merge(x.modulo,y.modulo) - t case "failed" => error "incompatible moduli" - xm:=t::Mod - yv:=y.val - invlcy:R --- if one? leadingCoefficient yv then invlcy:=1 - if (leadingCoefficient yv = 1) then invlcy:=1 - else - invlcy:=(inv reduce((leadingCoefficient yv)::R,xm)).val - yv:=reduction(invlcy*yv,xm) - r:=monicDivide(x.val,yv) - [reduce(invlcy*r.quotient,xm),reduce(r.remainder,xm)] - - if R has fmecg:(R,NonNegativeInteger,S,R)->R - then x rem y == - t:=merge(x.modulo,y.modulo) - t case "failed" => error "incompatible moduli" - xm:=t::Mod - yv:=y.val - invlcy:R --- if not one? leadingCoefficient yv then - if not (leadingCoefficient yv = 1) then - invlcy:=(inv reduce((leadingCoefficient yv)::R,xm)).val - yv:=reduction(invlcy*yv,xm) - dy:=degree yv - xv:=x.val - while (d:=degree xv - dy)>=0 repeat - xv:=reduction(fmecg(xv,d::NonNegativeInteger, - leadingCoefficient xv,yv),xm) - xv = 0 => return [xv,xm]$Rep - [xv,xm]$Rep - else x rem y == - t:=merge(x.modulo,y.modulo) - t case "failed" => error "incompatible moduli" - xm:=t::Mod - yv:=y.val - invlcy:R --- if not one? leadingCoefficient yv then - if not (leadingCoefficient yv = 1) then - invlcy:=(inv reduce((leadingCoefficient yv)::R,xm)).val - yv:=reduction(invlcy*yv,xm) - r:=monicDivide(x.val,yv) - reduce(r.remainder,xm) - - euclideanSize x == degree x.val - - unitCanonical x == - zero? x => x - degree(x.val) = 0 => 1 --- one? leadingCoefficient(x.val) => x - (leadingCoefficient(x.val) = 1) => x - invlcx:%:=inv reduce((leadingCoefficient(x.val))::R,x.modulo) - invlcx * x - - unitNormal x == --- zero?(x) or one?(leadingCoefficient(x.val)) => [1, x, 1] - zero?(x) or ((leadingCoefficient(x.val)) = 1) => [1, x, 1] - lcx := reduce((leadingCoefficient(x.val))::R,x.modulo) - invlcx:=inv lcx - degree(x.val) = 0 => [lcx, 1, invlcx] - [lcx, invlcx * x, invlcx] - - elt(x : %,s : R) : R == reduction(elt(x.val,s),x.modulo) - -@ -\section{domain MODFIELD ModularField} -<>= -)abbrev domain MODFIELD ModularField -++ These domains are used for the factorization and gcds -++ of univariate polynomials over the integers in order to work modulo -++ different primes. -++ See \spadtype{ModularRing}, \spadtype{EuclideanModularRing} -ModularField(R,Mod,reduction:(R,Mod) -> R, - merge:(Mod,Mod) -> Union(Mod,"failed"), - exactQuo : (R,R,Mod) -> Union(R,"failed")) : C == T - where - R : CommutativeRing - Mod : AbelianMonoid - - C == Field with - modulus : % -> Mod - ++ modulus(x) \undocumented - coerce : % -> R - ++ coerce(x) \undocumented - reduce : (R,Mod) -> % - ++ reduce(r,m) \undocumented - exQuo : (%,%) -> Union(%,"failed") - ++ exQuo(x,y) \undocumented - - T == ModularRing(R,Mod,reduction,merge,exactQuo) - -@ -\section{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. -@ -<<*>>= -<> - -<> -<> -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/moebius.spad.pamphlet b/src/algebra/moebius.spad.pamphlet deleted file mode 100644 index 2185b42..0000000 --- a/src/algebra/moebius.spad.pamphlet +++ /dev/null @@ -1,154 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra moebius.spad} -\author{Stephen M. Watt} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{domain MOEBIUS MoebiusTransform} -<>= -)abbrev domain MOEBIUS MoebiusTransform -++ 2-by-2 matrices acting on P1(F). -++ Author: Stephen "Say" Watt -++ Date Created: January 1987 -++ Date Last Updated: 11 April 1990 -++ Keywords: -++ Examples: -++ References: -MoebiusTransform(F): Exports == Implementation where - ++ MoebiusTransform(F) is the domain of fractional linear (Moebius) - ++ transformations over F. - F : Field - OUT ==> OutputForm - P1F ==> OnePointCompletion F -- projective 1-space over F - - Exports ==> Group with - - moebius: (F,F,F,F) -> % - ++ moebius(a,b,c,d) returns \spad{matrix [[a,b],[c,d]]}. - shift: F -> % - ++ shift(k) returns \spad{matrix [[1,k],[0,1]]} representing the map - ++ \spad{x -> x + k}. - scale: F -> % - ++ scale(k) returns \spad{matrix [[k,0],[0,1]]} representing the map - ++ \spad{x -> k * x}. - recip: () -> % - ++ recip() returns \spad{matrix [[0,1],[1,0]]} representing the map - ++ \spad{x -> 1 / x}. - shift: (%,F) -> % - ++ shift(m,h) returns \spad{shift(h) * m} - ++ (see \spadfunFrom{shift}{MoebiusTransform}). - scale: (%,F) -> % - ++ scale(m,h) returns \spad{scale(h) * m} - ++ (see \spadfunFrom{shift}{MoebiusTransform}). - recip: % -> % - ++ recip(m) = recip() * m - eval: (%,F) -> F - ++ eval(m,x) returns \spad{(a*x + b)/(c*x + d)} - ++ where \spad{m = moebius(a,b,c,d)} - ++ (see \spadfunFrom{moebius}{MoebiusTransform}). - eval: (%,P1F) -> P1F - ++ eval(m,x) returns \spad{(a*x + b)/(c*x + d)} - ++ where \spad{m = moebius(a,b,c,d)} - ++ (see \spadfunFrom{moebius}{MoebiusTransform}). - - Implementation ==> add - - Rep := Record(a: F,b: F,c: F,d: F) - - moebius(aa,bb,cc,dd) == [aa,bb,cc,dd] - - a(t:%):F == t.a - b(t:%):F == t.b - c(t:%):F == t.c - d(t:%):F == t.d - - 1 == moebius(1,0,0,1) - t * s == - moebius(b(t)*c(s) + a(t)*a(s), b(t)*d(s) + a(t)*b(s), _ - d(t)*c(s) + c(t)*a(s), d(t)*d(s) + c(t)*b(s)) - inv t == moebius(d(t),-b(t),-c(t),a(t)) - - shift f == moebius(1,f,0,1) - scale f == moebius(f,0,0,1) - recip() == moebius(0,1,1,0) - - shift(t,f) == moebius(a(t) + f*c(t), b(t) + f*d(t), c(t), d(t)) - scale(t,f) == moebius(f*a(t),f*b(t),c(t),d(t)) - recip t == moebius(c(t),d(t),a(t),b(t)) - - eval(t:%,f:F) == (a(t)*f + b(t))/(c(t)*f + d(t)) - eval(t:%,f:P1F) == - (ff := retractIfCan(f)@Union(F,"failed")) case "failed" => - (a(t)/c(t)) :: P1F - zero?(den := c(t) * (fff := ff :: F) + d(t)) => infinity() - ((a(t) * fff + b(t))/den) :: P1F - - coerce t == - var := "%x" :: OUT - num := (a(t) :: OUT) * var + (b(t) :: OUT) - den := (c(t) :: OUT) * var + (d(t) :: OUT) - rarrow(var,num/den) - - proportional?: (List F,List F) -> Boolean - proportional?(list1,list2) == - empty? list1 => empty? list2 - empty? list2 => false - zero? (x1 := first list1) => - (zero? first list2) and proportional?(rest list1,rest list2) - zero? (x2 := first list2) => false - map(#1 / x1,list1) = map(#1 / x2,list2) - - t = s == - list1 : List F := [a(t),b(t),c(t),d(t)] - list2 : List F := [a(s),b(s),c(s),d(s)] - proportional?(list1,list2) - -@ -\section{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. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/mring.spad.pamphlet b/src/algebra/mring.spad.pamphlet index 04c50f3..ff6b9cf 100644 --- a/src/algebra/mring.spad.pamphlet +++ b/src/algebra/mring.spad.pamphlet @@ -9,324 +9,6 @@ \eject \tableofcontents \eject -\section{domain MRING MonoidRing} -<>= -)abbrev domain MRING MonoidRing -++ Authors: Stephan M. Watt; revised by Johannes Grabmeier -++ Date Created: January 1986 -++ Date Last Updated: 14 December 1995, Mike Dewar -++ Basic Operations: *, +, monomials, coefficients -++ Related Constructors: Polynomial -++ Also See: -++ AMS Classifications: -++ Keywords: monoid ring, group ring, polynomials in non-commuting -++ indeterminates -++ References: -++ Description: -++ \spadtype{MonoidRing}(R,M), implements the algebra -++ of all maps from the monoid M to the commutative ring R with -++ finite support. -++ Multiplication of two maps f and g is defined -++ to map an element c of M to the (convolution) sum over {\em f(a)g(b)} -++ such that {\em ab = c}. Thus M can be identified with a canonical -++ basis and the maps can also be considered as formal linear combinations -++ of the elements in M. Scalar multiples of a basis element are called -++ monomials. A prominent example is the class of polynomials -++ where the monoid is a direct product of the natural numbers -++ with pointwise addition. When M is -++ \spadtype{FreeMonoid Symbol}, one gets polynomials -++ in infinitely many non-commuting variables. Another application -++ area is representation theory of finite groups G, where modules -++ over \spadtype{MonoidRing}(R,G) are studied. - -MonoidRing(R: Ring, M: Monoid): MRcategory == MRdefinition where - Term ==> Record(coef: R, monom: M) - - MRcategory ==> Join(Ring, RetractableTo M, RetractableTo R) with - monomial : (R, M) -> % - ++ monomial(r,m) creates a scalar multiple of the basis element m. - coefficient : (%, M) -> R - ++ coefficient(f,m) extracts the coefficient of m in f with respect - ++ to the canonical basis M. - coerce: List Term -> % - ++ coerce(lt) converts a list of terms and coefficients to a member of the domain. - terms : % -> List Term - ++ terms(f) gives the list of non-zero coefficients combined - ++ with their corresponding basis element as records. - ++ This is the internal representation. - map : (R -> R, %) -> % - ++ map(fn,u) maps function fn onto the coefficients - ++ of the non-zero monomials of u. - monomial? : % -> Boolean - ++ monomial?(f) tests if f is a single monomial. - coefficients: % -> List R - ++ coefficients(f) lists all non-zero coefficients. - monomials: % -> List % - ++ monomials(f) gives the list of all monomials whose - ++ sum is f. - numberOfMonomials: % -> NonNegativeInteger - ++ numberOfMonomials(f) is the number of non-zero coefficients - ++ with respect to the canonical basis. - if R has CharacteristicZero then CharacteristicZero - if R has CharacteristicNonZero then CharacteristicNonZero - if R has CommutativeRing then Algebra(R) - if (R has Finite and M has Finite) then Finite - if M has OrderedSet then - leadingMonomial : % -> M - ++ leadingMonomial(f) gives the monomial of f whose - ++ corresponding monoid element is the greatest - ++ among all those with non-zero coefficients. - leadingCoefficient: % -> R - ++ leadingCoefficient(f) gives the coefficient of f, whose - ++ corresponding monoid element is the greatest - ++ among all those with non-zero coefficients. - reductum : % -> % - ++ reductum(f) is f minus its leading monomial. - - MRdefinition ==> add - Ex ==> OutputForm - Cf ==> coef - Mn ==> monom - - Rep := List Term - - coerce(x: List Term): % == x :: % - - monomial(r:R, m:M) == - r = 0 => empty() - [[r, m]] - - if (R has Finite and M has Finite) then - size() == size()$R ** size()$M - - index k == - -- use p-adic decomposition of k - -- coefficient of p**j determines coefficient of index(i+p)$M - i:Integer := k rem size() - p:Integer := size()$R - n:Integer := size()$M - ans:% := 0 - for j in 0.. while i > 0 repeat - h := i rem p - -- we use index(p) = 0$R - if h ^= 0 then - c : R := index(h :: PositiveInteger)$R - m : M := index((j+n) :: PositiveInteger)$M - --ans := ans + c *$% m - ans := ans + monomial(c, m)$% - i := i quo p - ans - - lookup(z : %) : PositiveInteger == - -- could be improved, if M has OrderedSet - -- z = index lookup z, n = lookup index n - -- use p-adic decomposition of k - -- coefficient of p**j determines coefficient of index(i+p)$M - zero?(z) => size()$% pretend PositiveInteger - liTe : List Term := terms z -- all non-zero coefficients - p : Integer := size()$R - n : Integer := size()$M - res : Integer := 0 - for te in liTe repeat - -- assume that lookup(p)$R = 0 - l:NonNegativeInteger:=lookup(te.Mn)$M - ex : NonNegativeInteger := (n=l => 0;l) - co : Integer := lookup(te.Cf)$R - res := res + co * p ** ex - res pretend PositiveInteger - - random() == index( (1+(random()$Integer rem size()$%) )_ - pretend PositiveInteger)$% - - 0 == empty() - 1 == [[1, 1]] - terms a == (copy a) pretend List(Term) - monomials a == [[t] for t in a] - coefficients a == [t.Cf for t in a] - coerce(m:M):% == [[1, m]] - coerce(r:R): % == - -- coerce of ring - r = 0 => 0 - [[r, 1]] - coerce(n:Integer): % == - -- coerce of integers - n = 0 => 0 - [[n::R, 1]] - - a == [[ -t.Cf, t.Mn] for t in a] - if R has noZeroDivisors - then - (r:R) * (a:%) == - r = 0 => 0 - [[r*t.Cf, t.Mn] for t in a] - else - (r:R) * (a:%) == - r = 0 => 0 - [[rt, t.Mn] for t in a | (rt:=r*t.Cf) ^= 0] - if R has noZeroDivisors - then - (n:Integer) * (a:%) == - n = 0 => 0 - [[n*t.Cf, t.Mn] for t in a] - else - (n:Integer) * (a:%) == - n = 0 => 0 - [[nt, t.Mn] for t in a | (nt:=n*t.Cf) ^= 0] - map(f, a) == [[ft, t.Mn] for t in a | (ft:=f(t.Cf)) ^= 0] - numberOfMonomials a == #a - - retractIfCan(a:%):Union(M, "failed") == --- one?(#a) and one?(a.first.Cf) => a.first.Mn - ((#a) = 1) and ((a.first.Cf) = 1) => a.first.Mn - "failed" - - retractIfCan(a:%):Union(R, "failed") == --- one?(#a) and one?(a.first.Mn) => a.first.Cf - ((#a) = 1) and ((a.first.Mn) = 1) => a.first.Cf - "failed" - - if R has noZeroDivisors then - if M has Group then - recip a == - lt := terms a - #lt ^= 1 => "failed" - (u := recip lt.first.Cf) case "failed" => "failed" - --(u::R) * inv lt.first.Mn - monomial((u::R), inv lt.first.Mn)$% - else - recip a == - #a ^= 1 or a.first.Mn ^= 1 => "failed" - (u := recip a.first.Cf) case "failed" => "failed" - u::R::% - - mkTerm(r:R, m:M):Ex == - r=1 => m::Ex - r=0 or m=1 => r::Ex - r::Ex * m::Ex - - coerce(a:%):Ex == - empty? a => (0$Integer)::Ex - empty? rest a => mkTerm(a.first.Cf, a.first.Mn) - reduce(_+, [mkTerm(t.Cf, t.Mn) for t in a])$List(Ex) - - if M has OrderedSet then -- we mean totally ordered - -- Terms are stored in decending order. - leadingCoefficient a == (empty? a => 0; a.first.Cf) - leadingMonomial a == (empty? a => 1; a.first.Mn) - reductum a == (empty? a => a; rest a) - - a = b == - #a ^= #b => false - for ta in a for tb in b repeat - ta.Cf ^= tb.Cf or ta.Mn ^= tb.Mn => return false - true - - a + b == - c:% := empty() - while not empty? a and not empty? b repeat - ta := first a; tb := first b - ra := rest a; rb := rest b - c := - ta.Mn > tb.Mn => (a := ra; concat_!(c, ta)) - ta.Mn < tb.Mn => (b := rb; concat_!(c, tb)) - a := ra; b := rb - not zero?(r := ta.Cf+tb.Cf) => - concat_!(c, [r, ta.Mn]) - c - concat_!(c, concat(a, b)) - - coefficient(a, m) == - for t in a repeat - if t.Mn = m then return t.Cf - if t.Mn < m then return 0 - 0 - - - if M has OrderedMonoid then - - -- we use that multiplying an ordered list of monoid elements - -- by a single element respects the ordering - - if R has noZeroDivisors then - a:% * b:% == - +/[[[ta.Cf*tb.Cf, ta.Mn*tb.Mn]$Term - for tb in b ] for ta in reverse a] - else - a:% * b:% == - +/[[[r, ta.Mn*tb.Mn]$Term - for tb in b | not zero?(r := ta.Cf*tb.Cf)] - for ta in reverse a] - else -- M hasn't OrderedMonoid - - -- we cannot assume that mutiplying an ordered list of - -- monoid elements by a single element respects the ordering: - -- we have to order and to collect equal terms - ge : (Term,Term) -> Boolean - ge(s,t) == t.Mn <= s.Mn - - sortAndAdd : List Term -> List Term - sortAndAdd(liTe) == -- assume liTe not empty - liTe := sort(ge,liTe) - m : M := (first liTe).Mn - cf : R := (first liTe).Cf - res : List Term := [] - for te in rest liTe repeat - if m = te.Mn then - cf := cf + te.Cf - else - if not zero? cf then res := cons([cf,m]$Term, res) - m := te.Mn - cf := te.Cf - if not zero? cf then res := cons([cf,m]$Term, res) - reverse res - - - if R has noZeroDivisors then - a:% * b:% == - zero? a => a - zero? b => b -- avoid calling sortAndAdd with [] - +/[sortAndAdd [[ta.Cf*tb.Cf, ta.Mn*tb.Mn]$Term - for tb in b ] for ta in reverse a] - else - a:% * b:% == - zero? a => a - zero? b => b -- avoid calling sortAndAdd with [] - +/[sortAndAdd [[r, ta.Mn*tb.Mn]$Term - for tb in b | not zero?(r := ta.Cf*tb.Cf)] - for ta in reverse a] - - - else -- M hasn't OrderedSet - -- Terms are stored in random order. - a = b == - #a ^= #b => false - brace(a pretend List(Term)) =$Set(Term) brace(b pretend List(Term)) - - coefficient(a, m) == - for t in a repeat - t.Mn = m => return t.Cf - 0 - - addterm(Tabl: AssociationList(M,R), r:R, m:M):R == - (u := search(m, Tabl)) case "failed" => Tabl.m := r - zero?(r := r + u::R) => (remove_!(m, Tabl); 0) - Tabl.m := r - - a + b == - Tabl := table()$AssociationList(M,R) - for t in a repeat - Tabl t.Mn := t.Cf - for t in b repeat - addterm(Tabl, t.Cf, t.Mn) - [[Tabl m, m]$Term for m in keys Tabl] - - a:% * b:% == - Tabl := table()$AssociationList(M,R) - for ta in a repeat - for tb in (b pretend List(Term)) repeat - addterm(Tabl, ta.Cf*tb.Cf, ta.Mn*tb.Mn) - [[Tabl.m, m]$Term for m in keys Tabl] - -@ \section{package MRF2 MonoidRingFunctions2} <>= )abbrev package MRF2 MonoidRingFunctions2 @@ -395,7 +77,6 @@ MonoidRingFunctions2(R,S,M) : Exports == Implementation where <<*>>= <> -<> <> @ \eject diff --git a/src/algebra/mset.spad.pamphlet b/src/algebra/mset.spad.pamphlet deleted file mode 100644 index f6a63fd..0000000 --- a/src/algebra/mset.spad.pamphlet +++ /dev/null @@ -1,554 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra mset.spad} -\author{Stephen M. Watt, William H. Burge, Richard D. Jenks, Frederic Lehobey} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{domain MSET Multiset} -<>= --- mset.spad.pamphlet Multiset.input -)spool Multiset.output -)set message test on -)set message auto off -)clear all ---S 1 of 14 -s := multiset [1,2,3,4,5,4,3,2,3,4,5,6,7,4,10] ---R ---R ---R (1) {1,2: 2,3: 3,4: 4,2: 5,6,7,10} ---R Type: Multiset PositiveInteger ---E 1 - ---S 2 of 14 -insert!(3,s) ---R ---R ---R (2) {1,2: 2,4: 3,4: 4,2: 5,6,7,10} ---R Type: Multiset PositiveInteger ---E 2 - ---S 3 of 14 -remove!(3,s,1) ---R ---R ---R (3) {1,2: 2,3: 3,4: 4,2: 5,6,7,10} ---R Type: Multiset PositiveInteger ---E 3 - ---S 4 of 14 -s ---R ---R ---R (4) {1,2: 2,3: 3,4: 4,2: 5,6,7,10} ---R Type: Multiset PositiveInteger ---E 4 - ---S 5 of 14 -remove!(5,s) ---R ---R ---R (5) {1,2: 2,3: 3,4: 4,6,7,10} ---R Type: Multiset PositiveInteger ---E 5 - ---S 6 of 14 -s ---R ---R ---R (6) {1,2: 2,3: 3,4: 4,6,7,10} ---R Type: Multiset PositiveInteger ---E 6 - ---S 7 of 14 -count(5,s) ---R ---R ---R (7) 0 ---R Type: NonNegativeInteger ---E 7 - ---S 8 of 14 -t := multiset [2,2,2,-9] ---R ---R ---R (8) {3: 2,- 9} ---R Type: Multiset Integer ---E 8 - ---S 9 of 14 -U := union(s,t) ---R ---R ---R (9) {1,5: 2,3: 3,4: 4,6,7,10,- 9} ---R Type: Multiset Integer ---E 9 - ---S 10 of 14 -I := intersect(s,t) ---R ---R ---R (10) {5: 2} ---R Type: Multiset Integer ---E 10 - ---S 11 of 14 -difference(s,t) ---R ---R ---R (11) {1,3: 3,4: 4,6,7,10} ---R Type: Multiset Integer ---E 11 - ---S 12 of 14 -S := symmetricDifference(s,t) ---R ---R ---R (12) {1,3: 3,4: 4,6,7,10,- 9} ---R Type: Multiset Integer ---E 12 - ---S 13 of 14 -(U = union(S,I))@Boolean ---R ---R ---R (13) true ---R Type: Boolean ---E 13 - ---S 14 of 14 -t1 := multiset [1,2,2,3]; [t1 < t, t1 < s, t < s, t1 <= s] ---R ---R ---R (14) [false,true,false,true] ---R Type: List Boolean ---E 14 -)spool -)lisp (bye) -@ -<>= -==================================================================== -Multiset examples -==================================================================== - -The domain Multiset(R) is similar to Set(R) except that multiplicities -(counts of duplications) are maintained and displayed. Use the -operation multiset to create multisets from lists. All the standard -operations from sets are available for multisets. An element with -multiplicity greater than one has the multiplicity displayed first, -then a colon, and then the element. - -Create a multiset of integers. - - s := multiset [1,2,3,4,5,4,3,2,3,4,5,6,7,4,10] - {1,2: 2,3: 3,4: 4,2: 5,6,7,10} - Type: Multiset PositiveInteger - -The operation insert! adds an element to a multiset. - - insert!(3,s) - {1,2: 2,4: 3,4: 4,2: 5,6,7,10} - Type: Multiset PositiveInteger - -Use remove! to remove an element. If a third argument is present, it -specifies how many instances to remove. Otherwise all instances of the -element are removed. Display the resulting multiset. - - remove!(3,s,1); s - - {1,2: 2,3: 3,4: 4,2: 5,6,7,10} - Type: Multiset PositiveInteger - - remove!(5,s); s - {1,2: 2,3: 3,4: 4,6,7,10} - Type: Multiset PositiveInteger - -The operation count returns the number of copies of a given value. - - count(5,s) - 0 - Type: NonNegativeInteger - -A second multiset. - - t := multiset [2,2,2,-9] - {3: 2,- 9} - Type: Multiset Integer - -The union of two multisets is additive. - - U := union(s,t) - {1,5: 2,3: 3,4: 4,6,7,10,- 9} - Type: Multiset Integer - -The intersect operation gives the elements that are in common, with -additive multiplicity. - - I := intersect(s,t) - {5: 2} - Type: Multiset Integer - -The difference of s and t consists of the elements that s has but t -does not. Elements are regarded as indistinguishable, so that if s -and t have any element in common, the difference does not contain that -element. - - difference(s,t) - {1,3: 3,4: 4,6,7,10} - Type: Multiset Integer - -The symmetricDifference is the union of difference(s, t) and difference(t, s). - - S := symmetricDifference(s,t) - {1,3: 3,4: 4,6,7,10,- 9} - Type: Multiset Integer - -Check that the union of the symmetricDifference and the intersect -equals the union of the elements. - - (U = union(S,I))@Boolean - true - Type: Boolean - -Check some inclusion relations. - - t1 := multiset [1,2,2,3]; [t1 < t, t1 < s, t < s, t1 <= s] - [false,true,false,true] - Type: List Boolean - -See Also: -o )show Multiset -o $AXIOM/doc/src/algebra/mset.spad.dvi - -@ -<>= -)abbrev domain MSET Multiset -++ Author:Stephen M. Watt, William H. Burge, Richard D. Jenks, Frederic Lehobey -++ Date Created:NK -++ Date Last Updated: 14 June 1994 -++ Basic Operations: -++ Related Domains: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ Examples: -++ References: -++ Description: A multiset is a set with multiplicities. -Multiset(S: SetCategory): MultisetAggregate S with - finiteAggregate - shallowlyMutable - multiset: () -> % - ++ multiset()$D creates an empty multiset of domain D. - multiset: S -> % - ++ multiset(s) creates a multiset with singleton s. - multiset: List S -> % - ++ multiset(ls) creates a multiset with elements from \spad{ls}. - members: % -> List S - ++ members(ms) returns a list of the elements of \spad{ms} - ++ {\em without} their multiplicity. See also \spadfun{parts}. - remove: (S,%,Integer) -> % - ++ remove(x,ms,number) removes at most \spad{number} copies of - ++ element x if \spad{number} is positive, all of them if - ++ \spad{number} equals zero, and all but at most \spad{-number} if - ++ \spad{number} is negative. - remove: ( S -> Boolean ,%,Integer) -> % - ++ remove(p,ms,number) removes at most \spad{number} copies of - ++ elements x such that \spad{p(x)} is \spadfun{true} - ++ if \spad{number} is positive, all of them if - ++ \spad{number} equals zero, and all but at most \spad{-number} if - ++ \spad{number} is negative. - remove_!: (S,%,Integer) -> % - ++ remove!(x,ms,number) removes destructively at most \spad{number} - ++ copies of element x if \spad{number} is positive, all - ++ of them if \spad{number} equals zero, and all but at most - ++ \spad{-number} if \spad{number} is negative. - remove_!: ( S -> Boolean ,%,Integer) -> % - ++ remove!(p,ms,number) removes destructively at most \spad{number} - ++ copies of elements x such that \spad{p(x)} is - ++ \spadfun{true} if \spad{number} is positive, all of them if - ++ \spad{number} equals zero, and all but at most \spad{-number} if - ++ \spad{number} is negative. - - == add - - Tbl ==> Table(S, Integer) - tbl ==> table$Tbl - Rep := Record(count: Integer, table: Tbl) - - n: Integer - ms, m1, m2: % - t, t1, t2: Tbl - D ==> Record(entry: S, count: NonNegativeInteger) - K ==> Record(key: S, entry: Integer) - - elt(t:Tbl, s:S):Integer == - a := search(s,t)$Tbl - a case "failed" => 0 - a::Integer - - empty():% == [0,tbl()] - multiset():% == empty() - dictionary():% == empty() -- DictionaryOperations - set():% == empty() - brace():% == empty() - - construct(l:List S):% == - t := tbl() - n := 0 - for e in l repeat - t.e := inc t.e - n := inc n - [n, t] - multiset(l:List S):% == construct l - bag(l:List S):% == construct l -- BagAggregate - dictionary(l:List S):% == construct l -- DictionaryOperations - set(l:List S):% == construct l - brace(l:List S):% == construct l - - multiset(s:S):% == construct [s] - - if S has ConvertibleTo InputForm then - convert(ms:%):InputForm == - convert [convert("multiset"::Symbol)@InputForm, - convert(parts ms)@InputForm] - - members(ms:%):List S == keys ms.table - - coerce(ms:%):OutputForm == - l: List OutputForm := empty() - t := ms.table - colon := ": " :: OutputForm - for e in keys t repeat - ex := e::OutputForm - n := t.e - item := - n > 1 => hconcat [n :: OutputForm,colon, ex] - ex - l := cons(item,l) - brace l - - duplicates(ms:%):List D == -- MultiDictionary - ld : List D := empty() - t := ms.table - for e in keys t | (n := t.e) > 1 repeat - ld := cons([e,n::NonNegativeInteger],ld) - ld - - extract_!(ms:%):S == -- BagAggregate - empty? ms => error "extract: Empty multiset" - ms.count := dec ms.count - t := ms.table - e := inspect(t).key - if (n := t.e) > 1 then t.e := dec n - else remove_!(e,t) - e - - inspect(ms:%):S == inspect(ms.table).key -- BagAggregate - - insert_!(e:S,ms:%):% == -- BagAggregate - ms.count := inc ms.count - ms.table.e := inc ms.table.e - ms - - member?(e:S,ms:%):Boolean == member?(e,keys ms.table) - - empty?(ms:%):Boolean == ms.count = 0 - - #(ms:%):NonNegativeInteger == ms.count::NonNegativeInteger - - count(e:S, ms:%):NonNegativeInteger == ms.table.e::NonNegativeInteger - - remove_!(e:S, ms:%, max:Integer):% == - zero? max => remove_!(e,ms) - t := ms.table - if member?(e, keys t) then - ((n := t.e) <= max) => - remove_!(e,t) - ms.count := ms.count-n - max > 0 => - t.e := n-max - ms.count := ms.count-max - (n := n+max) > 0 => - t.e := -max - ms.count := ms.count-n - ms - - remove_!(p: S -> Boolean, ms:%, max:Integer):% == - zero? max => remove_!(p,ms) - t := ms.table - for e in keys t | p(e) repeat - ((n := t.e) <= max) => - remove_!(e,t) - ms.count := ms.count-n - max > 0 => - t.e := n-max - ms.count := ms.count-max - (n := n+max) > 0 => - t.e := -max - ms.count := ms.count-n - ms - - remove(e:S, ms:%, max:Integer):% == remove_!(e, copy ms, max) - - remove(p: S -> Boolean,ms:%,max:Integer):% == remove_!(p, copy ms, max) - - remove_!(e:S, ms:%):% == -- DictionaryOperations - t := ms.table - if member?(e, keys t) then - ms.count := ms.count-t.e - remove_!(e, t) - ms - - remove_!(p:S ->Boolean, ms:%):% == -- DictionaryOperations - t := ms.table - for e in keys t | p(e) repeat - ms.count := ms.count-t.e - remove_!(e, t) - ms - - select_!(p: S -> Boolean, ms:%):% == -- DictionaryOperations - remove_!(not p(#1), ms) - - removeDuplicates_!(ms:%):% == -- MultiDictionary - t := ms.table - l := keys t - for e in l repeat t.e := 1 - ms.count := #l - ms - - insert_!(e:S,ms:%,more:NonNegativeInteger):% == -- MultiDictionary - ms.count := ms.count+more - ms.table.e := ms.table.e+more - ms - - map_!(f: S->S, ms:%):% == -- HomogeneousAggregate - t := ms.table - t1 := tbl() - for e in keys t repeat - t1.f(e) := t.e - remove_!(e, t) - ms.table := t1 - ms - - map(f: S -> S, ms:%):% == map_!(f, copy ms) -- HomogeneousAggregate - - parts(m:%):List S == - l := empty()$List(S) - t := m.table - for e in keys t repeat - for i in 1..t.e repeat - l := cons(e,l) - l - - union(m1:%, m2:%):% == - t := tbl() - t1:= m1.table - t2:= m2.table - for e in keys t1 repeat t.e := t1.e - for e in keys t2 repeat t.e := t2.e + t.e - [m1.count + m2.count, t] - - intersect(m1:%, m2:%):% == --- if #m1 > #m2 then intersect(m2, m1) - t := tbl() - t1:= m1.table - t2:= m2.table - n := 0 - for e in keys t1 repeat - m := min(t1.e,t2.e) - m > 0 => - m := t1.e + t2.e - t.e := m - n := n + m - [n, t] - - difference(m1:%, m2:%):% == - t := tbl() - t1:= m1.table - t2:= m2.table - n := 0 - for e in keys t1 repeat - k1 := t1.e - k2 := t2.e - k1 > 0 and k2 = 0 => - t.e := k1 - n := n + k1 - n = 0 => empty() - [n, t] - - symmetricDifference(m1:%, m2:%):% == - union(difference(m1,m2), difference(m2,m1)) - - m1 = m2 == - m1.count ^= m2.count => false - t1 := m1.table - t2 := m2.table - for e in keys t1 repeat - t1.e ^= t2.e => return false - for e in keys t2 repeat - t1.e ^= t2.e => return false - true - - m1 < m2 == - m1.count >= m2.count => false - t1 := m1.table - t2 := m2.table - for e in keys t1 repeat - t1.e > t2.e => return false - m1.count < m2.count - - subset?(m1:%, m2:%):Boolean == - m1.count > m2.count => false - t1 := m1.table - t2 := m2.table - for e in keys t1 repeat t1.e > t2.e => return false - true - -@ -\section{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. -@ -<<*>>= -<> - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/mts.spad.pamphlet b/src/algebra/mts.spad.pamphlet deleted file mode 100644 index a733587..0000000 --- a/src/algebra/mts.spad.pamphlet +++ /dev/null @@ -1,367 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra mts.spad} -\author{William Burge, Stephen Watt, Clifton Williamson} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{domain SMTS SparseMultivariateTaylorSeries} -<>= -)abbrev domain SMTS SparseMultivariateTaylorSeries -++ This domain provides multivariate Taylor series -++ Authors: William Burge, Stephen Watt, Clifton Williamson -++ Date Created: 15 August 1988 -++ Date Last Updated: 18 May 1991 -++ Basic Operations: -++ Related Domains: -++ Also See: UnivariateTaylorSeries -++ AMS Classifications: -++ Keywords: multivariate, Taylor, series -++ Examples: -++ References: -++ Description: -++ This domain provides multivariate Taylor series with variables -++ from an arbitrary ordered set. A Taylor series is represented -++ by a stream of polynomials from the polynomial domain SMP. -++ The nth element of the stream is a form of degree n. SMTS is an -++ internal domain. -SparseMultivariateTaylorSeries(Coef,Var,SMP):_ - Exports == Implementation where - Coef : Ring - Var : OrderedSet - SMP : PolynomialCategory(Coef,IndexedExponents Var,Var) - I ==> Integer - L ==> List - NNI ==> NonNegativeInteger - OUT ==> OutputForm - PS ==> InnerTaylorSeries SMP - RN ==> Fraction Integer - ST ==> Stream - StS ==> Stream SMP - STT ==> StreamTaylorSeriesOperations SMP - STF ==> StreamTranscendentalFunctions SMP - ST2 ==> StreamFunctions2 - ST3 ==> StreamFunctions3 - - Exports ==> MultivariateTaylorSeriesCategory(Coef,Var) with - coefficient: (%,NNI) -> SMP - ++ \spad{coefficient(s, n)} gives the terms of total degree n. - coerce: Var -> % - ++ \spad{coerce(var)} converts a variable to a Taylor series - coerce: SMP -> % - ++ \spad{coerce(poly)} regroups the terms by total degree and forms - ++ a series. - "*":(SMP,%)->% - ++\spad{smp*ts} multiplies a TaylorSeries by a monomial SMP. - csubst:(L Var,L StS) -> (SMP -> StS) - ++\spad{csubst(a,b)} is for internal use only - - if Coef has Algebra Fraction Integer then - integrate: (%,Var,Coef) -> % - ++\spad{integrate(s,v,c)} is the integral of s with respect - ++ to v and having c as the constant of integration. - fintegrate: (() -> %,Var,Coef) -> % - ++\spad{fintegrate(f,v,c)} is the integral of \spad{f()} with respect - ++ to v and having c as the constant of integration. - ++ The evaluation of \spad{f()} is delayed. - - Implementation ==> PS add - - Rep := StS -- Below we use the fact that Rep of PS is Stream SMP. - extend(x,n) == extend(x,n + 1)$Rep - complete x == complete(x)$Rep - - evalstream:(%,L Var,L SMP) -> StS - evalstream(s:%,lv:(L Var),lsmp:(L SMP)):(ST SMP) == - scan(0,_+$SMP,map(eval(#1,lv,lsmp),s pretend StS))$ST2(SMP,SMP) - - addvariable:(Var,InnerTaylorSeries Coef) -> % - addvariable(v,s) == - ints := integers(0)$STT pretend ST NNI - map(monomial(#2 :: SMP,v,#1)$SMP,ints,s pretend ST Coef)$ST3(NNI,Coef,SMP) - - coefficient(s,n) == elt(s,n + 1)$Rep -- 1-based indexing for streams - ---% creation of series - - coerce(r:Coef) == monom(r::SMP,0)$STT - smp:SMP * p:% == (((smp) * (p pretend Rep))$STT)pretend % - r:Coef * p:% == (((r::SMP) * (p pretend Rep))$STT)pretend % - p:% * r:Coef == (((r::SMP) * ( p pretend Rep))$STT)pretend % - mts(p:SMP):% == - (uv := mainVariable p) case "failed" => monom(p,0)$STT - v := uv :: Var - s : % := 0 - up := univariate(p,v) - while not zero? up repeat - s := s + monomial(1,v,degree up) * mts(leadingCoefficient up) - up := reductum up - s - - coerce(p:SMP) == mts p - coerce(v:Var) == v :: SMP :: % - - monomial(r:%,v:Var,n:NNI) == - r * monom(monomial(1,v,n)$SMP,n)$STT - ---% evaluation - - substvar: (SMP,L Var,L %) -> % - substvar(p,vl,q) == - null vl => monom(p,0)$STT - (uv := mainVariable p) case "failed" => monom(p,0)$STT - v := uv :: Var - v = first vl => - s : % := 0 - up := univariate(p,v) - while not zero? up repeat - c := leadingCoefficient up - s := s + first q ** degree up * substvar(c,rest vl,rest q) - up := reductum up - s - substvar(p,rest vl,rest q) - - sortmfirst:(SMP,L Var,L %) -> % - sortmfirst(p,vl,q) == - nlv : L Var := sort(#1 > #2,vl) - nq : L % := [q position$(L Var) (i,vl) for i in nlv] - substvar(p,nlv,nq) - - csubst(vl,q) == sortmfirst(#1,vl,q pretend L(%)) pretend StS - - restCheck(s:StS):StS == - -- checks that stream is null or first element is 0 - -- returns empty() or rest of stream - empty? s => s - not zero? frst s => - error "eval: constant coefficient should be 0" - rst s - - eval(s:%,v:L Var,q:L %) == - #v ^= #q => - error "eval: number of variables should equal number of values" - nq : L StS := [restCheck(i pretend StS) for i in q] - addiag(map(csubst(v,nq),s pretend StS)$ST2(SMP,StS))$STT pretend % - - substmts(v:Var,p:SMP,q:%):% == - up := univariate(p,v) - ss : % := 0 - while not zero? up repeat - d:=degree up - c:SMP:=leadingCoefficient up - ss := ss + c* q ** d - up := reductum up - ss - - subststream(v:Var,p:SMP,q:StS):StS== - substmts(v,p,q pretend %) pretend StS - - comp1:(Var,StS,StS) -> StS - comp1(v,r,t)== addiag(map(subststream(v,#1,t),r)$ST2(SMP,StS))$STT - - comp(v:Var,s:StS,t:StS):StS == delay - empty? s => s - f := frst s; r : StS := rst s; - empty? r => s - empty? t => concat(f,comp1(v,r,empty()$StS)) - not zero? frst t => - error "eval: constant coefficient should be zero" - concat(f,comp1(v,r,rst t)) - - eval(s:%,v:Var,t:%) == comp(v,s pretend StS,t pretend StS) - ---% differentiation and integration - - differentiate(s:%,v:Var):% == - empty? s => 0 - map(differentiate(#1,v),rst s) - - if Coef has Algebra Fraction Integer then - - stream(x:%):Rep == x pretend Rep - - (x:%) ** (r:RN) == powern(r,stream x)$STT - (r:RN) * (x:%) == map(r * #1, stream x)$ST2(SMP,SMP) pretend % - (x:%) * (r:RN) == map(#1 * r,stream x )$ST2(SMP,SMP) pretend % - - exp x == exp(stream x)$STF - log x == log(stream x)$STF - - sin x == sin(stream x)$STF - cos x == cos(stream x)$STF - tan x == tan(stream x)$STF - cot x == cot(stream x)$STF - sec x == sec(stream x)$STF - csc x == csc(stream x)$STF - - asin x == asin(stream x)$STF - acos x == acos(stream x)$STF - atan x == atan(stream x)$STF - acot x == acot(stream x)$STF - asec x == asec(stream x)$STF - acsc x == acsc(stream x)$STF - - sinh x == sinh(stream x)$STF - cosh x == cosh(stream x)$STF - tanh x == tanh(stream x)$STF - coth x == coth(stream x)$STF - sech x == sech(stream x)$STF - csch x == csch(stream x)$STF - - asinh x == asinh(stream x)$STF - acosh x == acosh(stream x)$STF - atanh x == atanh(stream x)$STF - acoth x == acoth(stream x)$STF - asech x == asech(stream x)$STF - acsch x == acsch(stream x)$STF - - intsmp(v:Var,p: SMP): SMP == - up := univariate(p,v) - ss : SMP := 0 - while not zero? up repeat - d := degree up - c := leadingCoefficient up - ss := ss + inv((d+1) :: RN) * monomial(c,v,d+1)$SMP - up := reductum up - ss - - fintegrate(f,v,r) == - concat(r::SMP,delay map(intsmp(v,#1),f() pretend StS)) - integrate(s,v,r) == - concat(r::SMP,map(intsmp(v,#1),s pretend StS)) - - -- If there is more than one term of the same order, group them. - tout(p:SMP):OUT == - pe := p :: OUT - monomial? p => pe - paren pe - - showAll?: () -> Boolean - -- check a global Lisp variable - showAll?() == true - - coerce(s:%):OUT == - uu := s pretend Stream(SMP) - empty? uu => (0$SMP) :: OUT - n : NNI; count : NNI := _$streamCount$Lisp - l : List OUT := empty() - for n in 0..count while not empty? uu repeat - if frst(uu) ^= 0 then l := concat(tout frst uu,l) - uu := rst uu - if showAll?() then - for n in n.. while explicitEntries? uu and _ - not eq?(uu,rst uu) repeat - if frst(uu) ^= 0 then l := concat(tout frst uu,l) - uu := rst uu - l := - explicitlyEmpty? uu => l - eq?(uu,rst uu) and frst uu = 0 => l - concat(prefix("O" :: OUT,[n :: OUT]),l) - empty? l => (0$SMP) :: OUT - reduce("+",reverse_! l) - if Coef has Field then - stream(x:%):Rep == x pretend Rep - SF2==> StreamFunctions2 - p:% / r:Coef ==(map(#1/$SMP r,stream p)$SF2(SMP,SMP))pretend % - -@ -\section{domain TS TaylorSeries} -<>= -)abbrev domain TS TaylorSeries -++ Authors: Burge, Watt, Williamson -++ Date Created: 15 August 1988 -++ Date Last Updated: 18 May 1991 -++ Basic Operations: -++ Related Domains: SparseMultivariateTaylorSeries -++ Also See: UnivariateTaylorSeries -++ AMS Classifications: -++ Keywords: multivariate, Taylor, series -++ Examples: -++ References: -++ Description: -++ \spadtype{TaylorSeries} is a general multivariate Taylor series domain -++ over the ring Coef and with variables of type Symbol. -TaylorSeries(Coef): Exports == Implementation where - Coef : Ring - L ==> List - NNI ==> NonNegativeInteger - SMP ==> Polynomial Coef - StS ==> Stream SMP - - Exports ==> MultivariateTaylorSeriesCategory(Coef,Symbol) with - coefficient: (%,NNI) -> SMP - ++\spad{coefficient(s, n)} gives the terms of total degree n. - coerce: Symbol -> % - ++\spad{coerce(s)} converts a variable to a Taylor series - coerce: SMP -> % - ++\spad{coerce(s)} regroups terms of s by total degree - ++ and forms a series. - - if Coef has Algebra Fraction Integer then - integrate: (%,Symbol,Coef) -> % - ++\spad{integrate(s,v,c)} is the integral of s with respect - ++ to v and having c as the constant of integration. - fintegrate: (() -> %,Symbol,Coef) -> % - ++\spad{fintegrate(f,v,c)} is the integral of \spad{f()} with respect - ++ to v and having c as the constant of integration. - ++ The evaluation of \spad{f()} is delayed. - - Implementation ==> SparseMultivariateTaylorSeries(Coef,Symbol,SMP) add - Rep := StS -- Below we use the fact that Rep of PS is Stream SMP. - - polynomial(s,n) == - sum : SMP := 0 - for i in 0..n while not empty? s repeat - sum := sum + frst s - s:= rst s - sum - -@ -\section{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. -@ -<<*>>= -<> - -<> -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/multpoly.spad.pamphlet b/src/algebra/multpoly.spad.pamphlet index 68abc3c..40ad269 100644 --- a/src/algebra/multpoly.spad.pamphlet +++ b/src/algebra/multpoly.spad.pamphlet @@ -9,839 +9,6 @@ \eject \tableofcontents \eject -\section{domain POLY Polynomial} -<>= --- multpoly.spad.pamphlet Polynomial.input -)spool Polynomial.output -)set message test on -)set message auto off ---S 1 of 46 -x + 1 ---R ---R ---R (1) x + 1 ---R Type: Polynomial Integer ---E 1 - ---S 2 of 46 -z - 2.3 ---R ---R ---R (2) z - 2.3 ---R Type: Polynomial Float ---E 2 - ---S 3 of 46 -y**2 - z + 3/4 ---R ---R ---R 2 3 ---R (3) - z + y + - ---R 4 ---R Type: Polynomial Fraction Integer ---E 3 - ---S 4 of 46 -y **2 + x*y + y ---R ---R ---R 2 ---R (4) y + (x + 1)y ---R Type: Polynomial Integer ---E 4 - ---S 5 of 46 -% :: DMP([y,x],INT) ---R ---R ---R 2 ---R (5) y + y x + y ---R Type: DistributedMultivariatePolynomial([y,x],Integer) ---E 5 - ---S 6 of 46 -p := (y-1)**2 * x * z ---R ---R ---R 2 ---R (6) (x y - 2x y + x)z ---R Type: Polynomial Integer ---E 6 - ---S 7 of 46 -q := (y-1) * x * (z+5) ---R ---R ---R (7) (x y - x)z + 5x y - 5x ---R Type: Polynomial Integer ---E 7 - ---S 8 of 46 -factor(q) ---R ---R ---R (8) x(y - 1)(z + 5) ---R Type: Factored Polynomial Integer ---E 8 - ---S 9 of 46 -p - q**2 ---R ---R ---R (9) ---R 2 2 2 2 2 2 2 2 2 ---R (- x y + 2x y - x )z + ((- 10x + x)y + (20x - 2x)y - 10x + x)z ---R + ---R 2 2 2 2 ---R - 25x y + 50x y - 25x ---R Type: Polynomial Integer ---E 9 - ---S 10 of 46 -gcd(p,q) ---R ---R ---R (10) x y - x ---R Type: Polynomial Integer ---E 10 - ---S 11 of 46 -factor % ---R ---R ---R (11) x(y - 1) ---R Type: Factored Polynomial Integer ---E 11 - ---S 12 of 46 -lcm(p,q) ---R ---R ---R 2 2 2 ---R (12) (x y - 2x y + x)z + (5x y - 10x y + 5x)z ---R Type: Polynomial Integer ---E 12 - ---S 13 of 46 -content p ---R ---R ---R (13) 1 ---R Type: PositiveInteger ---E 13 - ---S 14 of 46 -resultant(p,q,z) ---R ---R ---R 2 3 2 2 2 2 ---R (14) 5x y - 15x y + 15x y - 5x ---R Type: Polynomial Integer ---E 14 - ---S 15 of 46 -resultant(p,q,x) ---R ---R ---R (15) 0 ---R Type: Polynomial Integer ---E 15 - ---S 16 of 46 -mainVariable p ---R ---R ---R (16) z ---R Type: Union(Symbol,...) ---E 16 - ---S 17 of 46 -mainVariable(1 :: POLY INT) ---R ---R ---R (17) "failed" ---R Type: Union("failed",...) ---E 17 - ---S 18 of 46 -ground? p ---R ---R ---R (18) false ---R Type: Boolean ---E 18 - ---S 19 of 46 -ground?(1 :: POLY INT) ---R ---R ---R (19) true ---R Type: Boolean ---E 19 - ---S 20 of 46 -variables p ---R ---R ---R (20) [z,y,x] ---R Type: List Symbol ---E 20 - ---S 21 of 46 -degree(p,x) ---R ---R ---R (21) 1 ---R Type: PositiveInteger ---E 21 - ---S 22 of 46 -degree(p,y) ---R ---R ---R (22) 2 ---R Type: PositiveInteger ---E 22 - ---S 23 of 46 -degree(p,z) ---R ---R ---R (23) 1 ---R Type: PositiveInteger ---E 23 - ---S 24 of 46 -degree(p,[x,y,z]) ---R ---R ---R (24) [1,2,1] ---R Type: List NonNegativeInteger ---E 24 - ---S 25 of 46 -minimumDegree(p,z) ---R ---R ---R (25) 1 ---R Type: PositiveInteger ---E 25 - ---S 26 of 46 -totalDegree p ---R ---R ---R (26) 4 ---R Type: PositiveInteger ---E 26 - ---S 27 of 46 -leadingMonomial p ---R ---R ---R 2 ---R (27) x y z ---R Type: Polynomial Integer ---E 27 - ---S 28 of 46 -reductum p ---R ---R ---R (28) (- 2x y + x)z ---R Type: Polynomial Integer ---E 28 - ---S 29 of 46 -p - leadingMonomial p - reductum p ---R ---R ---R (29) 0 ---R Type: Polynomial Integer ---E 29 - ---S 30 of 46 -leadingCoefficient p ---R ---R ---R (30) 1 ---R Type: PositiveInteger ---E 30 - ---S 31 of 46 -p ---R ---R ---R 2 ---R (31) (x y - 2x y + x)z ---R Type: Polynomial Integer ---E 31 - ---S 32 of 46 -eval(p,x,w) ---R ---R ---R 2 ---R (32) (w y - 2w y + w)z ---R Type: Polynomial Integer ---E 32 - ---S 33 of 46 -eval(p,x,1) ---R ---R ---R 2 ---R (33) (y - 2y + 1)z ---R Type: Polynomial Integer ---E 33 - ---S 34 of 46 -eval(p,x,y^2 - 1) ---R ---R ---R 4 3 ---R (34) (y - 2y + 2y - 1)z ---R Type: Polynomial Integer ---E 34 - ---S 35 of 46 -D(p,x) ---R ---R ---R 2 ---R (35) (y - 2y + 1)z ---R Type: Polynomial Integer ---E 35 - ---S 36 of 46 -D(p,y) ---R ---R ---R (36) (2x y - 2x)z ---R Type: Polynomial Integer ---E 36 - ---S 37 of 46 -D(p,z) ---R ---R ---R 2 ---R (37) x y - 2x y + x ---R Type: Polynomial Integer ---E 37 - ---S 38 of 46 -integrate(p,y) ---R ---R ---R 1 3 2 ---R (38) (- x y - x y + x y)z ---R 3 ---R Type: Polynomial Fraction Integer ---E 38 - ---S 39 of 46 -qr := monicDivide(p,x+1,x) ---R ---R ---R 2 2 ---R (39) [quotient= (y - 2y + 1)z,remainder= (- y + 2y - 1)z] ---R Type: Record(quotient: Polynomial Integer,remainder: Polynomial Integer) ---E 39 - ---S 40 of 46 -qr.remainder ---R ---R ---R 2 ---R (40) (- y + 2y - 1)z ---R Type: Polynomial Integer ---E 40 - ---S 41 of 46 -p - ((x+1) * qr.quotient + qr.remainder) ---R ---R ---R (41) 0 ---R Type: Polynomial Integer ---E 41 - ---S 42 of 46 -p/q ---R ---R ---R (y - 1)z ---R (42) -------- ---R z + 5 ---R Type: Fraction Polynomial Integer ---E 42 - ---S 43 of 46 -(2/3) * x**2 - y + 4/5 ---R ---R ---R 2 2 4 ---R (43) - y + - x + - ---R 3 5 ---R Type: Polynomial Fraction Integer ---E 43 - ---S 44 of 46 -% :: FRAC POLY INT ---R ---R ---R 2 ---R - 15y + 10x + 12 ---R (44) ----------------- ---R 15 ---R Type: Fraction Polynomial Integer ---E 44 - ---S 45 of 46 -% :: POLY FRAC INT ---R ---R ---R 2 2 4 ---R (45) - y + - x + - ---R 3 5 ---R Type: Polynomial Fraction Integer ---E 45 - ---S 46 of 46 -map(numeric,%) ---R ---R ---R 2 ---R (46) - 1.0 y + 0.6666666666 6666666667 x + 0.8 ---R Type: Polynomial Float ---E 46 -)spool -)lisp (bye) -@ -<>= -==================================================================== -Polynomial examples -==================================================================== - -The domain constructor Polynomial (abbreviation: POLY) provides -polynomials with an arbitrary number of unspecified variables. - -It is used to create the default polynomial domains in Axiom. Here -the coefficients are integers. - - x + 1 - x + 1 - Type: Polynomial Integer - -Here the coefficients have type Float. - - z - 2.3 - z - 2.3 - Type: Polynomial Float - -And here we have a polynomial in two variables with coefficients which -have type Fraction Integer. - - y**2 - z + 3/4 - 2 3 - - z + y + - - 4 - Type: Polynomial Fraction Integer - -The representation of objects of domains created by Polynomial is that -of recursive univariate polynomials. The term univariate means "one -variable". The term multivariate means "possibly more than one variable". - -This recursive structure is sometimes obvious from the display of a polynomial. - - y **2 + x*y + y - 2 - y + (x + 1)y - Type: Polynomial Integer - -In this example, you see that the polynomial is stored as a polynomial -in y with coefficients that are polynomials in x with integer coefficients. -In fact, you really don't need to worry about the representation unless you -are working on an advanced application where it is critical. The polynomial -types created from DistributedMultivariatePolynomial and -NewDistributedMultivariatePolynomial are stored and displayed in a -non-recursive manner. - -You see a "flat" display of the above polynomial by converting to -one of those types. - - % :: DMP([y,x],INT) - 2 - y + y x + y - Type: DistributedMultivariatePolynomial([y,x],Integer) - -We will demonstrate many of the polynomial facilities by using two -polynomials with integer coefficients. - -By default, the interpreter expands polynomial expressions, even if they -are written in a factored format. - - p := (y-1)**2 * x * z - 2 - (x y - 2x y + x)z - Type: Polynomial Integer - -See Factored to see how to create objects in factored form directly. - - q := (y-1) * x * (z+5) - (x y - x)z + 5x y - 5x - Type: Polynomial Integer - -The fully factored form can be recovered by using factor. - - factor(q) - x(y - 1)(z + 5) - Type: Factored Polynomial Integer - -This is the same name used for the operation to factor integers. Such -reuse of names is called overloading and makes it much easier to think -of solving problems in general ways. Axiom facilities for factoring -polynomials created with Polynomial are currently restricted to the -integer and rational number coefficient cases. - -The standard arithmetic operations are available for polynomials. - - p - q**2 - 2 2 2 2 2 2 2 2 2 - (- x y + 2x y - x )z + ((- 10x + x)y + (20x - 2x)y - 10x + x)z - + - 2 2 2 2 - - 25x y + 50x y - 25x - Type: Polynomial Integer - -The operation gcd is used to compute the greatest common divisor of -two polynomials. - - gcd(p,q) - x y - x - Type: Polynomial Integer - -In the case of p and q, the gcd is obvious from their definitions. We -factor the gcd to show this relationship better. - - factor % - x(y - 1) - Type: Factored Polynomial Integer - -The least common multiple is computed by using lcm. - - lcm(p,q) - 2 2 2 - (x y - 2x y + x)z + (5x y - 10x y + 5x)z - Type: Polynomial Integer - -Use content to compute the greatest common divisor of the coefficients -of the polynomial. - - content p - 1 - Type: PositiveInteger - -Many of the operations on polynomials require you to specify a variable. -For example, resultant requires you to give the variable in which the -polynomials should be expressed. - -This computes the resultant of the values of p and q, considering them -as polynomials in the variable z. They do not share a root when thought -of as polynomials in z. - - resultant(p,q,z) - 2 3 2 2 2 2 - 5x y - 15x y + 15x y - 5x - Type: Polynomial Integer - -This value is 0 because as polynomials in x the polynomials have a -common root. - - resultant(p,q,x) - 0 - Type: Polynomial Integer - -The data type used for the variables created by Polynomial is Symbol. -As mentioned above, the representation used by Polynomial is recursive -and so there is a main variable for nonconstant polynomials. - -The operation mainVariable returns this variable. The return type is -actually a union of Symbol and "failed". - - mainVariable p - z - Type: Union(Symbol,...) - -The latter branch of the union is be used if the polynomial has no -variables, that is, is a constant. - - mainVariable(1 :: POLY INT) - "failed" - Type: Union("failed",...) - -You can also use the predicate ground? to test whether a polynomial is -in fact a member of its ground ring. - - ground? p - false - Type: Boolean - - ground?(1 :: POLY INT) - true - Type: Boolean - -The complete list of variables actually used in a particular polynomial -is returned by variables. For constant polynomials, this list is empty. - - variables p - [z,y,x] - Type: List Symbol - -The degree operation returns the degree of a polynomial in a specific variable. - - degree(p,x) - 1 - Type: PositiveInteger - - degree(p,y) - 2 - Type: PositiveInteger - - degree(p,z) - 1 - Type: PositiveInteger - -If you give a list of variables for the second argument, a list of the -degrees in those variables is returned. - - degree(p,[x,y,z]) - [1,2,1] - Type: List NonNegativeInteger - -The minimum degree of a variable in a polynomial is computed using -minimumDegree. - - minimumDegree(p,z) - 1 - Type: PositiveInteger - -The total degree of a polynomial is returned by totalDegree. - - totalDegree p - 4 - Type: PositiveInteger - -It is often convenient to think of a polynomial as a leading monomial plus -the remaining terms. - - leadingMonomial p - 2 - x y z - Type: Polynomial Integer - -The reductum operation returns a polynomial consisting of the sum of -the monomials after the first. - - reductum p - (- 2x y + x)z - Type: Polynomial Integer - -These have the obvious relationship that the original polynomial is -equal to the leading monomial plus the reductum. - - p - leadingMonomial p - reductum p - 0 - Type: Polynomial Integer - -The value returned by leadingMonomial includes the coefficient of that term. -This is extracted by using leadingCoefficient on the original polynomial. - - leadingCoefficient p - 1 - Type: PositiveInteger - -The operation eval is used to substitute a value for a variable in a -polynomial. - - p - 2 - (x y - 2x y + x)z - Type: Polynomial Integer - -This value may be another variable, a constant or a polynomial. - - eval(p,x,w) - 2 - (w y - 2w y + w)z - Type: Polynomial Integer - - eval(p,x,1) - 2 - (y - 2y + 1)z - Type: Polynomial Integer - -Actually, all the things being substituted are just polynomials, -some more trivial than others. - - eval(p,x,y^2 - 1) - 4 3 - (y - 2y + 2y - 1)z - Type: Polynomial Integer - -Derivatives are computed using the D operation. - - D(p,x) - 2 - (y - 2y + 1)z - Type: Polynomial Integer - -The first argument is the polynomial and the second is the variable. - - D(p,y) - (2x y - 2x)z - Type: Polynomial Integer - -Even if the polynomial has only one variable, you must specify it. - - D(p,z) - 2 - x y - 2x y + x - Type: Polynomial Integer - -Integration of polynomials is similar and the integrate operation is used. - -Integration requires that the coefficients support division. Axiom -converts polynomials over the integers to polynomials over the rational -numbers before integrating them. - - integrate(p,y) - 1 3 2 - (- x y - x y + x y)z - 3 - Type: Polynomial Fraction Integer - -It is not possible, in general, to divide two polynomials. In our -example using polynomials over the integers, the operation monicDivide -divides a polynomial by a monic polynomial (that is, a polynomial with -leading coefficient equal to 1). The result is a record of the -quotient and remainder of the division. - -You must specify the variable in which to express the polynomial. - - qr := monicDivide(p,x+1,x) - 2 2 - [quotient= (y - 2y + 1)z,remainder= (- y + 2y - 1)z] - Type: Record(quotient: Polynomial Integer,remainder: Polynomial Integer) - -The selectors of the components of the record are quotient and remainder. -Issue this to extract the remainder. - - qr.remainder - 2 - (- y + 2y - 1)z - Type: Polynomial Integer - -Now that we can extract the components, we can demonstrate the -relationship among them and the arguments to our original expression -qr := monicDivide(p,x+1,x). - - p - ((x+1) * qr.quotient + qr.remainder) - 0 - Type: Polynomial Integer - -If the / operator is used with polynomials, a fraction object is -created. In this example, the result is an object of type -Fraction Polynomial Integer. - - p/q - (y - 1)z - -------- - z + 5 - Type: Fraction Polynomial Integer - -If you use rational numbers as polynomial coefficients, the -resulting object is of type Polynomial Fraction Integer. - - (2/3) * x**2 - y + 4/5 - 2 2 4 - - y + - x + - - 3 5 - Type: Polynomial Fraction Integer - -This can be converted to a fraction of polynomials and back again, if -required. - - % :: FRAC POLY INT - 2 - - 15y + 10x + 12 - ----------------- - 15 - Type: Fraction Polynomial Integer - - % :: POLY FRAC INT - 2 2 4 - - y + - x + - - 3 5 - Type: Polynomial Fraction Integer - -To convert the coefficients to floating point, map the numeric -operation on the coefficients of the polynomial. - - map(numeric,%) - - 1.0 y + 0.6666666666 6666666667 x + 0.8 - Type: Polynomial Float - -See Also: -o )help Factored -o )help UnivariatePolynomial -o )help MultivariatePolynomial -o )help DistributedMultivariatePolynomial -o )help NewDistributedMultivariatePolynomial -o )show Polynomial -o $AXIOM/doc/src/algebra/multpoly.spad.dvi - -@ -<>= -)abbrev domain POLY Polynomial -++ Author: Dave Barton, Barry Trager -++ Date Created: -++ Date Last Updated: -++ Basic Functions: Ring, degree, eval, coefficient, monomial, differentiate, -++ resultant, gcd -++ Related Constructors: SparseMultivariatePolynomial, MultivariatePolynomial -++ Also See: -++ AMS Classifications: -++ Keywords: polynomial, multivariate -++ References: -++ Description: -++ This type is the basic representation of sparse recursive multivariate -++ polynomials whose variables are arbitrary symbols. The ordering -++ is alphabetic determined by the Symbol type. -++ The coefficient ring may be non commutative, -++ but the variables are assumed to commute. - -Polynomial(R:Ring): - PolynomialCategory(R, IndexedExponents Symbol, Symbol) with - if R has Algebra Fraction Integer then - integrate: (%, Symbol) -> % - ++ integrate(p,x) computes the integral of \spad{p*dx}, i.e. - ++ integrates the polynomial p with respect to the variable x. - == SparseMultivariatePolynomial(R, Symbol) add - - import UserDefinedPartialOrdering(Symbol) - - coerce(p:%):OutputForm == - (r:= retractIfCan(p)@Union(R,"failed")) case R => r::R::OutputForm - a := - userOrdered?() => largest variables p - mainVariable(p)::Symbol - outputForm(univariate(p, a), a::OutputForm) - - if R has Algebra Fraction Integer then - integrate(p, x) == (integrate univariate(p, x)) (x::%) - -@ \section{package POLY2 PolynomialFunctions2} <>= )abbrev package POLY2 PolynomialFunctions2 @@ -869,839 +36,6 @@ PolynomialFunctions2(R:Ring, S:Ring): with @ -\section{domain MPOLY MultivariatePolynomial} -<>= --- multpoly.spad.pamphlet MultivariatePolynomial.input -)spool MultivariatePolynomial.output -)set message test on -)set message auto off -)clear all ---S 1 of 9 -m : MPOLY([x,y],INT) := (x^2 - x*y^3 +3*y)^2 ---R ---R ---R 4 3 3 6 2 4 2 ---R (1) x - 2y x + (y + 6y)x - 6y x + 9y ---R Type: MultivariatePolynomial([x,y],Integer) ---E 1 - ---S 2 of 9 -m :: MPOLY([y,x],INT) ---R ---R ---R 2 6 4 3 3 2 2 4 ---R (2) x y - 6x y - 2x y + 9y + 6x y + x ---R Type: MultivariatePolynomial([y,x],Integer) ---E 2 - ---S 3 of 9 -p : MPOLY([x,y],POLY INT) ---R ---R Type: Void ---E 3 - ---S 4 of 9 -p :: POLY INT ---R ---R ---R (4) p ---R Type: Polynomial Integer ---E 4 - ---S 5 of 9 -% :: MPOLY([a,b],POLY INT) ---R ---R ---R (5) p ---R Type: MultivariatePolynomial([a,b],Polynomial Integer) ---E 5 - ---S 6 of 9 -q : UP(x, FRAC MPOLY([y,z],INT)) ---R ---R Type: Void ---E 6 - ---S 7 of 9 -q := (x^2 - x*(z+1)/y +2)^2 ---R ---R ---R 2 2 ---R 4 - 2z - 2 3 4y + z + 2z + 1 2 - 4z - 4 ---R (7) x + -------- x + ----------------- x + -------- x + 4 ---R y 2 y ---R y ---R Type: UnivariatePolynomial(x,Fraction MultivariatePolynomial([y,z],Integer)) ---E 7 - ---S 8 of 9 -q :: UP(z, FRAC MPOLY([x,y],INT)) ---R ---R ---R (8) ---R 2 3 2 2 4 3 2 2 2 ---R x 2 - 2y x + 2x - 4y x y x - 2y x + (4y + 1)x - 4y x + 4y ---R -- z + -------------------- z + --------------------------------------- ---R 2 2 2 ---R y y y ---R Type: UnivariatePolynomial(z,Fraction MultivariatePolynomial([x,y],Integer)) ---E 8 - ---S 9 of 9 -q :: MPOLY([x,z], FRAC UP(y,INT)) ---R ---R ---R 2 ---R 4 2 2 3 1 2 2 4y + 1 2 4 4 ---R (9) x + (- - z - -)x + (-- z + -- z + -------)x + (- - z - -)x + 4 ---R y y 2 2 2 y y ---R y y y ---R Type: MultivariatePolynomial([x,z],Fraction UnivariatePolynomial(y,Integer)) ---E 9 -)spool -)lisp (bye) -@ -<>= -==================================================================== -MultivariatePolynomial examples -==================================================================== - -The domain constructor MultivariatePolynomial is similar to Polynomial -except that it specifies the variables to be used. Polynomial are -available for MultivariatePolynomial. The abbreviation for -MultivariatePolynomial is MPOLY. The type expressions - - MultivariatePolynomial([x,y],Integer) - MPOLY([x,y],INT) - -refer to the domain of multivariate polynomials in the variables x and -y where the coefficients are restricted to be integers. The first -variable specified is the main variable and the display of the polynomial -reflects this. - -This polynomial appears with terms in descending powers of the variable x. - - m : MPOLY([x,y],INT) := (x^2 - x*y^3 +3*y)^2 - 4 3 3 6 2 4 2 - x - 2y x + (y + 6y)x - 6y x + 9y - Type: MultivariatePolynomial([x,y],Integer) - -It is easy to see a different variable ordering by doing a conversion. - - m :: MPOLY([y,x],INT) - 2 6 4 3 3 2 2 4 - x y - 6x y - 2x y + 9y + 6x y + x - Type: MultivariatePolynomial([y,x],Integer) - -You can use other, unspecified variables, by using Polynomial in the -coefficient type of MPOLY. - - p : MPOLY([x,y],POLY INT) - Type: Void - -Conversions can be used to re-express such polynomials in terms of -the other variables. For example, you can first push all the -variables into a polynomial with integer coefficients. - - p :: POLY INT - p - Type: Polynomial Integer - -Now pull out the variables of interest. - - % :: MPOLY([a,b],POLY INT) - p - Type: MultivariatePolynomial([a,b],Polynomial Integer) - -Restriction: - Axiom does not allow you to create types where MultivariatePolynomial - is contained in the coefficient type of Polynomial. Therefore, - MPOLY([x,y],POLY INT) is legal but POLY MPOLY([x,y],INT) is not. - -Multivariate polynomials may be combined with univariate polynomials -to create types with special structures. - - q : UP(x, FRAC MPOLY([y,z],INT)) - Type: Void - -This is a polynomial in x whose coefficients are quotients of polynomials -in y and z. - - q := (x^2 - x*(z+1)/y +2)^2 - 2 2 - 4 - 2z - 2 3 4y + z + 2z + 1 2 - 4z - 4 - (7) x + -------- x + ----------------- x + -------- x + 4 - y 2 y - y - Type: UnivariatePolynomial(x,Fraction MultivariatePolynomial([y,z],Integer)) - -Use conversions for structural rearrangements. z does not appear in a -denominator and so it can be made the main variable. - - q :: UP(z, FRAC MPOLY([x,y],INT)) - 2 3 2 2 4 3 2 2 2 - x 2 - 2y x + 2x - 4y x y x - 2y x + (4y + 1)x - 4y x + 4y - -- z + -------------------- z + --------------------------------------- - 2 2 2 - y y y - Type: UnivariatePolynomial(z,Fraction MultivariatePolynomial([x,y],Integer)) - -Or you can make a multivariate polynomial in x and z whose -coefficients are fractions in polynomials in y. - - q :: MPOLY([x,z], FRAC UP(y,INT)) - 4 2 2 3 1 2 2 4y + 1 2 4 4 - x + (- - z - -)x + (-- z + -- z + -------)x + (- - z - -)x + 4 - y y 2 2 2 y y - y y y - Type: MultivariatePolynomial([x,z],Fraction UnivariatePolynomial(y,Integer)) - -A conversion like q :: MPOLY([x,y], FRAC UP(z,INT)) is not possible in -this example because y appears in the denominator of a fraction. As -you can see, Axiom provides extraordinary flexibility in the -manipulation and display of expressions via its conversion facility. - -See Also: -o )help DistributedMultivariatePolynomial -o )help UnivariatePolynomial -o )help Polynomial -o )show MultivariatePolynomial -o $AXIOM/doc/src/algebra/multpoly.spad.dvi - -@ -<>= -)abbrev domain MPOLY MultivariatePolynomial -++ Author: Dave Barton, Barry Trager -++ Date Created: -++ Date Last Updated: -++ Basic Functions: Ring, degree, eval, coefficient, monomial, differentiate, -++ resultant, gcd -++ Related Constructors: SparseMultivariatePolynomial, Polynomial -++ Also See: -++ AMS Classifications: -++ Keywords: polynomial, multivariate -++ References: -++ Description: -++ This type is the basic representation of sparse recursive multivariate -++ polynomials whose variables are from a user specified list of symbols. -++ The ordering is specified by the position of the variable in the list. -++ The coefficient ring may be non commutative, -++ but the variables are assumed to commute. - -MultivariatePolynomial(vl:List Symbol, R:Ring) - == SparseMultivariatePolynomial(--SparseUnivariatePolynomial, - R, OrderedVariableList vl) - -@ -\section{domain SMP SparseMultivariatePolynomial} -<>= -)abbrev domain SMP SparseMultivariatePolynomial -++ Author: Dave Barton, Barry Trager -++ Date Created: -++ Date Last Updated: 30 November 1994 -++ Fix History: -++ 30 Nov 94: added gcdPolynomial for float-type coefficients -++ Basic Functions: Ring, degree, eval, coefficient, monomial, differentiate, -++ resultant, gcd -++ Related Constructors: Polynomial, MultivariatePolynomial -++ Also See: -++ AMS Classifications: -++ Keywords: polynomial, multivariate -++ References: -++ Description: -++ This type is the basic representation of sparse recursive multivariate -++ polynomials. It is parameterized by the coefficient ring and the -++ variable set which may be infinite. The variable ordering is determined -++ by the variable set parameter. The coefficient ring may be non-commutative, -++ but the variables are assumed to commute. - -SparseMultivariatePolynomial(R: Ring,VarSet: OrderedSet): C == T where - pgcd ==> PolynomialGcdPackage(IndexedExponents VarSet,VarSet,R,%) - C == PolynomialCategory(R,IndexedExponents(VarSet),VarSet) - SUP ==> SparseUnivariatePolynomial - T == add - --constants - --D := F(%) replaced by next line until compiler support completed - - --representations - D := SparseUnivariatePolynomial(%) - VPoly:= Record(v:VarSet,ts:D) - Rep:= Union(R,VPoly) - - --local function - - - --declarations - fn: R -> R - n: Integer - k: NonNegativeInteger - kp:PositiveInteger - k1:NonNegativeInteger - c: R - mvar: VarSet - val : R - var:VarSet - up: D - p,p1,p2,pval: % - Lval : List(R) - Lpval : List(%) - Lvar : List(VarSet) - - --define - 0 == 0$R::% - 1 == 1$R::% - - - zero? p == p case R and zero?(p)$R --- one? p == p case R and one?(p)$R - one? p == p case R and ((p) = 1)$R - -- a local function - red(p:%):% == - p case R => 0 - if ground?(reductum p.ts) then leadingCoefficient(reductum p.ts) else [p.v,reductum p.ts]$VPoly - - numberOfMonomials(p): NonNegativeInteger == - p case R => - zero?(p)$R => 0 - 1 - +/[numberOfMonomials q for q in coefficients(p.ts)] - - coerce(mvar):% == [mvar,monomial(1,1)$D]$VPoly - - monomial? p == - p case R => true - sup : D := p.ts - 1 ^= numberOfMonomials(sup) => false - monomial? leadingCoefficient(sup)$D - --- local - moreThanOneVariable?: % -> Boolean - - moreThanOneVariable? p == - p case R => false - q:=p.ts - any?(not ground? #1 ,coefficients q) => true - false - - -- if we already know we use this (slighlty) faster function - univariateKnown: % -> SparseUnivariatePolynomial R - - univariateKnown p == - p case R => (leadingCoefficient p) :: SparseUnivariatePolynomial(R) - monomial( leadingCoefficient p,degree p.ts)+ univariateKnown(red p) - - univariate p == - p case R =>(leadingCoefficient p) :: SparseUnivariatePolynomial(R) - moreThanOneVariable? p => error "not univariate" - monomial( leadingCoefficient p,degree p.ts)+ univariate(red p) - - multivariate (u:SparseUnivariatePolynomial(R),var:VarSet) == - ground? u => (leadingCoefficient u) ::% - [var,monomial(leadingCoefficient u,degree u)$D]$VPoly + - multivariate(reductum u,var) - - univariate(p:%,mvar:VarSet):SparseUnivariatePolynomial(%) == - p case R or mvar>p.v => monomial(p,0)$D - pt:=p.ts - mvar=p.v => pt - monomial(1,p.v,degree pt)*univariate(leadingCoefficient pt,mvar)+ - univariate(red p,mvar) - --- a local functions, used in next definition - unlikeUnivReconstruct(u:SparseUnivariatePolynomial(%),mvar:VarSet):% == - zero? (d:=degree u) => coefficient(u,0) - monomial(leadingCoefficient u,mvar,d)+ - unlikeUnivReconstruct(reductum u,mvar) - - multivariate(u:SparseUnivariatePolynomial(%),mvar:VarSet):% == - ground? u => coefficient(u,0) - uu:=u - while not zero? uu repeat - cc:=leadingCoefficient uu - cc case R or mvar > cc.v => uu:=reductum uu - return unlikeUnivReconstruct(u,mvar) - [mvar,u]$VPoly - - ground?(p:%):Boolean == - p case R => true - false - --- const p == --- p case R => p --- error "the polynomial is not a constant" - - monomial(p,mvar,k1) == - zero? k1 or zero? p => p - p case R or mvar>p.v => [mvar,monomial(p,k1)$D]$VPoly - p*[mvar,monomial(1,k1)$D]$VPoly - - monomial(c:R,e:IndexedExponents(VarSet)):% == - zero? e => (c::%) - monomial(1,leadingSupport e, leadingCoefficient e) * - monomial(c,reductum e) - - coefficient(p:%, e:IndexedExponents(VarSet)) : R == - zero? e => - p case R => p::R - coefficient(coefficient(p.ts,0),e) - p case R => 0 - ve := leadingSupport e - vp := p.v - ve < vp => - coefficient(coefficient(p.ts,0),e) - ve > vp => 0 - coefficient(coefficient(p.ts,leadingCoefficient e),reductum e) - --- coerce(e:IndexedExponents(VarSet)) : % == --- e = 0 => 1 --- monomial(1,leadingSupport e, leadingCoefficient e) * --- (reductum e)::% - --- retract(p:%):IndexedExponents(VarSet) == --- q:Union(IndexedExponents(VarSet),"failed"):=retractIfCan p --- q :: IndexedExponents(VarSet) - --- retractIfCan(p:%):Union(IndexedExponents(VarSet),"failed") == --- p = 0 => degree p --- reductum(p)=0 and leadingCoefficient(p)=1 => degree p --- "failed" - - coerce(n) == n::R::% - coerce(c) == c::% - characteristic == characteristic$R - - recip(p) == - p case R => (uu:=recip(p::R);uu case "failed" => "failed"; uu::%) - "failed" - - - p == - p case R => -$R p - [p.v, - p.ts]$VPoly - n * p == - p case R => n * p::R - mvar:=p.v - up:=n*p.ts - if ground? up then leadingCoefficient(up) else [mvar,up]$VPoly - c * p == - c = 1 => p - p case R => c * p::R - mvar:=p.v - up:=c*p.ts - if ground? up then leadingCoefficient(up) else [mvar,up]$VPoly - p1 + p2 == - p1 case R and p2 case R => p1 +$R p2 - p1 case R => [p2.v, p1::D + p2.ts]$VPoly - p2 case R => [p1.v, p1.ts + p2::D]$VPoly - p1.v = p2.v => - mvar:=p1.v - up:=p1.ts+p2.ts - if ground? up then leadingCoefficient(up) else [mvar,up]$VPoly - p1.v < p2.v => - [p2.v, p1::D + p2.ts]$VPoly - [p1.v, p1.ts + p2::D]$VPoly - - p1 - p2 == - p1 case R and p2 case R => p1 -$R p2 - p1 case R => [p2.v, p1::D - p2.ts]$VPoly - p2 case R => [p1.v, p1.ts - p2::D]$VPoly - p1.v = p2.v => - mvar:=p1.v - up:=p1.ts-p2.ts - if ground? up then leadingCoefficient(up) else [mvar,up]$VPoly - p1.v < p2.v => - [p2.v, p1::D - p2.ts]$VPoly - [p1.v, p1.ts - p2::D]$VPoly - - p1 = p2 == - p1 case R => - p2 case R => p1 =$R p2 - false - p2 case R => false - p1.v = p2.v => p1.ts = p2.ts - false - - p1 * p2 == - p1 case R => p1::R * p2 - p2 case R => - mvar:=p1.v - up:=p1.ts*p2 - if ground? up then leadingCoefficient(up) else [mvar,up]$VPoly - p1.v = p2.v => - mvar:=p1.v - up:=p1.ts*p2.ts - if ground? up then leadingCoefficient(up) else [mvar,up]$VPoly - p1.v > p2.v => - mvar:=p1.v - up:=p1.ts*p2 - if ground? up then leadingCoefficient(up) else [mvar,up]$VPoly - --- p1.v < p2.v - mvar:=p2.v - up:=p1*p2.ts - if ground? up then leadingCoefficient(up) else [mvar,up]$VPoly - - p ^ kp == p ** (kp pretend NonNegativeInteger) - p ** kp == p ** (kp pretend NonNegativeInteger ) - p ^ k == p ** k - p ** k == - p case R => p::R ** k - -- univariate special case - not moreThanOneVariable? p => - multivariate( (univariateKnown p) ** k , p.v) - mvar:=p.v - up:=p.ts ** k - if ground? up then leadingCoefficient(up) else [mvar,up]$VPoly - - if R has IntegralDomain then - UnitCorrAssoc ==> Record(unit:%,canonical:%,associate:%) - unitNormal(p) == - u,c,a:R - p case R => - (u,c,a):= unitNormal(p::R)$R - [u::%,c::%,a::%]$UnitCorrAssoc - (u,c,a):= unitNormal(leadingCoefficient(p))$R - [u::%,(a*p)::%,a::%]$UnitCorrAssoc - unitCanonical(p) == - p case R => unitCanonical(p::R)$R - (u,c,a):= unitNormal(leadingCoefficient(p))$R - a*p - unit? p == - p case R => unit?(p::R)$R - false - associates?(p1,p2) == - p1 case R => p2 case R and associates?(p1,p2)$R - p2 case VPoly and p1.v = p2.v and associates?(p1.ts,p2.ts) - - if R has approximate then - p1 exquo p2 == - p1 case R and p2 case R => - a:= (p1::R exquo p2::R) - if a case "failed" then "failed" else a::% - zero? p1 => p1 --- one? p2 => p1 - (p2 = 1) => p1 - p1 case R or p2 case VPoly and p1.v < p2.v => "failed" - p2 case R or p1.v > p2.v => - a:= (p1.ts exquo p2::D) - a case "failed" => "failed" - [p1.v,a]$VPoly::% - -- The next test is useful in the case that R has inexact - -- arithmetic (in particular when it is Interval(...)). - -- In the case where the test succeeds, empirical evidence - -- suggests that it can speed up the computation several times, - -- but in other cases where there are a lot of variables - -- and p1 and p2 differ only in the low order terms (e.g. p1=p2+1) - -- it slows exquo down by about 15-20%. - p1 = p2 => 1 - a:= p1.ts exquo p2.ts - a case "failed" => "failed" - mvar:=p1.v - up:SUP %:=a - if ground? (up) then leadingCoefficient(up) else [mvar,up]$VPoly::% - else - p1 exquo p2 == - p1 case R and p2 case R => - a:= (p1::R exquo p2::R) - if a case "failed" then "failed" else a::% - zero? p1 => p1 --- one? p2 => p1 - (p2 = 1) => p1 - p1 case R or p2 case VPoly and p1.v < p2.v => "failed" - p2 case R or p1.v > p2.v => - a:= (p1.ts exquo p2::D) - a case "failed" => "failed" - [p1.v,a]$VPoly::% - a:= p1.ts exquo p2.ts - a case "failed" => "failed" - mvar:=p1.v - up:SUP %:=a - if ground? up then leadingCoefficient(up) else [mvar,up]$VPoly::% - - map(fn,p) == - p case R => fn(p) - mvar:=p.v - up:=map(map(fn,#1),p.ts) - if ground? up then leadingCoefficient(up) else [mvar,up]$VPoly - - if R has Field then - (p : %) / (r : R) == inv(r) * p - - if R has GcdDomain then - content(p) == - p case R => p - c :R :=0 - up:=p.ts --- while not(zero? up) and not(one? c) repeat - while not(zero? up) and not(c = 1) repeat - c:=gcd(c,content leadingCoefficient(up)) - up := reductum up - c - - if R has EuclideanDomain and R has CharacteristicZero and not(R has FloatingPointSystem) then - content(p,mvar) == - p case R => p - gcd(coefficients univariate(p,mvar))$pgcd - - gcd(p1,p2) == gcd(p1,p2)$pgcd - - gcd(lp:List %) == gcd(lp)$pgcd - - gcdPolynomial(a:SUP $,b:SUP $):SUP $ == gcd(a,b)$pgcd - - else if R has GcdDomain then - content(p,mvar) == - p case R => p - content univariate(p,mvar) - - gcd(p1,p2) == - p1 case R => - p2 case R => gcd(p1,p2)$R::% - zero? p1 => p2 - gcd(p1, content(p2.ts)) - p2 case R => - zero? p2 => p1 - gcd(p2, content(p1.ts)) - p1.v < p2.v => gcd(p1, content(p2.ts)) - p1.v > p2.v => gcd(content(p1.ts), p2) - mvar:=p1.v - up:=gcd(p1.ts, p2.ts) - if ground? up then leadingCoefficient(up) else [mvar,up]$VPoly - - if R has FloatingPointSystem then - -- eventually need a better notion of gcd's over floats - -- this essentially computes the gcds of the monomial contents - gcdPolynomial(a:SUP $,b:SUP $):SUP $ == - ground? (a) => - zero? a => b - gcd(leadingCoefficient a, content b)::SUP $ - ground?(b) => - zero? b => b - gcd(leadingCoefficient b, content a)::SUP $ - conta := content a - mona:SUP $ := monomial(conta, minimumDegree a) - if mona ^= 1 then - a := (a exquo mona)::SUP $ - contb := content b - monb:SUP $ := monomial(contb, minimumDegree b) - if monb ^= 1 then - b := (b exquo monb)::SUP $ - mong:SUP $ := monomial(gcd(conta, contb), - min(degree mona, degree monb)) - degree(a) >= degree b => - not((a exquo b) case "failed") => - mong * b - mong - not((b exquo a) case "failed") => mong * a - mong - - coerce(p):OutputForm == - p case R => (p::R)::OutputForm - outputForm(p.ts,p.v::OutputForm) - - coefficients p == - p case R => list(p :: R)$List(R) - "append"/[coefficients(p1)$% for p1 in coefficients(p.ts)] - - retract(p:%):R == - p case R => p :: R - error "cannot retract nonconstant polynomial" - - retractIfCan(p:%):Union(R, "failed") == - p case R => p::R - "failed" - --- leadingCoefficientRecursive(p:%):% == --- p case R => p --- leadingCoefficient p.ts - - mymerge:(List VarSet,List VarSet) ->List VarSet - mymerge(l:List VarSet,m:List VarSet):List VarSet == - empty? l => m - empty? m => l - first l = first m => - empty? rest l => - setrest!(l,rest m) - l - empty? rest m => l - setrest!(l, mymerge(rest l, rest m)) - l - first l > first m => - empty? rest l => - setrest!(l,m) - l - setrest!(l, mymerge(rest l, m)) - l - empty? rest m => - setrest!(m,l) - m - setrest!(m,mymerge(l,rest m)) - m - - variables p == - p case R => empty() - lv:List VarSet:=empty() - q := p.ts - while not zero? q repeat - lv:=mymerge(lv,variables leadingCoefficient q) - q := reductum q - cons(p.v,lv) - - mainVariable p == - p case R => "failed" - p.v - - eval(p,mvar,pval) == univariate(p,mvar)(pval) - eval(p,mvar,val) == univariate(p,mvar)(val) - - evalSortedVarlist(p,Lvar,Lpval):% == - p case R => p - empty? Lvar or empty? Lpval => p - mvar := Lvar.first - mvar > p.v => evalSortedVarlist(p,Lvar.rest,Lpval.rest) - pval := Lpval.first - pts := map(evalSortedVarlist(#1,Lvar,Lpval),p.ts) - mvar=p.v => - pval case R => pts (pval::R) - pts pval - multivariate(pts,p.v) - - eval(p,Lvar,Lpval) == - empty? rest Lvar => evalSortedVarlist(p,Lvar,Lpval) - sorted?(#1 > #2, Lvar) => evalSortedVarlist(p,Lvar,Lpval) - nlvar := sort(#1 > #2,Lvar) - nlpval := - Lvar = nlvar => Lpval - nlpval := [Lpval.position(mvar,Lvar) for mvar in nlvar] - evalSortedVarlist(p,nlvar,nlpval) - - eval(p,Lvar,Lval) == - eval(p,Lvar,[val::% for val in Lval]$(List %)) -- kill? - - degree(p,mvar) == - p case R => 0 - mvar= p.v => degree p.ts - mvar > p.v => 0 -- might as well take advantage of the order - max(degree(leadingCoefficient p.ts,mvar),degree(red p,mvar)) - - degree(p,Lvar) == [degree(p,mvar) for mvar in Lvar] - - degree p == - p case R => 0 - degree(leadingCoefficient(p.ts)) + monomial(degree(p.ts), p.v) - - minimumDegree p == - p case R => 0 - md := minimumDegree p.ts - minimumDegree(coefficient(p.ts,md)) + monomial(md, p.v) - - minimumDegree(p,mvar) == - p case R => 0 - mvar = p.v => minimumDegree p.ts - md:=minimumDegree(leadingCoefficient p.ts,mvar) - zero? (p1:=red p) => md - min(md,minimumDegree(p1,mvar)) - - minimumDegree(p,Lvar) == - [minimumDegree(p,mvar) for mvar in Lvar] - - totalDegree(p, Lvar) == - ground? p => 0 - null setIntersection(Lvar, variables p) => 0 - u := univariate(p, mv := mainVariable(p)::VarSet) - weight:NonNegativeInteger := (member?(mv,Lvar) => 1; 0) - tdeg:NonNegativeInteger := 0 - while u ^= 0 repeat - termdeg:NonNegativeInteger := weight*degree u + - totalDegree(leadingCoefficient u, Lvar) - tdeg := max(tdeg, termdeg) - u := reductum u - tdeg - - if R has CommutativeRing then - differentiate(p,mvar) == - p case R => 0 - mvar=p.v => - up:=differentiate p.ts - if ground? up then leadingCoefficient(up) else [mvar,up]$VPoly - up:=map(differentiate(#1,mvar),p.ts) - if ground? up then leadingCoefficient(up) else [p.v,up]$VPoly - - leadingCoefficient(p) == - p case R => p - leadingCoefficient(leadingCoefficient(p.ts)) - --- trailingCoef(p) == --- p case R => p --- coef(p.ts,0) case R => coef(p.ts,0) --- trailingCoef(red p) --- TrailingCoef(p) == trailingCoef(p) - - leadingMonomial p == - p case R => p - monomial(leadingMonomial leadingCoefficient(p.ts), - p.v, degree(p.ts)) - - reductum(p) == - p case R => 0 - p - leadingMonomial p - - --- if R is Integer then --- pgcd := PolynomialGcdPackage(%,VarSet) --- gcd(p1,p2) == --- gcd(p1,p2)$pgcd --- --- else if R is RationalNumber then --- gcd(p1,p2) == --- mrat:= MRationalFactorize(VarSet,%) --- gcd(p1,p2)$mrat --- --- else gcd(p1,p2) == --- p1 case R => --- p2 case R => gcd(p1,p2)$R::% --- p1 = 0 => p2 --- gcd(p1, content(p2.ts)) --- p2 case R => --- p2 = 0 => p1 --- gcd(p2, content(p1.ts)) --- p1.v < p2.v => gcd(p1, content(p2.ts)) --- p1.v > p2.v => gcd(content(p1.ts), p2) --- PSimp(p1.v, gcd(p1.ts, p2.ts)) - -@ -\section{domain INDE IndexedExponents} -<>= -)abbrev domain INDE IndexedExponents -++ Author: James Davenport -++ Date Created: -++ Date Last Updated: -++ Basic Functions: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ IndexedExponents of an ordered set of variables gives a representation -++ for the degree of polynomials in commuting variables. It gives an ordered -++ pairing of non negative integer exponents with variables - -IndexedExponents(Varset:OrderedSet): C == T where - C == Join(OrderedAbelianMonoidSup, - IndexedDirectProductCategory(NonNegativeInteger,Varset)) - T == IndexedDirectProductOrderedAbelianMonoidSup(NonNegativeInteger,Varset) add - Term:= Record(k:Varset,c:NonNegativeInteger) - Rep:= List Term - x:% - t:Term - coerceOF(t):OutputForm == --++ converts term to OutputForm - t.c = 1 => (t.k)::OutputForm - (t.k)::OutputForm ** (t.c)::OutputForm - coerce(x):OutputForm == ++ converts entire exponents to OutputForm - null x => 1::Integer::OutputForm - null rest x => coerceOF(first x) - reduce("*",[coerceOF t for t in x]) - -@ \section{License} <>= --Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. @@ -1738,11 +72,7 @@ IndexedExponents(Varset:OrderedSet): C == T where <<*>>= <> -<> -<> -<> <> -<> @ \eject \begin{thebibliography}{99} diff --git a/src/input/test.input.pamphlet b/src/input/test.input.pamphlet index 1706da0..09163a6 100644 --- a/src/input/test.input.pamphlet +++ b/src/input/test.input.pamphlet @@ -884,7 +884,7 @@ t := MPOLY([x,y], INT) --R MultivariatePolynomial([x,y],Integer) is a domain constructor. --R Abbreviation for MultivariatePolynomial is MPOLY --R This constructor is exposed in this frame. ---R Issue )edit multpoly.spad.pamphlet to see algebra source code for MPOLY +--R Issue )edit bookvol10.3.spad.pamphlet to see algebra source code for MPOLY --R --R------------------------------- Operations -------------------------------- --R