diff --git a/books/bookvol10.4.pamphlet b/books/bookvol10.4.pamphlet index 9fe9d61..22cd0cd 100644 --- a/books/bookvol10.4.pamphlet +++ b/books/bookvol10.4.pamphlet @@ -239,7 +239,3051 @@ November 10, 2003 ((iHy)) \vfill \eject \pagenumbering{arabic} -\begin{thebibliography}{99} -\end{thebibliography} +\chapter{Chapter Overview} +This book contains the domains in Axiom, in alphabetical order. + +Each domain has an associated 'dotpic' chunk which only lists the +domains, categories, and packages that are in the layer immediately +below in the build order. For the full list see the algebra Makefile +where this information is maintained. + +Each domain is preceded by a picture. The picture indicates several +things. The colors indicate whether the name refers to a category, +domain, or package. An ellipse means that the name refers to something +in the bootstrap set. Thus, + +\includegraphics[scale=0.85]{ps/v103colorchart.ps} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%\pagehead{Domain}{ABB} +%\pagepic{ps/v103domain.ps}{ABB}{1.00} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter A} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package AF AlgebraicFunction} +\pagehead{AlgebraicFunction}{AF} +\pagepic{ps/v104algebraicfunction.ps}{AF}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package AF AlgebraicFunction +++ Author: Manuel Bronstein +++ Date Created: 21 March 1988 +++ Date Last Updated: 11 November 1993 +++ Description: +++ This package provides algebraic functions over an integral domain. +++ Keywords: algebraic, function. + +AlgebraicFunction(R, F): Exports == Implementation where + R: Join(OrderedSet, IntegralDomain) + F: FunctionSpace R + + SE ==> Symbol + Z ==> Integer + Q ==> Fraction Z + OP ==> BasicOperator + K ==> Kernel F + P ==> SparseMultivariatePolynomial(R, K) + UP ==> SparseUnivariatePolynomial F + UPR ==> SparseUnivariatePolynomial R + ALGOP ==> "%alg" + SPECIALDISP ==> "%specialDisp" + SPECIALDIFF ==> "%specialDiff" + + Exports ==> with + rootOf : (UP, SE) -> F + ++ rootOf(p, y) returns y such that \spad{p(y) = 0}. + ++ The object returned displays as \spad{'y}. + operator: OP -> OP + ++ operator(op) returns a copy of \spad{op} with the domain-dependent + ++ properties appropriate for \spad{F}. + ++ Error: if op is not an algebraic operator, that is, + ++ an nth root or implicit algebraic operator. + belong? : OP -> Boolean + ++ belong?(op) is true if \spad{op} is an algebraic operator, that is, + ++ an nth root or implicit algebraic operator. + inrootof: (UP, F) -> F + ++ inrootof(p, x) should be a non-exported function. + -- un-export when the compiler accepts conditional local functions! + droot : List F -> OutputForm + ++ droot(l) should be a non-exported function. + -- un-export when the compiler accepts conditional local functions! + if R has RetractableTo Integer then + "**" : (F, Q) -> F + ++ x ** q is \spad{x} raised to the rational power \spad{q}. + minPoly: K -> UP + ++ minPoly(k) returns the defining polynomial of \spad{k}. + definingPolynomial: F -> F + ++ definingPolynomial(f) returns the defining polynomial of \spad{f} + ++ as an element of \spad{F}. + ++ Error: if f is not a kernel. + iroot : (R, Z) -> F + ++ iroot(p, n) should be a non-exported function. + -- un-export when the compiler accepts conditional local functions! + + Implementation ==> add + ialg : List F -> F + dvalg: (List F, SE) -> F + dalg : List F -> OutputForm + + opalg := operator("rootOf"::Symbol)$CommonOperators + oproot := operator("nthRoot"::Symbol)$CommonOperators + + belong? op == has?(op, ALGOP) + dalg l == second(l)::OutputForm + + rootOf(p, x) == + k := kernel(x)$K + (r := retractIfCan(p)@Union(F, "failed")) case "failed" => + inrootof(p, k::F) + n := numer(f := univariate(r::F, k)) + degree denom f > 0 => error "roofOf: variable appears in denom" + inrootof(n, k::F) + + dvalg(l, x) == + p := numer univariate(first l, retract(second l)@K) + alpha := kernel(opalg, l) + - (map(differentiate(#1, x), p) alpha) / ((differentiate p) alpha) + + ialg l == + f := univariate(p := first l, retract(x := second l)@K) + degree denom f > 0 => error "roofOf: variable appears in denom" + inrootof(numer f, x) + + operator op == + is?(op, "rootOf"::Symbol) => opalg + is?(op, "nthRoot"::Symbol) => oproot + error "Unknown operator" + + if R has AlgebraicallyClosedField then + UP2R: UP -> Union(UPR, "failed") + + inrootof(q, x) == + monomial? q => 0 + + (d := degree q) <= 0 => error "rootOf: constant polynomial" +-- one? d=> - leadingCoefficient(reductum q) / leadingCoefficient q + (d = 1) => - leadingCoefficient(reductum q) / leadingCoefficient q + ((rx := retractIfCan(x)@Union(SE, "failed")) case SE) and + ((r := UP2R q) case UPR) => rootOf(r::UPR, rx::SE)::F + kernel(opalg, [q x, x]) + + UP2R p == + ans:UPR := 0 + while p ^= 0 repeat + (r := retractIfCan(leadingCoefficient p)@Union(R, "failed")) + case "failed" => return "failed" + ans := ans + monomial(r::R, degree p) + p := reductum p + ans + + else + inrootof(q, x) == + monomial? q => 0 + (d := degree q) <= 0 => error "rootOf: constant polynomial" +-- one? d => - leadingCoefficient(reductum q) /leadingCoefficient q + (d = 1) => - leadingCoefficient(reductum q) /leadingCoefficient q + kernel(opalg, [q x, x]) + + evaluate(opalg, ialg)$BasicOperatorFunctions1(F) + setProperty(opalg, SPECIALDIFF, + dvalg@((List F, SE) -> F) pretend None) + setProperty(opalg, SPECIALDISP, + dalg@(List F -> OutputForm) pretend None) + + if R has RetractableTo Integer then + import PolynomialRoots(IndexedExponents K, K, R, P, F) + + dumvar := "%%var"::Symbol::F + + lzero : List F -> F + dvroot : List F -> F + inroot : List F -> F + hackroot: (F, Z) -> F + inroot0 : (F, Z, Boolean, Boolean) -> F + + lzero l == 0 + + droot l == + x := first(l)::OutputForm + (n := retract(second l)@Z) = 2 => root x + root(x, n::OutputForm) + + dvroot l == + n := retract(second l)@Z + (first(l) ** ((1 - n) / n)) / (n::F) + + x ** q == + qr := divide(numer q, denom q) + x ** qr.quotient * inroot([x, (denom q)::F]) ** qr.remainder + + hackroot(x, n) == + (n = 1) or (x = 1) => x + (((dx := denom x) ^= 1) and + ((rx := retractIfCan(dx)@Union(Integer,"failed")) case Integer) and + positive?(rx)) + => hackroot((numer x)::F, n)/hackroot(rx::Integer::F, n) + (x = -1) and n = 4 => + ((-1::F) ** (1::Q / 2::Q) + 1) / ((2::F) ** (1::Q / 2::Q)) + kernel(oproot, [x, n::F]) + + inroot l == + zero?(n := retract(second l)@Z) => error "root: exponent = 0" +-- one?(x := first l) or one? n => x + ((x := first l) = 1) or (n = 1) => x + (r := retractIfCan(x)@Union(R,"failed")) case R => iroot(r::R,n) + (u := isExpt(x, oproot)) case Record(var:K, exponent:Z) => + pr := u::Record(var:K, exponent:Z) + (first argument(pr.var)) ** + (pr.exponent /$Fraction(Z) + (n * retract(second argument(pr.var))@Z)) + inroot0(x, n, false, false) + +-- removes powers of positive integers from numer and denom +-- num? or den? is true if numer or denom already processed + inroot0(x, n, num?, den?) == + rn:Union(Z, "failed") := (num? => "failed"; retractIfCan numer x) + rd:Union(Z, "failed") := (den? => "failed"; retractIfCan denom x) + (rn case Z) and (rd case Z) => + rec := qroot(rn::Z / rd::Z, n::NonNegativeInteger) + rec.coef * hackroot(rec.radicand, rec.exponent) + rn case Z => + rec := qroot(rn::Z::Fraction(Z), n::NonNegativeInteger) + rec.coef * inroot0((rec.radicand**(n exquo rec.exponent)::Z) + / (denom(x)::F), n, true, den?) + rd case Z => + rec := qroot(rd::Z::Fraction(Z), n::NonNegativeInteger) + inroot0((numer(x)::F) / + (rec.radicand ** (n exquo rec.exponent)::Z), + n, num?, true) / rec.coef + hackroot(x, n) + + if R has AlgebraicallyClosedField then iroot(r, n) == nthRoot(r, n)::F + else + iroot0: (R, Z) -> F + + if R has RadicalCategory then + if R has imaginary:() -> R then iroot(r, n) == nthRoot(r, n)::F + else + iroot(r, n) == + odd? n or r >= 0 => nthRoot(r, n)::F + iroot0(r, n) + + else iroot(r, n) == iroot0(r, n) + + iroot0(r, n) == + rec := rroot(r, n::NonNegativeInteger) + rec.coef * hackroot(rec.radicand, rec.exponent) + + definingPolynomial x == + (r := retractIfCan(x)@Union(K, "failed")) case K => + is?(k := r::K, opalg) => first argument k + is?(k, oproot) => + dumvar ** retract(second argument k)@Z - first argument k + dumvar - x + dumvar - x + + minPoly k == + is?(k, opalg) => + numer univariate(first argument k, + retract(second argument k)@K) + is?(k, oproot) => + monomial(1,retract(second argument k)@Z :: NonNegativeInteger) + - first(argument k)::UP + monomial(1, 1) - k::F::UP + + evaluate(oproot, inroot)$BasicOperatorFunctions1(F) + derivative(oproot, [dvroot, lzero]) + + else -- R is not retractable to Integer + droot l == + x := first(l)::OutputForm + (n := second l) = 2::F => root x + root(x, n::OutputForm) + + minPoly k == + is?(k, opalg) => + numer univariate(first argument k, + retract(second argument k)@K) + monomial(1, 1) - k::F::UP + + setProperty(oproot, SPECIALDISP, + droot@(List F -> OutputForm) pretend None) + +@ +<>= +"AF" [color="#FF4488",href="bookvol10.4.pdf#nameddest=AF"] + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package ALGFACT AlgFactor} +\pagehead{AlgFactor}{ALGFACT} +\pagepic{ps/v104algfactor.ps}{ALGFACT}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package ALGFACT AlgFactor +++ Factorization of UP AN; +++ Author: Manuel Bronstein +++ Date Created: ??? +++ Date Last Updated: ??? +++ Description: +++ Factorization of univariate polynomials with coefficients in +++ \spadtype{AlgebraicNumber}. + +AlgFactor(UP): Exports == Implementation where + UP: UnivariatePolynomialCategory AlgebraicNumber + + N ==> NonNegativeInteger + Z ==> Integer + Q ==> Fraction Integer + AN ==> AlgebraicNumber + K ==> Kernel AN + UPQ ==> SparseUnivariatePolynomial Q + SUP ==> SparseUnivariatePolynomial AN + FR ==> Factored UP + + Exports ==> with + factor: (UP, List AN) -> FR + ++ factor(p, [a1,...,an]) returns a prime factorisation of p + ++ over the field generated by its coefficients and a1,...,an. + factor: UP -> FR + ++ factor(p) returns a prime factorisation of p + ++ over the field generated by its coefficients. + split : UP -> FR + ++ split(p) returns a prime factorisation of p + ++ over its splitting field. + doublyTransitive?: UP -> Boolean + ++ doublyTransitive?(p) is true if p is irreducible over + ++ over the field K generated by its coefficients, and + ++ if \spad{p(X) / (X - a)} is irreducible over + ++ \spad{K(a)} where \spad{p(a) = 0}. + + Implementation ==> add + import PolynomialCategoryQuotientFunctions(IndexedExponents K, + K, Z, SparseMultivariatePolynomial(Z, K), AN) + + UPCF2 ==> UnivariatePolynomialCategoryFunctions2 + + fact : (UP, List K) -> FR + ifactor : (SUP, List K) -> Factored SUP + extend : (UP, Z) -> FR + allk : List AN -> List K + downpoly: UP -> UPQ + liftpoly: UPQ -> UP + irred? : UP -> Boolean + + allk l == removeDuplicates concat [kernels x for x in l] + liftpoly p == map(#1::AN, p)$UPCF2(Q, UPQ, AN, UP) + downpoly p == map(retract(#1)@Q, p)$UPCF2(AN, UP ,Q, UPQ) + ifactor(p,l) == (fact(p pretend UP, l)) pretend Factored(SUP) + factor p == fact(p, allk coefficients p) + + factor(p, l) == + fact(p, allk removeDuplicates concat(l, coefficients p)) + + split p == + fp := factor p + unit(fp) * + _*/[extend(fc.factor, fc.exponent) for fc in factors fp] + + extend(p, n) == +-- one? degree p => primeFactor(p, n) + (degree p = 1) => primeFactor(p, n) + q := monomial(1, 1)$UP - zeroOf(p pretend SUP)::UP + primeFactor(q, n) * split((p exquo q)::UP) ** (n::N) + + doublyTransitive? p == + irred? p and irred?((p exquo + (monomial(1, 1)$UP - zeroOf(p pretend SUP)::UP))::UP) + + irred? p == + fp := factor p +-- one? numberOfFactors fp and one? nthExponent(fp, 1) + (numberOfFactors fp = 1) and (nthExponent(fp, 1) = 1) + + fact(p, l) == +-- one? degree p => primeFactor(p, 1) + (degree p = 1) => primeFactor(p, 1) + empty? l => + dr := factor(downpoly p)$RationalFactorize(UPQ) + (liftpoly unit dr) * + _*/[primeFactor(liftpoly dc.factor,dc.exponent) + for dc in factors dr] + q := minPoly(alpha := "max"/l)$AN + newl := remove(alpha = #1, l) + sae := SimpleAlgebraicExtension(AN, SUP, q) + ups := SparseUnivariatePolynomial sae + fr := factor(map(reduce univariate(#1, alpha, q), + p)$UPCF2(AN, UP, sae, ups), + ifactor(#1, newl))$InnerAlgFactor(AN, SUP, sae, ups) + newalpha := alpha::AN + map((lift(#1)$sae) newalpha, unit fr)$UPCF2(sae, ups, AN, UP) * + _*/[primeFactor(map((lift(#1)$sae) newalpha, + fc.factor)$UPCF2(sae, ups, AN, UP), + fc.exponent) for fc in factors fr] + +@ +<>= +"ALGFACT" [color="#FF4488",href="bookvol10.4.pdf#nameddest=ALGFACT"] + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package ANY1 AnyFunctions1} +\pagehead{AnyFunctions1}{ANY1} +\pagepic{ps/v104anyfunctions1.ps}{ANY1}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package ANY1 AnyFunctions1 +++ Author: +++ Date Created: +++ Change History: +++ Basic Functions: coerce, retractIfCan, retractable?, retract +++ Related Constructors: Any +++ Also See: +++ AMS Classification: +++ Keywords: +++ Description: +++ \spadtype{AnyFunctions1} implements several utility functions for +++ working with \spadtype{Any}. These functions are used to go back +++ and forth between objects of \spadtype{Any} and objects of other +++ types. + +AnyFunctions1(S:Type): with + coerce : S -> Any + ++ coerce(s) creates an object of \spadtype{Any} from the + ++ object \spad{s} of type \spad{S}. + retractIfCan: Any -> Union(S, "failed") + ++ retractIfCan(a) tries change \spad{a} into an object + ++ of type \spad{S}. If it can, then such an object is + ++ returned. Otherwise, "failed" is returned. + retractable?: Any -> Boolean + ++ retractable?(a) tests if \spad{a} can be converted + ++ into an object of type \spad{S}. + retract : Any -> S + ++ retract(a) tries to convert \spad{a} into an object of + ++ type \spad{S}. If possible, it returns the object. + ++ Error: if no such retraction is possible. + + == add + import NoneFunctions1(S) + + Sexpr:SExpression := devaluate(S)$Lisp + + retractable? a == dom(a) = Sexpr + coerce(s:S):Any == any(Sexpr, s::None) + + retractIfCan a == + retractable? a => obj(a) pretend S + "failed" + + retract a == + retractable? a => obj(a) pretend S + error "Cannot retract value." + +@ +<>= +"ANY1" [color="#FF4488",href="bookvol10.4.pdf#nameddest=ANY1"] +"TYPE" [color="#4488FF",href="bookvol10.2.pdf#nameddest=TYPE"] +"ANY1" -> "TYPE" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package AXSERV AxiomServer} +\pagehead{AxiomServer}{AXSERV} +\pagepic{ps/v104axiomserver.ps}{AXSERV}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= + +)abbrev package AXSERV AxiomServer +AxiomServer: public == private where + + public == with + + axServer: (Integer, SExpression->Void) -> Void + multiServ: SExpression -> Void + getDatabase: (String,String) -> String + + private == add + + getFile: (SExpression,String) -> Void + getCommand: (SExpression,String) -> Void + getDescription: String -> String + getInterp: (SExpression,String) -> Void + getLisp: (SExpression,String) -> Void + getShow: (SExpression,String) -> Void + lastStep: () -> String + lastType: () -> String + formatMessages: String -> String + makeErrorPage: String -> String + getSourceFile: (String,String,String) -> String + makeDBPage: String -> String + getContentType: String -> String + readTheFile: SExpression -> String + outputToSocket: (SExpression,String,String) -> Void + + getDatabase(constructor:String, key:String):String == + answer:=string GETDATABASE(INTERN$Lisp constructor,INTERN$Lisp key)$Lisp +-- WriteLine$Lisp concat ["getDatabase: ",constructor," ",key," ",answer] + answer + +@ +The axServer function handles the socket connection on the given port. +When it gets a input on the socket it calls the server +function on the socket input. +<>= + axServer(port:Integer,serverfunc:SExpression->Void):Void == + WriteLine$Lisp "listening on port 8085" + s := SiSock(port,serverfunc)$Lisp + -- To listen for just one connection and then close the socket + -- uncomment i := 0. + i:Integer := 1 + while (i > 0) repeat + if not null?(SiListen(s)$Lisp)$SExpression then + w := SiAccept(s)$Lisp + serverfunc(w) +-- i := 0 + +@ +The multiServ function parses the socket input. +It expects either a GET or POST request. + +A GET request fetches a new page, calling ``getFile''. +A POST request starts with +\begin{itemize} +\item ``command='' which expects axiom interpreter commands. + When this is recognized we call the ``getCommand'' function. +\item ``lispcall='' which expects lisp interpreter input + When this is recognized we call the ``getLisp'' function. +\end{itemize} +<>= + + multiServ(s:SExpression):Void == +-- WriteLine("multiServ begin")$Lisp + headers:String := "" + char:String + -- read in the http headers + while (char := _ + STRING(READ_-CHAR_-NO_-HANG(s,NIL$Lisp,'EOF)$Lisp)$Lisp) ^= "EOF"_ + repeat + headers := concat [headers,char] +-- sayTeX$Lisp headers + StringMatch("([^ ]*)", headers)$Lisp + u:UniversalSegment(Integer) + u := segment(MatchBeginning(1)$Lisp+1,_ + MatchEnd(1)$Lisp)$UniversalSegment(Integer) + reqtype:String := headers.u +-- sayTeX$Lisp concat ["request type: ",reqtype] + if reqtype = "GET" then + StringMatch("GET ([^ ]*)",headers)$Lisp + u:UniversalSegment(Integer) + u := segment(MatchBeginning(1)$Lisp+1,_ + MatchEnd(1)$Lisp)$UniversalSegment(Integer) + getFile(s,headers.u) + if reqtype = "POST" and StringMatch("command=(.*)$",headers)$Lisp > 0 + then + u:UniversalSegment(Integer) + u := segment(MatchBeginning(1)$Lisp+1,_ + MatchEnd(1)$Lisp)$UniversalSegment(Integer) + getCommand(s,headers.u) + if reqtype = "POST" and StringMatch("interpcall=(.*)$",headers)$Lisp > 0 + then + u:UniversalSegment(Integer) + u := segment(MatchBeginning(1)$Lisp+1,_ + MatchEnd(1)$Lisp)$UniversalSegment(Integer) + getInterp(s,headers.u) + if reqtype = "POST" and StringMatch("lispcall=(.*)$",headers)$Lisp > 0 + then + u:UniversalSegment(Integer) + u := segment(MatchBeginning(1)$Lisp+1,_ + MatchEnd(1)$Lisp)$UniversalSegment(Integer) + getLisp(s,headers.u) + if reqtype = "POST" and StringMatch("showcall=(.*)$",headers)$Lisp > 0 + then + u:UniversalSegment(Integer) + u := segment(MatchBeginning(1)$Lisp+1,_ + MatchEnd(1)$Lisp)$UniversalSegment(Integer) + getShow(s,headers.u) +-- WriteLine("multiServ end")$Lisp +-- WriteLine("")$Lisp + +@ +\subsubsection{getFile} +Given a socket and the URL of the file we create an input stream +that contains the file. If the filename contains a question mark +then we need to parse the parameters and dynamically construct the +file contents. +<>= + getFile(s:SExpression,pathvar:String):Void == +-- WriteLine("")$Lisp + WriteLine$Lisp concat ["getFile: ",pathvar] + params:=split(pathvar,char "?") + if #params = 1 + then if not null? PATHNAME_-NAME(PATHNAME(pathvar)$Lisp)$Lisp + then + contentType:String := getContentType(pathvar) + q:=Open(pathvar)$Lisp + if null? q + then + q := MAKE_-STRING_-INPUT_-STREAM(_ + makeErrorPage("File doesn't exist"))$Lisp + else + q:=MAKE_-STRING_-INPUT_-STREAM(_ + makeErrorPage("Problem with file path"))$Lisp + else + q:=MAKE_-STRING_-INPUT_-STREAM(makeDBPage(pathvar))$Lisp + outputToSocket(s,readTheFile(q),contentType) + +@ +\subsubsection{makeErrorPage} +<>= + makeErrorPage(msg:String):String == + page:String:="" + page:=page "" + page:=page "Error" msg "" +-- WriteLine(page)$Lisp + page +@ +\subsubsection{getDescription} +We need to fish around in the data structure to return the piece of +documentation for the domain. We have to call the lisp version of +GETDATABASE because the version above returns a string object. The +string object is missing quotes and cannot be properly read. So we +need to get the lisp object and work with it in native form first. + +The doc string also contains spad markup which we need to replace with html. +<>= + getDescription(dom:String):String == + d:=CADR(CADAR(GETDATABASE(INTERN(dom)$Lisp,'DOCUMENTATION)$Lisp)$Lisp)$Lisp + string d +@ +\subsubsection{getSourceFile} +During build we construct a hash table that takes the chunk name as +the key and returns the filename. We reconstruct the chunk name here +and do a lookup for the source file. +<>= + getSourceFile(constructorkind:String,_ + abbreviation:String,_ + dom:String):String == + sourcekey:="@<<" constructorkind " " abbreviation " " dom ">>" +-- WriteLine(sourcekey)$Lisp + sourcefile:=lowerCase last split(getDatabase(dom,"SOURCEFILE"),char "/") + sourcefile:=sourcefile ".pamphlet" + +@ +\subsubsection{makeDBPage} +<>= + makeDBPage(pathvar:String):String == + params:List(String):=split(pathvar,char "?") + for i in 1..#params repeat WriteLine$Lisp concat ["params: ",params.i] + pathparts:List(String):=split(params.1,char "/") + for i in 1..#pathparts repeat + WriteLine$Lisp concat ["pathparts: ",pathparts.i] + pagename:=last pathparts + WriteLine$Lisp concat ["pagename: ",pagename] + cmd:=first split(pagename,char ".") + WriteLine$Lisp concat ["cmd: ",cmd] + args:List(String):=split(params.2, char "&") + for i in 1..#args repeat WriteLine$Lisp concat ["args: ",args.i] + page:String:="" + page:=page "" + page:=page "" + page:=page "" + page:=page "" cmd " " args.1 "" + page:=page "" + page:=page "" + cmd = "db" => + dom:=args.1 + domi:=INTERN(dom)$Lisp + -- category, domain, or package? + constructorkind:=getDatabase(dom,"CONSTRUCTORKIND") + abbreviation:=getDatabase(dom, "ABBREVIATION") + sourcefile:=getDatabase(dom, "SOURCEFILE") + constructorkind.1:=upperCase constructorkind.1 + description:=getDescription(dom) + page:=page "
" + page:=page "

" + page:=page "
" constructorkind " " dom "

" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "
Description: " description "
Abbreviation: " abbreviation "
Source File: " sourcefile "

" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "
" + page:=page "Ancestors" + page:=page "" + page:=page "Dependents" + page:=page "" + page:=page "Exports" + page:=page "" + page:=page "Parents" + page:=page "" + page:=page "Users" + page:=page "
" + page:=page "Attributes" + page:=page "" + page:=page "Examples" + page:=page "" + page:=page "Operations" + page:=page "" + page:=page "Search Path" + page:=page "" + page:=page "Uses" + page:=page "
" + cmd = "op" => + dom:=args.1 + domi:=INTERN(dom)$Lisp + -- category, domain, or package? + constructorkind:=getDatabase(dom,"CONSTRUCTORKIND") + abbreviation:=getDatabase(dom, "ABBREVIATION") + sourcefile:=getDatabase(dom, "SOURCEFILE") + constructorkind.1:=upperCase constructorkind.1 + description:=getDescription(dom) + page:=page "
" + page:=page "

" + page:=page "
" constructorkind " " dom "

" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "
Description: " description "
Abbreviation: " abbreviation "
Source File: " sourcefile "

" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "" + page:=page "
" + page:=page "Ancestors" + page:=page "" + page:=page "Dependents" + page:=page "" + page:=page "Exports" + page:=page "" + page:=page "Parents" + page:=page "" + page:=page "Users" + page:=page "
" + page:=page "Attributes" + page:=page "" + page:=page "Examples" + page:=page "" + page:=page "Operations" + page:=page "" + page:=page "Search Path" + page:=page "" + page:=page "Uses" + page:=page "
" +-- WriteLine(page)$Lisp + page:=page "" + page +@ +\subsubsection{readTheFile} +We have q which is a stream which contains the file. We read the file +into a string-stream to get it all into one string. We return the string. +<>= + readTheFile(q:SExpression):String == +-- WriteLine("begin reading file")$Lisp + r := MAKE_-STRING_-OUTPUT_-STREAM()$Lisp + SiCopyStream(q,r)$Lisp + filestream:String := GET_-OUTPUT_-STREAM_-STRING(r)$Lisp + CLOSE(r)$Lisp + CLOSE(q)$Lisp +-- WriteLine("end reading file")$Lisp + filestream + +@ +\subsubsection{outputToSocket} +We have ``s'' which is the socket, ``filestream'' which is the text of +the file to output, and ``contentType'' which is the HTML Content-Type. +We construct the HTML header information according to the standard and +prepend it to the file. The resulting string is output to the socket. +<>= + outputToSocket(s:SExpression,filestream:String,contentType:String):Void == + filelength:String := string(#filestream) + file:String := "" + nl:String:=STRING(NewLine$Lisp)$Lisp + file := concat ["Content-Length: ",filelength,nl,nl,file] + file := concat ["Connection: close",nl,file] + file := concat ["Content-Type: ",contentType,nl,file] + file := concat ["HTTP/1.1 200 OK",nl,file] + file := concat [file,filestream] +-- WriteLine(file)$Lisp + f:=MAKE_-STRING_-INPUT_-STREAM(file)$Lisp + SiCopyStream(f,s)$Lisp + CLOSE(f)$Lisp + CLOSE(s)$Lisp + +@ +\subsubsection{getCommand} +The getCommand function is invoked when the HTTP request is a POST +and contains the string "command". Essentially the game here is +to rebind the various output streams used by Axiom so we can +capture the normal output. This function returns a set of HTML 5 div +blocks: +\begin{enumerate} +\item stepnum, the value of lastStep() +\item command, the value of the command variable +\item algebra, the value of the algebra variable +\item mathml, the value of the mathml variable +\item type, the value of lastType() +\end{enumerate} +The HTML functions in the hyperdoc browser depend on the order +of these variables so do not change this without changing the +corresponding functions in the browser HTML. +<>= + getCommand(s:SExpression,command:String):Void == + WriteLine$Lisp concat ["getCommand: ",command] + SETQ(tmpmathml$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp + SETQ(tmpalgebra$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp + SETQ(savemathml$Lisp, _$texOutputStream$Lisp)$Lisp + SETQ(savealgebra$Lisp, _$algebraOutputStream$Lisp)$Lisp + SETQ(_$texOutputStream$Lisp,tmpmathml$Lisp)$Lisp + SETQ(_$algebraOutputStream$Lisp,tmpalgebra$Lisp)$Lisp + ans := string parseAndEvalToStringEqNum$Lisp command + SETQ(resultmathml$Lisp,_ + GET_-OUTPUT_-STREAM_-STRING(_$texOutputStream$Lisp)$Lisp)$Lisp + SETQ(resultalgebra$Lisp,_ + GET_-OUTPUT_-STREAM_-STRING(_$algebraOutputStream$Lisp)$Lisp)$Lisp + SETQ(_$texOutputStream$Lisp,savemathml$Lisp)$Lisp + SETQ(_$algebraOutputStream$Lisp,savealgebra$Lisp)$Lisp + CLOSE(tmpmathml$Lisp)$Lisp + CLOSE(tmpalgebra$Lisp)$Lisp + -- Since strings returned from axiom are going to be displayed in html I + -- should really check for the characters &,<,> and replace them with + -- &,<,>. + -- At present I only check for ampersands in formatMessages. + mathml:String := string(resultmathml$Lisp) + algebra:String := string(resultalgebra$Lisp) + algebra := formatMessages(algebra) + -- At this point mathml contains the mathml for the output but does not + -- include step number or type information. + -- We should also save the command. + -- I get the type and step number from the $internalHistoryTable + axans:String := _ + concat ["
", lastStep(), "
_ +
", command, "
_ +
",algebra,"
_ +
",mathml,"
_ +
",lastType(),"
"] +-- WriteLine$Lisp concat ["mathml answer: ",mathml] +-- WriteLine$Lisp concat ["algebra answer: ",algebra] + q:=MAKE_-STRING_-INPUT_-STREAM(axans)$Lisp + SiCopyStream(q,s)$Lisp + CLOSE(q)$Lisp + CLOSE(s)$Lisp + +@ + +\subsubsection{getInterp} +The getInterp function is invoked when the HTTP request is a POST +and contains the string "command". Essentially the game here is +to rebind the various output streams used by Axiom so we can +capture the normal output. This function returns a set of HTML 5 div +blocks: +\begin{enumerate} +\item stepnum, the value of lastStep() +\item command, the value of the command variable +\item algebra, the value of the algebra variable +\item mathml, the value of the mathml variable +\item type, the value of lastType() +\end{enumerate} +The HTML functions in the hyperdoc browser depend on the order +of these variables so do not change this without changing the +corresponding functions in the browser HTML. +<>= + getInterp(s:SExpression,command:String):Void == + WriteLine$Lisp concat ["getInterp: ",command] + SETQ(tmpmathml$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp + SETQ(tmpalgebra$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp + SETQ(savemathml$Lisp, _$texOutputStream$Lisp)$Lisp + SETQ(savealgebra$Lisp, _$algebraOutputStream$Lisp)$Lisp + SETQ(_$texOutputStream$Lisp,tmpmathml$Lisp)$Lisp + SETQ(_$algebraOutputStream$Lisp,tmpalgebra$Lisp)$Lisp + ans := string parseAndEvalToStringEqNum$Lisp command + SETQ(resultmathml$Lisp,_ + GET_-OUTPUT_-STREAM_-STRING(_$texOutputStream$Lisp)$Lisp)$Lisp + SETQ(resultalgebra$Lisp,_ + GET_-OUTPUT_-STREAM_-STRING(_$algebraOutputStream$Lisp)$Lisp)$Lisp + SETQ(_$texOutputStream$Lisp,savemathml$Lisp)$Lisp + SETQ(_$algebraOutputStream$Lisp,savealgebra$Lisp)$Lisp + CLOSE(tmpmathml$Lisp)$Lisp + CLOSE(tmpalgebra$Lisp)$Lisp + -- Since strings returned from axiom are going to be displayed in html I + -- should really check for the characters &,<,> and replace them with + -- &,<,>. + -- At present I only check for ampersands in formatMessages. + mathml:String := string(resultmathml$Lisp) + algebra:String := string(resultalgebra$Lisp) + algebra := formatMessages(algebra) + -- At this point mathml contains the mathml for the output but does not + -- include step number or type information. + -- We should also save the command. + -- I get the type and step number from the $internalHistoryTable + axans:String := _ + concat ["
", lastStep(), "
_ +
", command, "
_ +
",algebra,"
_ +
",mathml,"
_ +
",lastType(),"
"] +-- WriteLine$Lisp concat ["mathml answer: ",mathml] +-- WriteLine$Lisp concat ["algebra answer: ",algebra] + q:=MAKE_-STRING_-INPUT_-STREAM(axans)$Lisp + SiCopyStream(q,s)$Lisp + CLOSE(q)$Lisp + CLOSE(s)$Lisp + +@ + +\subsubsection{getLisp} +The getLisp function is invoked when the HTTP request is a POST +and contains the string "lispcall". +<>= + getLisp(s:SExpression,command:String):Void == + WriteLine$Lisp concat ["getLisp: ",command] + evalresult:=EVAL(READ_-FROM_-STRING(command)$Lisp)$Lisp + mathml:String:=string(evalresult) +-- WriteLine$Lisp concat ["getLisp: after ",mathml] +-- WriteLine$Lisp concat ["getLisp output: ",mathml] + SETQ(tmpalgebra$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp + SETQ(savemathml$Lisp, _$texOutputStream$Lisp)$Lisp + SETQ(savealgebra$Lisp, _$algebraOutputStream$Lisp)$Lisp + SETQ(_$texOutputStream$Lisp,tmpmathml$Lisp)$Lisp + SETQ(_$algebraOutputStream$Lisp,tmpalgebra$Lisp)$Lisp + SETQ(resultalgebra$Lisp,_ + GET_-OUTPUT_-STREAM_-STRING(_$algebraOutputStream$Lisp)$Lisp)$Lisp + SETQ(_$texOutputStream$Lisp,savemathml$Lisp)$Lisp + SETQ(_$algebraOutputStream$Lisp,savealgebra$Lisp)$Lisp + CLOSE(tmpalgebra$Lisp)$Lisp + -- Since strings returned from axiom are going to be displayed in html I + -- should really check for the characters &,<,> and replace them with + -- &,<,>. + -- At present I only check for ampersands in formatMessages. + algebra:String := string(resultalgebra$Lisp) + algebra := formatMessages(algebra) + -- At this point mathml contains the mathml for the output but does not + -- include step number or type information. + -- We should also save the command. + -- I get the type and step number from the $internalHistoryTable + axans:String := _ + concat ["
", lastStep(), "
_ +
", command, "
_ +
",algebra,"
_ +
",mathml,"
_ +
",lastType(),"
"] +-- WriteLine$Lisp concat ["mathml answer: ",mathml] +-- WriteLine$Lisp concat ["algebra answer: ",algebra] + q:=MAKE_-STRING_-INPUT_-STREAM(axans)$Lisp + SiCopyStream(q,s)$Lisp + CLOSE(q)$Lisp + CLOSE(s)$Lisp + +@ +\subsubsection{getShow} +The getShow function is invoked when the HTTP request is a POST +and contains the string "showcall". The )show command generates +output to lisp's *standard-output* so we wrap that stream to capture it. +The resulting string needs to be transformed into html-friendly form. +This is done in the call to replace-entitites (see http.lisp) +<>= + getShow(s:SExpression,showarg:String):Void == + WriteLine$Lisp concat ["getShow: ",showarg] + realarg:=SUBSEQ(showarg,6)$Lisp + show:=_ + "(progn (setq |$options| '((|operations|))) (|show| '|" realarg "|))" +-- WriteLine$Lisp concat ["getShow: ",show] + SETQ(SAVESTREAM$Lisp,_*STANDARD_-OUTPUT_*$Lisp)$Lisp + SETQ(_*STANDARD_-OUTPUT_*$Lisp,_ + MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp + evalresult:=EVAL(READ_-FROM_-STRING(show)$Lisp)$Lisp + SETQ(evalresult,_ + GET_-OUTPUT_-STREAM_-STRING(_*STANDARD_-OUTPUT_*$Lisp)$Lisp)$Lisp + SETQ(_*STANDARD_-OUTPUT_*$Lisp,SAVESTREAM$Lisp)$Lisp + mathml:String:=string(REPLACE_-ENTITIES(evalresult)$Lisp) + SETQ(tmpalgebra$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp + SETQ(savemathml$Lisp, _$texOutputStream$Lisp)$Lisp + SETQ(savealgebra$Lisp, _$algebraOutputStream$Lisp)$Lisp + SETQ(_$texOutputStream$Lisp,tmpmathml$Lisp)$Lisp + SETQ(_$algebraOutputStream$Lisp,tmpalgebra$Lisp)$Lisp + SETQ(resultalgebra$Lisp,_ + GET_-OUTPUT_-STREAM_-STRING(_$algebraOutputStream$Lisp)$Lisp)$Lisp + SETQ(_$texOutputStream$Lisp,savemathml$Lisp)$Lisp + SETQ(_$algebraOutputStream$Lisp,savealgebra$Lisp)$Lisp + CLOSE(tmpalgebra$Lisp)$Lisp + -- Since strings returned from axiom are going to be displayed in html I + -- should really check for the characters &,<,> and replace them with + -- &,<,>. + -- At present I only check for ampersands in formatMessages. + algebra:String := string(resultalgebra$Lisp) + algebra := formatMessages(algebra) + -- At this point mathml contains the mathml for the output but does not + -- include step number or type information. + -- We should also save the command. + -- I get the type and step number from the $internalHistoryTable + axans:String := _ + concat ["
", lastStep(), "
_ +
", showarg, "
_ +
",algebra,"
_ +
",mathml,"
_ +
",lastType(),"
"] +-- WriteLine$Lisp concat ["mathml answer: ",mathml] + q:=MAKE_-STRING_-INPUT_-STREAM(axans)$Lisp + SiCopyStream(q,s)$Lisp + CLOSE(q)$Lisp + CLOSE(s)$Lisp + +@ +\subsubsection{lastType} +To examine the \$internalHistoryTable use the following line +\begin{verbatim} + )lisp |$internalHistoryTable| +\end{verbatim} +We need to pick out first member of internalHistoryTable and then pick out +the element with \% as first element. Here is an example showing just +the first element of the list, which correponds to the last command. + +Note that the last command does not necessarily correspond to the last +element of the first element of \$internalHistoryTable as it is in this +example. +\begin{verbatim} + ( + (4 NIL + (x (value (BasicOperator) WRAPPED . #)) + (y (value (BasicOperator) WRAPPED . #)) + (% (value (Matrix (Polynomial (Integer))) WRAPPED . #)) + ) + ... + ) +\end{verbatim} + +We also need to check for input error in which case the \$internalHistoryTable +is not changed and the type retrieved would be that for the last correct +input. +<>= + lastType():String == + SETQ(first$Lisp,FIRST(_$internalHistoryTable$Lisp)$Lisp)$Lisp + count:Integer := 0 + hisLength:Integer := LIST_-LENGTH(_$internalHistoryTable$Lisp)$Lisp + length:Integer := LIST_-LENGTH(first$Lisp)$Lisp + -- This initializes stepSav. The test is a bit of a hack, maybe I'll + -- figure out the right way to do it later. + if string stepSav$Lisp = "#" then SETQ(stepSav$Lisp, 0$Lisp)$Lisp + -- If hisLength = 0 then the history table has been reset to NIL + -- and we're starting numbering over + if hisLength = 0 then SETQ(stepSav$Lisp, 0$Lisp)$Lisp + if hisLength > 0 and + car(car(_$internalHistoryTable$Lisp)$Lisp)$Lisp ^= stepSav$Lisp then + SETQ(stepSav$Lisp,car(car(_$internalHistoryTable$Lisp)$Lisp)$Lisp)$Lisp + while count < length repeat + position(char "%",string FIRST(first$Lisp)$Lisp) = 2 => + count := length+1 + count := count +1 + SETQ(first$Lisp,REST(first$Lisp)$Lisp)$Lisp + count = length + 1 => + string SECOND(SECOND(FIRST(first$Lisp)$Lisp)$Lisp)$Lisp + "" + + + lastStep():String == + string car(car(_$internalHistoryTable$Lisp)$Lisp)$Lisp + + formatMessages(str:String):String == +-- WriteLine("formatMessages")$Lisp + -- I need to replace any ampersands with & and may also need to + -- replace < and > with < and > + strlist:List String +-- WriteLine(str)$Lisp + strlist := split(str,char "&") + str := "" + -- oops, if & is the last character in the string this method + -- will eliminate it. Need to redo this. + for s in strlist repeat + str := concat [str,s,"&"] + strlen:Integer := #str + str := str.(1..(#str - 5)) +-- WriteLine(str)$Lisp + -- Here I split the string into lines and put each line in a "div". + strlist := split(str, char string NewlineChar$Lisp) + str := "" +-- WriteLine("formatMessages1")$Lisp +-- WriteLine(concat strlist)$Lisp + for s in strlist repeat +-- WriteLine(s)$Lisp + str := concat [str,"
",s,"
"] + str + + getContentType(pathvar:String):String == +-- WriteLine("getContentType begin")$Lisp + -- set default content type + contentType:String := "text/plain" + -- need to test for successful match? + StringMatch(".*\.(.*)$", pathvar)$Lisp + u:UniversalSegment(Integer) + u := segment(MatchBeginning(1)$Lisp+1,_ + MatchEnd(1)$Lisp)$UniversalSegment(Integer) + extension:String := pathvar.u +-- WriteLine$Lisp concat ["file extension: ",extension] + -- test for extensions: html, htm, xml, xhtml, js, css + if extension = "html" then + contentType:String := "text/html" + else if extension = "htm" then + contentType:String := "text/html" + else if extension = "xml" then + contentType:String := "text/xml" + else if extension = "xhtml" then + contentType:String := "application/xhtml+xml" + else if extension = "js" then + contentType:String := "text/javascript" + else if extension = "css" then + contentType:String := "text/css" + else if extension = "png" then + contentType:String := "image/png" + else if extension = "jpg" then + contentType:String := "image/jpeg" + else if extension = "jpeg" then + contentType:String := "image/jpeg" +-- WriteLine$Lisp concat ["Content-Type: ",contentType] +-- WriteLine("getContentType end")$Lisp + contentType + +@ +<>= +"AXSERV" [color="#FF4488",href="bookvol10.4.pdf#nameddest=AXSERV"] +"STRING" [color="#88FF44",href="bookvol10.3.pdf#nameddest=STRING"] +"AXSERV" -> "STRING" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter B} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package BEZOUT BezoutMatrix} +\pagehead{BezoutMatrix}{BEZOUT} +\pagepic{ps/v104bezoutmatrix.ps}{BEZOUT}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package BEZOUT BezoutMatrix +++ Author: Clifton J. Williamson +++ Date Created: 2 August 1988 +++ Date Last Updated: 3 November 1993 +++ Basic Operations: bezoutMatrix, bezoutResultant, bezoutDiscriminant +++ Related Domains +++ Also See: +++ AMS Classifiactions: +++ Keywords: Bezout matrix, resultant, discriminant +++ Examples: +++ Reference: Knuth, The Art of Computer Programming, 2nd edition, +++ Vol. 2, p. 619, problem 12. +++ Description: +++ \spadtype{BezoutMatrix} contains functions for computing resultants and +++ discriminants using Bezout matrices. + +BezoutMatrix(R,UP,M,Row,Col): Exports == Implementation where + R : Ring + UP : UnivariatePolynomialCategory R + Row : FiniteLinearAggregate R + Col : FiniteLinearAggregate R + M : MatrixCategory(R,Row,Col) + I ==> Integer + lc ==> leadingCoefficient + + Exports ==> with + sylvesterMatrix: (UP,UP) -> M + ++ sylvesterMatrix(p,q) returns the Sylvester matrix for the two + ++ polynomials p and q. + bezoutMatrix: (UP,UP) -> M + ++ bezoutMatrix(p,q) returns the Bezout matrix for the two + ++ polynomials p and q. + + if R has commutative("*") then + bezoutResultant: (UP,UP) -> R + ++ bezoutResultant(p,q) computes the resultant of the two + ++ polynomials p and q by computing the determinant of a Bezout matrix. + + bezoutDiscriminant: UP -> R + ++ bezoutDiscriminant(p) computes the discriminant of a polynomial p + ++ by computing the determinant of a Bezout matrix. + + Implementation ==> add + + sylvesterMatrix(p,q) == + n1 := degree p; n2 := degree q; n := n1 + n2 + sylmat : M := new(n,n,0) + minR := minRowIndex sylmat; minC := minColIndex sylmat + maxR := maxRowIndex sylmat; maxC := maxColIndex sylmat + p0 := p + -- fill in coefficients of 'p' + while not zero? p0 repeat + coef := lc p0; deg := degree p0; p0 := reductum p0 + -- put bk = coef(p,k) in sylmat(minR + i,minC + i + (n1 - k)) + for i in 0..n2 - 1 repeat + qsetelt_!(sylmat,minR + i,minC + n1 - deg + i,coef) + q0 := q + -- fill in coefficients of 'q' + while not zero? q0 repeat + coef := lc q0; deg := degree q0; q0 := reductum q0 + for i in 0..n1-1 repeat + qsetelt_!(sylmat,minR + n2 + i,minC + n2 - deg + i,coef) + sylmat + + bezoutMatrix(p,q) == + -- This function computes the Bezout matrix for 'p' and 'q'. + -- See Knuth, The Art of Computer Programming, Vol. 2, p. 619, # 12. + -- One must have deg(p) >= deg(q), so the arguments are reversed + -- if this is not the case. + n1 := degree p; n2 := degree q; n := n1 + n2 + n1 < n2 => bezoutMatrix(q,p) + m1 : I := n1 - 1; m2 : I := n2 - 1; m : I := n - 1 + -- 'sylmat' will be a matrix consisting of the first n1 columns + -- of the standard Sylvester matrix for 'p' and 'q' + sylmat : M := new(n,n1,0) + minR := minRowIndex sylmat; minC := minColIndex sylmat + maxR := maxRowIndex sylmat; maxC := maxColIndex sylmat + p0 := p + -- fill in coefficients of 'p' + while not ground? p0 repeat + coef := lc p0; deg := degree p0; p0 := reductum p0 + -- put bk = coef(p,k) in sylmat(minR + i,minC + i + (n1 - k)) + -- for i = 0... + -- quit when i > m2 or when i + (n1 - k) > m1, whichever happens first + for i in 0..min(m2,deg - 1) repeat + qsetelt_!(sylmat,minR + i,minC + n1 - deg + i,coef) + q0 := q + -- fill in coefficients of 'q' + while not zero? q0 repeat + coef := lc q0; deg := degree q0; q0 := reductum q0 + -- put ak = coef(q,k) in sylmat(minR + n1 + i,minC + i + (n2 - k)) + -- for i = 0... + -- quit when i > m1 or when i + (n2 - k) > m1, whichever happens first + -- since n2 - k >= 0, we quit when i + (n2 - k) > m1 + for i in 0..(deg + n1 - n2 - 1) repeat + qsetelt_!(sylmat,minR + n2 + i,minC + n2 - deg + i,coef) + -- 'bezmat' will be the 'Bezout matrix' as described in Knuth + bezmat : M := new(n1,n1,0) + for i in 0..m2 repeat + -- replace A_i by (b_0 A_i + ... + b_{n_2-1-i} A_{n_2 - 1}) - + -- (a_0 B_i + ... + a_{n_2-1-i} B_{n_2-1}), as in Knuth + bound : I := n2 - i; q0 := q + while not zero? q0 repeat + deg := degree q0 + if (deg < bound) then + -- add b_deg A_{n_2 - deg} to the new A_i + coef := lc q0 + for k in minC..maxC repeat + c := coef * qelt(sylmat,minR + m2 - i - deg,k) + + qelt(bezmat,minR + m2 - i,k) + qsetelt_!(bezmat,minR + m2 - i,k,c) + q0 := reductum q0 + p0 := p + while not zero? p0 repeat + deg := degree p0 + if deg < bound then + coef := lc p0 + -- subtract a_deg B_{n_2 - deg} from the new A_i + for k in minC..maxC repeat + c := -coef * qelt(sylmat,minR + m - i - deg,k) + + qelt(bezmat,minR + m2 - i,k) + qsetelt_!(bezmat,minR + m2 - i,k,c) + p0 := reductum p0 + for i in n2..m1 repeat for k in minC..maxC repeat + qsetelt_!(bezmat,minR + i,k,qelt(sylmat,minR + i,k)) + bezmat + + if R has commutative("*") then + + bezoutResultant(f,g) == determinant bezoutMatrix(f,g) + + if R has IntegralDomain then + + bezoutDiscriminant f == + degMod4 := (degree f) rem 4 + (degMod4 = 0) or (degMod4 = 1) => + (bezoutResultant(f,differentiate f) exquo (lc f)) :: R + -((bezoutResultant(f,differentiate f) exquo (lc f)) :: R) + + else + + bezoutDiscriminant f == + lc f = 1 => + degMod4 := (degree f) rem 4 + (degMod4 = 0) or (degMod4 = 1) => + bezoutResultant(f,differentiate f) + -bezoutResultant(f,differentiate f) + error "bezoutDiscriminant: leading coefficient must be 1" + +@ +<>= +"BEZOUT" [color="#FF4488",href="bookvol10.4.pdf#nameddest=BEZOUT"] +"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"] +"BEZOUT" -> "PFECAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package BRILL BrillhartTests} +\pagehead{BrillhartTests}{BRILL} +\pagepic{ps/v104brillharttests.ps}{BRILL}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package BRILL BrillhartTests +++ Author: Frederic Lehobey, James H. Davenport +++ Date Created: 28 June 1994 +++ Date Last Updated: 11 July 1997 +++ Basic Operations: brillhartIrreducible? +++ Related Domains: +++ Also See: +++ AMS Classifications: +++ Keywords: factorization +++ Examples: +++ References: +++ [1] John Brillhart, Note on Irreducibility Testing, +++ Mathematics of Computation, vol. 35, num. 35, Oct. 1980, 1379-1381 +++ [2] James Davenport, On Brillhart Irreducibility. To appear. +++ [3] John Brillhart, On the Euler and Bernoulli polynomials, +++ J. Reine Angew. Math., v. 234, (1969), pp. 45-64 + +BrillhartTests(UP): Exports == Implementation where + N ==> NonNegativeInteger + Z ==> Integer + UP: UnivariatePolynomialCategory Z + + Exports ==> with + brillhartIrreducible?: UP -> Boolean -- See [1] + ++ brillhartIrreducible?(p) returns \spad{true} if p can be shown to be + ++ irreducible by a remark of Brillhart, \spad{false} is inconclusive. + brillhartIrreducible?: (UP,Boolean) -> Boolean -- See [1] + ++ brillhartIrreducible?(p,noLinears) returns \spad{true} if p can be + ++ shown to be irreducible by a remark of Brillhart, \spad{false} else. + ++ If noLinears is \spad{true}, we are being told p has no linear factors + ++ \spad{false} does not mean that p is reducible. + brillhartTrials: () -> N + ++ brillhartTrials() returns the number of tests in + ++ \spadfun{brillhartIrreducible?}. + brillhartTrials: N -> N + ++ brillhartTrials(n) sets to n the number of tests in + ++ \spadfun{brillhartIrreducible?} and returns the previous value. + noLinearFactor?: UP -> Boolean -- See [3] p. 47 + ++ noLinearFactor?(p) returns \spad{true} if p can be shown to have no + ++ linear factor by a theorem of Lehmer, \spad{false} else. I insist on + ++ the fact that \spad{false} does not mean that p has a linear factor. + + Implementation ==> add + + import GaloisGroupFactorizationUtilities(Z,UP,Float) + + squaredPolynomial(p:UP):Boolean == + d := degree p + d = 0 => true + odd? d => false + squaredPolynomial reductum p + + primeEnough?(n:Z,b:Z):Boolean == + -- checks if n is prime, with the possible exception of + -- factors whose product is at most b + import Float + bb: Float := b::Float + for i in 2..b repeat + while (d:= n exquo i) case Integer repeat + n:=d::Integer + bb:=bb / i::Float + bb < 1$Float => return false + --- we over-divided, so it can't be prime + prime? n + + brillharttrials: N := 6 + brillhartTrials():N == brillharttrials + + brillhartTrials(n:N):N == + (brillharttrials,n) := (n,brillharttrials) + n + + brillhartIrreducible?(p:UP):Boolean == + brillhartIrreducible?(p,noLinearFactor? p) + + brillhartIrreducible?(p:UP,noLinears:Boolean):Boolean == -- See [1] + zero? brillharttrials => false + origBound := (largeEnough := rootBound(p)+1) + -- see remarks 2 and 4 + even0 := even? coefficient(p,0) + even1 := even? p(1) + polyx2 := squaredPolynomial(p) + prime? p(largeEnough) => true + not polyx2 and prime? p(-largeEnough) => true +-- one? brillharttrials => false + (brillharttrials = 1) => false + largeEnough := largeEnough+1 + primeEnough?(p(largeEnough),if noLinears then 4 else 2) => true + not polyx2 and + primeEnough?(p(-largeEnough),if noLinears then 4 else 2) => true + if odd? largeEnough then + if even0 then largeEnough := largeEnough+1 + else + if even1 then largeEnough := largeEnough+1 + count :=(if polyx2 then 2 else 1)*(brillharttrials-2)+largeEnough + for i in (largeEnough+1)..count repeat + small := if noLinears then (i-origBound)**2 else (i-origBound) + primeEnough?(p(i),small) => return true + not polyx2 and primeEnough?(p(-i),small) => return true + false + + noLinearFactor?(p:UP):Boolean == + (odd? leadingCoefficient p) and (odd? coefficient(p,0)) and (odd? p(1)) + +@ +<>= +"BRILL" [color="#FF4488",href="bookvol10.4.pdf#nameddest=BRILL"] +"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"] +"BRILL" -> "PFECAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter C} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package CPIMA CharacteristicPolynomialInMonogenicalAlgebra} +\pagehead{CharacteristicPolynomialInMonogenicalAlgebra}{CPIMA} +\pagepic{ps/v104characteristicpolynomialinmonogenicalalgebra.ps}{CPIMA}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package CPIMA CharacteristicPolynomialInMonogenicalAlgebra +++ Author: Claude Quitte +++ Date Created: 10/12/93 +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ This package implements characteristicPolynomials for monogenic algebras +++ using resultants +CharacteristicPolynomialInMonogenicalAlgebra(R : CommutativeRing, + PolR : UnivariatePolynomialCategory(R), + E : MonogenicAlgebra(R, PolR)): with + characteristicPolynomial : E -> PolR + ++ characteristicPolynomial(e) returns the characteristic polynomial + ++ of e using resultants + + == add + Pol ==> SparseUnivariatePolynomial + + import UnivariatePolynomialCategoryFunctions2(R, PolR, PolR, Pol(PolR)) + XtoY(Q : PolR) : Pol(PolR) == map(monomial(#1, 0), Q) + + P : Pol(PolR) := XtoY(definingPolynomial()$E) + X : Pol(PolR) := monomial(monomial(1, 1)$PolR, 0) + + characteristicPolynomial(x : E) : PolR == + Qx : PolR := lift(x) + -- on utilise le fait que resultant_Y (P(Y), X - Qx(Y)) + return resultant(P, X - XtoY(Qx)) + +@ +<>= +"CPIMA" [color="#FF4488",href="bookvol10.4.pdf#nameddest=CPIMA"] + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter D} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter E} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter F} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package FLAGG2 FiniteLinearAggregateFunctions2} +\pagehead{FiniteLinearAggregateFunctions2}{FLAGG2} +\pagepic{ps/v104finitelinearaggregatefunctions2.ps}{FLAGG2}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package FLAGG2 FiniteLinearAggregateFunctions2 +--% FiniteLinearAggregateFunctions2 + +++ Author: ??? +++ Date Created: ??? +++ Date Last Updated: ??? +++ Description: +++ FiniteLinearAggregateFunctions2 provides functions involving two +++ FiniteLinearAggregates where the underlying domains might be +++ different. An example of this might be creating a list of rational +++ numbers by mapping a function across a list of integers where the +++ function divides each integer by 1000. + +FiniteLinearAggregateFunctions2(S, A, R, B): + Exports == Implementation where + S, R: Type + A : FiniteLinearAggregate S + B : FiniteLinearAggregate R + + Exports ==> with + map : (S -> R, A) -> B + ++ map(f,a) applies function f to each member of aggregate + ++ \spad{a} resulting in a new aggregate over a + ++ possibly different underlying domain. + reduce : ((S, R) -> R, A, R) -> R + ++ reduce(f,a,r) applies function f to each + ++ successive element of the + ++ aggregate \spad{a} and an accumulant initialized to r. + ++ For example, + ++ \spad{reduce(_+$Integer,[1,2,3],0)} + ++ does \spad{3+(2+(1+0))}. Note: third argument r + ++ may be regarded as the + ++ identity element for the function f. + scan : ((S, R) -> R, A, R) -> B + ++ scan(f,a,r) successively applies + ++ \spad{reduce(f,x,r)} to more and more leading sub-aggregates + ++ x of aggregrate \spad{a}. + ++ More precisely, if \spad{a} is \spad{[a1,a2,...]}, then + ++ \spad{scan(f,a,r)} returns + ++ \spad{[reduce(f,[a1],r),reduce(f,[a1,a2],r),...]}. + Implementation ==> add + if A has ListAggregate(S) then -- A is a list-oid + reduce(fn, l, ident) == + empty? l => ident + reduce(fn, rest l, fn(first l, ident)) + + if B has ListAggregate(R) or not(B has shallowlyMutable) then + -- A is a list-oid, and B is either list-oids or not mutable + map(f, l) == construct [f s for s in entries l] + + scan(fn, l, ident) == + empty? l => empty() + val := fn(first l, ident) + concat(val, scan(fn, rest l, val)) + + else -- A is a list-oid, B a mutable array-oid + map(f, l) == + i := minIndex(w := new(#l,NIL$Lisp)$B) + for a in entries l repeat (qsetelt_!(w, i, f a); i := inc i) + w + + scan(fn, l, ident) == + i := minIndex(w := new(#l,NIL$Lisp)$B) + vl := ident + for a in entries l repeat + vl := qsetelt_!(w, i, fn(a, vl)) + i := inc i + w + + else -- A is an array-oid + reduce(fn, v, ident) == + val := ident + for i in minIndex v .. maxIndex v repeat + val := fn(qelt(v, i), val) + val + + if B has ListAggregate(R) then -- A is an array-oid, B a list-oid + map(f, v) == + construct [f qelt(v, i) for i in minIndex v .. maxIndex v] + + scan(fn, v, ident) == + w := empty()$B + for i in minIndex v .. maxIndex v repeat + ident := fn(qelt(v, i), ident) + w := concat(ident, w) + reverse_! w + + else -- A and B are array-oid's + if B has shallowlyMutable then -- B is also mutable + map(f, v) == + w := new(#v,NIL$Lisp)$B + for i in minIndex w .. maxIndex w repeat + qsetelt_!(w, i, f qelt(v, i)) + w + + scan(fn, v, ident) == + w := new(#v,NIL$Lisp)$B + vl := ident + for i in minIndex v .. maxIndex v repeat + vl := qsetelt_!(w, i, fn(qelt(v, i), vl)) + w + + else -- B non mutable array-oid + map(f, v) == + construct [f qelt(v, i) for i in minIndex v .. maxIndex v] + + scan(fn, v, ident) == + w := empty()$B + for i in minIndex v .. maxIndex v repeat + ident := fn(qelt(v, i), ident) + w := concat(w, ident) + w + +@ +<>= +"FLAGG2" [color="#FF4488",href="bookvol10.4.pdf#nameddest=FLAGG2"] +"FLAGG" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FLAGG"] +"FLAGG2" -> "FLAGG" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package FSAGG2 FiniteSetAggregateFunctions2} +\pagehead{FiniteSetAggregateFunctions2}{FSAGG2} +\pagepic{ps/v104finitesetaggregatefunctions2.ps}{FSAGG2}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package FSAGG2 FiniteSetAggregateFunctions2 + +--% FiniteSetAggregateFunctions2 + +++ Author: Robert S. Sutor +++ Date Created: 15 May 1990 +++ Date Last Updated: 14 Oct 1993 +++ Description: +++ FiniteSetAggregateFunctions2 provides functions involving two +++ finite set aggregates where the underlying domains might be +++ different. An example of this is to create a set of rational +++ numbers by mapping a function across a set of integers, where the +++ function divides each integer by 1000. + +FiniteSetAggregateFunctions2(S, A, R, B): Exports == Implementation where + S, R: SetCategory + A : FiniteSetAggregate S + B : FiniteSetAggregate R + + Exports ==> with + map : (S -> R, A) -> B + ++ map(f,a) applies function f to each member of + ++ aggregate \spad{a}, creating a new aggregate with + ++ a possibly different underlying domain. + reduce : ((S, R) -> R, A, R) -> R + ++ reduce(f,a,r) applies function f to each + ++ successive element of the aggregate \spad{a} and an + ++ accumulant initialised to r. + ++ For example, + ++ \spad{reduce(_+$Integer,[1,2,3],0)} + ++ does a \spad{3+(2+(1+0))}. + ++ Note: third argument r may be regarded + ++ as an identity element for the function. + scan : ((S, R) -> R, A, R) -> B + ++ scan(f,a,r) successively applies \spad{reduce(f,x,r)} + ++ to more and more leading sub-aggregates x of + ++ aggregate \spad{a}. + ++ More precisely, if \spad{a} is \spad{[a1,a2,...]}, then + ++ \spad{scan(f,a,r)} returns + ++ \spad {[reduce(f,[a1],r),reduce(f,[a1,a2],r),...]}. + Implementation ==> add + map(fn, a) == + set(map(fn, parts a)$ListFunctions2(S, R))$B + reduce(fn, a, ident) == + reduce(fn, parts a, ident)$ListFunctions2(S, R) + scan(fn, a, ident) == + set(scan(fn, parts a, ident)$ListFunctions2(S, R))$B + +@ +<>= +"FSAGG2" [color="#FF4488",href="bookvol10.4.pdf#nameddest=FSAGG2"] +"FSAGG" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FSAGG"] +"FSAGG2" -> "FSAGG" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter G} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package GENMFACT GeneralizedMultivariateFactorize} +\pagehead{GeneralizedMultivariateFactorize}{GENMFACT} +\pagepic{ps/v104generalizedmultivariatefactorize.ps}{GENMFACT}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package GENMFACT GeneralizedMultivariateFactorize +++ Author: P. Gianni +++ Date Created: 1983 +++ Date Last Updated: Sept. 1990 +++ Basic Functions: +++ Related Constructors: MultFiniteFactorize, AlgebraicMultFact, MultivariateFactorize +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ This is the top level package for doing multivariate factorization +++ over basic domains like \spadtype{Integer} or \spadtype{Fraction Integer}. + +GeneralizedMultivariateFactorize(OV,E,S,R,P) : C == T + where + R : IntegralDomain + -- with factor on R[x] + S : IntegralDomain + OV : OrderedSet with + convert : % -> Symbol + ++ convert(x) converts x to a symbol + variable: Symbol -> Union(%, "failed") + ++ variable(s) makes an element from symbol s or fails. + E : OrderedAbelianMonoidSup + P : PolynomialCategory(R,E,OV) + + C == with + factor : P -> Factored P + ++ factor(p) factors the multivariate polynomial p over its coefficient + ++ domain + + T == add + factor(p:P) : Factored P == + R has FiniteFieldCategory => factor(p)$MultFiniteFactorize(OV,E,R,P) + R is Polynomial(S) and S has EuclideanDomain => + factor(p)$MPolyCatPolyFactorizer(E,OV,S,P) + R is Fraction(S) and S has CharacteristicZero and + S has EuclideanDomain => + factor(p)$MRationalFactorize(E,OV,S,P) + R is Fraction Polynomial S => + factor(p)$MPolyCatRationalFunctionFactorizer(E,OV,S,P) + R has CharacteristicZero and R has EuclideanDomain => + factor(p)$MultivariateFactorize(OV,E,R,P) + squareFree p + +@ +<>= +"GENMFACT" [color="#FF4488",href="bookvol10.4.pdf#nameddest=GENMFACT"] +"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"] +"GENMFACT" -> "PFECAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter H} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter I} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package IALGFACT InnerAlgFactor} +\pagehead{InnerAlgFactor}{IALGFACT} +\pagepic{ps/v104inneralgfactor.ps}{IALGFACT}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package IALGFACT InnerAlgFactor +++ Factorisation in a simple algebraic extension +++ Author: Patrizia Gianni +++ Date Created: ??? +++ Date Last Updated: 20 Jul 1988 +++ Description: +++ Factorization of univariate polynomials with coefficients in an +++ algebraic extension of a field over which we can factor UP's; +++ Keywords: factorization, algebraic extension, univariate polynomial + +InnerAlgFactor(F, UP, AlExt, AlPol): Exports == Implementation where + F : Field + UP : UnivariatePolynomialCategory F + AlPol: UnivariatePolynomialCategory AlExt + AlExt : Join(Field, CharacteristicZero, MonogenicAlgebra(F,UP)) + NUP ==> SparseUnivariatePolynomial UP + N ==> NonNegativeInteger + Z ==> Integer + FR ==> Factored UP + UPCF2 ==> UnivariatePolynomialCategoryFunctions2 + + + Exports ==> with + factor: (AlPol, UP -> FR) -> Factored AlPol + ++ factor(p, f) returns a prime factorisation of p; + ++ f is a factorisation map for elements of UP; + + Implementation ==> add + pnorm : AlPol -> UP + convrt : AlPol -> NUP + change : UP -> AlPol + perturbfactor: (AlPol, Z, UP -> FR) -> List AlPol + irrfactor : (AlPol, Z, UP -> FR) -> List AlPol + + + perturbfactor(f, k, fact) == + pol := monomial(1$AlExt,1)- + monomial(reduce monomial(k::F,1)$UP ,0) + newf := elt(f, pol) + lsols := irrfactor(newf, k, fact) + pol := monomial(1, 1) + + monomial(reduce monomial(k::F,1)$UP,0) + [elt(pp, pol) for pp in lsols] + + --- factorize the square-free parts of f --- + irrfactor(f, k, fact) == + degree(f) =$N 1 => [f] + newf := f + nn := pnorm f + --newval:RN:=1 + --pert:=false + --if ^ SqFr? nn then + -- pert:=true + -- newterm:=perturb(f) + -- newf:=newterm.ppol + -- newval:=newterm.pval + -- nn:=newterm.nnorm + listfact := factors fact nn + #listfact =$N 1 => + first(listfact).exponent =$Z 1 => [f] + perturbfactor(f, k + 1, fact) + listerm:List(AlPol):= [] + for pelt in listfact repeat + g := gcd(change(pelt.factor), newf) + newf := (newf exquo g)::AlPol + listerm := + pelt.exponent =$Z 1 => cons(g, listerm) + append(perturbfactor(g, k + 1, fact), listerm) + listerm + + factor(f, fact) == + sqf := squareFree f + unit(sqf) * _*/[_*/[primeFactor(pol, sqterm.exponent) + for pol in irrfactor(sqterm.factor, 0, fact)] + for sqterm in factors sqf] + + p := definingPolynomial()$AlExt + newp := map(#1::UP, p)$UPCF2(F, UP, UP, NUP) + + pnorm q == resultant(convrt q, newp) + change q == map(coerce, q)$UPCF2(F,UP,AlExt,AlPol) + + convrt q == + swap(map(lift, q)$UPCF2(AlExt, AlPol, + UP, NUP))$CommuteUnivariatePolynomialCategory(F, UP, NUP) + +@ +<>= +"IALGFACT" [color="#FF4488",href="bookvol10.4.pdf#nameddest=IALGFACT"] + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter J} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter K} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter L} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter M} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package MTHING MergeThing} +\pagehead{MergeThing}{MTHING} +\pagepic{ps/v104mergething.ps}{MTHING}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package MTHING MergeThing +++ This package exports tools for merging lists +MergeThing(S:OrderedSet): Exports == Implementation where + Exports == with + mergeDifference: (List(S),List(S)) -> List(S) + ++ mergeDifference(l1,l2) returns a list of elements in l1 not present + ++ in l2. Assumes lists are ordered and all x in l2 are also in l1. + Implementation == add + mergeDifference1: (List S,S,List S) -> List S + mergeDifference(x,y) == + null x or null y => x + mergeDifference1(x,y.first,y.rest) + x.first=y.first => x.rest + x + mergeDifference1(x,fy,ry) == + rx := x + while not null rx repeat + rx := rx.rest + frx := rx.first + while fy < frx repeat + null ry => return x + fy := first ry + ry := rest ry + frx = fy => + x.rest := rx.rest + null ry => return x + fy := ry.first + ry := ry.rest + x := rx + +@ +<>= +"MTHING" [color="#FF4488",href="bookvol10.4.pdf#nameddest=MTHING"] +"FLAGG" [color="#4488FF",href="bookvol10.2.pdf#nameddest=FLAGG"] +"MTHING" -> "FLAGG" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package MPCPF MPolyCatPolyFactorizer} +\pagehead{MPolyCatPolyFactorizer}{MPCPF} +\pagepic{ps/v104mpolycatpolyfactorizer.ps}{MPCPF}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package MPCPF MPolyCatPolyFactorizer +++ Author: P. Gianni +++ Date Created: +++ Date Last Updated: March 1995 +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ This package exports a factor operation for multivariate polynomials +++ with coefficients which are polynomials over +++ some ring R over which we can factor. It is used internally by packages +++ such as the solve package which need to work with polynomials in a specific +++ set of variables with coefficients which are polynomials in all the other +++ variables. + +MPolyCatPolyFactorizer(E,OV,R,PPR) : C == T + where + R : EuclideanDomain + E : OrderedAbelianMonoidSup + -- following type is required by PushVariables + OV : OrderedSet with + convert : % -> Symbol + ++ convert(x) converts x to a symbol + variable: Symbol -> Union(%, "failed") + ++ variable(s) makes an element from symbol s or fails. + PR ==> Polynomial R + PPR : PolynomialCategory(PR,E,OV) + NNI ==> NonNegativeInteger + ISY ==> IndexedExponents Symbol + SE ==> Symbol + UP ==> SparseUnivariatePolynomial PR + UPPR ==> SparseUnivariatePolynomial PPR + + C == with + factor : PPR -> Factored PPR + ++ factor(p) factors a polynomial with polynomial + ++ coefficients. + + --- Local Functions ---- + T == add + + import PushVariables(R,E,OV,PPR) + + ---- factorization of p ---- + factor(p:PPR) : Factored PPR == + ground? p => nilFactor(p,1) + c := content p + p := (p exquo c)::PPR + vars:List OV :=variables p + g:PR:=retract pushdown(p, vars) + flist := factor(g)$GeneralizedMultivariateFactorize(Symbol,ISY,R,R,PR) + ffact : List(Record(irr:PPR,pow:Integer)) + ffact:=[[pushup(u.factor::PPR,vars),u.exponent] for u in factors flist] + fcont:=(unit flist)::PPR + nilFactor(c*fcont,1)*(_*/[primeFactor(ff.irr,ff.pow) for ff in ffact]) + +@ +<>= +"MPCPF" [color="#FF4488",href="bookvol10.4.pdf#nameddest=MPCPF"] +"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"] +"MPCPF" -> "PFECAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package MPRFF MPolyCatRationalFunctionFactorizer} +\pagehead{MPolyCatRationalFunctionFactorizer}{MPRFF} +\pagepic{ps/v104mpolycatrationalfunctionfactorizer.ps}{MPRFF}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package MPRFF MPolyCatRationalFunctionFactorizer +++ Author: P. Gianni +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ This package exports a factor operation for multivariate polynomials +++ with coefficients which are rational functions over +++ some ring R over which we can factor. It is used internally by packages +++ such as primary decomposition which need to work with polynomials +++ with rational function coefficients, i.e. themselves fractions of +++ polynomials. + +MPolyCatRationalFunctionFactorizer(E,OV,R,PRF) : C == T + where + R : IntegralDomain + F ==> Fraction Polynomial R + RN ==> Fraction Integer + E : OrderedAbelianMonoidSup + OV : OrderedSet with + convert : % -> Symbol + ++ convert(x) converts x to a symbol + PRF : PolynomialCategory(F,E,OV) + NNI ==> NonNegativeInteger + P ==> Polynomial R + ISE ==> IndexedExponents SE + SE ==> Symbol + UP ==> SparseUnivariatePolynomial P + UF ==> SparseUnivariatePolynomial F + UPRF ==> SparseUnivariatePolynomial PRF + QuoForm ==> Record(sup:P,inf:P) + + C == with + totalfract : PRF -> QuoForm + ++ totalfract(prf) takes a polynomial whose coefficients are + ++ themselves fractions of polynomials and returns a record + ++ containing the numerator and denominator resulting from + ++ putting prf over a common denominator. + pushdown : (PRF,OV) -> PRF + ++ pushdown(prf,var) pushes all top level occurences of the + ++ variable var into the coefficient domain for the polynomial prf. + pushdterm : (UPRF,OV) -> PRF + ++ pushdterm(monom,var) pushes all top level occurences of the + ++ variable var into the coefficient domain for the monomial monom. + pushup : (PRF,OV) -> PRF + ++ pushup(prf,var) raises all occurences of the + ++ variable var in the coefficients of the polynomial prf + ++ back to the polynomial level. + pushucoef : (UP,OV) -> PRF + ++ pushucoef(upoly,var) converts the anonymous univariate + ++ polynomial upoly to a polynomial in var over rational functions. + pushuconst : (F,OV) -> PRF + ++ pushuconst(r,var) takes a rational function and raises + ++ all occurances of the variable var to the polynomial level. + factor : PRF -> Factored PRF + ++ factor(prf) factors a polynomial with rational function + ++ coefficients. + + --- Local Functions ---- + T == add + + ---- factorization of p ---- + factor(p:PRF) : Factored PRF == + truelist:List OV :=variables p + tp:=totalfract(p) + nump:P:= tp.sup + denp:F:=inv(tp.inf ::F) + ffact : List(Record(irr:PRF,pow:Integer)) + flist:Factored P + if R is Fraction Integer then + flist:= + ((factor nump)$MRationalFactorize(ISE,SE,Integer,P)) + pretend (Factored P) + else + if R has FiniteFieldCategory then + flist:= ((factor nump)$MultFiniteFactorize(SE,ISE,R,P)) + pretend (Factored P) + + else + if R has Field then error "not done yet" + + else + if R has CharacteristicZero then + flist:= ((factor nump)$MultivariateFactorize(SE,ISE,R,P)) + pretend (Factored P) + else error "can't happen" + ffact:=[[u.factor::F::PRF,u.exponent] for u in factors flist] + fcont:=(unit flist)::F::PRF + for x in truelist repeat + fcont:=pushup(fcont,x) + ffact:=[[pushup(ff.irr,x),ff.pow] for ff in ffact] + (denp*fcont)*(_*/[primeFactor(ff.irr,ff.pow) for ff in ffact]) + + +-- the following functions are used to "push" x in the coefficient ring - + + ---- push x in the coefficient domain for a polynomial ---- + pushdown(g:PRF,x:OV) : PRF == + ground? g => g + rf:PRF:=0$PRF + ug:=univariate(g,x) + while ug^=0 repeat + rf:=rf+pushdterm(ug,x) + ug := reductum ug + rf + + ---- push x in the coefficient domain for a term ---- + pushdterm(t:UPRF,x:OV):PRF == + n:=degree(t) + cf:=monomial(1,convert x,n)$P :: F + cf * leadingCoefficient t + + ---- push back the variable ---- + pushup(f:PRF,x:OV) :PRF == + ground? f => pushuconst(retract f,x) + v:=mainVariable(f)::OV + g:=univariate(f,v) + multivariate(map(pushup(#1,x),g),v) + + ---- push x back from the coefficient domain ---- + pushuconst(r:F,x:OV):PRF == + xs:SE:=convert x + degree(denom r,xs)>0 => error "bad polynomial form" + inv((denom r)::F)*pushucoef(univariate(numer r,xs),x) + + + pushucoef(c:UP,x:OV):PRF == + c = 0 => 0 + monomial((leadingCoefficient c)::F::PRF,x,degree c) + + pushucoef(reductum c,x) + + + ---- write p with a common denominator ---- + + totalfract(p:PRF) : QuoForm == + p=0 => [0$P,1$P]$QuoForm + for x in variables p repeat p:=pushdown(p,x) + g:F:=retract p + [numer g,denom g]$QuoForm + +@ +<>= +"MPRFF" [color="#FF4488",href="bookvol10.4.pdf#nameddest=MPRFF"] +"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"] +"MPRFF" -> "PFECAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package MRATFAC MRationalFactorize} +\pagehead{MRationalFactorize}{MRATFAC} +\pagepic{ps/v104mrationalfactorize.ps}{MRATFAC}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package MRATFAC MRationalFactorize +++ Author: P. Gianni +++ Date Created: +++ Date Last Updated: +++ Basic Functions: +++ Related Constructors: MultivariateFactorize +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: MRationalFactorize contains the factor function for multivariate +++ polynomials over the quotient field of a ring R such that the package +++ MultivariateFactorize can factor multivariate polynomials over R. + + +MRationalFactorize(E,OV,R,P) : C == T + where + E : OrderedAbelianMonoidSup + OV : OrderedSet + R : Join(EuclideanDomain, CharacteristicZero) -- with factor over R[x] + FR ==> Fraction R + P : PolynomialCategory(FR,E,OV) + MPR ==> SparseMultivariatePolynomial(R,OV) + SUP ==> SparseUnivariatePolynomial + + C == with + factor : P -> Factored P + ++ factor(p) factors the multivariate polynomial p with coefficients + ++ which are fractions of elements of R. + + T == add + IE ==> IndexedExponents OV + PCLFRR ==> PolynomialCategoryLifting(E,OV,FR,P,MPR) + PCLRFR ==> PolynomialCategoryLifting(IE,OV,R,MPR,P) + MFACT ==> MultivariateFactorize(OV,IE,R,MPR) + UPCF2 ==> UnivariatePolynomialCategoryFunctions2 + + numer1(c:FR): MPR == (numer c) :: MPR + numer2(pol:P) : MPR == map(coerce,numer1,pol)$PCLFRR + coerce1(d:R) : P == (d::FR)::P + coerce2(pp:MPR) :P == map(coerce,coerce1,pp)$PCLRFR + + factor(p:P) : Factored P == + pden:R:=lcm([denom c for c in coefficients p]) + pol :P:= (pden::FR)*p + ipol:MPR:= map(coerce,numer1,pol)$PCLFRR + ffact:=(factor ipol)$MFACT + (1/pden)*map(coerce,coerce1,(unit ffact))$PCLRFR * + _*/[primeFactor(map(coerce,coerce1,u.factor)$PCLRFR, + u.exponent) for u in factors ffact] + +@ +<>= +"MRATFAC" [color="#FF4488",href="bookvol10.4.pdf#nameddest=MRATFAC"] + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter N} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package NONE1 NoneFunctions1} +\pagehead{NoneFunctions1}{NONE1} +\pagepic{ps/v104nonefunctions1.ps}{NONE1}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package NONE1 NoneFunctions1 +++ Author: +++ Date Created: +++ Change History: +++ Basic Functions: coerce +++ Related Constructors: None +++ Also See: +++ AMS Classification: +++ Keywords: +++ Description: +++ \spadtype{NoneFunctions1} implements functions on \spadtype{None}. +++ It particular it includes a particulary dangerous coercion from +++ any other type to \spadtype{None}. + +NoneFunctions1(S:Type): Exports == Implementation where + Exports ==> with + coerce: S -> None + ++ coerce(x) changes \spad{x} into an object of type + ++ \spadtype{None}. + + Implementation ==> add + coerce(s:S):None == s pretend None + +@ +<>= +"NONE1" [color="#FF4488",href="bookvol10.4.pdf#nameddest=NONE1"] +"TYPE" [color="#4488FF",href="bookvol10.2.pdf#nameddest=TYPE"] +"NONE1" -> "TYPE" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package NORMMA NormInMonogenicAlgebra} +\pagehead{NormInMonogenicAlgebra}{NORMMA} +\pagepic{ps/v104norminmonogenicalgebra.ps}{NORMMA}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package NORMMA NormInMonogenicAlgebra +++ Author: Manuel Bronstein +++ Date Created: 23 February 1995 +++ Date Last Updated: 23 February 1995 +++ Basic Functions: norm +++ Description: +++ This package implements the norm of a polynomial with coefficients +++ in a monogenic algebra (using resultants) + +NormInMonogenicAlgebra(R, PolR, E, PolE): Exports == Implementation where + R: GcdDomain + PolR: UnivariatePolynomialCategory R + E: MonogenicAlgebra(R, PolR) + PolE: UnivariatePolynomialCategory E + + SUP ==> SparseUnivariatePolynomial + + Exports ==> with + norm: PolE -> PolR + ++ norm q returns the norm of q, + ++ i.e. the product of all the conjugates of q. + + Implementation ==> add + import UnivariatePolynomialCategoryFunctions2(R, PolR, PolR, SUP PolR) + + PolR2SUP: PolR -> SUP PolR + PolR2SUP q == map(#1::PolR, q) + + defpol := PolR2SUP(definingPolynomial()$E) + + norm q == + p:SUP PolR := 0 + while q ~= 0 repeat + p := p + monomial(1,degree q)$PolR * PolR2SUP lift leadingCoefficient q + q := reductum q + primitivePart resultant(p, defpol) + +@ +<>= +"NORMMA" [color="#FF4488",href="bookvol10.4.pdf#nameddest=NORMMA"] + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter O} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package ARRAY12 OneDimensionalArrayFunctions2} +\pagehead{OneDimensionalArrayFunctions2}{ARRAY12} +\pagepic{ps/v104onedimensionalarrayfunctions2.ps}{ARRAY12}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package ARRAY12 OneDimensionalArrayFunctions2 +++ This package provides tools for operating on one-dimensional arrays +++ with unary and binary functions involving different underlying types +OneDimensionalArrayFunctions2(A, B): Exports == Implementation where + A, B: Type + + VA ==> OneDimensionalArray A + VB ==> OneDimensionalArray B + O2 ==> FiniteLinearAggregateFunctions2(A, VA, B, VB) + + Exports ==> with + scan : ((A, B) -> B, VA, B) -> VB + ++ scan(f,a,r) successively applies + ++ \spad{reduce(f,x,r)} to more and more leading sub-arrays + ++ x of one-dimensional array \spad{a}. + ++ More precisely, if \spad{a} is \spad{[a1,a2,...]}, then + ++ \spad{scan(f,a,r)} returns + ++ \spad{[reduce(f,[a1],r),reduce(f,[a1,a2],r),...]}. + ++ + ++X T1:=OneDimensionalArrayFunctions2(Integer,Integer) + ++X adder(a:Integer,b:Integer):Integer == a+b + ++X scan(adder,[i for i in 1..10],0)$T1 + + reduce : ((A, B) -> B, VA, B) -> B + ++ reduce(f,a,r) applies function f to each + ++ successive element of the + ++ one-dimensional array \spad{a} and an accumulant initialized to r. + ++ For example, \spad{reduce(_+$Integer,[1,2,3],0)} + ++ does \spad{3+(2+(1+0))}. Note: third argument r + ++ may be regarded as the identity element for the function f. + ++ + ++X T1:=OneDimensionalArrayFunctions2(Integer,Integer) + ++X adder(a:Integer,b:Integer):Integer == a+b + ++X reduce(adder,[i for i in 1..10],0)$T1 + + map : (A -> B, VA) -> VB + ++ map(f,a) applies function f to each member of one-dimensional array + ++ \spad{a} resulting in a new one-dimensional array over a + ++ possibly different underlying domain. + ++ + ++X T1:=OneDimensionalArrayFunctions2(Integer,Integer) + ++X map(x+->x+2,[i for i in 1..10])$T1 + + Implementation ==> add + map(f, v) == map(f, v)$O2 + scan(f, v, b) == scan(f, v, b)$O2 + reduce(f, v, b) == reduce(f, v, b)$O2 + +@ +<>= +"ARRAY12" [color="#FF4488",href="bookvol10.4.pdf#nameddest=ARRAY12"] + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package OPQUERY OperationsQuery} +\pagehead{OperationsQuery}{OPQUERY} +\pagepic{ps/v104operationsquery.ps}{OPQUERY}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package OPQUERY OperationsQuery +++ This package exports tools to create AXIOM Library information databases. +OperationsQuery(): Exports == Implementation where + Exports == with + getDatabase: String -> Database(IndexCard) + ++ getDatabase("char") returns a list of appropriate entries in the + ++ browser database. The legal values for "char" are "o" (operations), + ++ "k" (constructors), "d" (domains), "c" (categories) or "p" (packages). + Implementation == add + getDatabase(s) == getBrowseDatabase(s)$Lisp + +@ +<>= +"OPQUERY" [color="#FF4488",href="bookvol10.4.pdf#nameddest=OPQUERY"] +"ORDSET" [color="#4488FF",href="bookvol10.2.pdf#nameddest=ORDSET"] +"OPQUERY" -> "ORDSET" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter P} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package PRIMARR2 PrimitiveArrayFunctions2} +\pagehead{PrimitiveArrayFunctions2}{PRIMARR2} +\pagepic{ps/v104primitivearrayfunctions2.ps}{PRIMARR2}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package PRIMARR2 PrimitiveArrayFunctions2 +++ This package provides tools for operating on primitive arrays +++ with unary and binary functions involving different underlying types +PrimitiveArrayFunctions2(A, B): Exports == Implementation where + A, B: Type + + VA ==> PrimitiveArray A + VB ==> PrimitiveArray B + O2 ==> FiniteLinearAggregateFunctions2(A, VA, B, VB) + Exports ==> with + scan : ((A, B) -> B, VA, B) -> VB + ++ scan(f,a,r) successively applies + ++ \spad{reduce(f,x,r)} to more and more leading sub-arrays + ++ x of primitive array \spad{a}. + ++ More precisely, if \spad{a} is \spad{[a1,a2,...]}, then + ++ \spad{scan(f,a,r)} returns + ++ \spad{[reduce(f,[a1],r),reduce(f,[a1,a2],r),...]}. + ++ + ++X T1:=PrimitiveArrayFunctions2(Integer,Integer) + ++X adder(a:Integer,b:Integer):Integer == a+b + ++X scan(adder,[i for i in 1..10],0)$T1 + + reduce : ((A, B) -> B, VA, B) -> B + ++ reduce(f,a,r) applies function f to each + ++ successive element of the + ++ primitive array \spad{a} and an accumulant initialized to r. + ++ For example, \spad{reduce(_+$Integer,[1,2,3],0)} + ++ does \spad{3+(2+(1+0))}. Note: third argument r + ++ may be regarded as the identity element for the function f. + ++ + ++X T1:=PrimitiveArrayFunctions2(Integer,Integer) + ++X adder(a:Integer,b:Integer):Integer == a+b + ++X reduce(adder,[i for i in 1..10],0)$T1 + + map : (A -> B, VA) -> VB + ++ map(f,a) applies function f to each member of primitive array + ++ \spad{a} resulting in a new primitive array over a + ++ possibly different underlying domain. + ++ + ++X T1:=PrimitiveArrayFunctions2(Integer,Integer) + ++X map(x+->x+2,[i for i in 1..10])$T1 + + Implementation ==> add + map(f, v) == map(f, v)$O2 + scan(f, v, b) == scan(f, v, b)$O2 + reduce(f, v, b) == reduce(f, v, b)$O2 + +@ +<>= +"PRIMARR2" [color="#FF4488",href="bookvol10.4.pdf#nameddest=PRIMARR2"] + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter Q} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter R} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package RFFACT RationalFunctionFactor} +\pagehead{RationalFunctionFactor}{RFFACT} +\pagepic{ps/v104rationalfunctionfactor.ps}{RFFACT}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package RFFACT RationalFunctionFactor +++ Factorisation in UP FRAC POLY INT +++ Author: Patrizia Gianni +++ Date Created: ??? +++ Date Last Updated: ??? +++ Description: +++ Factorization of univariate polynomials with coefficients which +++ are rational functions with integer coefficients. + +RationalFunctionFactor(UP): Exports == Implementation where + UP: UnivariatePolynomialCategory Fraction Polynomial Integer + + SE ==> Symbol + P ==> Polynomial Integer + RF ==> Fraction P + UPCF2 ==> UnivariatePolynomialCategoryFunctions2 + + Exports ==> with + factor: UP -> Factored UP + ++ factor(p) returns a prime factorisation of p. + + Implementation ==> add + likuniv: (P, SE, P) -> UP + + dummy := new()$SE + + likuniv(p, x, d) == + map(#1 / d, univariate(p, x))$UPCF2(P,SparseUnivariatePolynomial P, + RF, UP) + + factor p == + d := denom(q := elt(p,dummy::P :: RF)) + map(likuniv(#1,dummy,d), + factor(numer q)$MultivariateFactorize(SE, + IndexedExponents SE,Integer,P))$FactoredFunctions2(P, UP) + +@ +<>= +"RFFACT" [color="#FF4488",href="bookvol10.4.pdf#nameddest=RFFACT"] + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package RFFACTOR RationalFunctionFactorizer} +\pagehead{RationalFunctionFactorizer}{RFFACTOR} +\pagepic{ps/v104rationalfunctionfactorizer.ps}{RFFACTOR}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package RFFACTOR RationalFunctionFactorizer +++ Author: P. Gianni +++ Date Created: +++ Date Last Updated: March 1995 +++ Basic Functions: +++ Related Constructors: Fraction, Polynomial +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: +++ \spadtype{RationalFunctionFactorizer} contains the factor function +++ (called factorFraction) which factors fractions of polynomials by factoring +++ the numerator and denominator. Since any non zero fraction is a unit +++ the usual factor operation will just return the original fraction. + +RationalFunctionFactorizer(R) : C == T + where + R : EuclideanDomain -- R with factor for R[X] + P ==> Polynomial R + FP ==> Fraction P + SE ==> Symbol + + C == with + factorFraction : FP -> Fraction Factored(P) + ++ factorFraction(r) factors the numerator and the denominator of + ++ the polynomial fraction r. + T == add + + factorFraction(p:FP) : Fraction Factored(P) == + R is Fraction Integer => + MR:=MRationalFactorize(IndexedExponents SE,SE, + Integer,P) + (factor(numer p)$MR)/ (factor(denom p)$MR) + + R has FiniteFieldCategory => + FF:=MultFiniteFactorize(SE,IndexedExponents SE,R,P) + (factor(numer p))$FF/(factor(denom p))$FF + + R has CharacteristicZero => + MFF:=MultivariateFactorize(SE,IndexedExponents SE,R,P) + (factor(numer p))$MFF/(factor(denom p))$MFF + error "case not handled" + +@ +<>= +"RFFACTOR" [color="#FF4488",href="bookvol10.4.pdf#nameddest=RFFACTOR"] +"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"] +"RFFACTOR" -> "PFECAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package REALSOLV RealSolvePackage} +<>= +-- acplot.spad.pamphlet RealSolvePackage.input +)spool RealSolvePackage.output +)set message test on +)set message auto off +)clear all +--S 1 of 13 +p := 4*x^3 - 3*x^2 + 2*x - 4 +--R +--R +--R 3 2 +--R (1) 4x - 3x + 2x - 4 +--R Type: Polynomial Integer +--E 1 + +--S 2 of 13 +ans1 := solve(p,0.01)$REALSOLV +--R +--R +--R (2) [1.11328125] +--R Type: List Float +--E 2 + +--S 3 of 13 +ans2 := solve(p::POLY(FRAC(INT)),0.01)$REALSOLV +--R +--R +--R (3) [1.11328125] +--R Type: List Float +--E 3 + +--S 4 of 13 +R := Integer +--R +--R +--R (4) Integer +--R Type: Domain +--E 4 + +--S 5 of 13 +ls : List Symbol := [x,y,z,t] +--R +--R +--R (5) [x,y,z,t] +--R Type: List Symbol +--E 5 + +--S 6 of 13 +ls2 : List Symbol := [x,y,z,t,new()$Symbol] +--R +--R +--R (6) [x,y,z,t,%A] +--R Type: List Symbol +--E 6 + +--S 7 of 13 +pack := ZDSOLVE(R,ls,ls2) +--R +--R +--R (7) ZeroDimensionalSolvePackage(Integer,[x,y,z,t],[x,y,z,t,%A]) +--R Type: Domain +--E 7 + +--S 8 of 13 +p1 := x**2*y*z + y*z +--R +--R +--R 2 +--R (8) (x + 1)y z +--R Type: Polynomial Integer +--E 8 + +--S 9 of 13 +p2 := x**2*y**2*z + x + z +--R +--R +--R 2 2 +--R (9) (x y + 1)z + x +--R Type: Polynomial Integer +--E 9 + +--S 10 of 13 +p3 := x**2*y**2*z**2 + z + 1 +--R +--R +--R 2 2 2 +--R (10) x y z + z + 1 +--R Type: Polynomial Integer +--E 10 + +--S 11 of 13 +lp := [p1, p2, p3] +--R +--R +--R 2 2 2 2 2 2 +--R (11) [(x + 1)y z,(x y + 1)z + x,x y z + z + 1] +--R Type: List Polynomial Integer +--E 11 + +--S 12 of 13 +lsv:List(Symbol):=[x,y,z] +--R +--R +--R (12) [x,y,z] +--R Type: List Symbol +--E 12 + +--S 13 of 13 +ans3 := realSolve(lp,lsv,0.01)$REALSOLV +--R +--R +--R (13) [[1.0,0.0,- 1.0]] +--R Type: List List Float +--E 13 +)spool + +@ +<>= +==================================================================== +RealSolvePackage examples +==================================================================== + + p := 4*x^3 - 3*x^2 + 2*x - 4 + + ans1 := solve(p,0.01)$REALSOLV + + ans2 := solve(p::POLY(FRAC(INT)),0.01)$REALSOLV + + R := Integer + + ls : List Symbol := [x,y,z,t] + + ls2 : List Symbol := [x,y,z,t,new()$Symbol] + + pack := ZDSOLVE(R,ls,ls2) + + p1 := x**2*y*z + y*z + + p2 := x**2*y**2*z + x + z + + p3 := x**2*y**2*z**2 + z + 1 + + lp := [p1, p2, p3] + + ans3 := realSolve(lp,[x,y,z],0.01) + +See Also: +o )show RealSolvePackage + +@ +\pagehead{RealSolvePackage}{REALSOLV} +\pagepic{ps/v104realsolvepackage.ps}{REALSOLV}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package REALSOLV RealSolvePackage + +RealSolvePackage(): _ + with + + solve: (Polynomial Fraction Integer,Float) -> List Float + ++ solve(p,eps) finds the real zeroes of a + ++ univariate rational polynomial p with precision eps. + + solve: (Polynomial Integer,Float) -> List Float + ++ solve(p,eps) finds the real zeroes of a univariate + ++ integer polynomial p with precision eps. + + realSolve: (List Polynomial Integer,List Symbol,Float) -> List List Float + ++ realSolve(lp,lv,eps) = compute the list of the real + ++ solutions of the list lp of polynomials with integer + ++ coefficients with respect to the variables in lv, + ++ with precision eps. + + == add + + prn2rfi: Polynomial Fraction Integer -> Fraction Polynomial Integer + prn2rfi p == + map(#1 :: Fraction Polynomial Integer,_ + (numer(#1) :: Fraction Polynomial Integer)_ + /(denom(#1) :: Fraction Polynomial Integer),p)_ + $PolynomialCategoryLifting(IndexedExponents Symbol, _ + Symbol, _ + Fraction Integer, _ + Polynomial Fraction Integer, _ + Fraction Polynomial Integer) + + pi2rfi: Polynomial Integer -> Fraction Polynomial Integer + pi2rfi p == p :: Fraction Polynomial Integer + + solve(p:Polynomial Fraction Integer,eps:Float) == + realRoots(prn2rfi p,eps)$(FloatingRealPackage(Float)) + + solve(p:Polynomial Integer,eps:Float) == + realRoots(p :: Fraction Polynomial Integer,eps)_ + $(FloatingRealPackage(Float)) + + realSolve(lp,lv,eps) == + realRoots(map(pi2rfi,lp)_ + $ListFunctions2(Polynomial Integer,Fraction Polynomial Integer),lv,eps)_ + $(FloatingRealPackage(Float)) + + + +@ +<>= +"REALSOLV" [color="#FF4488",href="bookvol10.4.pdf#nameddest=REALSOLV"] +"REALSOLV" -> "Package" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter S} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package SAEFACT SimpleAlgebraicExtensionAlgFactor} +\pagehead{SimpleAlgebraicExtensionAlgFactor}{SAEFACT} +\pagepic{ps/v104simplealgebraicextensionalgfactor.ps}{SAEFACT}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package SAEFACT SimpleAlgebraicExtensionAlgFactor +++ Factorisation in a simple algebraic extension; +++ Author: Patrizia Gianni +++ Date Created: ??? +++ Date Last Updated: ??? +++ Description: +++ Factorization of univariate polynomials with coefficients in an +++ algebraic extension of the rational numbers (\spadtype{Fraction Integer}). +++ Keywords: factorization, algebraic extension, univariate polynomial + +SimpleAlgebraicExtensionAlgFactor(UP,SAE,UPA):Exports==Implementation where + UP : UnivariatePolynomialCategory Fraction Integer + SAE : Join(Field, CharacteristicZero, + MonogenicAlgebra(Fraction Integer, UP)) + UPA: UnivariatePolynomialCategory SAE + + Exports ==> with + factor: UPA -> Factored UPA + ++ factor(p) returns a prime factorisation of p. + + Implementation ==> add + factor q == + factor(q, factor$RationalFactorize(UP) + )$InnerAlgFactor(Fraction Integer, UP, SAE, UPA) + +@ +<>= +"SAEFACT" [color="#FF4488",href="bookvol10.4.pdf#nameddest=SAEFACT"] + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package SAERFFC SAERationalFunctionAlgFactor} +\pagehead{SAERationalFunctionAlgFactor}{SAERFFC} +\pagepic{ps/v104saerationalfunctionalgfactor.ps}{SAERFFC}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package SAERFFC SAERationalFunctionAlgFactor +++ Factorisation in UP SAE FRAC POLY INT +++ Author: Patrizia Gianni +++ Date Created: ??? +++ Date Last Updated: ??? +++ Description: +++ Factorization of univariate polynomials with coefficients in an +++ algebraic extension of \spadtype{Fraction Polynomial Integer}. +++ Keywords: factorization, algebraic extension, univariate polynomial + +SAERationalFunctionAlgFactor(UP, SAE, UPA): Exports == Implementation where + UP : UnivariatePolynomialCategory Fraction Polynomial Integer + SAE : Join(Field, CharacteristicZero, + MonogenicAlgebra(Fraction Polynomial Integer, UP)) + UPA: UnivariatePolynomialCategory SAE + + Exports ==> with + factor: UPA -> Factored UPA + ++ factor(p) returns a prime factorisation of p. + + Implementation ==> add + factor q == + factor(q, factor$RationalFunctionFactor(UP) + )$InnerAlgFactor(Fraction Polynomial Integer, UP, SAE, UPA) + +@ +<>= +"SAERFFC" [color="#FF4488",href="bookvol10.4.pdf#nameddest=SAERFFC"] + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{package SUPFRACF SupFractionFactorizer} +\pagehead{SupFractionFactorizer}{SUPFRACF} +\pagepic{ps/v104supfractionfactorizer.ps}{SUPFRACF}{1.00} + +{\bf Exports:}\\ +\begin{tabular}{lllll} +\end{tabular} + +<>= +)abbrev package SUPFRACF SupFractionFactorizer +++ Author: P. Gianni +++ Date Created: October 1993 +++ Date Last Updated: March 1995 +++ Basic Functions: +++ Related Constructors: MultivariateFactorize +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: SupFractionFactorize +++ contains the factor function for univariate +++ polynomials over the quotient field of a ring S such that the package +++ MultivariateFactorize works for S + +SupFractionFactorizer(E,OV,R,P) : C == T + where + E : OrderedAbelianMonoidSup + OV : OrderedSet + R : GcdDomain + P : PolynomialCategory(R,E,OV) + FP ==> Fraction P + SUP ==> SparseUnivariatePolynomial + + C == with + factor : SUP FP -> Factored SUP FP + ++ factor(p) factors the univariate polynomial p with coefficients + ++ which are fractions of polynomials over R. + squareFree : SUP FP -> Factored SUP FP + ++ squareFree(p) returns the square-free factorization of the univariate polynomial p with coefficients + ++ which are fractions of polynomials over R. Each factor has no repeated roots and the factors are + ++ pairwise relatively prime. + + T == add + MFACT ==> MultivariateFactorize(OV,E,R,P) + MSQFR ==> MultivariateSquareFree(E,OV,R,P) + UPCF2 ==> UnivariatePolynomialCategoryFunctions2 + + factor(p:SUP FP) : Factored SUP FP == + p=0 => 0 + R has CharacteristicZero and R has EuclideanDomain => + pden : P := lcm [denom c for c in coefficients p] + pol : SUP FP := (pden::FP)*p + ipol: SUP P := map(numer,pol)$UPCF2(FP,SUP FP,P,SUP P) + ffact: Factored SUP P := 0 + ffact := factor(ipol)$MFACT + makeFR((1/pden * map(coerce,unit ffact)$UPCF2(P,SUP P,FP,SUP FP)), + [["prime",map(coerce,u.factor)$UPCF2(P,SUP P,FP,SUP FP), + u.exponent] for u in factors ffact]) + squareFree p + + squareFree(p:SUP FP) : Factored SUP FP == + p=0 => 0 + pden : P := lcm [denom c for c in coefficients p] + pol : SUP FP := (pden::FP)*p + ipol: SUP P := map(numer,pol)$UPCF2(FP,SUP FP,P,SUP P) + ffact: Factored SUP P := 0 + if R has CharacteristicZero and R has EuclideanDomain then + ffact := squareFree(ipol)$MSQFR + else ffact := squareFree(ipol) + makeFR((1/pden * map(coerce,unit ffact)$UPCF2(P,SUP P,FP,SUP FP)), + [["sqfr",map(coerce,u.factor)$UPCF2(P,SUP P,FP,SUP FP), + u.exponent] for u in factors ffact]) + +@ +<>= +"SUPFRACF" [color="#FF4488",href="bookvol10.4.pdf#nameddest=SUPFRACF"] +"PFECAT" [color="#4488FF",href="bookvol10.2.pdf#nameddest=PFECAT"] +"SUPFRACF" -> "PFECAT" + +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter T} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter U} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter V} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter W} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter X} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter Y} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chapter Z} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Chunk collections} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +<>= +<> +<> +<> +<> + +<> +<> + +<> + +<> +<> + +<> + +<> + +<> +<> +<> +<> + +<> +<> + +<> +<> + +<> + +<> +<> +<> + +<> +<> +<> +@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\chapter{Index} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \printindex \end{document} diff --git a/books/ps/v104algebraicfunction.ps b/books/ps/v104algebraicfunction.ps new file mode 100644 index 0000000..ecb09c0 --- /dev/null +++ b/books/ps/v104algebraicfunction.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.18 (Wed Aug 6 10:29:47 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 98 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 62 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% AF +gsave +[ /Rect [ 0 72 54 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=AF) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 54 108 moveto +0 108 lineto +0 72 lineto +54 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 54 108 moveto +0 108 lineto +0 72 lineto +54 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +18.5 86.4 moveto 17 (AF) alignedtext +grestore +% FS +gsave +[ /Rect [ 0 0 54 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FS) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 54 36 moveto +0 36 lineto +0 0 lineto +54 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 54 36 moveto +0 36 lineto +0 0 lineto +54 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +19.5 14.4 moveto 15 (FS) alignedtext +grestore +% AF->FS +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 27 72 moveto +27 64 27 55 27 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 30.5 46 moveto +27 36 lineto +23.5 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 30.5 46 moveto +27 36 lineto +23.5 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 98 152 +end +restore +%%EOF diff --git a/books/ps/v104algfactor.ps b/books/ps/v104algfactor.ps new file mode 100644 index 0000000..df5d091 --- /dev/null +++ b/books/ps/v104algfactor.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.18 (Wed Aug 6 10:29:47 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 122 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 86 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% ALGFACT +gsave +[ /Rect [ 0 72 78 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=ALGFACT) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 78 108 moveto +0 108 lineto +0 72 lineto +78 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 78 108 moveto +0 108 lineto +0 72 lineto +78 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +8 86.4 moveto 62 (ALGFACT) alignedtext +grestore +% ACF +gsave +[ /Rect [ 12 0 66 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=ACF) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +12 36 lineto +12 0 lineto +66 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +12 36 lineto +12 0 lineto +66 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +26 14.4 moveto 26 (ACF) alignedtext +grestore +% ALGFACT->ACF +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 39 72 moveto +39 64 39 55 39 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 42.5 46 moveto +39 36 lineto +35.5 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 42.5 46 moveto +39 36 lineto +35.5 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 122 152 +end +restore +%%EOF diff --git a/books/ps/v104anyfunctions1.ps b/books/ps/v104anyfunctions1.ps new file mode 100644 index 0000000..9fd9e8c --- /dev/null +++ b/books/ps/v104anyfunctions1.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 98 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 62 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% ANY1 +gsave +[ /Rect [ 0 72 54 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=ANY1) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 54 108 moveto +2.13163e-14 108 lineto +3.55271e-15 72 lineto +54 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 54 108 moveto +2.13163e-14 108 lineto +3.55271e-15 72 lineto +54 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +9 85.9 moveto 36 (ANY1) alignedtext +grestore +% TYPE +gsave +[ /Rect [ 0 0 54 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=TYPE) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 54 36 moveto +2.13163e-14 36 lineto +3.55271e-15 1.06581e-14 lineto +54 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 54 36 moveto +2.13163e-14 36 lineto +3.55271e-15 1.06581e-14 lineto +54 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +9.5 13.9 moveto 35 (TYPE) alignedtext +grestore +% ANY1->TYPE +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 27 72 moveto +27 64 27 55 27 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 30.5001 46 moveto +27 36 lineto +23.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 30.5001 46 moveto +27 36 lineto +23.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 98 152 +end +restore +%%EOF diff --git a/books/ps/v104axiomserver.ps b/books/ps/v104axiomserver.ps new file mode 100644 index 0000000..885e0f8 --- /dev/null +++ b/books/ps/v104axiomserver.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 114 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 78 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% AXSERV +gsave +[ /Rect [ 0 72 70 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=AXSERV) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 70 108 moveto +2.13163e-14 108 lineto +7.10543e-15 72 lineto +70 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 70 108 moveto +2.13163e-14 108 lineto +7.10543e-15 72 lineto +70 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 85.9 moveto 54 (AXSERV) alignedtext +grestore +% STRING +gsave +[ /Rect [ 2 0 68 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=STRING) >> + /Subtype /Link +/ANN pdfmark +0.273 0.733 1.000 nodecolor +newpath 68 36 moveto +2 36 lineto +2 1.06581e-14 lineto +68 0 lineto +closepath fill +1 setlinewidth +filled +0.273 0.733 1.000 nodecolor +newpath 68 36 moveto +2 36 lineto +2 1.06581e-14 lineto +68 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +10 13.9 moveto 50 (STRING) alignedtext +grestore +% AXSERV->STRING +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 35 72 moveto +35 64 35 55 35 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 38.5001 46 moveto +35 36 lineto +31.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 38.5001 46 moveto +35 36 lineto +31.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 114 152 +end +restore +%%EOF diff --git a/books/ps/v104bezoutmatrix.ps b/books/ps/v104bezoutmatrix.ps new file mode 100644 index 0000000..1a01cb0 --- /dev/null +++ b/books/ps/v104bezoutmatrix.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 116 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 80 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% BEZOUT +gsave +[ /Rect [ 0 72 72 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=BEZOUT) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 72 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +72 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 72 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +72 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 85.9 moveto 56 (BEZOUT) alignedtext +grestore +% PFECAT +gsave +[ /Rect [ 3 0 69 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 69 36 moveto +3 36 lineto +3 1.06581e-14 lineto +69 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 69 36 moveto +3 36 lineto +3 1.06581e-14 lineto +69 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +10.5 13.9 moveto 51 (PFECAT) alignedtext +grestore +% BEZOUT->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 36 72 moveto +36 64 36 55 36 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 39.5001 46 moveto +36 36 lineto +32.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 39.5001 46 moveto +36 36 lineto +32.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 116 152 +end +restore +%%EOF diff --git a/books/ps/v104brillharttests.ps b/books/ps/v104brillharttests.ps new file mode 100644 index 0000000..9f40db2 --- /dev/null +++ b/books/ps/v104brillharttests.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 110 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 74 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% BRILL +gsave +[ /Rect [ 6 72 60 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=BRILL) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 60 108 moveto +6 108 lineto +6 72 lineto +60 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 60 108 moveto +6 108 lineto +6 72 lineto +60 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +13.5 85.9 moveto 39 (BRILL) alignedtext +grestore +% PFECAT +gsave +[ /Rect [ 0 0 66 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +2.24404e-14 36 lineto +8.44116e-15 1.06581e-14 lineto +66 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +2.24404e-14 36 lineto +8.44116e-15 1.06581e-14 lineto +66 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 13.9 moveto 51 (PFECAT) alignedtext +grestore +% BRILL->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 33 72 moveto +33 64 33 55 33 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 36.5001 46 moveto +33 36 lineto +29.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 36.5001 46 moveto +33 36 lineto +29.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 110 152 +end +restore +%%EOF diff --git a/books/ps/v104characteristicpolynomialinmonogenicalalgebra.ps b/books/ps/v104characteristicpolynomialinmonogenicalalgebra.ps new file mode 100644 index 0000000..5acfc53 --- /dev/null +++ b/books/ps/v104characteristicpolynomialinmonogenicalalgebra.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.18 (Wed Aug 6 10:29:47 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 130 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 94 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% CPIMA +gsave +[ /Rect [ 13 72 73 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=CPIMA) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 73 108 moveto +13 108 lineto +13 72 lineto +73 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 73 108 moveto +13 108 lineto +13 72 lineto +73 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +21 86.4 moveto 44 (CPIMA) alignedtext +grestore +% MONOGEN +gsave +[ /Rect [ 0 0 86 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=MONOGEN) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 86 36 moveto +0 36 lineto +0 0 lineto +86 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 86 36 moveto +0 36 lineto +0 0 lineto +86 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +8 14.4 moveto 70 (MONOGEN) alignedtext +grestore +% CPIMA->MONOGEN +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 43 72 moveto +43 64 43 55 43 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 46.5 46 moveto +43 36 lineto +39.5 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 46.5 46 moveto +43 36 lineto +39.5 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 130 152 +end +restore +%%EOF diff --git a/books/ps/v104finitelinearaggregatefunctions2.ps b/books/ps/v104finitelinearaggregatefunctions2.ps new file mode 100644 index 0000000..bbdd1f8 --- /dev/null +++ b/books/ps/v104finitelinearaggregatefunctions2.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.18 (Wed Aug 6 10:29:47 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 112 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 76 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% FLAGG2 +gsave +[ /Rect [ 0 72 68 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=FLAGG2) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 68 108 moveto +0 108 lineto +0 72 lineto +68 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 68 108 moveto +0 108 lineto +0 72 lineto +68 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +8 86.4 moveto 52 (FLAGG2) alignedtext +grestore +% FLAGG +gsave +[ /Rect [ 4 0 64 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FLAGG) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 64 36 moveto +4 36 lineto +4 0 lineto +64 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 64 36 moveto +4 36 lineto +4 0 lineto +64 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +11.5 14.4 moveto 45 (FLAGG) alignedtext +grestore +% FLAGG2->FLAGG +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 34 72 moveto +34 64 34 55 34 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 37.5 46 moveto +34 36 lineto +30.5 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 37.5 46 moveto +34 36 lineto +30.5 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 112 152 +end +restore +%%EOF diff --git a/books/ps/v104finitesetaggregatefunctions2.ps b/books/ps/v104finitesetaggregatefunctions2.ps new file mode 100644 index 0000000..22b0534 --- /dev/null +++ b/books/ps/v104finitesetaggregatefunctions2.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.18 (Wed Aug 6 10:29:47 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 110 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 74 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% FSAGG2 +gsave +[ /Rect [ 0 72 66 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=FSAGG2) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 66 108 moveto +0 108 lineto +0 72 lineto +66 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 66 108 moveto +0 108 lineto +0 72 lineto +66 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +7.5 86.4 moveto 51 (FSAGG2) alignedtext +grestore +% FSAGG +gsave +[ /Rect [ 3 0 63 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FSAGG) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 63 36 moveto +3 36 lineto +3 0 lineto +63 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 63 36 moveto +3 36 lineto +3 0 lineto +63 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +11 14.4 moveto 44 (FSAGG) alignedtext +grestore +% FSAGG2->FSAGG +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 33 72 moveto +33 64 33 55 33 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 36.5 46 moveto +33 36 lineto +29.5 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 36.5 46 moveto +33 36 lineto +29.5 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 110 152 +end +restore +%%EOF diff --git a/books/ps/v104generalizedmultivariatefactorize.ps b/books/ps/v104generalizedmultivariatefactorize.ps new file mode 100644 index 0000000..4d2f929 --- /dev/null +++ b/books/ps/v104generalizedmultivariatefactorize.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 136 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 100 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% GENMFACT +gsave +[ /Rect [ 0 72 92 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=GENMFACT) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 92 108 moveto +2.76723e-14 108 lineto +6.58501e-15 72 lineto +92 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 92 108 moveto +2.76723e-14 108 lineto +6.58501e-15 72 lineto +92 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 85.9 moveto 77 (GENMFACT) alignedtext +grestore +% PFECAT +gsave +[ /Rect [ 13 0 79 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 79 36 moveto +13 36 lineto +13 1.06581e-14 lineto +79 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 79 36 moveto +13 36 lineto +13 1.06581e-14 lineto +79 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +20.5 13.9 moveto 51 (PFECAT) alignedtext +grestore +% GENMFACT->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 46 72 moveto +46 64 46 55 46 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 49.5001 46 moveto +46 36 lineto +42.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 49.5001 46 moveto +46 36 lineto +42.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 136 152 +end +restore +%%EOF diff --git a/books/ps/v104inneralgfactor.ps b/books/ps/v104inneralgfactor.ps new file mode 100644 index 0000000..bcd6a30 --- /dev/null +++ b/books/ps/v104inneralgfactor.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.18 (Wed Aug 6 10:29:47 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 130 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 94 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% IALGFACT +gsave +[ /Rect [ 2 72 84 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=IALGFACT) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 84 108 moveto +2 108 lineto +2 72 lineto +84 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 84 108 moveto +2 108 lineto +2 72 lineto +84 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +9.5 86.4 moveto 67 (IALGFACT) alignedtext +grestore +% MONOGEN +gsave +[ /Rect [ 0 0 86 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=MONOGEN) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 86 36 moveto +0 36 lineto +0 0 lineto +86 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 86 36 moveto +0 36 lineto +0 0 lineto +86 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +8 14.4 moveto 70 (MONOGEN) alignedtext +grestore +% IALGFACT->MONOGEN +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 43 72 moveto +43 64 43 55 43 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 46.5 46 moveto +43 36 lineto +39.5 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 46.5 46 moveto +43 36 lineto +39.5 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 130 152 +end +restore +%%EOF diff --git a/books/ps/v104mergething.ps b/books/ps/v104mergething.ps new file mode 100644 index 0000000..63ed1e0 --- /dev/null +++ b/books/ps/v104mergething.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 116 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 80 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% MTHING +gsave +[ /Rect [ 0 72 72 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=MTHING) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 72 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +72 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 72 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +72 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 85.9 moveto 56 (MTHING) alignedtext +grestore +% FLAGG +gsave +[ /Rect [ 5 0 67 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=FLAGG) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 67 36 moveto +5 36 lineto +5 1.06581e-14 lineto +67 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 67 36 moveto +5 36 lineto +5 1.06581e-14 lineto +67 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +12.5 13.9 moveto 47 (FLAGG) alignedtext +grestore +% MTHING->FLAGG +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 36 72 moveto +36 64 36 55 36 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 39.5001 46 moveto +36 36 lineto +32.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 39.5001 46 moveto +36 36 lineto +32.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 116 152 +end +restore +%%EOF diff --git a/books/ps/v104mpolycatpolyfactorizer.ps b/books/ps/v104mpolycatpolyfactorizer.ps new file mode 100644 index 0000000..99ad850 --- /dev/null +++ b/books/ps/v104mpolycatpolyfactorizer.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 110 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 74 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% MPCPF +gsave +[ /Rect [ 3 72 63 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=MPCPF) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 63 108 moveto +3 108 lineto +3 72 lineto +63 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 63 108 moveto +3 108 lineto +3 72 lineto +63 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +10.5 85.9 moveto 45 (MPCPF) alignedtext +grestore +% PFECAT +gsave +[ /Rect [ 0 0 66 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +2.24404e-14 36 lineto +8.44116e-15 1.06581e-14 lineto +66 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +2.24404e-14 36 lineto +8.44116e-15 1.06581e-14 lineto +66 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 13.9 moveto 51 (PFECAT) alignedtext +grestore +% MPCPF->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 33 72 moveto +33 64 33 55 33 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 36.5001 46 moveto +33 36 lineto +29.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 36.5001 46 moveto +33 36 lineto +29.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 110 152 +end +restore +%%EOF diff --git a/books/ps/v104mpolycatrationalfunctionfactorizer.ps b/books/ps/v104mpolycatrationalfunctionfactorizer.ps new file mode 100644 index 0000000..0344513 --- /dev/null +++ b/books/ps/v104mpolycatrationalfunctionfactorizer.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 110 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 74 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% MPRFF +gsave +[ /Rect [ 3 72 63 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=MPRFF) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 63 108 moveto +3 108 lineto +3 72 lineto +63 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 63 108 moveto +3 108 lineto +3 72 lineto +63 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +11 85.9 moveto 44 (MPRFF) alignedtext +grestore +% PFECAT +gsave +[ /Rect [ 0 0 66 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +2.24404e-14 36 lineto +8.44116e-15 1.06581e-14 lineto +66 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 66 36 moveto +2.24404e-14 36 lineto +8.44116e-15 1.06581e-14 lineto +66 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 13.9 moveto 51 (PFECAT) alignedtext +grestore +% MPRFF->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 33 72 moveto +33 64 33 55 33 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 36.5001 46 moveto +33 36 lineto +29.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 36.5001 46 moveto +33 36 lineto +29.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 110 152 +end +restore +%%EOF diff --git a/books/ps/v104mrationalfactorize.ps b/books/ps/v104mrationalfactorize.ps new file mode 100644 index 0000000..36d66ed --- /dev/null +++ b/books/ps/v104mrationalfactorize.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 124 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 88 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% MRATFAC +gsave +[ /Rect [ 0 72 80 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=MRATFAC) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 80 108 moveto +3.02917e-14 108 lineto +9.23914e-15 72 lineto +80 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 80 108 moveto +3.02917e-14 108 lineto +9.23914e-15 72 lineto +80 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 85.9 moveto 65 (MRATFAC) alignedtext +grestore +% PFECAT +gsave +[ /Rect [ 7 0 73 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 73 36 moveto +7 36 lineto +7 1.06581e-14 lineto +73 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 73 36 moveto +7 36 lineto +7 1.06581e-14 lineto +73 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +14.5 13.9 moveto 51 (PFECAT) alignedtext +grestore +% MRATFAC->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 40 72 moveto +40 64 40 55 40 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 43.5001 46 moveto +40 36 lineto +36.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 43.5001 46 moveto +40 36 lineto +36.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 124 152 +end +restore +%%EOF diff --git a/books/ps/v104nonefunctions1.ps b/books/ps/v104nonefunctions1.ps new file mode 100644 index 0000000..5a3c804 --- /dev/null +++ b/books/ps/v104nonefunctions1.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 106 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 70 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% NONE1 +gsave +[ /Rect [ 0 72 62 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=NONE1) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 62 108 moveto +2.13163e-14 108 lineto +3.55271e-15 72 lineto +62 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 62 108 moveto +2.13163e-14 108 lineto +3.55271e-15 72 lineto +62 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 85.9 moveto 46 (NONE1) alignedtext +grestore +% TYPE +gsave +[ /Rect [ 4 0 58 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=TYPE) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 58 36 moveto +4 36 lineto +4 1.06581e-14 lineto +58 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 58 36 moveto +4 36 lineto +4 1.06581e-14 lineto +58 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +13.5 13.9 moveto 35 (TYPE) alignedtext +grestore +% NONE1->TYPE +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 31 72 moveto +31 64 31 55 31 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 34.5001 46 moveto +31 36 lineto +27.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 34.5001 46 moveto +31 36 lineto +27.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 106 152 +end +restore +%%EOF diff --git a/books/ps/v104norminmonogenicalgebra.ps b/books/ps/v104norminmonogenicalgebra.ps new file mode 100644 index 0000000..d5172f0 --- /dev/null +++ b/books/ps/v104norminmonogenicalgebra.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.18 (Wed Aug 6 10:29:47 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 130 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 94 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% NORMMA +gsave +[ /Rect [ 3 72 83 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=NORMMA) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 83 108 moveto +3 108 lineto +3 72 lineto +83 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 83 108 moveto +3 108 lineto +3 72 lineto +83 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +11 86.4 moveto 64 (NORMMA) alignedtext +grestore +% MONOGEN +gsave +[ /Rect [ 0 0 86 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=MONOGEN) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 86 36 moveto +0 36 lineto +0 0 lineto +86 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 86 36 moveto +0 36 lineto +0 0 lineto +86 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +8 14.4 moveto 70 (MONOGEN) alignedtext +grestore +% NORMMA->MONOGEN +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 43 72 moveto +43 64 43 55 43 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 46.5 46 moveto +43 36 lineto +39.5 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 46.5 46 moveto +43 36 lineto +39.5 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 130 152 +end +restore +%%EOF diff --git a/books/ps/v104onedimensionalarrayfunctions2.ps b/books/ps/v104onedimensionalarrayfunctions2.ps new file mode 100644 index 0000000..3be861e --- /dev/null +++ b/books/ps/v104onedimensionalarrayfunctions2.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 118 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 82 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% ARRAY12 +gsave +[ /Rect [ 0 72 74 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=ARRAY12) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 74 108 moveto +2.00881e-14 108 lineto +6.06806e-15 72 lineto +74 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 74 108 moveto +2.00881e-14 108 lineto +6.06806e-15 72 lineto +74 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 85.9 moveto 59 (ARRAY12) alignedtext +grestore +% A1AGG +gsave +[ /Rect [ 6 0 68 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=A1AGG) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 68 36 moveto +6 36 lineto +6 1.06581e-14 lineto +68 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 68 36 moveto +6 36 lineto +6 1.06581e-14 lineto +68 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +13.5 13.9 moveto 47 (A1AGG) alignedtext +grestore +% ARRAY12->A1AGG +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 37 72 moveto +37 64 37 55 37 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 40.5001 46 moveto +37 36 lineto +33.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 40.5001 46 moveto +37 36 lineto +33.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 118 152 +end +restore +%%EOF diff --git a/books/ps/v104operationsquery.ps b/books/ps/v104operationsquery.ps new file mode 100644 index 0000000..4c019e3 --- /dev/null +++ b/books/ps/v104operationsquery.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 126 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 90 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% OPQUERY +gsave +[ /Rect [ 0 72 82 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=OPQUERY) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 82 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +82 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 82 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +82 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 85.9 moveto 66 (OPQUERY) alignedtext +grestore +% ORDSET +gsave +[ /Rect [ 6 0 76 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=ORDSET) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 76 36 moveto +6 36 lineto +6 1.06581e-14 lineto +76 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 76 36 moveto +6 36 lineto +6 1.06581e-14 lineto +76 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +13.5 13.9 moveto 55 (ORDSET) alignedtext +grestore +% OPQUERY->ORDSET +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 41 72 moveto +41 64 41 55 41 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 44.5001 46 moveto +41 36 lineto +37.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 44.5001 46 moveto +41 36 lineto +37.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 126 152 +end +restore +%%EOF diff --git a/books/ps/v104primitivearrayfunctions2.ps b/books/ps/v104primitivearrayfunctions2.ps new file mode 100644 index 0000000..3c6ec1d --- /dev/null +++ b/books/ps/v104primitivearrayfunctions2.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 128 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 92 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% PRIMARR2 +gsave +[ /Rect [ 0 72 84 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=PRIMARR2) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 84 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +84 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 84 108 moveto +2.84217e-14 108 lineto +7.10543e-15 72 lineto +84 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +8 85.9 moveto 68 (PRIMARR2) alignedtext +grestore +% A1AGG +gsave +[ /Rect [ 11 0 73 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=A1AGG) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 73 36 moveto +11 36 lineto +11 1.06581e-14 lineto +73 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 73 36 moveto +11 36 lineto +11 1.06581e-14 lineto +73 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +18.5 13.9 moveto 47 (A1AGG) alignedtext +grestore +% PRIMARR2->A1AGG +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 42 72 moveto +42 64 42 55 42 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 45.5001 46 moveto +42 36 lineto +38.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 45.5001 46 moveto +42 36 lineto +38.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 128 152 +end +restore +%%EOF diff --git a/books/ps/v104rationalfunctionfactor.ps b/books/ps/v104rationalfunctionfactor.ps new file mode 100644 index 0000000..47ad1a8 --- /dev/null +++ b/books/ps/v104rationalfunctionfactor.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.18 (Wed Aug 6 10:29:47 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 110 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 74 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% RFFACT +gsave +[ /Rect [ 0 72 66 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=RFFACT) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 66 108 moveto +0 108 lineto +0 72 lineto +66 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 66 108 moveto +0 108 lineto +0 72 lineto +66 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +7.5 86.4 moveto 51 (RFFACT) alignedtext +grestore +% ALIST +gsave +[ /Rect [ 6 0 60 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.3.pdf#nameddest=ALIST) >> + /Subtype /Link +/ANN pdfmark +0.273 0.733 1.000 nodecolor +newpath 60 36 moveto +6 36 lineto +6 0 lineto +60 0 lineto +closepath fill +1 setlinewidth +filled +0.273 0.733 1.000 nodecolor +newpath 60 36 moveto +6 36 lineto +6 0 lineto +60 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +14 14.4 moveto 38 (ALIST) alignedtext +grestore +% RFFACT->ALIST +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 33 72 moveto +33 64 33 55 33 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 36.5 46 moveto +33 36 lineto +29.5 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 36.5 46 moveto +33 36 lineto +29.5 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 110 152 +end +restore +%%EOF diff --git a/books/ps/v104rationalfunctionfactorizer.ps b/books/ps/v104rationalfunctionfactorizer.ps new file mode 100644 index 0000000..ab31aa3 --- /dev/null +++ b/books/ps/v104rationalfunctionfactorizer.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 130 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 94 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% RFFACTOR +gsave +[ /Rect [ 0 72 86 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=RFFACTOR) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 86 108 moveto +2.7485e-14 108 lineto +6.41154e-15 72 lineto +86 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 86 108 moveto +2.7485e-14 108 lineto +6.41154e-15 72 lineto +86 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 85.9 moveto 71 (RFFACTOR) alignedtext +grestore +% PFECAT +gsave +[ /Rect [ 10 0 76 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 76 36 moveto +10 36 lineto +10 1.06581e-14 lineto +76 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 76 36 moveto +10 36 lineto +10 1.06581e-14 lineto +76 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +17.5 13.9 moveto 51 (PFECAT) alignedtext +grestore +% RFFACTOR->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 43 72 moveto +43 64 43 55 43 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 46.5001 46 moveto +43 36 lineto +39.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 46.5001 46 moveto +43 36 lineto +39.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 130 152 +end +restore +%%EOF diff --git a/books/ps/v104realsolvepackage.ps b/books/ps/v104realsolvepackage.ps new file mode 100644 index 0000000..e3e1782 --- /dev/null +++ b/books/ps/v104realsolvepackage.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.18 (Wed Aug 6 10:29:47 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 130 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 94 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% REALSOLV +gsave +[ /Rect [ 0 72 86 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=REALSOLV) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 86 108 moveto +0 108 lineto +0 72 lineto +86 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 86 108 moveto +0 108 lineto +0 72 lineto +86 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +7.5 86.4 moveto 71 (REALSOLV) alignedtext +grestore +% PFECAT +gsave +[ /Rect [ 10 0 76 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 76 36 moveto +10 36 lineto +10 0 lineto +76 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 76 36 moveto +10 36 lineto +10 0 lineto +76 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +18 14.4 moveto 50 (PFECAT) alignedtext +grestore +% REALSOLV->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 43 72 moveto +43 64 43 55 43 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 46.5 46 moveto +43 36 lineto +39.5 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 46.5 46 moveto +43 36 lineto +39.5 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 130 152 +end +restore +%%EOF diff --git a/books/ps/v104saerationalfunctionalgfactor.ps b/books/ps/v104saerationalfunctionalgfactor.ps new file mode 100644 index 0000000..892bcf4 --- /dev/null +++ b/books/ps/v104saerationalfunctionalgfactor.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.18 (Wed Aug 6 10:29:47 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 130 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 94 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% SAERFFC +gsave +[ /Rect [ 6 72 80 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=SAERFFC) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 80 108 moveto +6 108 lineto +6 72 lineto +80 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 80 108 moveto +6 108 lineto +6 72 lineto +80 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +13.5 86.4 moveto 59 (SAERFFC) alignedtext +grestore +% MONOGEN +gsave +[ /Rect [ 0 0 86 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=MONOGEN) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 86 36 moveto +0 36 lineto +0 0 lineto +86 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 86 36 moveto +0 36 lineto +0 0 lineto +86 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +8 14.4 moveto 70 (MONOGEN) alignedtext +grestore +% SAERFFC->MONOGEN +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 43 72 moveto +43 64 43 55 43 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 46.5 46 moveto +43 36 lineto +39.5 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 46.5 46 moveto +43 36 lineto +39.5 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 130 152 +end +restore +%%EOF diff --git a/books/ps/v104simplealgebraicextensionalgfactor.ps b/books/ps/v104simplealgebraicextensionalgfactor.ps new file mode 100644 index 0000000..95b7514 --- /dev/null +++ b/books/ps/v104simplealgebraicextensionalgfactor.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.18 (Wed Aug 6 10:29:47 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 130 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 94 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% SAEFACT +gsave +[ /Rect [ 5 72 81 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=SAEFACT) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 81 108 moveto +5 108 lineto +5 72 lineto +81 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 81 108 moveto +5 108 lineto +5 72 lineto +81 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +13 86.4 moveto 60 (SAEFACT) alignedtext +grestore +% MONOGEN +gsave +[ /Rect [ 0 0 86 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=MONOGEN) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 86 36 moveto +0 36 lineto +0 0 lineto +86 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 86 36 moveto +0 36 lineto +0 0 lineto +86 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14 /Times-Roman set_font +8 14.4 moveto 70 (MONOGEN) alignedtext +grestore +% SAEFACT->MONOGEN +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 43 72 moveto +43 64 43 55 43 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 46.5 46 moveto +43 36 lineto +39.5 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 46.5 46 moveto +43 36 lineto +39.5 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 130 152 +end +restore +%%EOF diff --git a/books/ps/v104supfractionfactorizer.ps b/books/ps/v104supfractionfactorizer.ps new file mode 100644 index 0000000..14436a6 --- /dev/null +++ b/books/ps/v104supfractionfactorizer.ps @@ -0,0 +1,281 @@ +%!PS-Adobe-2.0 +%%Creator: Graphviz version 2.16.1 (Mon Jul 7 18:20:33 UTC 2008) +%%For: (root) root +%%Title: pic +%%Pages: (atend) +%%BoundingBox: (atend) +%%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 + 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 text fitted to its expected width +/alignedtext { % width text + /text exch def + /width exch def + gsave + width 0 gt { + [] 0 setdash + text stringwidth pop width exch sub text length div 0 text ashow + } if + 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 +setupLatin1 +%%Page: 1 1 +%%PageBoundingBox: 36 36 128 152 +%%PageOrientation: Portrait +0 0 1 beginpage +gsave +36 36 92 116 boxprim clip newpath +1 1 set_scale 0 rotate 40 40 translate +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath fill +1 setlinewidth +0.167 0.600 1.000 graphcolor +newpath -4 -4 moveto +-4 716 lineto +536 716 lineto +536 -4 lineto +closepath stroke +% SUPFRACF +gsave +[ /Rect [ 0 72 84 108 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.4.pdf#nameddest=SUPFRACF) >> + /Subtype /Link +/ANN pdfmark +0.939 0.733 1.000 nodecolor +newpath 84 108 moveto +2.63123e-14 108 lineto +5.2458e-15 72 lineto +84 72 lineto +closepath fill +1 setlinewidth +filled +0.939 0.733 1.000 nodecolor +newpath 84 108 moveto +2.63123e-14 108 lineto +5.2458e-15 72 lineto +84 72 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +7.5 85.9 moveto 69 (SUPFRACF) alignedtext +grestore +% PFECAT +gsave +[ /Rect [ 9 0 75 36 ] + /Border [ 0 0 0 ] + /Action << /Subtype /URI /URI (bookvol10.2.pdf#nameddest=PFECAT) >> + /Subtype /Link +/ANN pdfmark +0.606 0.733 1.000 nodecolor +newpath 75 36 moveto +9 36 lineto +9 1.06581e-14 lineto +75 0 lineto +closepath fill +1 setlinewidth +filled +0.606 0.733 1.000 nodecolor +newpath 75 36 moveto +9 36 lineto +9 1.06581e-14 lineto +75 0 lineto +closepath stroke +0.000 0.000 0.000 nodecolor +14.00 /Times-Roman set_font +16.5 13.9 moveto 51 (PFECAT) alignedtext +grestore +% SUPFRACF->PFECAT +gsave +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 42 72 moveto +42 64 42 55 42 46 curveto +stroke +0.000 0.000 0.000 edgecolor +newpath 45.5001 46 moveto +42 36 lineto +38.5001 46 lineto +closepath fill +1 setlinewidth +solid +0.000 0.000 0.000 edgecolor +newpath 45.5001 46 moveto +42 36 lineto +38.5001 46 lineto +closepath stroke +grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +%%BoundingBox: 36 36 128 152 +end +restore +%%EOF diff --git a/changelog b/changelog index 240ccdb..4e7c955 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,59 @@ +20080125 tpd src/axiom-website/patches.html 20090125.01.tpd.patch +20090125 tpd books/bookvol10.4 add packages +20090125 tpd src/algebra/Makefile remove empty spad files +20090125 tpd src/algebra/brill.spad removed +20090125 tpd src/algebra/bezout.spad removed +20090125 tpd src/algebra/axserver.spad removed +20090125 tpd src/algebra/array1.spad removed +20090125 tpd src/algebra/any.spad removed +20090125 tpd src/algebra/alql.spad removed +20090125 tpd src/algebra/allfact.spad removed +20090125 tpd src/algebra/algfunc.spad removed +20090125 tpd src/algebra/algfact.spad removed +20090125 tpd src/algebra/algcat.spad removed +20090125 tpd src/algebra/aggcat2.spad removed +20090125 tpd src/algebra/acplot.spad removed +20080125 tpd books/ps/v104mpolycatrationalfunctionfactorizer.ps +20090125 tpd books/ps/v104mpolycatpolyfactorizer.ps added +20090125 tpd books/ps/v104supfractionfactorizer.ps added +20090125 tpd books/ps/v104simplealgebraicextensionalgfactor.ps added +20090125 tpd books/ps/v104saerationalfunctionalgfactor.ps added +20090125 tpd books/ps/v104realsolvepackage.ps added +20090125 tpd books/ps/v104rationalfunctionfactorizer.ps added +20090125 tpd books/ps/v104rationalfunctionfactor.ps added +20090125 tpd books/ps/v104primitivearrayfunctions2.ps added +20090125 tpd books/ps/v104operationsquery.ps added +20090125 tpd books/ps/v104onedimensionalarrayfunctions2.ps added +20090125 tpd books/ps/v104norminmonogenicalgebra.ps added +20090125 tpd books/ps/v104nonefunctions1.ps added +20090125 tpd books/ps/v104mrationalfactorize.ps added +20090125 tpd books/ps/v104mergething.ps added +20090125 tpd books/ps/v104inneralgfactor.ps added +20090125 tpd books/ps/v104generalizedmultivariatefactorize.ps added +20090125 tpd books/ps/v104finitesetaggregatefunctions2.ps added +20090125 tpd books/ps/v104finitelinearaggregatefunctions2.ps added +20090125 tpd books/ps/v104characteristicpolynomialinmonogenicalalgebra.ps added +20090125 tpd books/ps/v104brillharttests.ps added +20090125 tpd books/ps/v104bezoutmatrix.ps added +20090125 tpd books/ps/v104axiomserver.ps added +20090125 tpd books/ps/v104anyfunctions1.ps added +20090125 tpd books/ps/v104algfactor.ps added +20090125 tpd books/ps/v104algebraicfunction.ps added +20090125 tpd src/algebra/brill.spad move package to bookvol10.4 +20090125 tpd src/algebra/bezout.spad move package to bookvol10.4 +20090125 tpd src/algebra/axserver.spad move package to bookvol10.4 +20090125 tpd src/algebra/array1.spad move package to bookvol10.4 +20090125 tpd src/algebra/any.spad move package to bookvol10.4 +20090125 tpd src/algebra/alql.spad move package to bookvol10.4 +20090125 tpd src/algebra/allfact.spad move package to bookvol10.4 +20090125 tpd src/algebra/algfunc.spad move package to bookvol10.4 +20090125 tpd src/algebra/algfact.spad move package to bookvol10.4 +20090125 tpd src/algebra/algcat.spad move package to bookvol10.4 +20090125 tpd src/algebra/aggcat2.spad move package to bookvol10.4 +20090125 tpd src/algebra/acplot.spad move package to bookvol10.4 +20090124 tpd src/axiom-website/download.html update binary download list +20090124 tpd Makefile add Makefile.fedora10 added +20090124 tpd Makefile add Makefile.vector added 20090122 tpd src/axiom-website/patches.html 20080122.01.tpd.patch 20090122 tpd src/axiom-website/releasenotes.html add January releasenotes 20090122 tpd books/ps/v71releasenotes.eps updated diff --git a/src/algebra/Makefile.pamphlet b/src/algebra/Makefile.pamphlet index 71d575a..75ac33c 100644 --- a/src/algebra/Makefile.pamphlet +++ b/src/algebra/Makefile.pamphlet @@ -15771,13 +15771,6 @@ We need to figure out which mlift.spad to keep. <>= SPADFILES= \ - ${OUTSRC}/acplot.spad ${OUTSRC}/aggcat2.spad \ - ${OUTSRC}/algcat.spad ${OUTSRC}/algfact.spad \ - ${OUTSRC}/algfunc.spad ${OUTSRC}/allfact.spad ${OUTSRC}/alql.spad \ - ${OUTSRC}/any.spad ${OUTSRC}/array1.spad \ - ${OUTSRC}/axserver.spad \ - ${OUTSRC}/bezout.spad \ - ${OUTSRC}/brill.spad \ ${OUTSRC}/c02.spad ${OUTSRC}/c05.spad ${OUTSRC}/c06.spad \ ${OUTSRC}/carten.spad \ ${OUTSRC}/cden.spad ${OUTSRC}/clip.spad \ @@ -15921,13 +15914,6 @@ ALDORFILES= \ <>= DOCFILES= \ - ${DOC}/acplot.spad.dvi ${DOC}/aggcat2.spad.dvi \ - ${DOC}/algcat.spad.dvi ${DOC}/algfact.spad.dvi \ - ${DOC}/algfunc.spad.dvi ${DOC}/allfact.spad.dvi ${DOC}/alql.spad.dvi \ - ${DOC}/any.spad.dvi ${DOC}/array1.spad.dvi \ - ${DOC}/axserver.spad.dvi ${DOC}/axtimer.as.dvi \ - ${DOC}/bezout.spad.dvi \ - ${DOC}/brill.spad.dvi \ ${DOC}/c02.spad.dvi ${DOC}/c05.spad.dvi ${DOC}/c06.spad.dvi \ ${DOC}/carten.spad.dvi \ ${DOC}/cden.spad.dvi ${DOC}/clip.spad.dvi \ @@ -17448,12 +17434,13 @@ ${HELP}/RealClosure.help: ${BOOKS}/bookvol10.3.pamphlet @${TANGLE} -R"RealClosure.input" ${BOOKS}/bookvol10.3.pamphlet \ >${INPUT}/RealClosure.input -${HELP}/RealSolvePackage.help: ${IN}/acplot.spad.pamphlet - @echo 7069 create RealSolvePackage.help from ${IN}/acplot.spad.pamphlet - @${TANGLE} -R"RealSolvePackage.help" ${IN}/acplot.spad.pamphlet \ +${HELP}/RealSolvePackage.help: ${BOOKS}/bookvol10.4.pamphlet + @echo 7069 create RealSolvePackage.help from \ + ${BOOKS}/bookvol10.4.pamphlet + @${TANGLE} -R"RealSolvePackage.help" ${BOOKS}/bookvol10.4.pamphlet \ >${HELP}/RealSolvePackage.help @cp ${HELP}/RealSolvePackage.help ${HELP}/REALSOLV.help - @${TANGLE} -R"RealSolvePackage.input" ${IN}/acplot.spad.pamphlet \ + @${TANGLE} -R"RealSolvePackage.input" ${BOOKS}/bookvol10.4.pamphlet \ >${INPUT}/RealSolvePackage.input ${HELP}/RegularTriangularSet.help: ${BOOKS}/bookvol10.3.pamphlet diff --git a/src/algebra/acplot.spad.pamphlet b/src/algebra/acplot.spad.pamphlet deleted file mode 100644 index f18549a..0000000 --- a/src/algebra/acplot.spad.pamphlet +++ /dev/null @@ -1,265 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra acplot.spad} -\author{Clifton J. Williamson and Timothy Daly} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package REALSOLV RealSolvePackage} -<>= --- acplot.spad.pamphlet RealSolvePackage.input -)spool RealSolvePackage.output -)set message test on -)set message auto off -)clear all ---S 1 of 13 -p := 4*x^3 - 3*x^2 + 2*x - 4 ---R ---R ---R 3 2 ---R (1) 4x - 3x + 2x - 4 ---R Type: Polynomial Integer ---E 1 - ---S 2 of 13 -ans1 := solve(p,0.01)$REALSOLV ---R ---R ---R (2) [1.11328125] ---R Type: List Float ---E 2 - ---S 3 of 13 -ans2 := solve(p::POLY(FRAC(INT)),0.01)$REALSOLV ---R ---R ---R (3) [1.11328125] ---R Type: List Float ---E 3 - ---S 4 of 13 -R := Integer ---R ---R ---R (4) Integer ---R Type: Domain ---E 4 - ---S 5 of 13 -ls : List Symbol := [x,y,z,t] ---R ---R ---R (5) [x,y,z,t] ---R Type: List Symbol ---E 5 - ---S 6 of 13 -ls2 : List Symbol := [x,y,z,t,new()$Symbol] ---R ---R ---R (6) [x,y,z,t,%A] ---R Type: List Symbol ---E 6 - ---S 7 of 13 -pack := ZDSOLVE(R,ls,ls2) ---R ---R ---R (7) ZeroDimensionalSolvePackage(Integer,[x,y,z,t],[x,y,z,t,%A]) ---R Type: Domain ---E 7 - ---S 8 of 13 -p1 := x**2*y*z + y*z ---R ---R ---R 2 ---R (8) (x + 1)y z ---R Type: Polynomial Integer ---E 8 - ---S 9 of 13 -p2 := x**2*y**2*z + x + z ---R ---R ---R 2 2 ---R (9) (x y + 1)z + x ---R Type: Polynomial Integer ---E 9 - ---S 10 of 13 -p3 := x**2*y**2*z**2 + z + 1 ---R ---R ---R 2 2 2 ---R (10) x y z + z + 1 ---R Type: Polynomial Integer ---E 10 - ---S 11 of 13 -lp := [p1, p2, p3] ---R ---R ---R 2 2 2 2 2 2 ---R (11) [(x + 1)y z,(x y + 1)z + x,x y z + z + 1] ---R Type: List Polynomial Integer ---E 11 - ---S 12 of 13 -lsv:List(Symbol):=[x,y,z] ---R ---R ---R (12) [x,y,z] ---R Type: List Symbol ---E 12 - ---S 13 of 13 -ans3 := realSolve(lp,lsv,0.01)$REALSOLV ---R ---R ---R (13) [[1.0,0.0,- 1.0]] ---R Type: List List Float ---E 13 -)spool - -@ -<>= -==================================================================== -RealSolvePackage examples -==================================================================== - - p := 4*x^3 - 3*x^2 + 2*x - 4 - - ans1 := solve(p,0.01)$REALSOLV - - ans2 := solve(p::POLY(FRAC(INT)),0.01)$REALSOLV - - R := Integer - - ls : List Symbol := [x,y,z,t] - - ls2 : List Symbol := [x,y,z,t,new()$Symbol] - - pack := ZDSOLVE(R,ls,ls2) - - p1 := x**2*y*z + y*z - - p2 := x**2*y**2*z + x + z - - p3 := x**2*y**2*z**2 + z + 1 - - lp := [p1, p2, p3] - - ans3 := realSolve(lp,[x,y,z],0.01) - -See Also: -o )show RealSolvePackage -o $AXIOM/doc/src/algebra/acplot.spad.dvi - -@ -\subsection{realsolv code} -<>= -"REALSOLV" [color=orange,style=filled]; -"RealSolvePackage()" [color=orange,style=filled]; -"REALSOLV" -> "PACKAGE" -"RealSolvePackage()" -> "Package" -@ -<>= -)abbrev package REALSOLV RealSolvePackage - -RealSolvePackage(): _ - with - - solve: (Polynomial Fraction Integer,Float) -> List Float - ++ solve(p,eps) finds the real zeroes of a - ++ univariate rational polynomial p with precision eps. - - solve: (Polynomial Integer,Float) -> List Float - ++ solve(p,eps) finds the real zeroes of a univariate - ++ integer polynomial p with precision eps. - - realSolve: (List Polynomial Integer,List Symbol,Float) -> List List Float - ++ realSolve(lp,lv,eps) = compute the list of the real - ++ solutions of the list lp of polynomials with integer - ++ coefficients with respect to the variables in lv, - ++ with precision eps. - - == add - - prn2rfi: Polynomial Fraction Integer -> Fraction Polynomial Integer - prn2rfi p == - map(#1 :: Fraction Polynomial Integer,_ - (numer(#1) :: Fraction Polynomial Integer)_ - /(denom(#1) :: Fraction Polynomial Integer),p)_ - $PolynomialCategoryLifting(IndexedExponents Symbol, _ - Symbol, _ - Fraction Integer, _ - Polynomial Fraction Integer, _ - Fraction Polynomial Integer) - - pi2rfi: Polynomial Integer -> Fraction Polynomial Integer - pi2rfi p == p :: Fraction Polynomial Integer - - solve(p:Polynomial Fraction Integer,eps:Float) == - realRoots(prn2rfi p,eps)$(FloatingRealPackage(Float)) - - solve(p:Polynomial Integer,eps:Float) == - realRoots(p :: Fraction Polynomial Integer,eps)_ - $(FloatingRealPackage(Float)) - - realSolve(lp,lv,eps) == - realRoots(map(pi2rfi,lp)_ - $ListFunctions2(Polynomial Integer,Fraction Polynomial Integer),lv,eps)_ - $(FloatingRealPackage(Float)) - - - -@ -\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/aggcat2.spad.pamphlet b/src/algebra/aggcat2.spad.pamphlet deleted file mode 100644 index be3a656..0000000 --- a/src/algebra/aggcat2.spad.pamphlet +++ /dev/null @@ -1,231 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra aggcat2.spad} -\author{Robert S. Sutor} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package FLAGG2 FiniteLinearAggregateFunctions2} -<>= -"FLAGG2" -> "PACKAGE" -"FiniteLinearAggregateFunctions2()" -> "Package" -@ -<>= -)abbrev package FLAGG2 FiniteLinearAggregateFunctions2 ---% FiniteLinearAggregateFunctions2 - -++ Author: ??? -++ Date Created: ??? -++ Date Last Updated: ??? -++ Description: -++ FiniteLinearAggregateFunctions2 provides functions involving two -++ FiniteLinearAggregates where the underlying domains might be -++ different. An example of this might be creating a list of rational -++ numbers by mapping a function across a list of integers where the -++ function divides each integer by 1000. - -FiniteLinearAggregateFunctions2(S, A, R, B): - Exports == Implementation where - S, R: Type - A : FiniteLinearAggregate S - B : FiniteLinearAggregate R - - Exports ==> with - map : (S -> R, A) -> B ++ map(f,a) applies function f to each member of aggregate - ++ \spad{a} resulting in a new aggregate over a - ++ possibly different underlying domain. - - reduce : ((S, R) -> R, A, R) -> R ++ reduce(f,a,r) applies function f to each - ++ successive element of the - ++ aggregate \spad{a} and an accumulant initialized to r. - ++ For example, - ++ \spad{reduce(_+$Integer,[1,2,3],0)} - ++ does \spad{3+(2+(1+0))}. Note: third argument r - ++ may be regarded as the - ++ identity element for the function f. - - scan : ((S, R) -> R, A, R) -> B ++ scan(f,a,r) successively applies - ++ \spad{reduce(f,x,r)} to more and more leading sub-aggregates - ++ x of aggregrate \spad{a}. - ++ More precisely, if \spad{a} is \spad{[a1,a2,...]}, then - ++ \spad{scan(f,a,r)} returns - ++ \spad{[reduce(f,[a1],r),reduce(f,[a1,a2],r),...]}. - - Implementation ==> add - if A has ListAggregate(S) then -- A is a list-oid - reduce(fn, l, ident) == - empty? l => ident - reduce(fn, rest l, fn(first l, ident)) - - if B has ListAggregate(R) or not(B has shallowlyMutable) then - -- A is a list-oid, and B is either list-oids or not mutable - map(f, l) == construct [f s for s in entries l] - - scan(fn, l, ident) == - empty? l => empty() - val := fn(first l, ident) - concat(val, scan(fn, rest l, val)) - - else -- A is a list-oid, B a mutable array-oid - map(f, l) == - i := minIndex(w := new(#l,NIL$Lisp)$B) - for a in entries l repeat (qsetelt_!(w, i, f a); i := inc i) - w - - scan(fn, l, ident) == - i := minIndex(w := new(#l,NIL$Lisp)$B) - vl := ident - for a in entries l repeat - vl := qsetelt_!(w, i, fn(a, vl)) - i := inc i - w - - else -- A is an array-oid - reduce(fn, v, ident) == - val := ident - for i in minIndex v .. maxIndex v repeat - val := fn(qelt(v, i), val) - val - - if B has ListAggregate(R) then -- A is an array-oid, B a list-oid - map(f, v) == - construct [f qelt(v, i) for i in minIndex v .. maxIndex v] - - scan(fn, v, ident) == - w := empty()$B - for i in minIndex v .. maxIndex v repeat - ident := fn(qelt(v, i), ident) - w := concat(ident, w) - reverse_! w - - else -- A and B are array-oid's - if B has shallowlyMutable then -- B is also mutable - map(f, v) == - w := new(#v,NIL$Lisp)$B - for i in minIndex w .. maxIndex w repeat - qsetelt_!(w, i, f qelt(v, i)) - w - - scan(fn, v, ident) == - w := new(#v,NIL$Lisp)$B - vl := ident - for i in minIndex v .. maxIndex v repeat - vl := qsetelt_!(w, i, fn(qelt(v, i), vl)) - w - - else -- B non mutable array-oid - map(f, v) == - construct [f qelt(v, i) for i in minIndex v .. maxIndex v] - - scan(fn, v, ident) == - w := empty()$B - for i in minIndex v .. maxIndex v repeat - ident := fn(qelt(v, i), ident) - w := concat(w, ident) - w - -@ -\section{package FSAGG2 FiniteSetAggregateFunctions2} -<>= -"FSAGG2" -> "PACKAGE" -"FiniteSetAggregateFunctions2()" -> "Package" -@ -<>= -)abbrev package FSAGG2 FiniteSetAggregateFunctions2 - ---% FiniteSetAggregateFunctions2 - -++ Author: Robert S. Sutor -++ Date Created: 15 May 1990 -++ Date Last Updated: 14 Oct 1993 -++ Description: -++ FiniteSetAggregateFunctions2 provides functions involving two -++ finite set aggregates where the underlying domains might be -++ different. An example of this is to create a set of rational -++ numbers by mapping a function across a set of integers, where the -++ function divides each integer by 1000. - -FiniteSetAggregateFunctions2(S, A, R, B): Exports == Implementation where - S, R: SetCategory - A : FiniteSetAggregate S - B : FiniteSetAggregate R - - Exports ==> with - map : (S -> R, A) -> B ++ map(f,a) applies function f to each member of - ++ aggregate \spad{a}, creating a new aggregate with - ++ a possibly different underlying domain. - - reduce : ((S, R) -> R, A, R) -> R ++ reduce(f,a,r) applies function f to each - ++ successive element of the aggregate \spad{a} and an - ++ accumulant initialised to r. - ++ For example, - ++ \spad{reduce(_+$Integer,[1,2,3],0)} - ++ does a \spad{3+(2+(1+0))}. - ++ Note: third argument r may be regarded - ++ as an identity element for the function. - - scan : ((S, R) -> R, A, R) -> B ++ scan(f,a,r) successively applies \spad{reduce(f,x,r)} - ++ to more and more leading sub-aggregates x of - ++ aggregate \spad{a}. - ++ More precisely, if \spad{a} is \spad{[a1,a2,...]}, then - ++ \spad{scan(f,a,r)} returns - ++ \spad {[reduce(f,[a1],r),reduce(f,[a1,a2],r),...]}. - - Implementation ==> add - map(fn, a) == - set(map(fn, parts a)$ListFunctions2(S, R))$B - reduce(fn, a, ident) == - reduce(fn, parts a, ident)$ListFunctions2(S, R) - scan(fn, a, ident) == - set(scan(fn, parts a, ident)$ListFunctions2(S, R))$B - -@ -\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/algcat.spad.pamphlet b/src/algebra/algcat.spad.pamphlet deleted file mode 100644 index 6eacd5c..0000000 --- a/src/algebra/algcat.spad.pamphlet +++ /dev/null @@ -1,148 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra algcat.spad} -\author{Barry Trager, Claude Quitte, Manuel Bronstein} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package CPIMA CharacteristicPolynomialInMonogenicalAlgebra} -<>= -"CPIMA" [color=orange,style=filled]; -"CharacteristicPolynomialInMonogenicalAlgebra(a:COMRING,b:UPOLYC(a),c:MONOGEN(a,b))" - [color=orange,style=filled]; -"CPIMA" -> "PACKAGE" -"CharacteristicPolynomialInMonogenicalAlgebra(a:COMRING,b:UPOLYC(a),c:MONOGEN(a,b))" - -> "Package" -@ -<>= -)abbrev package CPIMA CharacteristicPolynomialInMonogenicalAlgebra -++ Author: Claude Quitte -++ Date Created: 10/12/93 -++ Date Last Updated: -++ Basic Functions: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ This package implements characteristicPolynomials for monogenic algebras -++ using resultants -CharacteristicPolynomialInMonogenicalAlgebra(R : CommutativeRing, - PolR : UnivariatePolynomialCategory(R), - E : MonogenicAlgebra(R, PolR)): with - characteristicPolynomial : E -> PolR - ++ characteristicPolynomial(e) returns the characteristic polynomial - ++ of e using resultants - - == add - Pol ==> SparseUnivariatePolynomial - - import UnivariatePolynomialCategoryFunctions2(R, PolR, PolR, Pol(PolR)) - XtoY(Q : PolR) : Pol(PolR) == map(monomial(#1, 0), Q) - - P : Pol(PolR) := XtoY(definingPolynomial()$E) - X : Pol(PolR) := monomial(monomial(1, 1)$PolR, 0) - - characteristicPolynomial(x : E) : PolR == - Qx : PolR := lift(x) - -- on utilise le fait que resultant_Y (P(Y), X - Qx(Y)) - return resultant(P, X - XtoY(Qx)) - -@ -\section{package NORMMA NormInMonogenicAlgebra} -<>= -"NORMMA" [color=orange,style=filled]; -"NormInMonogenicAlgebra(a:GcdDomain,b:UPOLYC(a),c:MONOGEN(a,b),d:UPOLYC(c))" - [color=orange,style=filled]; -"NORMMA" -> "PACKAGE" -"NormInMonogenicAlgebra(a:GcdDomain,b:UPOLYC(a),c:MONOGEN(a,b),d:UPOLYC(c))" - -> "Package" -@ -<>= -)abbrev package NORMMA NormInMonogenicAlgebra -++ Author: Manuel Bronstein -++ Date Created: 23 February 1995 -++ Date Last Updated: 23 February 1995 -++ Basic Functions: norm -++ Description: -++ This package implements the norm of a polynomial with coefficients -++ in a monogenic algebra (using resultants) - -NormInMonogenicAlgebra(R, PolR, E, PolE): Exports == Implementation where - R: GcdDomain - PolR: UnivariatePolynomialCategory R - E: MonogenicAlgebra(R, PolR) - PolE: UnivariatePolynomialCategory E - - SUP ==> SparseUnivariatePolynomial - - Exports ==> with - norm: PolE -> PolR - ++ norm q returns the norm of q, - ++ i.e. the product of all the conjugates of q. - - Implementation ==> add - import UnivariatePolynomialCategoryFunctions2(R, PolR, PolR, SUP PolR) - - PolR2SUP: PolR -> SUP PolR - PolR2SUP q == map(#1::PolR, q) - - defpol := PolR2SUP(definingPolynomial()$E) - - norm q == - p:SUP PolR := 0 - while q ~= 0 repeat - p := p + monomial(1,degree q)$PolR * PolR2SUP lift leadingCoefficient q - q := reductum q - primitivePart resultant(p, defpol) - -@ -\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/algfact.spad.pamphlet b/src/algebra/algfact.spad.pamphlet deleted file mode 100644 index 7940d37..0000000 --- a/src/algebra/algfact.spad.pamphlet +++ /dev/null @@ -1,368 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra algfact.spad} -\author{Patrizia Gianni, Manuel Bronstein} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package IALGFACT InnerAlgFactor} -<>= -"IALGFACT" -> "PACKAGE" -"InnerAlgFactor(a:Field,b:UPOLYC(a),c:Join(...),d:UPOLYC(c))" -> "Package" -@ -<>= -)abbrev package IALGFACT InnerAlgFactor -++ Factorisation in a simple algebraic extension -++ Author: Patrizia Gianni -++ Date Created: ??? -++ Date Last Updated: 20 Jul 1988 -++ Description: -++ Factorization of univariate polynomials with coefficients in an -++ algebraic extension of a field over which we can factor UP's; -++ Keywords: factorization, algebraic extension, univariate polynomial - -InnerAlgFactor(F, UP, AlExt, AlPol): Exports == Implementation where - F : Field - UP : UnivariatePolynomialCategory F - AlPol: UnivariatePolynomialCategory AlExt - AlExt : Join(Field, CharacteristicZero, MonogenicAlgebra(F,UP)) - NUP ==> SparseUnivariatePolynomial UP - N ==> NonNegativeInteger - Z ==> Integer - FR ==> Factored UP - UPCF2 ==> UnivariatePolynomialCategoryFunctions2 - - - Exports ==> with - factor: (AlPol, UP -> FR) -> Factored AlPol - ++ factor(p, f) returns a prime factorisation of p; - ++ f is a factorisation map for elements of UP; - - Implementation ==> add - pnorm : AlPol -> UP - convrt : AlPol -> NUP - change : UP -> AlPol - perturbfactor: (AlPol, Z, UP -> FR) -> List AlPol - irrfactor : (AlPol, Z, UP -> FR) -> List AlPol - - - perturbfactor(f, k, fact) == - pol := monomial(1$AlExt,1)- - monomial(reduce monomial(k::F,1)$UP ,0) - newf := elt(f, pol) - lsols := irrfactor(newf, k, fact) - pol := monomial(1, 1) + - monomial(reduce monomial(k::F,1)$UP,0) - [elt(pp, pol) for pp in lsols] - - --- factorize the square-free parts of f --- - irrfactor(f, k, fact) == - degree(f) =$N 1 => [f] - newf := f - nn := pnorm f - --newval:RN:=1 - --pert:=false - --if ^ SqFr? nn then - -- pert:=true - -- newterm:=perturb(f) - -- newf:=newterm.ppol - -- newval:=newterm.pval - -- nn:=newterm.nnorm - listfact := factors fact nn - #listfact =$N 1 => - first(listfact).exponent =$Z 1 => [f] - perturbfactor(f, k + 1, fact) - listerm:List(AlPol):= [] - for pelt in listfact repeat - g := gcd(change(pelt.factor), newf) - newf := (newf exquo g)::AlPol - listerm := - pelt.exponent =$Z 1 => cons(g, listerm) - append(perturbfactor(g, k + 1, fact), listerm) - listerm - - factor(f, fact) == - sqf := squareFree f - unit(sqf) * _*/[_*/[primeFactor(pol, sqterm.exponent) - for pol in irrfactor(sqterm.factor, 0, fact)] - for sqterm in factors sqf] - - p := definingPolynomial()$AlExt - newp := map(#1::UP, p)$UPCF2(F, UP, UP, NUP) - - pnorm q == resultant(convrt q, newp) - change q == map(coerce, q)$UPCF2(F,UP,AlExt,AlPol) - - convrt q == - swap(map(lift, q)$UPCF2(AlExt, AlPol, - UP, NUP))$CommuteUnivariatePolynomialCategory(F, UP, NUP) - -@ -\section{package SAEFACT SimpleAlgebraicExtensionAlgFactor} -<>= -"SAEFACT" -> "PACKAGE" -"SimpleAlgebraicExtensionAlgFactor(a:UPOLYC(FRAC(INT)),b:Join(...),c:UPOLYC(b))" - -> "Package" -@ -<>= -)abbrev package SAEFACT SimpleAlgebraicExtensionAlgFactor -++ Factorisation in a simple algebraic extension; -++ Author: Patrizia Gianni -++ Date Created: ??? -++ Date Last Updated: ??? -++ Description: -++ Factorization of univariate polynomials with coefficients in an -++ algebraic extension of the rational numbers (\spadtype{Fraction Integer}). -++ Keywords: factorization, algebraic extension, univariate polynomial - -SimpleAlgebraicExtensionAlgFactor(UP,SAE,UPA):Exports==Implementation where - UP : UnivariatePolynomialCategory Fraction Integer - SAE : Join(Field, CharacteristicZero, - MonogenicAlgebra(Fraction Integer, UP)) - UPA: UnivariatePolynomialCategory SAE - - Exports ==> with - factor: UPA -> Factored UPA - ++ factor(p) returns a prime factorisation of p. - - Implementation ==> add - factor q == - factor(q, factor$RationalFactorize(UP) - )$InnerAlgFactor(Fraction Integer, UP, SAE, UPA) - -@ -\section{package RFFACT RationalFunctionFactor} -<>= -"RFFACT" -> "PACKAGE" -"RationalFunctionFactor(a:UPOLYC(FRAC(POLY(INT))))" -> "Package" -@ -<>= -)abbrev package RFFACT RationalFunctionFactor -++ Factorisation in UP FRAC POLY INT -++ Author: Patrizia Gianni -++ Date Created: ??? -++ Date Last Updated: ??? -++ Description: -++ Factorization of univariate polynomials with coefficients which -++ are rational functions with integer coefficients. - -RationalFunctionFactor(UP): Exports == Implementation where - UP: UnivariatePolynomialCategory Fraction Polynomial Integer - - SE ==> Symbol - P ==> Polynomial Integer - RF ==> Fraction P - UPCF2 ==> UnivariatePolynomialCategoryFunctions2 - - Exports ==> with - factor: UP -> Factored UP - ++ factor(p) returns a prime factorisation of p. - - Implementation ==> add - likuniv: (P, SE, P) -> UP - - dummy := new()$SE - - likuniv(p, x, d) == - map(#1 / d, univariate(p, x))$UPCF2(P,SparseUnivariatePolynomial P, - RF, UP) - - factor p == - d := denom(q := elt(p,dummy::P :: RF)) - map(likuniv(#1,dummy,d), - factor(numer q)$MultivariateFactorize(SE, - IndexedExponents SE,Integer,P))$FactoredFunctions2(P, UP) - -@ -\section{package SAERFFC SAERationalFunctionAlgFactor} -<>= -"SAERFFC" -> "PACKAGE" -"SAERationalFunctionAlgFactor(a:UPOLYC(FRAC(POLY(INT))),b:Join(...),c:UPOLYC(b))" - -> "Package" -@ -<>= -)abbrev package SAERFFC SAERationalFunctionAlgFactor -++ Factorisation in UP SAE FRAC POLY INT -++ Author: Patrizia Gianni -++ Date Created: ??? -++ Date Last Updated: ??? -++ Description: -++ Factorization of univariate polynomials with coefficients in an -++ algebraic extension of \spadtype{Fraction Polynomial Integer}. -++ Keywords: factorization, algebraic extension, univariate polynomial - -SAERationalFunctionAlgFactor(UP, SAE, UPA): Exports == Implementation where - UP : UnivariatePolynomialCategory Fraction Polynomial Integer - SAE : Join(Field, CharacteristicZero, - MonogenicAlgebra(Fraction Polynomial Integer, UP)) - UPA: UnivariatePolynomialCategory SAE - - Exports ==> with - factor: UPA -> Factored UPA - ++ factor(p) returns a prime factorisation of p. - - Implementation ==> add - factor q == - factor(q, factor$RationalFunctionFactor(UP) - )$InnerAlgFactor(Fraction Polynomial Integer, UP, SAE, UPA) - -@ -\section{package ALGFACT AlgFactor} -<>= -"ALGFACT" -> "PACKAGE" -"AlgFactor(UPOLYC(AN))" -> "Package" -@ -<>= -)abbrev package ALGFACT AlgFactor -++ Factorization of UP AN; -++ Author: Manuel Bronstein -++ Date Created: ??? -++ Date Last Updated: ??? -++ Description: -++ Factorization of univariate polynomials with coefficients in -++ \spadtype{AlgebraicNumber}. - -AlgFactor(UP): Exports == Implementation where - UP: UnivariatePolynomialCategory AlgebraicNumber - - N ==> NonNegativeInteger - Z ==> Integer - Q ==> Fraction Integer - AN ==> AlgebraicNumber - K ==> Kernel AN - UPQ ==> SparseUnivariatePolynomial Q - SUP ==> SparseUnivariatePolynomial AN - FR ==> Factored UP - - Exports ==> with - factor: (UP, List AN) -> FR - ++ factor(p, [a1,...,an]) returns a prime factorisation of p - ++ over the field generated by its coefficients and a1,...,an. - factor: UP -> FR - ++ factor(p) returns a prime factorisation of p - ++ over the field generated by its coefficients. - split : UP -> FR - ++ split(p) returns a prime factorisation of p - ++ over its splitting field. - doublyTransitive?: UP -> Boolean - ++ doublyTransitive?(p) is true if p is irreducible over - ++ over the field K generated by its coefficients, and - ++ if \spad{p(X) / (X - a)} is irreducible over - ++ \spad{K(a)} where \spad{p(a) = 0}. - - Implementation ==> add - import PolynomialCategoryQuotientFunctions(IndexedExponents K, - K, Z, SparseMultivariatePolynomial(Z, K), AN) - - UPCF2 ==> UnivariatePolynomialCategoryFunctions2 - - fact : (UP, List K) -> FR - ifactor : (SUP, List K) -> Factored SUP - extend : (UP, Z) -> FR - allk : List AN -> List K - downpoly: UP -> UPQ - liftpoly: UPQ -> UP - irred? : UP -> Boolean - - allk l == removeDuplicates concat [kernels x for x in l] - liftpoly p == map(#1::AN, p)$UPCF2(Q, UPQ, AN, UP) - downpoly p == map(retract(#1)@Q, p)$UPCF2(AN, UP ,Q, UPQ) - ifactor(p,l) == (fact(p pretend UP, l)) pretend Factored(SUP) - factor p == fact(p, allk coefficients p) - - factor(p, l) == - fact(p, allk removeDuplicates concat(l, coefficients p)) - - split p == - fp := factor p - unit(fp) * - _*/[extend(fc.factor, fc.exponent) for fc in factors fp] - - extend(p, n) == --- one? degree p => primeFactor(p, n) - (degree p = 1) => primeFactor(p, n) - q := monomial(1, 1)$UP - zeroOf(p pretend SUP)::UP - primeFactor(q, n) * split((p exquo q)::UP) ** (n::N) - - doublyTransitive? p == - irred? p and irred?((p exquo - (monomial(1, 1)$UP - zeroOf(p pretend SUP)::UP))::UP) - - irred? p == - fp := factor p --- one? numberOfFactors fp and one? nthExponent(fp, 1) - (numberOfFactors fp = 1) and (nthExponent(fp, 1) = 1) - - fact(p, l) == --- one? degree p => primeFactor(p, 1) - (degree p = 1) => primeFactor(p, 1) - empty? l => - dr := factor(downpoly p)$RationalFactorize(UPQ) - (liftpoly unit dr) * - _*/[primeFactor(liftpoly dc.factor,dc.exponent) - for dc in factors dr] - q := minPoly(alpha := "max"/l)$AN - newl := remove(alpha = #1, l) - sae := SimpleAlgebraicExtension(AN, SUP, q) - ups := SparseUnivariatePolynomial sae - fr := factor(map(reduce univariate(#1, alpha, q), - p)$UPCF2(AN, UP, sae, ups), - ifactor(#1, newl))$InnerAlgFactor(AN, SUP, sae, ups) - newalpha := alpha::AN - map((lift(#1)$sae) newalpha, unit fr)$UPCF2(sae, ups, AN, UP) * - _*/[primeFactor(map((lift(#1)$sae) newalpha, - fc.factor)$UPCF2(sae, ups, AN, UP), - fc.exponent) for fc in factors fr] - -@ -\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/algfunc.spad.pamphlet b/src/algebra/algfunc.spad.pamphlet deleted file mode 100644 index 22f5e49..0000000 --- a/src/algebra/algfunc.spad.pamphlet +++ /dev/null @@ -1,332 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra algfunc.spad} -\author{Manuel Bronstein} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package AF AlgebraicFunction} -\subsection{hackroot(x, n)} -This used to read: -\begin{verbatim} - hackroot(x, n) == - (n = 1) or (x = 1) => x - (x ^= -1) and (((num := numer x) = 1) or (num = -1)) => - inv hackroot((num * denom x)::F, n) - (x = -1) and n = 4 => - ((-1::F) ** (1::Q / 2::Q) + 1) / ((2::F) ** (1::Q / 2::Q)) - kernel(oproot, [x, n::F]) - -@ -\end{verbatim} -but the condition is wrong. For example, if $x$ is negative then -$x=-1/2$ would pass the -test and give $$1/(-2)^(1/n) \ne (-1/2)^(1/n)$$ -<>= - hackroot(x, n) == - (n = 1) or (x = 1) => x - (((dx := denom x) ^= 1) and - ((rx := retractIfCan(dx)@Union(Integer,"failed")) case Integer) and - positive?(rx)) - => hackroot((numer x)::F, n)/hackroot(rx::Integer::F, n) - (x = -1) and n = 4 => - ((-1::F) ** (1::Q / 2::Q) + 1) / ((2::F) ** (1::Q / 2::Q)) - kernel(oproot, [x, n::F]) - -@ -<>= -"AF" [color=orange,style=filled]; -"AlgebraicFunction(a:Join(ORDSET,INTDOM),b:FS(a))" [color=orange,style=filled]; -"AF" -> "PACKAGE" -"AlgebraicFunction(a:Join(ORDSET,INTDOM),b:FS(a))" -> "Package" -@ -<>= -)abbrev package AF AlgebraicFunction -++ Author: Manuel Bronstein -++ Date Created: 21 March 1988 -++ Date Last Updated: 11 November 1993 -++ Description: -++ This package provides algebraic functions over an integral domain. -++ Keywords: algebraic, function. - -AlgebraicFunction(R, F): Exports == Implementation where - R: Join(OrderedSet, IntegralDomain) - F: FunctionSpace R - - SE ==> Symbol - Z ==> Integer - Q ==> Fraction Z - OP ==> BasicOperator - K ==> Kernel F - P ==> SparseMultivariatePolynomial(R, K) - UP ==> SparseUnivariatePolynomial F - UPR ==> SparseUnivariatePolynomial R - ALGOP ==> "%alg" - SPECIALDISP ==> "%specialDisp" - SPECIALDIFF ==> "%specialDiff" - - Exports ==> with - rootOf : (UP, SE) -> F - ++ rootOf(p, y) returns y such that \spad{p(y) = 0}. - ++ The object returned displays as \spad{'y}. - operator: OP -> OP - ++ operator(op) returns a copy of \spad{op} with the domain-dependent - ++ properties appropriate for \spad{F}. - ++ Error: if op is not an algebraic operator, that is, - ++ an nth root or implicit algebraic operator. - belong? : OP -> Boolean - ++ belong?(op) is true if \spad{op} is an algebraic operator, that is, - ++ an nth root or implicit algebraic operator. - inrootof: (UP, F) -> F - ++ inrootof(p, x) should be a non-exported function. - -- un-export when the compiler accepts conditional local functions! - droot : List F -> OutputForm - ++ droot(l) should be a non-exported function. - -- un-export when the compiler accepts conditional local functions! - if R has RetractableTo Integer then - "**" : (F, Q) -> F - ++ x ** q is \spad{x} raised to the rational power \spad{q}. - minPoly: K -> UP - ++ minPoly(k) returns the defining polynomial of \spad{k}. - definingPolynomial: F -> F - ++ definingPolynomial(f) returns the defining polynomial of \spad{f} - ++ as an element of \spad{F}. - ++ Error: if f is not a kernel. - iroot : (R, Z) -> F - ++ iroot(p, n) should be a non-exported function. - -- un-export when the compiler accepts conditional local functions! - - Implementation ==> add - ialg : List F -> F - dvalg: (List F, SE) -> F - dalg : List F -> OutputForm - - opalg := operator("rootOf"::Symbol)$CommonOperators - oproot := operator("nthRoot"::Symbol)$CommonOperators - - belong? op == has?(op, ALGOP) - dalg l == second(l)::OutputForm - - rootOf(p, x) == - k := kernel(x)$K - (r := retractIfCan(p)@Union(F, "failed")) case "failed" => - inrootof(p, k::F) - n := numer(f := univariate(r::F, k)) - degree denom f > 0 => error "roofOf: variable appears in denom" - inrootof(n, k::F) - - dvalg(l, x) == - p := numer univariate(first l, retract(second l)@K) - alpha := kernel(opalg, l) - - (map(differentiate(#1, x), p) alpha) / ((differentiate p) alpha) - - ialg l == - f := univariate(p := first l, retract(x := second l)@K) - degree denom f > 0 => error "roofOf: variable appears in denom" - inrootof(numer f, x) - - operator op == - is?(op, "rootOf"::Symbol) => opalg - is?(op, "nthRoot"::Symbol) => oproot - error "Unknown operator" - - if R has AlgebraicallyClosedField then - UP2R: UP -> Union(UPR, "failed") - - inrootof(q, x) == - monomial? q => 0 - - (d := degree q) <= 0 => error "rootOf: constant polynomial" --- one? d=> - leadingCoefficient(reductum q) / leadingCoefficient q - (d = 1) => - leadingCoefficient(reductum q) / leadingCoefficient q - ((rx := retractIfCan(x)@Union(SE, "failed")) case SE) and - ((r := UP2R q) case UPR) => rootOf(r::UPR, rx::SE)::F - kernel(opalg, [q x, x]) - - UP2R p == - ans:UPR := 0 - while p ^= 0 repeat - (r := retractIfCan(leadingCoefficient p)@Union(R, "failed")) - case "failed" => return "failed" - ans := ans + monomial(r::R, degree p) - p := reductum p - ans - - else - inrootof(q, x) == - monomial? q => 0 - (d := degree q) <= 0 => error "rootOf: constant polynomial" --- one? d => - leadingCoefficient(reductum q) /leadingCoefficient q - (d = 1) => - leadingCoefficient(reductum q) /leadingCoefficient q - kernel(opalg, [q x, x]) - - evaluate(opalg, ialg)$BasicOperatorFunctions1(F) - setProperty(opalg, SPECIALDIFF, - dvalg@((List F, SE) -> F) pretend None) - setProperty(opalg, SPECIALDISP, - dalg@(List F -> OutputForm) pretend None) - - if R has RetractableTo Integer then - import PolynomialRoots(IndexedExponents K, K, R, P, F) - - dumvar := "%%var"::Symbol::F - - lzero : List F -> F - dvroot : List F -> F - inroot : List F -> F - hackroot: (F, Z) -> F - inroot0 : (F, Z, Boolean, Boolean) -> F - - lzero l == 0 - - droot l == - x := first(l)::OutputForm - (n := retract(second l)@Z) = 2 => root x - root(x, n::OutputForm) - - dvroot l == - n := retract(second l)@Z - (first(l) ** ((1 - n) / n)) / (n::F) - - x ** q == - qr := divide(numer q, denom q) - x ** qr.quotient * inroot([x, (denom q)::F]) ** qr.remainder - -<> - - inroot l == - zero?(n := retract(second l)@Z) => error "root: exponent = 0" --- one?(x := first l) or one? n => x - ((x := first l) = 1) or (n = 1) => x - (r := retractIfCan(x)@Union(R,"failed")) case R => iroot(r::R,n) - (u := isExpt(x, oproot)) case Record(var:K, exponent:Z) => - pr := u::Record(var:K, exponent:Z) - (first argument(pr.var)) ** - (pr.exponent /$Fraction(Z) - (n * retract(second argument(pr.var))@Z)) - inroot0(x, n, false, false) - --- removes powers of positive integers from numer and denom --- num? or den? is true if numer or denom already processed - inroot0(x, n, num?, den?) == - rn:Union(Z, "failed") := (num? => "failed"; retractIfCan numer x) - rd:Union(Z, "failed") := (den? => "failed"; retractIfCan denom x) - (rn case Z) and (rd case Z) => - rec := qroot(rn::Z / rd::Z, n::NonNegativeInteger) - rec.coef * hackroot(rec.radicand, rec.exponent) - rn case Z => - rec := qroot(rn::Z::Fraction(Z), n::NonNegativeInteger) - rec.coef * inroot0((rec.radicand**(n exquo rec.exponent)::Z) - / (denom(x)::F), n, true, den?) - rd case Z => - rec := qroot(rd::Z::Fraction(Z), n::NonNegativeInteger) - inroot0((numer(x)::F) / - (rec.radicand ** (n exquo rec.exponent)::Z), - n, num?, true) / rec.coef - hackroot(x, n) - - if R has AlgebraicallyClosedField then iroot(r, n) == nthRoot(r, n)::F - else - iroot0: (R, Z) -> F - - if R has RadicalCategory then - if R has imaginary:() -> R then iroot(r, n) == nthRoot(r, n)::F - else - iroot(r, n) == - odd? n or r >= 0 => nthRoot(r, n)::F - iroot0(r, n) - - else iroot(r, n) == iroot0(r, n) - - iroot0(r, n) == - rec := rroot(r, n::NonNegativeInteger) - rec.coef * hackroot(rec.radicand, rec.exponent) - - definingPolynomial x == - (r := retractIfCan(x)@Union(K, "failed")) case K => - is?(k := r::K, opalg) => first argument k - is?(k, oproot) => - dumvar ** retract(second argument k)@Z - first argument k - dumvar - x - dumvar - x - - minPoly k == - is?(k, opalg) => - numer univariate(first argument k, - retract(second argument k)@K) - is?(k, oproot) => - monomial(1,retract(second argument k)@Z :: NonNegativeInteger) - - first(argument k)::UP - monomial(1, 1) - k::F::UP - - evaluate(oproot, inroot)$BasicOperatorFunctions1(F) - derivative(oproot, [dvroot, lzero]) - - else -- R is not retractable to Integer - droot l == - x := first(l)::OutputForm - (n := second l) = 2::F => root x - root(x, n::OutputForm) - - minPoly k == - is?(k, opalg) => - numer univariate(first argument k, - retract(second argument k)@K) - monomial(1, 1) - k::F::UP - - setProperty(oproot, SPECIALDISP, - droot@(List F -> OutputForm) pretend None) - -@ -\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. -@ -<<*>>= -<> - --- SPAD files for the functional world should be compiled in the --- following order: --- --- op kl fspace ALGFUNC expr - -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/allfact.spad.pamphlet b/src/algebra/allfact.spad.pamphlet deleted file mode 100644 index ccc9497..0000000 --- a/src/algebra/allfact.spad.pamphlet +++ /dev/null @@ -1,486 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra allfact.spad} -\author{Patrizia Gianni} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package MRATFAC MRationalFactorize} -<>= -)abbrev package MRATFAC MRationalFactorize -++ Author: P. Gianni -++ Date Created: -++ Date Last Updated: -++ Basic Functions: -++ Related Constructors: MultivariateFactorize -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: MRationalFactorize contains the factor function for multivariate -++ polynomials over the quotient field of a ring R such that the package -++ MultivariateFactorize can factor multivariate polynomials over R. - - -MRationalFactorize(E,OV,R,P) : C == T - where - E : OrderedAbelianMonoidSup - OV : OrderedSet - R : Join(EuclideanDomain, CharacteristicZero) -- with factor over R[x] - FR ==> Fraction R - P : PolynomialCategory(FR,E,OV) - MPR ==> SparseMultivariatePolynomial(R,OV) - SUP ==> SparseUnivariatePolynomial - - C == with - factor : P -> Factored P - ++ factor(p) factors the multivariate polynomial p with coefficients - ++ which are fractions of elements of R. - - T == add - IE ==> IndexedExponents OV - PCLFRR ==> PolynomialCategoryLifting(E,OV,FR,P,MPR) - PCLRFR ==> PolynomialCategoryLifting(IE,OV,R,MPR,P) - MFACT ==> MultivariateFactorize(OV,IE,R,MPR) - UPCF2 ==> UnivariatePolynomialCategoryFunctions2 - - numer1(c:FR): MPR == (numer c) :: MPR - numer2(pol:P) : MPR == map(coerce,numer1,pol)$PCLFRR - coerce1(d:R) : P == (d::FR)::P - coerce2(pp:MPR) :P == map(coerce,coerce1,pp)$PCLRFR - - factor(p:P) : Factored P == - pden:R:=lcm([denom c for c in coefficients p]) - pol :P:= (pden::FR)*p - ipol:MPR:= map(coerce,numer1,pol)$PCLFRR - ffact:=(factor ipol)$MFACT - (1/pden)*map(coerce,coerce1,(unit ffact))$PCLRFR * - _*/[primeFactor(map(coerce,coerce1,u.factor)$PCLRFR, - u.exponent) for u in factors ffact] - -@ -\section{package MPRFF MPolyCatRationalFunctionFactorizer} -<>= -)abbrev package MPRFF MPolyCatRationalFunctionFactorizer -++ Author: P. Gianni -++ Date Created: -++ Date Last Updated: -++ Basic Functions: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ This package exports a factor operation for multivariate polynomials -++ with coefficients which are rational functions over -++ some ring R over which we can factor. It is used internally by packages -++ such as primary decomposition which need to work with polynomials -++ with rational function coefficients, i.e. themselves fractions of -++ polynomials. - -MPolyCatRationalFunctionFactorizer(E,OV,R,PRF) : C == T - where - R : IntegralDomain - F ==> Fraction Polynomial R - RN ==> Fraction Integer - E : OrderedAbelianMonoidSup - OV : OrderedSet with - convert : % -> Symbol - ++ convert(x) converts x to a symbol - PRF : PolynomialCategory(F,E,OV) - NNI ==> NonNegativeInteger - P ==> Polynomial R - ISE ==> IndexedExponents SE - SE ==> Symbol - UP ==> SparseUnivariatePolynomial P - UF ==> SparseUnivariatePolynomial F - UPRF ==> SparseUnivariatePolynomial PRF - QuoForm ==> Record(sup:P,inf:P) - - C == with - totalfract : PRF -> QuoForm - ++ totalfract(prf) takes a polynomial whose coefficients are - ++ themselves fractions of polynomials and returns a record - ++ containing the numerator and denominator resulting from - ++ putting prf over a common denominator. - pushdown : (PRF,OV) -> PRF - ++ pushdown(prf,var) pushes all top level occurences of the - ++ variable var into the coefficient domain for the polynomial prf. - pushdterm : (UPRF,OV) -> PRF - ++ pushdterm(monom,var) pushes all top level occurences of the - ++ variable var into the coefficient domain for the monomial monom. - pushup : (PRF,OV) -> PRF - ++ pushup(prf,var) raises all occurences of the - ++ variable var in the coefficients of the polynomial prf - ++ back to the polynomial level. - pushucoef : (UP,OV) -> PRF - ++ pushucoef(upoly,var) converts the anonymous univariate - ++ polynomial upoly to a polynomial in var over rational functions. - pushuconst : (F,OV) -> PRF - ++ pushuconst(r,var) takes a rational function and raises - ++ all occurances of the variable var to the polynomial level. - factor : PRF -> Factored PRF - ++ factor(prf) factors a polynomial with rational function - ++ coefficients. - - --- Local Functions ---- - T == add - - ---- factorization of p ---- - factor(p:PRF) : Factored PRF == - truelist:List OV :=variables p - tp:=totalfract(p) - nump:P:= tp.sup - denp:F:=inv(tp.inf ::F) - ffact : List(Record(irr:PRF,pow:Integer)) - flist:Factored P - if R is Fraction Integer then - flist:= - ((factor nump)$MRationalFactorize(ISE,SE,Integer,P)) - pretend (Factored P) - else - if R has FiniteFieldCategory then - flist:= ((factor nump)$MultFiniteFactorize(SE,ISE,R,P)) - pretend (Factored P) - - else - if R has Field then error "not done yet" - - else - if R has CharacteristicZero then - flist:= ((factor nump)$MultivariateFactorize(SE,ISE,R,P)) - pretend (Factored P) - else error "can't happen" - ffact:=[[u.factor::F::PRF,u.exponent] for u in factors flist] - fcont:=(unit flist)::F::PRF - for x in truelist repeat - fcont:=pushup(fcont,x) - ffact:=[[pushup(ff.irr,x),ff.pow] for ff in ffact] - (denp*fcont)*(_*/[primeFactor(ff.irr,ff.pow) for ff in ffact]) - - --- the following functions are used to "push" x in the coefficient ring - - - ---- push x in the coefficient domain for a polynomial ---- - pushdown(g:PRF,x:OV) : PRF == - ground? g => g - rf:PRF:=0$PRF - ug:=univariate(g,x) - while ug^=0 repeat - rf:=rf+pushdterm(ug,x) - ug := reductum ug - rf - - ---- push x in the coefficient domain for a term ---- - pushdterm(t:UPRF,x:OV):PRF == - n:=degree(t) - cf:=monomial(1,convert x,n)$P :: F - cf * leadingCoefficient t - - ---- push back the variable ---- - pushup(f:PRF,x:OV) :PRF == - ground? f => pushuconst(retract f,x) - v:=mainVariable(f)::OV - g:=univariate(f,v) - multivariate(map(pushup(#1,x),g),v) - - ---- push x back from the coefficient domain ---- - pushuconst(r:F,x:OV):PRF == - xs:SE:=convert x - degree(denom r,xs)>0 => error "bad polynomial form" - inv((denom r)::F)*pushucoef(univariate(numer r,xs),x) - - - pushucoef(c:UP,x:OV):PRF == - c = 0 => 0 - monomial((leadingCoefficient c)::F::PRF,x,degree c) + - pushucoef(reductum c,x) - - - ---- write p with a common denominator ---- - - totalfract(p:PRF) : QuoForm == - p=0 => [0$P,1$P]$QuoForm - for x in variables p repeat p:=pushdown(p,x) - g:F:=retract p - [numer g,denom g]$QuoForm - -@ -\section{package MPCPF MPolyCatPolyFactorizer} -<>= -)abbrev package MPCPF MPolyCatPolyFactorizer -++ Author: P. Gianni -++ Date Created: -++ Date Last Updated: March 1995 -++ Basic Functions: -++ Related Constructors: -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ This package exports a factor operation for multivariate polynomials -++ with coefficients which are polynomials over -++ some ring R over which we can factor. It is used internally by packages -++ such as the solve package which need to work with polynomials in a specific -++ set of variables with coefficients which are polynomials in all the other -++ variables. - -MPolyCatPolyFactorizer(E,OV,R,PPR) : C == T - where - R : EuclideanDomain - E : OrderedAbelianMonoidSup - -- following type is required by PushVariables - OV : OrderedSet with - convert : % -> Symbol - ++ convert(x) converts x to a symbol - variable: Symbol -> Union(%, "failed") - ++ variable(s) makes an element from symbol s or fails. - PR ==> Polynomial R - PPR : PolynomialCategory(PR,E,OV) - NNI ==> NonNegativeInteger - ISY ==> IndexedExponents Symbol - SE ==> Symbol - UP ==> SparseUnivariatePolynomial PR - UPPR ==> SparseUnivariatePolynomial PPR - - C == with - factor : PPR -> Factored PPR - ++ factor(p) factors a polynomial with polynomial - ++ coefficients. - - --- Local Functions ---- - T == add - - import PushVariables(R,E,OV,PPR) - - ---- factorization of p ---- - factor(p:PPR) : Factored PPR == - ground? p => nilFactor(p,1) - c := content p - p := (p exquo c)::PPR - vars:List OV :=variables p - g:PR:=retract pushdown(p, vars) - flist := factor(g)$GeneralizedMultivariateFactorize(Symbol,ISY,R,R,PR) - ffact : List(Record(irr:PPR,pow:Integer)) - ffact:=[[pushup(u.factor::PPR,vars),u.exponent] for u in factors flist] - fcont:=(unit flist)::PPR - nilFactor(c*fcont,1)*(_*/[primeFactor(ff.irr,ff.pow) for ff in ffact]) - -@ -\section{package GENMFACT GeneralizedMultivariateFactorize} -<>= -)abbrev package GENMFACT GeneralizedMultivariateFactorize -++ Author: P. Gianni -++ Date Created: 1983 -++ Date Last Updated: Sept. 1990 -++ Basic Functions: -++ Related Constructors: MultFiniteFactorize, AlgebraicMultFact, MultivariateFactorize -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ This is the top level package for doing multivariate factorization -++ over basic domains like \spadtype{Integer} or \spadtype{Fraction Integer}. - -GeneralizedMultivariateFactorize(OV,E,S,R,P) : C == T - where - R : IntegralDomain - -- with factor on R[x] - S : IntegralDomain - OV : OrderedSet with - convert : % -> Symbol - ++ convert(x) converts x to a symbol - variable: Symbol -> Union(%, "failed") - ++ variable(s) makes an element from symbol s or fails. - E : OrderedAbelianMonoidSup - P : PolynomialCategory(R,E,OV) - - C == with - factor : P -> Factored P - ++ factor(p) factors the multivariate polynomial p over its coefficient - ++ domain - - T == add - factor(p:P) : Factored P == - R has FiniteFieldCategory => factor(p)$MultFiniteFactorize(OV,E,R,P) - R is Polynomial(S) and S has EuclideanDomain => - factor(p)$MPolyCatPolyFactorizer(E,OV,S,P) - R is Fraction(S) and S has CharacteristicZero and - S has EuclideanDomain => - factor(p)$MRationalFactorize(E,OV,S,P) - R is Fraction Polynomial S => - factor(p)$MPolyCatRationalFunctionFactorizer(E,OV,S,P) - R has CharacteristicZero and R has EuclideanDomain => - factor(p)$MultivariateFactorize(OV,E,R,P) - squareFree p - -@ -\section{package RFFACTOR RationalFunctionFactorizer} -<>= -)abbrev package RFFACTOR RationalFunctionFactorizer -++ Author: P. Gianni -++ Date Created: -++ Date Last Updated: March 1995 -++ Basic Functions: -++ Related Constructors: Fraction, Polynomial -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: -++ \spadtype{RationalFunctionFactorizer} contains the factor function -++ (called factorFraction) which factors fractions of polynomials by factoring -++ the numerator and denominator. Since any non zero fraction is a unit -++ the usual factor operation will just return the original fraction. - -RationalFunctionFactorizer(R) : C == T - where - R : EuclideanDomain -- R with factor for R[X] - P ==> Polynomial R - FP ==> Fraction P - SE ==> Symbol - - C == with - factorFraction : FP -> Fraction Factored(P) - ++ factorFraction(r) factors the numerator and the denominator of - ++ the polynomial fraction r. - T == add - - factorFraction(p:FP) : Fraction Factored(P) == - R is Fraction Integer => - MR:=MRationalFactorize(IndexedExponents SE,SE, - Integer,P) - (factor(numer p)$MR)/ (factor(denom p)$MR) - - R has FiniteFieldCategory => - FF:=MultFiniteFactorize(SE,IndexedExponents SE,R,P) - (factor(numer p))$FF/(factor(denom p))$FF - - R has CharacteristicZero => - MFF:=MultivariateFactorize(SE,IndexedExponents SE,R,P) - (factor(numer p))$MFF/(factor(denom p))$MFF - error "case not handled" - -@ -\section{package SUPFRACF SupFractionFactorizer} -<>= -)abbrev package SUPFRACF SupFractionFactorizer -++ Author: P. Gianni -++ Date Created: October 1993 -++ Date Last Updated: March 1995 -++ Basic Functions: -++ Related Constructors: MultivariateFactorize -++ Also See: -++ AMS Classifications: -++ Keywords: -++ References: -++ Description: SupFractionFactorize -++ contains the factor function for univariate -++ polynomials over the quotient field of a ring S such that the package -++ MultivariateFactorize works for S - -SupFractionFactorizer(E,OV,R,P) : C == T - where - E : OrderedAbelianMonoidSup - OV : OrderedSet - R : GcdDomain - P : PolynomialCategory(R,E,OV) - FP ==> Fraction P - SUP ==> SparseUnivariatePolynomial - - C == with - factor : SUP FP -> Factored SUP FP - ++ factor(p) factors the univariate polynomial p with coefficients - ++ which are fractions of polynomials over R. - squareFree : SUP FP -> Factored SUP FP - ++ squareFree(p) returns the square-free factorization of the univariate polynomial p with coefficients - ++ which are fractions of polynomials over R. Each factor has no repeated roots and the factors are - ++ pairwise relatively prime. - - T == add - MFACT ==> MultivariateFactorize(OV,E,R,P) - MSQFR ==> MultivariateSquareFree(E,OV,R,P) - UPCF2 ==> UnivariatePolynomialCategoryFunctions2 - - factor(p:SUP FP) : Factored SUP FP == - p=0 => 0 - R has CharacteristicZero and R has EuclideanDomain => - pden : P := lcm [denom c for c in coefficients p] - pol : SUP FP := (pden::FP)*p - ipol: SUP P := map(numer,pol)$UPCF2(FP,SUP FP,P,SUP P) - ffact: Factored SUP P := 0 - ffact := factor(ipol)$MFACT - makeFR((1/pden * map(coerce,unit ffact)$UPCF2(P,SUP P,FP,SUP FP)), - [["prime",map(coerce,u.factor)$UPCF2(P,SUP P,FP,SUP FP), - u.exponent] for u in factors ffact]) - squareFree p - - squareFree(p:SUP FP) : Factored SUP FP == - p=0 => 0 - pden : P := lcm [denom c for c in coefficients p] - pol : SUP FP := (pden::FP)*p - ipol: SUP P := map(numer,pol)$UPCF2(FP,SUP FP,P,SUP P) - ffact: Factored SUP P := 0 - if R has CharacteristicZero and R has EuclideanDomain then - ffact := squareFree(ipol)$MSQFR - else ffact := squareFree(ipol) - makeFR((1/pden * map(coerce,unit ffact)$UPCF2(P,SUP P,FP,SUP FP)), - [["sqfr",map(coerce,u.factor)$UPCF2(P,SUP P,FP,SUP FP), - u.exponent] for u in factors ffact]) - -@ -\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/alql.spad.pamphlet b/src/algebra/alql.spad.pamphlet deleted file mode 100644 index 86c5d2e..0000000 --- a/src/algebra/alql.spad.pamphlet +++ /dev/null @@ -1,289 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra alql.spad} -\author{The Axiom Team} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{domain DLIST DataList} -<>= -"DLIST" -> "LSAGG" -"DataList(a:OrderedSet)" -> "ListAggregate(a:Type)" -@ -<>= -)abbrev domain DLIST DataList -++ This domain provides some nice functions on lists -DataList(S:OrderedSet) : Exports == Implementation where - Exports == ListAggregate(S) with - coerce: List S -> % - ++ coerce(l) creates a datalist from l - coerce: % -> List S - ++ coerce(x) returns the list of elements in x - datalist: List S -> % - ++ datalist(l) creates a datalist from l - elt: (%,"unique") -> % - ++ \axiom{l.unique} returns \axiom{l} with duplicates removed. - ++ Note: \axiom{l.unique = removeDuplicates(l)}. - elt: (%,"sort") -> % - ++ \axiom{l.sort} returns \axiom{l} with elements sorted. - ++ Note: \axiom{l.sort = sort(l)} - elt: (%,"count") -> NonNegativeInteger - ++ \axiom{l."count"} returns the number of elements in \axiom{l}. - Implementation == List(S) add - elt(x,"unique") == removeDuplicates(x) - elt(x,"sort") == sort(x) - elt(x,"count") == #x - coerce(x:List S) == x pretend % - coerce(x:%):List S == x pretend (List S) - coerce(x:%): OutputForm == (x :: List S) :: OutputForm - datalist(x:List S) == x::% - -@ -\section{domain ICARD IndexCard} -<>= -"ICARD" -> "ORDSET" -"IndexCard()" -> "OrderedSet()" -@ -<>= -)abbrev domain ICARD IndexCard -++ This domain implements a container of information -++ about the AXIOM library -IndexCard() : Exports == Implementation where - Exports == OrderedSet with - elt: (%,Symbol) -> String - ++ elt(ic,s) selects a particular field from \axiom{ic}. Valid fields - ++ are \axiom{name, nargs, exposed, type, abbreviation, kind, origin, - ++ params, condition, doc}. - display: % -> Void - ++ display(ic) prints a summary of information contained in \axiom{ic}. - fullDisplay: % -> Void - ++ fullDisplay(ic) prints all of the information contained in \axiom{ic}. - coerce: String -> % - ++ coerce(s) converts \axiom{s} into an \axiom{IndexCard}. Warning: if - ++ \axiom{s} is not of the right format then an error will occur - Implementation == add - x empty() - hconcat(" if ",condition::OutputForm) - exposed? : String := SUBSTRING(dbPart(x,3,1)$Lisp,0,1)$Lisp - exposedPart : OutputForm := - exposed? = "n" => " (unexposed)" - empty() - firstPart := hconcat(name,hconcat(" : ",type)) - secondPart := hconcat(fromPart,hconcat(ifPart,exposedPart)) - output(hconcat(firstPart,secondPart))$OutputPackage - coerce(s:String): % == (s pretend %) - coerce(x): OutputForm == (x pretend String)::OutputForm - elt(x,sel) == - s := PNAME(sel)$Lisp pretend String - s = "name" => dbName(x)$Lisp - s = "nargs" => dbPart(x,2,1$Lisp)$Lisp - s = "exposed" => SUBSTRING(dbPart(x,3,1)$Lisp,0,1)$Lisp - s = "type" => dbPart(x,4,1$Lisp)$Lisp - s = "abbreviation" => dbPart(x,5,1$Lisp)$Lisp - s = "kind" => alqlGetKindString(x)$Lisp - s = "origin" => alqlGetOrigin(x)$Lisp - s = "params" => alqlGetParams(x)$Lisp - s = "condition" => dbPart(x,6,1$Lisp)$Lisp - s = "doc" => dbComments(x)$Lisp - error "unknown selector" - -@ -\section{domain DBASE Database} -<>= -"DBASE" -> "SETCAT" -"Database(a:OrderedSet)" -> "SetCategory()" -@ -<>= -)abbrev domain DBASE Database -++ This domain implements a simple view of a database whose fields are -++ indexed by symbols -Database(S): Exports == Implementation where - S: OrderedSet with - elt: (%,Symbol) -> String - ++ elt(x,s) returns an element of x indexed by s - display: % -> Void - ++ display(x) displays x in some form - fullDisplay: % -> Void - ++ fullDisplay(x) displays x in detail - Exports == SetCategory with - elt: (%,QueryEquation) -> % - ++ elt(db,q) returns all elements of \axiom{db} which satisfy \axiom{q}. - elt: (%,Symbol) -> DataList String - ++ elt(db,s) returns the \axiom{s} field of each element of \axiom{db}. - _+: (%,%) -> % - ++ db1+db2 returns the merge of databases db1 and db2 - _-: (%,%) -> % - ++ db1-db2 returns the difference of databases db1 and db2 i.e. consisting - ++ of elements in db1 but not in db2 - coerce: List S -> % - ++ coerce(l) makes a database out of a list - display: % -> Void - ++ display(db) prints a summary line for each entry in \axiom{db}. - fullDisplay: % -> Void - ++ fullDisplay(db) prints full details of each entry in \axiom{db}. - fullDisplay: (%,PositiveInteger,PositiveInteger) -> Void - ++ fullDisplay(db,start,end ) prints full details of entries in the range - ++ \axiom{start..end} in \axiom{db}. - Implementation == List S add - s: Symbol - Rep := List S - coerce(u: List S):% == u@% - elt(data: %,s: Symbol) == [x.s for x in data] :: DataList(String) - elt(data: %,eq: QueryEquation) == - field := variable eq - val := value eq - [x for x in data | stringMatches?(val,x.field)$Lisp] - x+y==removeDuplicates_! merge(x,y) - x-y==mergeDifference(copy(x::Rep),y::Rep)$MergeThing(S) - coerce(data): OutputForm == (#data):: OutputForm - display(data) == for x in data repeat display x - fullDisplay(data) == for x in data repeat fullDisplay x - fullDisplay(data,n,m) == for x in data for i in 1..m repeat - if i >= n then fullDisplay x - -@ -\section{domain QEQUAT QueryEquation} -<>= -"QEQUAT" -> "KOERCE" -"QueryEquation()" -> "CoercibleTo(OutputForm)" -@ -<>= -)abbrev domain QEQUAT QueryEquation -++ This domain implements simple database queries -QueryEquation(): Exports == Implementation where - Exports == CoercibleTo(OutputForm) with - equation: (Symbol,String) -> % - ++ equation(s,"a") creates a new equation. - variable: % -> Symbol - ++ variable(q) returns the variable (i.e. left hand side) of \axiom{q}. - value: % -> String - ++ value(q) returns the value (i.e. right hand side) of \axiom{q}. - Implementation == add - Rep := Record(var:Symbol, val:String) - coerce(u) == coerce(u.var)$Symbol = coerce(u.val)$String - equation(x,s) == [x,s] - variable q == q.var - value q == q.val - -@ -\section{package MTHING MergeThing} -<>= -"MTHING" -> "PACKAGE" -"MergeThing(a:OrderedSet)" -> "Package" -@ -<>= -)abbrev package MTHING MergeThing -++ This package exports tools for merging lists -MergeThing(S:OrderedSet): Exports == Implementation where - Exports == with - mergeDifference: (List(S),List(S)) -> List(S) - ++ mergeDifference(l1,l2) returns a list of elements in l1 not present - ++ in l2. Assumes lists are ordered and all x in l2 are also in l1. - Implementation == add - mergeDifference1: (List S,S,List S) -> List S - mergeDifference(x,y) == - null x or null y => x - mergeDifference1(x,y.first,y.rest) - x.first=y.first => x.rest - x - mergeDifference1(x,fy,ry) == - rx := x - while not null rx repeat - rx := rx.rest - frx := rx.first - while fy < frx repeat - null ry => return x - fy := first ry - ry := rest ry - frx = fy => - x.rest := rx.rest - null ry => return x - fy := ry.first - ry := ry.rest - x := rx - -@ -\section{package OPQUERY OperationsQuery} -<>= -"OPQUERY" -> "PACKAGE" -"OperationsQuery()" -> "Package" -@ -<>= -)abbrev package OPQUERY OperationsQuery -++ This package exports tools to create AXIOM Library information databases. -OperationsQuery(): Exports == Implementation where - Exports == with - getDatabase: String -> Database(IndexCard) - ++ getDatabase("char") returns a list of appropriate entries in the - ++ browser database. The legal values for "char" are "o" (operations), - ++ "k" (constructors), "d" (domains), "c" (categories) or "p" (packages). - Implementation == add - getDatabase(s) == getBrowseDatabase(s)$Lisp - -@ -\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/any.spad.pamphlet b/src/algebra/any.spad.pamphlet deleted file mode 100644 index 61b47c6..0000000 --- a/src/algebra/any.spad.pamphlet +++ /dev/null @@ -1,144 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra any.spad} -\author{Robert S. Sutor} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package NONE1 NoneFunctions1} -<>= -"NONE1" -> "PACKAGE" -"NoneFunctions1(a:Type)" -> "Package" -@ -<>= -)abbrev package NONE1 NoneFunctions1 -++ Author: -++ Date Created: -++ Change History: -++ Basic Functions: coerce -++ Related Constructors: None -++ Also See: -++ AMS Classification: -++ Keywords: -++ Description: -++ \spadtype{NoneFunctions1} implements functions on \spadtype{None}. -++ It particular it includes a particulary dangerous coercion from -++ any other type to \spadtype{None}. - -NoneFunctions1(S:Type): Exports == Implementation where - Exports ==> with - coerce: S -> None - ++ coerce(x) changes \spad{x} into an object of type - ++ \spadtype{None}. - - Implementation ==> add - coerce(s:S):None == s pretend None - -@ -\section{package ANY1 AnyFunctions1} -<>= -"ANY1" -> "PACKAGE" -"AnyFunctions1(a:Type)" -> "Package" -@ -<>= -)abbrev package ANY1 AnyFunctions1 -++ Author: -++ Date Created: -++ Change History: -++ Basic Functions: coerce, retractIfCan, retractable?, retract -++ Related Constructors: Any -++ Also See: -++ AMS Classification: -++ Keywords: -++ Description: -++ \spadtype{AnyFunctions1} implements several utility functions for -++ working with \spadtype{Any}. These functions are used to go back -++ and forth between objects of \spadtype{Any} and objects of other -++ types. - -AnyFunctions1(S:Type): with - coerce : S -> Any - ++ coerce(s) creates an object of \spadtype{Any} from the - ++ object \spad{s} of type \spad{S}. - retractIfCan: Any -> Union(S, "failed") - ++ retractIfCan(a) tries change \spad{a} into an object - ++ of type \spad{S}. If it can, then such an object is - ++ returned. Otherwise, "failed" is returned. - retractable?: Any -> Boolean - ++ retractable?(a) tests if \spad{a} can be converted - ++ into an object of type \spad{S}. - retract : Any -> S - ++ retract(a) tries to convert \spad{a} into an object of - ++ type \spad{S}. If possible, it returns the object. - ++ Error: if no such retraction is possible. - - == add - import NoneFunctions1(S) - - Sexpr:SExpression := devaluate(S)$Lisp - - retractable? a == dom(a) = Sexpr - coerce(s:S):Any == any(Sexpr, s::None) - - retractIfCan a == - retractable? a => obj(a) pretend S - "failed" - - retract a == - retractable? a => obj(a) pretend S - error "Cannot retract value." - -@ -\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. -@ -<<*>>= -<> - --- Any and None complete the type lattice. They are also used in the --- interpreter in various situations. For example, it is always possible --- to resolve two types in the interpreter because at worst the answer --- may be Any. - -<> -<> -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/array1.spad.pamphlet b/src/algebra/array1.spad.pamphlet deleted file mode 100644 index 975c0d2..0000000 --- a/src/algebra/array1.spad.pamphlet +++ /dev/null @@ -1,175 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra array1.spad} -\author{Michael Monagan, Stephen Watt} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package PRIMARR2 PrimitiveArrayFunctions2} -<>= -"PRIMARR2" -> "PACKAGE" -"PrimitiveArrayFunctions2(a:Type,b:Type)" -> "Package" -@ -<>= -)abbrev package PRIMARR2 PrimitiveArrayFunctions2 -++ This package provides tools for operating on primitive arrays -++ with unary and binary functions involving different underlying types -PrimitiveArrayFunctions2(A, B): Exports == Implementation where - A, B: Type - - VA ==> PrimitiveArray A - VB ==> PrimitiveArray B - O2 ==> FiniteLinearAggregateFunctions2(A, VA, B, VB) - Exports ==> with - scan : ((A, B) -> B, VA, B) -> VB - ++ scan(f,a,r) successively applies - ++ \spad{reduce(f,x,r)} to more and more leading sub-arrays - ++ x of primitive array \spad{a}. - ++ More precisely, if \spad{a} is \spad{[a1,a2,...]}, then - ++ \spad{scan(f,a,r)} returns - ++ \spad{[reduce(f,[a1],r),reduce(f,[a1,a2],r),...]}. - ++ - ++X T1:=PrimitiveArrayFunctions2(Integer,Integer) - ++X adder(a:Integer,b:Integer):Integer == a+b - ++X scan(adder,[i for i in 1..10],0)$T1 - - reduce : ((A, B) -> B, VA, B) -> B - ++ reduce(f,a,r) applies function f to each - ++ successive element of the - ++ primitive array \spad{a} and an accumulant initialized to r. - ++ For example, \spad{reduce(_+$Integer,[1,2,3],0)} - ++ does \spad{3+(2+(1+0))}. Note: third argument r - ++ may be regarded as the identity element for the function f. - ++ - ++X T1:=PrimitiveArrayFunctions2(Integer,Integer) - ++X adder(a:Integer,b:Integer):Integer == a+b - ++X reduce(adder,[i for i in 1..10],0)$T1 - - map : (A -> B, VA) -> VB - ++ map(f,a) applies function f to each member of primitive array - ++ \spad{a} resulting in a new primitive array over a - ++ possibly different underlying domain. - ++ - ++X T1:=PrimitiveArrayFunctions2(Integer,Integer) - ++X map(x+->x+2,[i for i in 1..10])$T1 - - Implementation ==> add - map(f, v) == map(f, v)$O2 - scan(f, v, b) == scan(f, v, b)$O2 - reduce(f, v, b) == reduce(f, v, b)$O2 - -@ -\section{package ARRAY12 OneDimensionalArrayFunctions2} -<>= -"ARRAY12" -> "PACKAGE" -"OneDimensionalArrayFunctions2(a:Type,b:Type)" -> "Package" -@ -<>= -)abbrev package ARRAY12 OneDimensionalArrayFunctions2 -++ This package provides tools for operating on one-dimensional arrays -++ with unary and binary functions involving different underlying types -OneDimensionalArrayFunctions2(A, B): Exports == Implementation where - A, B: Type - - VA ==> OneDimensionalArray A - VB ==> OneDimensionalArray B - O2 ==> FiniteLinearAggregateFunctions2(A, VA, B, VB) - - Exports ==> with - scan : ((A, B) -> B, VA, B) -> VB - ++ scan(f,a,r) successively applies - ++ \spad{reduce(f,x,r)} to more and more leading sub-arrays - ++ x of one-dimensional array \spad{a}. - ++ More precisely, if \spad{a} is \spad{[a1,a2,...]}, then - ++ \spad{scan(f,a,r)} returns - ++ \spad{[reduce(f,[a1],r),reduce(f,[a1,a2],r),...]}. - ++ - ++X T1:=OneDimensionalArrayFunctions2(Integer,Integer) - ++X adder(a:Integer,b:Integer):Integer == a+b - ++X scan(adder,[i for i in 1..10],0)$T1 - - reduce : ((A, B) -> B, VA, B) -> B - ++ reduce(f,a,r) applies function f to each - ++ successive element of the - ++ one-dimensional array \spad{a} and an accumulant initialized to r. - ++ For example, \spad{reduce(_+$Integer,[1,2,3],0)} - ++ does \spad{3+(2+(1+0))}. Note: third argument r - ++ may be regarded as the identity element for the function f. - ++ - ++X T1:=OneDimensionalArrayFunctions2(Integer,Integer) - ++X adder(a:Integer,b:Integer):Integer == a+b - ++X reduce(adder,[i for i in 1..10],0)$T1 - - map : (A -> B, VA) -> VB - ++ map(f,a) applies function f to each member of one-dimensional array - ++ \spad{a} resulting in a new one-dimensional array over a - ++ possibly different underlying domain. - ++ - ++X T1:=OneDimensionalArrayFunctions2(Integer,Integer) - ++X map(x+->x+2,[i for i in 1..10])$T1 - - Implementation ==> add - map(f, v) == map(f, v)$O2 - scan(f, v, b) == scan(f, v, b)$O2 - reduce(f, v, b) == reduce(f, v, b)$O2 - -@ -\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. -@ -<<*>>= -<> - -<> -<> - ---%% TupleFunctions2 ---TupleFunctions2(A:Type, B:Type): with --- map: (A -> B, Tuple A) -> Tuple B --- == add --- map(f, t) == --- p:PrimitiveArray(B) := new length t --- for i in minIndex p .. maxIndex p repeat --- p.i := f select(t, i) --- p::Tuple(B) - -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/algebra/axserver.spad.pamphlet b/src/algebra/axserver.spad.pamphlet deleted file mode 100644 index 09e5329..0000000 --- a/src/algebra/axserver.spad.pamphlet +++ /dev/null @@ -1,747 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra axserver.spad} -\author{Arthur C. Ralfs, Timothy Daly} -\maketitle -\begin{abstract} -The AxiomServer package is designed to provide a web interface -to axiom. -\end{abstract} -\eject -\tableofcontents -\eject -\section{Axiom Server} -<>= -"AXSERV" -> "PACKAGE" -"AxiomServer()" -> "Package" -@ -<>= - -)abbrev package AXSERV AxiomServer -AxiomServer: public == private where - - public == with - - axServer: (Integer, SExpression->Void) -> Void - multiServ: SExpression -> Void - getDatabase: (String,String) -> String - - private == add - - getFile: (SExpression,String) -> Void - getCommand: (SExpression,String) -> Void - getDescription: String -> String - getInterp: (SExpression,String) -> Void - getLisp: (SExpression,String) -> Void - getShow: (SExpression,String) -> Void - lastStep: () -> String - lastType: () -> String - formatMessages: String -> String - makeErrorPage: String -> String - getSourceFile: (String,String,String) -> String - makeDBPage: String -> String - getContentType: String -> String - readTheFile: SExpression -> String - outputToSocket: (SExpression,String,String) -> Void - - getDatabase(constructor:String, key:String):String == - answer:=string GETDATABASE(INTERN$Lisp constructor,INTERN$Lisp key)$Lisp --- WriteLine$Lisp concat ["getDatabase: ",constructor," ",key," ",answer] - answer - -@ -The axServer function handles the socket connection on the given port. -When it gets a input on the socket it calls the server -function on the socket input. -<>= - axServer(port:Integer,serverfunc:SExpression->Void):Void == - WriteLine$Lisp "listening on port 8085" - s := SiSock(port,serverfunc)$Lisp - -- To listen for just one connection and then close the socket - -- uncomment i := 0. - i:Integer := 1 - while (i > 0) repeat - if not null?(SiListen(s)$Lisp)$SExpression then - w := SiAccept(s)$Lisp - serverfunc(w) --- i := 0 - -@ -The multiServ function parses the socket input. -It expects either a GET or POST request. - -A GET request fetches a new page, calling ``getFile''. -A POST request starts with -\begin{itemize} -\item ``command='' which expects axiom interpreter commands. - When this is recognized we call the ``getCommand'' function. -\item ``lispcall='' which expects lisp interpreter input - When this is recognized we call the ``getLisp'' function. -\end{itemize} -<>= - - multiServ(s:SExpression):Void == --- WriteLine("multiServ begin")$Lisp - headers:String := "" - char:String - -- read in the http headers - while (char := _ - STRING(READ_-CHAR_-NO_-HANG(s,NIL$Lisp,'EOF)$Lisp)$Lisp) ^= "EOF"_ - repeat - headers := concat [headers,char] --- sayTeX$Lisp headers - StringMatch("([^ ]*)", headers)$Lisp - u:UniversalSegment(Integer) - u := segment(MatchBeginning(1)$Lisp+1,_ - MatchEnd(1)$Lisp)$UniversalSegment(Integer) - reqtype:String := headers.u --- sayTeX$Lisp concat ["request type: ",reqtype] - if reqtype = "GET" then - StringMatch("GET ([^ ]*)",headers)$Lisp - u:UniversalSegment(Integer) - u := segment(MatchBeginning(1)$Lisp+1,_ - MatchEnd(1)$Lisp)$UniversalSegment(Integer) - getFile(s,headers.u) - if reqtype = "POST" and StringMatch("command=(.*)$",headers)$Lisp > 0 - then - u:UniversalSegment(Integer) - u := segment(MatchBeginning(1)$Lisp+1,_ - MatchEnd(1)$Lisp)$UniversalSegment(Integer) - getCommand(s,headers.u) - if reqtype = "POST" and StringMatch("interpcall=(.*)$",headers)$Lisp > 0 - then - u:UniversalSegment(Integer) - u := segment(MatchBeginning(1)$Lisp+1,_ - MatchEnd(1)$Lisp)$UniversalSegment(Integer) - getInterp(s,headers.u) - if reqtype = "POST" and StringMatch("lispcall=(.*)$",headers)$Lisp > 0 - then - u:UniversalSegment(Integer) - u := segment(MatchBeginning(1)$Lisp+1,_ - MatchEnd(1)$Lisp)$UniversalSegment(Integer) - getLisp(s,headers.u) - if reqtype = "POST" and StringMatch("showcall=(.*)$",headers)$Lisp > 0 - then - u:UniversalSegment(Integer) - u := segment(MatchBeginning(1)$Lisp+1,_ - MatchEnd(1)$Lisp)$UniversalSegment(Integer) - getShow(s,headers.u) --- WriteLine("multiServ end")$Lisp --- WriteLine("")$Lisp - -@ -\subsection{getFile} -Given a socket and the URL of the file we create an input stream -that contains the file. If the filename contains a question mark -then we need to parse the parameters and dynamically construct the -file contents. -<>= - getFile(s:SExpression,pathvar:String):Void == --- WriteLine("")$Lisp - WriteLine$Lisp concat ["getFile: ",pathvar] - params:=split(pathvar,char "?") - if #params = 1 - then if not null? PATHNAME_-NAME(PATHNAME(pathvar)$Lisp)$Lisp - then - contentType:String := getContentType(pathvar) - q:=Open(pathvar)$Lisp - if null? q - then - q := MAKE_-STRING_-INPUT_-STREAM(_ - makeErrorPage("File doesn't exist"))$Lisp - else - q:=MAKE_-STRING_-INPUT_-STREAM(_ - makeErrorPage("Problem with file path"))$Lisp - else - q:=MAKE_-STRING_-INPUT_-STREAM(makeDBPage(pathvar))$Lisp - outputToSocket(s,readTheFile(q),contentType) - -@ -\subsection{makeErrorPage} -<>= - makeErrorPage(msg:String):String == - page:String:="" - page:=page "" - page:=page "Error" msg "" --- WriteLine(page)$Lisp - page -@ -\subsection{getDescription} -We need to fish around in the data structure to return the piece of -documentation for the domain. We have to call the lisp version of -GETDATABASE because the version above returns a string object. The -string object is missing quotes and cannot be properly read. So we -need to get the lisp object and work with it in native form first. - -The doc string also contains spad markup which we need to replace with html. -<>= - getDescription(dom:String):String == - d:=CADR(CADAR(GETDATABASE(INTERN(dom)$Lisp,'DOCUMENTATION)$Lisp)$Lisp)$Lisp - string d -@ -\subsection{getSourceFile} -During build we construct a hash table that takes the chunk name as -the key and returns the filename. We reconstruct the chunk name here -and do a lookup for the source file. -<>= - getSourceFile(constructorkind:String,_ - abbreviation:String,_ - dom:String):String == - sourcekey:="@<<" constructorkind " " abbreviation " " dom ">>" --- WriteLine(sourcekey)$Lisp - sourcefile:=lowerCase last split(getDatabase(dom,"SOURCEFILE"),char "/") - sourcefile:=sourcefile ".pamphlet" - -@ -\subsection{makeDBPage} -<>= - makeDBPage(pathvar:String):String == - params:List(String):=split(pathvar,char "?") - for i in 1..#params repeat WriteLine$Lisp concat ["params: ",params.i] - pathparts:List(String):=split(params.1,char "/") - for i in 1..#pathparts repeat - WriteLine$Lisp concat ["pathparts: ",pathparts.i] - pagename:=last pathparts - WriteLine$Lisp concat ["pagename: ",pagename] - cmd:=first split(pagename,char ".") - WriteLine$Lisp concat ["cmd: ",cmd] - args:List(String):=split(params.2, char "&") - for i in 1..#args repeat WriteLine$Lisp concat ["args: ",args.i] - page:String:="" - page:=page "" - page:=page "" - page:=page "" - page:=page "" cmd " " args.1 "" - page:=page "" - page:=page "" - cmd = "db" => - dom:=args.1 - domi:=INTERN(dom)$Lisp - -- category, domain, or package? - constructorkind:=getDatabase(dom,"CONSTRUCTORKIND") - abbreviation:=getDatabase(dom, "ABBREVIATION") - sourcefile:=getDatabase(dom, "SOURCEFILE") - constructorkind.1:=upperCase constructorkind.1 - description:=getDescription(dom) - page:=page "
" - page:=page "

" - page:=page "
" constructorkind " " dom "

" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "
Description: " description "
Abbreviation: " abbreviation "
Source File: " sourcefile "

" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "
" - page:=page "Ancestors" - page:=page "" - page:=page "Dependents" - page:=page "" - page:=page "Exports" - page:=page "" - page:=page "Parents" - page:=page "" - page:=page "Users" - page:=page "
" - page:=page "Attributes" - page:=page "" - page:=page "Examples" - page:=page "" - page:=page "Operations" - page:=page "" - page:=page "Search Path" - page:=page "" - page:=page "Uses" - page:=page "
" - cmd = "op" => - dom:=args.1 - domi:=INTERN(dom)$Lisp - -- category, domain, or package? - constructorkind:=getDatabase(dom,"CONSTRUCTORKIND") - abbreviation:=getDatabase(dom, "ABBREVIATION") - sourcefile:=getDatabase(dom, "SOURCEFILE") - constructorkind.1:=upperCase constructorkind.1 - description:=getDescription(dom) - page:=page "
" - page:=page "

" - page:=page "
" constructorkind " " dom "

" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "
Description: " description "
Abbreviation: " abbreviation "
Source File: " sourcefile "

" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "" - page:=page "
" - page:=page "Ancestors" - page:=page "" - page:=page "Dependents" - page:=page "" - page:=page "Exports" - page:=page "" - page:=page "Parents" - page:=page "" - page:=page "Users" - page:=page "
" - page:=page "Attributes" - page:=page "" - page:=page "Examples" - page:=page "" - page:=page "Operations" - page:=page "" - page:=page "Search Path" - page:=page "" - page:=page "Uses" - page:=page "
" --- WriteLine(page)$Lisp - page:=page "" - page -@ -\subsection{readTheFile} -We have q which is a stream which contains the file. We read the file -into a string-stream to get it all into one string. We return the string. -<>= - readTheFile(q:SExpression):String == --- WriteLine("begin reading file")$Lisp - r := MAKE_-STRING_-OUTPUT_-STREAM()$Lisp - SiCopyStream(q,r)$Lisp - filestream:String := GET_-OUTPUT_-STREAM_-STRING(r)$Lisp - CLOSE(r)$Lisp - CLOSE(q)$Lisp --- WriteLine("end reading file")$Lisp - filestream - -@ -\subsection{outputToSocket} -We have ``s'' which is the socket, ``filestream'' which is the text of -the file to output, and ``contentType'' which is the HTML Content-Type. -We construct the HTML header information according to the standard and -prepend it to the file. The resulting string is output to the socket. -<>= - outputToSocket(s:SExpression,filestream:String,contentType:String):Void == - filelength:String := string(#filestream) - file:String := "" - nl:String:=STRING(NewLine$Lisp)$Lisp - file := concat ["Content-Length: ",filelength,nl,nl,file] - file := concat ["Connection: close",nl,file] - file := concat ["Content-Type: ",contentType,nl,file] - file := concat ["HTTP/1.1 200 OK",nl,file] - file := concat [file,filestream] --- WriteLine(file)$Lisp - f:=MAKE_-STRING_-INPUT_-STREAM(file)$Lisp - SiCopyStream(f,s)$Lisp - CLOSE(f)$Lisp - CLOSE(s)$Lisp - -@ -\subsection{getCommand} -The getCommand function is invoked when the HTTP request is a POST -and contains the string "command". Essentially the game here is -to rebind the various output streams used by Axiom so we can -capture the normal output. This function returns a set of HTML 5 div -blocks: -\begin{enumerate} -\item stepnum, the value of lastStep() -\item command, the value of the command variable -\item algebra, the value of the algebra variable -\item mathml, the value of the mathml variable -\item type, the value of lastType() -\end{enumerate} -The HTML functions in the hyperdoc browser depend on the order -of these variables so do not change this without changing the -corresponding functions in the browser HTML. -<>= - getCommand(s:SExpression,command:String):Void == - WriteLine$Lisp concat ["getCommand: ",command] - SETQ(tmpmathml$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp - SETQ(tmpalgebra$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp - SETQ(savemathml$Lisp, _$texOutputStream$Lisp)$Lisp - SETQ(savealgebra$Lisp, _$algebraOutputStream$Lisp)$Lisp - SETQ(_$texOutputStream$Lisp,tmpmathml$Lisp)$Lisp - SETQ(_$algebraOutputStream$Lisp,tmpalgebra$Lisp)$Lisp - ans := string parseAndEvalToStringEqNum$Lisp command - SETQ(resultmathml$Lisp,_ - GET_-OUTPUT_-STREAM_-STRING(_$texOutputStream$Lisp)$Lisp)$Lisp - SETQ(resultalgebra$Lisp,_ - GET_-OUTPUT_-STREAM_-STRING(_$algebraOutputStream$Lisp)$Lisp)$Lisp - SETQ(_$texOutputStream$Lisp,savemathml$Lisp)$Lisp - SETQ(_$algebraOutputStream$Lisp,savealgebra$Lisp)$Lisp - CLOSE(tmpmathml$Lisp)$Lisp - CLOSE(tmpalgebra$Lisp)$Lisp - -- Since strings returned from axiom are going to be displayed in html I - -- should really check for the characters &,<,> and replace them with - -- &,<,>. - -- At present I only check for ampersands in formatMessages. - mathml:String := string(resultmathml$Lisp) - algebra:String := string(resultalgebra$Lisp) - algebra := formatMessages(algebra) - -- At this point mathml contains the mathml for the output but does not - -- include step number or type information. - -- We should also save the command. - -- I get the type and step number from the $internalHistoryTable - axans:String := _ - concat ["
", lastStep(), "
_ -
", command, "
_ -
",algebra,"
_ -
",mathml,"
_ -
",lastType(),"
"] --- WriteLine$Lisp concat ["mathml answer: ",mathml] --- WriteLine$Lisp concat ["algebra answer: ",algebra] - q:=MAKE_-STRING_-INPUT_-STREAM(axans)$Lisp - SiCopyStream(q,s)$Lisp - CLOSE(q)$Lisp - CLOSE(s)$Lisp - -@ - -\subsection{getInterp} -The getInterp function is invoked when the HTTP request is a POST -and contains the string "command". Essentially the game here is -to rebind the various output streams used by Axiom so we can -capture the normal output. This function returns a set of HTML 5 div -blocks: -\begin{enumerate} -\item stepnum, the value of lastStep() -\item command, the value of the command variable -\item algebra, the value of the algebra variable -\item mathml, the value of the mathml variable -\item type, the value of lastType() -\end{enumerate} -The HTML functions in the hyperdoc browser depend on the order -of these variables so do not change this without changing the -corresponding functions in the browser HTML. -<>= - getInterp(s:SExpression,command:String):Void == - WriteLine$Lisp concat ["getInterp: ",command] - SETQ(tmpmathml$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp - SETQ(tmpalgebra$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp - SETQ(savemathml$Lisp, _$texOutputStream$Lisp)$Lisp - SETQ(savealgebra$Lisp, _$algebraOutputStream$Lisp)$Lisp - SETQ(_$texOutputStream$Lisp,tmpmathml$Lisp)$Lisp - SETQ(_$algebraOutputStream$Lisp,tmpalgebra$Lisp)$Lisp - ans := string parseAndEvalToStringEqNum$Lisp command - SETQ(resultmathml$Lisp,_ - GET_-OUTPUT_-STREAM_-STRING(_$texOutputStream$Lisp)$Lisp)$Lisp - SETQ(resultalgebra$Lisp,_ - GET_-OUTPUT_-STREAM_-STRING(_$algebraOutputStream$Lisp)$Lisp)$Lisp - SETQ(_$texOutputStream$Lisp,savemathml$Lisp)$Lisp - SETQ(_$algebraOutputStream$Lisp,savealgebra$Lisp)$Lisp - CLOSE(tmpmathml$Lisp)$Lisp - CLOSE(tmpalgebra$Lisp)$Lisp - -- Since strings returned from axiom are going to be displayed in html I - -- should really check for the characters &,<,> and replace them with - -- &,<,>. - -- At present I only check for ampersands in formatMessages. - mathml:String := string(resultmathml$Lisp) - algebra:String := string(resultalgebra$Lisp) - algebra := formatMessages(algebra) - -- At this point mathml contains the mathml for the output but does not - -- include step number or type information. - -- We should also save the command. - -- I get the type and step number from the $internalHistoryTable - axans:String := _ - concat ["
", lastStep(), "
_ -
", command, "
_ -
",algebra,"
_ -
",mathml,"
_ -
",lastType(),"
"] --- WriteLine$Lisp concat ["mathml answer: ",mathml] --- WriteLine$Lisp concat ["algebra answer: ",algebra] - q:=MAKE_-STRING_-INPUT_-STREAM(axans)$Lisp - SiCopyStream(q,s)$Lisp - CLOSE(q)$Lisp - CLOSE(s)$Lisp - -@ - -\subsection{getLisp} -The getLisp function is invoked when the HTTP request is a POST -and contains the string "lispcall". -<>= - getLisp(s:SExpression,command:String):Void == - WriteLine$Lisp concat ["getLisp: ",command] - evalresult:=EVAL(READ_-FROM_-STRING(command)$Lisp)$Lisp - mathml:String:=string(evalresult) --- WriteLine$Lisp concat ["getLisp: after ",mathml] --- WriteLine$Lisp concat ["getLisp output: ",mathml] - SETQ(tmpalgebra$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp - SETQ(savemathml$Lisp, _$texOutputStream$Lisp)$Lisp - SETQ(savealgebra$Lisp, _$algebraOutputStream$Lisp)$Lisp - SETQ(_$texOutputStream$Lisp,tmpmathml$Lisp)$Lisp - SETQ(_$algebraOutputStream$Lisp,tmpalgebra$Lisp)$Lisp - SETQ(resultalgebra$Lisp,_ - GET_-OUTPUT_-STREAM_-STRING(_$algebraOutputStream$Lisp)$Lisp)$Lisp - SETQ(_$texOutputStream$Lisp,savemathml$Lisp)$Lisp - SETQ(_$algebraOutputStream$Lisp,savealgebra$Lisp)$Lisp - CLOSE(tmpalgebra$Lisp)$Lisp - -- Since strings returned from axiom are going to be displayed in html I - -- should really check for the characters &,<,> and replace them with - -- &,<,>. - -- At present I only check for ampersands in formatMessages. - algebra:String := string(resultalgebra$Lisp) - algebra := formatMessages(algebra) - -- At this point mathml contains the mathml for the output but does not - -- include step number or type information. - -- We should also save the command. - -- I get the type and step number from the $internalHistoryTable - axans:String := _ - concat ["
", lastStep(), "
_ -
", command, "
_ -
",algebra,"
_ -
",mathml,"
_ -
",lastType(),"
"] --- WriteLine$Lisp concat ["mathml answer: ",mathml] --- WriteLine$Lisp concat ["algebra answer: ",algebra] - q:=MAKE_-STRING_-INPUT_-STREAM(axans)$Lisp - SiCopyStream(q,s)$Lisp - CLOSE(q)$Lisp - CLOSE(s)$Lisp - -@ -\subsection{getShow} -The getShow function is invoked when the HTTP request is a POST -and contains the string "showcall". The )show command generates -output to lisp's *standard-output* so we wrap that stream to capture it. -The resulting string needs to be transformed into html-friendly form. -This is done in the call to replace-entitites (see http.lisp) -<>= - getShow(s:SExpression,showarg:String):Void == - WriteLine$Lisp concat ["getShow: ",showarg] - realarg:=SUBSEQ(showarg,6)$Lisp - show:=_ - "(progn (setq |$options| '((|operations|))) (|show| '|" realarg "|))" --- WriteLine$Lisp concat ["getShow: ",show] - SETQ(SAVESTREAM$Lisp,_*STANDARD_-OUTPUT_*$Lisp)$Lisp - SETQ(_*STANDARD_-OUTPUT_*$Lisp,_ - MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp - evalresult:=EVAL(READ_-FROM_-STRING(show)$Lisp)$Lisp - SETQ(evalresult,_ - GET_-OUTPUT_-STREAM_-STRING(_*STANDARD_-OUTPUT_*$Lisp)$Lisp)$Lisp - SETQ(_*STANDARD_-OUTPUT_*$Lisp,SAVESTREAM$Lisp)$Lisp - mathml:String:=string(REPLACE_-ENTITIES(evalresult)$Lisp) - SETQ(tmpalgebra$Lisp, MAKE_-STRING_-OUTPUT_-STREAM()$Lisp)$Lisp - SETQ(savemathml$Lisp, _$texOutputStream$Lisp)$Lisp - SETQ(savealgebra$Lisp, _$algebraOutputStream$Lisp)$Lisp - SETQ(_$texOutputStream$Lisp,tmpmathml$Lisp)$Lisp - SETQ(_$algebraOutputStream$Lisp,tmpalgebra$Lisp)$Lisp - SETQ(resultalgebra$Lisp,_ - GET_-OUTPUT_-STREAM_-STRING(_$algebraOutputStream$Lisp)$Lisp)$Lisp - SETQ(_$texOutputStream$Lisp,savemathml$Lisp)$Lisp - SETQ(_$algebraOutputStream$Lisp,savealgebra$Lisp)$Lisp - CLOSE(tmpalgebra$Lisp)$Lisp - -- Since strings returned from axiom are going to be displayed in html I - -- should really check for the characters &,<,> and replace them with - -- &,<,>. - -- At present I only check for ampersands in formatMessages. - algebra:String := string(resultalgebra$Lisp) - algebra := formatMessages(algebra) - -- At this point mathml contains the mathml for the output but does not - -- include step number or type information. - -- We should also save the command. - -- I get the type and step number from the $internalHistoryTable - axans:String := _ - concat ["
", lastStep(), "
_ -
", showarg, "
_ -
",algebra,"
_ -
",mathml,"
_ -
",lastType(),"
"] --- WriteLine$Lisp concat ["mathml answer: ",mathml] - q:=MAKE_-STRING_-INPUT_-STREAM(axans)$Lisp - SiCopyStream(q,s)$Lisp - CLOSE(q)$Lisp - CLOSE(s)$Lisp - -@ -\subsection{lastType} -To examine the \$internalHistoryTable use the following line -\begin{verbatim} - )lisp |$internalHistoryTable| -\end{verbatim} -We need to pick out first member of internalHistoryTable and then pick out -the element with \% as first element. Here is an example showing just -the first element of the list, which correponds to the last command. - -Note that the last command does not necessarily correspond to the last -element of the first element of \$internalHistoryTable as it is in this -example. -\begin{verbatim} - ( - (4 NIL - (x (value (BasicOperator) WRAPPED . #)) - (y (value (BasicOperator) WRAPPED . #)) - (% (value (Matrix (Polynomial (Integer))) WRAPPED . #)) - ) - ... - ) -\end{verbatim} - -We also need to check for input error in which case the \$internalHistoryTable -is not changed and the type retrieved would be that for the last correct -input. -<>= - lastType():String == - SETQ(first$Lisp,FIRST(_$internalHistoryTable$Lisp)$Lisp)$Lisp - count:Integer := 0 - hisLength:Integer := LIST_-LENGTH(_$internalHistoryTable$Lisp)$Lisp - length:Integer := LIST_-LENGTH(first$Lisp)$Lisp - -- This initializes stepSav. The test is a bit of a hack, maybe I'll - -- figure out the right way to do it later. - if string stepSav$Lisp = "#" then SETQ(stepSav$Lisp, 0$Lisp)$Lisp - -- If hisLength = 0 then the history table has been reset to NIL - -- and we're starting numbering over - if hisLength = 0 then SETQ(stepSav$Lisp, 0$Lisp)$Lisp - if hisLength > 0 and - car(car(_$internalHistoryTable$Lisp)$Lisp)$Lisp ^= stepSav$Lisp then - SETQ(stepSav$Lisp,car(car(_$internalHistoryTable$Lisp)$Lisp)$Lisp)$Lisp - while count < length repeat - position(char "%",string FIRST(first$Lisp)$Lisp) = 2 => - count := length+1 - count := count +1 - SETQ(first$Lisp,REST(first$Lisp)$Lisp)$Lisp - count = length + 1 => - string SECOND(SECOND(FIRST(first$Lisp)$Lisp)$Lisp)$Lisp - "" - - - lastStep():String == - string car(car(_$internalHistoryTable$Lisp)$Lisp)$Lisp - - formatMessages(str:String):String == --- WriteLine("formatMessages")$Lisp - -- I need to replace any ampersands with & and may also need to - -- replace < and > with < and > - strlist:List String --- WriteLine(str)$Lisp - strlist := split(str,char "&") - str := "" - -- oops, if & is the last character in the string this method - -- will eliminate it. Need to redo this. - for s in strlist repeat - str := concat [str,s,"&"] - strlen:Integer := #str - str := str.(1..(#str - 5)) --- WriteLine(str)$Lisp - -- Here I split the string into lines and put each line in a "div". - strlist := split(str, char string NewlineChar$Lisp) - str := "" --- WriteLine("formatMessages1")$Lisp --- WriteLine(concat strlist)$Lisp - for s in strlist repeat --- WriteLine(s)$Lisp - str := concat [str,"
",s,"
"] - str - - getContentType(pathvar:String):String == --- WriteLine("getContentType begin")$Lisp - -- set default content type - contentType:String := "text/plain" - -- need to test for successful match? - StringMatch(".*\.(.*)$", pathvar)$Lisp - u:UniversalSegment(Integer) - u := segment(MatchBeginning(1)$Lisp+1,_ - MatchEnd(1)$Lisp)$UniversalSegment(Integer) - extension:String := pathvar.u --- WriteLine$Lisp concat ["file extension: ",extension] - -- test for extensions: html, htm, xml, xhtml, js, css - if extension = "html" then - contentType:String := "text/html" - else if extension = "htm" then - contentType:String := "text/html" - else if extension = "xml" then - contentType:String := "text/xml" - else if extension = "xhtml" then - contentType:String := "application/xhtml+xml" - else if extension = "js" then - contentType:String := "text/javascript" - else if extension = "css" then - contentType:String := "text/css" - else if extension = "png" then - contentType:String := "image/png" - else if extension = "jpg" then - contentType:String := "image/jpeg" - else if extension = "jpeg" then - contentType:String := "image/jpeg" --- WriteLine$Lisp concat ["Content-Type: ",contentType] --- WriteLine("getContentType end")$Lisp - contentType - -@ - -\section{License} -<>= ---Copyright (c) 2007 Arthur C. Ralfs ---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 Arthur C. Ralfs 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/bezout.spad.pamphlet b/src/algebra/bezout.spad.pamphlet deleted file mode 100644 index 18afeab..0000000 --- a/src/algebra/bezout.spad.pamphlet +++ /dev/null @@ -1,211 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra bezout.spad} -\author{Clifton J. Williamson} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package BEZOUT BezoutMatrix} -<>= -"BEZOUT" -> "PACKAGE" -"BezoutMatrix(a:Ring,b:UPOLYC(a),c:MATCAT(a,d,e),d:FLAGG(a),e:FLAGG(a))" - -> "Package" -@ -<>= -)abbrev package BEZOUT BezoutMatrix -++ Author: Clifton J. Williamson -++ Date Created: 2 August 1988 -++ Date Last Updated: 3 November 1993 -++ Basic Operations: bezoutMatrix, bezoutResultant, bezoutDiscriminant -++ Related Domains -++ Also See: -++ AMS Classifiactions: -++ Keywords: Bezout matrix, resultant, discriminant -++ Examples: -++ Reference: Knuth, The Art of Computer Programming, 2nd edition, -++ Vol. 2, p. 619, problem 12. -++ Description: -++ \spadtype{BezoutMatrix} contains functions for computing resultants and -++ discriminants using Bezout matrices. - -BezoutMatrix(R,UP,M,Row,Col): Exports == Implementation where - R : Ring - UP : UnivariatePolynomialCategory R - Row : FiniteLinearAggregate R - Col : FiniteLinearAggregate R - M : MatrixCategory(R,Row,Col) - I ==> Integer - lc ==> leadingCoefficient - - Exports ==> with - sylvesterMatrix: (UP,UP) -> M - ++ sylvesterMatrix(p,q) returns the Sylvester matrix for the two - ++ polynomials p and q. - bezoutMatrix: (UP,UP) -> M - ++ bezoutMatrix(p,q) returns the Bezout matrix for the two - ++ polynomials p and q. - - if R has commutative("*") then - bezoutResultant: (UP,UP) -> R - ++ bezoutResultant(p,q) computes the resultant of the two - ++ polynomials p and q by computing the determinant of a Bezout matrix. - - bezoutDiscriminant: UP -> R - ++ bezoutDiscriminant(p) computes the discriminant of a polynomial p - ++ by computing the determinant of a Bezout matrix. - - Implementation ==> add - - sylvesterMatrix(p,q) == - n1 := degree p; n2 := degree q; n := n1 + n2 - sylmat : M := new(n,n,0) - minR := minRowIndex sylmat; minC := minColIndex sylmat - maxR := maxRowIndex sylmat; maxC := maxColIndex sylmat - p0 := p - -- fill in coefficients of 'p' - while not zero? p0 repeat - coef := lc p0; deg := degree p0; p0 := reductum p0 - -- put bk = coef(p,k) in sylmat(minR + i,minC + i + (n1 - k)) - for i in 0..n2 - 1 repeat - qsetelt_!(sylmat,minR + i,minC + n1 - deg + i,coef) - q0 := q - -- fill in coefficients of 'q' - while not zero? q0 repeat - coef := lc q0; deg := degree q0; q0 := reductum q0 - for i in 0..n1-1 repeat - qsetelt_!(sylmat,minR + n2 + i,minC + n2 - deg + i,coef) - sylmat - - bezoutMatrix(p,q) == - -- This function computes the Bezout matrix for 'p' and 'q'. - -- See Knuth, The Art of Computer Programming, Vol. 2, p. 619, # 12. - -- One must have deg(p) >= deg(q), so the arguments are reversed - -- if this is not the case. - n1 := degree p; n2 := degree q; n := n1 + n2 - n1 < n2 => bezoutMatrix(q,p) - m1 : I := n1 - 1; m2 : I := n2 - 1; m : I := n - 1 - -- 'sylmat' will be a matrix consisting of the first n1 columns - -- of the standard Sylvester matrix for 'p' and 'q' - sylmat : M := new(n,n1,0) - minR := minRowIndex sylmat; minC := minColIndex sylmat - maxR := maxRowIndex sylmat; maxC := maxColIndex sylmat - p0 := p - -- fill in coefficients of 'p' - while not ground? p0 repeat - coef := lc p0; deg := degree p0; p0 := reductum p0 - -- put bk = coef(p,k) in sylmat(minR + i,minC + i + (n1 - k)) - -- for i = 0... - -- quit when i > m2 or when i + (n1 - k) > m1, whichever happens first - for i in 0..min(m2,deg - 1) repeat - qsetelt_!(sylmat,minR + i,minC + n1 - deg + i,coef) - q0 := q - -- fill in coefficients of 'q' - while not zero? q0 repeat - coef := lc q0; deg := degree q0; q0 := reductum q0 - -- put ak = coef(q,k) in sylmat(minR + n1 + i,minC + i + (n2 - k)) - -- for i = 0... - -- quit when i > m1 or when i + (n2 - k) > m1, whichever happens first - -- since n2 - k >= 0, we quit when i + (n2 - k) > m1 - for i in 0..(deg + n1 - n2 - 1) repeat - qsetelt_!(sylmat,minR + n2 + i,minC + n2 - deg + i,coef) - -- 'bezmat' will be the 'Bezout matrix' as described in Knuth - bezmat : M := new(n1,n1,0) - for i in 0..m2 repeat - -- replace A_i by (b_0 A_i + ... + b_{n_2-1-i} A_{n_2 - 1}) - - -- (a_0 B_i + ... + a_{n_2-1-i} B_{n_2-1}), as in Knuth - bound : I := n2 - i; q0 := q - while not zero? q0 repeat - deg := degree q0 - if (deg < bound) then - -- add b_deg A_{n_2 - deg} to the new A_i - coef := lc q0 - for k in minC..maxC repeat - c := coef * qelt(sylmat,minR + m2 - i - deg,k) + - qelt(bezmat,minR + m2 - i,k) - qsetelt_!(bezmat,minR + m2 - i,k,c) - q0 := reductum q0 - p0 := p - while not zero? p0 repeat - deg := degree p0 - if deg < bound then - coef := lc p0 - -- subtract a_deg B_{n_2 - deg} from the new A_i - for k in minC..maxC repeat - c := -coef * qelt(sylmat,minR + m - i - deg,k) + - qelt(bezmat,minR + m2 - i,k) - qsetelt_!(bezmat,minR + m2 - i,k,c) - p0 := reductum p0 - for i in n2..m1 repeat for k in minC..maxC repeat - qsetelt_!(bezmat,minR + i,k,qelt(sylmat,minR + i,k)) - bezmat - - if R has commutative("*") then - - bezoutResultant(f,g) == determinant bezoutMatrix(f,g) - - if R has IntegralDomain then - - bezoutDiscriminant f == - degMod4 := (degree f) rem 4 - (degMod4 = 0) or (degMod4 = 1) => - (bezoutResultant(f,differentiate f) exquo (lc f)) :: R - -((bezoutResultant(f,differentiate f) exquo (lc f)) :: R) - - else - - bezoutDiscriminant f == - lc f = 1 => - degMod4 := (degree f) rem 4 - (degMod4 = 0) or (degMod4 = 1) => - bezoutResultant(f,differentiate f) - -bezoutResultant(f,differentiate f) - error "bezoutDiscriminant: leading coefficient must be 1" - -@ -\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/brill.spad.pamphlet b/src/algebra/brill.spad.pamphlet deleted file mode 100644 index 8221267..0000000 --- a/src/algebra/brill.spad.pamphlet +++ /dev/null @@ -1,165 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/algebra brill.spad} -\author{Frederic Lehobey, James H. Davenport} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{package BRILL BrillhartTests} -<>= -"BRILL" -> "PACKAGE" -"BrillhartTests(a:UPOLYC(INT))" -> "Package" -@ -<>= -)abbrev package BRILL BrillhartTests -++ Author: Frederic Lehobey, James H. Davenport -++ Date Created: 28 June 1994 -++ Date Last Updated: 11 July 1997 -++ Basic Operations: brillhartIrreducible? -++ Related Domains: -++ Also See: -++ AMS Classifications: -++ Keywords: factorization -++ Examples: -++ References: -++ [1] John Brillhart, Note on Irreducibility Testing, -++ Mathematics of Computation, vol. 35, num. 35, Oct. 1980, 1379-1381 -++ [2] James Davenport, On Brillhart Irreducibility. To appear. -++ [3] John Brillhart, On the Euler and Bernoulli polynomials, -++ J. Reine Angew. Math., v. 234, (1969), pp. 45-64 - -BrillhartTests(UP): Exports == Implementation where - N ==> NonNegativeInteger - Z ==> Integer - UP: UnivariatePolynomialCategory Z - - Exports ==> with - brillhartIrreducible?: UP -> Boolean -- See [1] - ++ brillhartIrreducible?(p) returns \spad{true} if p can be shown to be - ++ irreducible by a remark of Brillhart, \spad{false} is inconclusive. - brillhartIrreducible?: (UP,Boolean) -> Boolean -- See [1] - ++ brillhartIrreducible?(p,noLinears) returns \spad{true} if p can be - ++ shown to be irreducible by a remark of Brillhart, \spad{false} else. - ++ If noLinears is \spad{true}, we are being told p has no linear factors - ++ \spad{false} does not mean that p is reducible. - brillhartTrials: () -> N - ++ brillhartTrials() returns the number of tests in - ++ \spadfun{brillhartIrreducible?}. - brillhartTrials: N -> N - ++ brillhartTrials(n) sets to n the number of tests in - ++ \spadfun{brillhartIrreducible?} and returns the previous value. - noLinearFactor?: UP -> Boolean -- See [3] p. 47 - ++ noLinearFactor?(p) returns \spad{true} if p can be shown to have no - ++ linear factor by a theorem of Lehmer, \spad{false} else. I insist on - ++ the fact that \spad{false} does not mean that p has a linear factor. - - Implementation ==> add - - import GaloisGroupFactorizationUtilities(Z,UP,Float) - - squaredPolynomial(p:UP):Boolean == - d := degree p - d = 0 => true - odd? d => false - squaredPolynomial reductum p - - primeEnough?(n:Z,b:Z):Boolean == - -- checks if n is prime, with the possible exception of - -- factors whose product is at most b - import Float - bb: Float := b::Float - for i in 2..b repeat - while (d:= n exquo i) case Integer repeat - n:=d::Integer - bb:=bb / i::Float - bb < 1$Float => return false - --- we over-divided, so it can't be prime - prime? n - - brillharttrials: N := 6 - brillhartTrials():N == brillharttrials - - brillhartTrials(n:N):N == - (brillharttrials,n) := (n,brillharttrials) - n - - brillhartIrreducible?(p:UP):Boolean == - brillhartIrreducible?(p,noLinearFactor? p) - - brillhartIrreducible?(p:UP,noLinears:Boolean):Boolean == -- See [1] - zero? brillharttrials => false - origBound := (largeEnough := rootBound(p)+1) - -- see remarks 2 and 4 - even0 := even? coefficient(p,0) - even1 := even? p(1) - polyx2 := squaredPolynomial(p) - prime? p(largeEnough) => true - not polyx2 and prime? p(-largeEnough) => true --- one? brillharttrials => false - (brillharttrials = 1) => false - largeEnough := largeEnough+1 - primeEnough?(p(largeEnough),if noLinears then 4 else 2) => true - not polyx2 and - primeEnough?(p(-largeEnough),if noLinears then 4 else 2) => true - if odd? largeEnough then - if even0 then largeEnough := largeEnough+1 - else - if even1 then largeEnough := largeEnough+1 - count :=(if polyx2 then 2 else 1)*(brillharttrials-2)+largeEnough - for i in (largeEnough+1)..count repeat - small := if noLinears then (i-origBound)**2 else (i-origBound) - primeEnough?(p(i),small) => return true - not polyx2 and primeEnough?(p(-i),small) => return true - false - - noLinearFactor?(p:UP):Boolean == - (odd? leadingCoefficient p) and (odd? coefficient(p,0)) and (odd? p(1)) - -@ -\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/axiom-website/patches.html b/src/axiom-website/patches.html index faf325e..bfded76 100644 --- a/src/axiom-website/patches.html +++ b/src/axiom-website/patches.html @@ -903,5 +903,7 @@ In process, not yet released


20090124.01.tpd.patch download.html update binary download page
+20090125.01.tpd.patch +bookvol10.4 add packages