Annotation of OpenXM/doc/Papers/dag-noro-proc.tex, Revision 1.1
1.1 ! noro 1: % $OpenXM$
! 2: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 3: % This is a sample input file for your contribution to a multi-
! 4: % author book to be published by Springer Verlag.
! 5: %
! 6: % Please use it as a template for your own input, and please
! 7: % follow the instructions for the formal editing of your
! 8: % manuscript as described in the file "1readme".
! 9: %
! 10: % Please send the Tex and figure files of your manuscript
! 11: % together with any additional style files as well as the
! 12: % PS file to the editor of your book.
! 13: %
! 14: % He or she will collect all contributions for the planned
! 15: % book, possibly compile them all in one go and pass the
! 16: % complete set of manuscripts on to Springer.
! 17: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 18:
! 19:
! 20:
! 21: %RECOMMENDED%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 22:
! 23: \documentclass[runningheads]{cl2emult}
! 24:
! 25: \usepackage{makeidx} % allows index generation
! 26: \usepackage{graphicx} % standard LaTeX graphics tool
! 27: % for including eps-figure files
! 28: \usepackage{subeqnar} % subnumbers individual equations
! 29: % within an array
! 30: \usepackage{multicol} % used for the two-column index
! 31: \usepackage{cropmark} % cropmarks for pages without
! 32: % pagenumbers
! 33: \usepackage{math} % placeholder for figures
! 34: \makeindex % used for the subject index
! 35: % please use the style sprmidx.sty with
! 36: % your makeindex program
! 37:
! 38: %upright Greek letters (example below: upright "mu")
! 39: \newcommand{\euler}[1]{{\usefont{U}{eur}{m}{n}#1}}
! 40: \newcommand{\eulerbold}[1]{{\usefont{U}{eur}{b}{n}#1}}
! 41: \newcommand{\umu}{\mbox{\euler{\char22}}}
! 42: \newcommand{\umub}{\mbox{\eulerbold{\char22}}}
! 43:
! 44: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 45:
! 46:
! 47: %OPTIONAL%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 48: %
! 49: %\usepackage{amstex} % useful for coding complex math
! 50: %\mathindent\parindent % needed in case "Amstex" is used
! 51: %
! 52: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 53:
! 54: %AUTHOR_STYLES_AND_DEFINITIONS%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 55: %
! 56: %Please reduce your own definitions and macros to an absolute
! 57: %minimum since otherwise the editor will find it rather
! 58: %strenuous to compile all individual contributions to a
! 59: %single book file
! 60: \usepackage{epsfig}
! 61: \def\cont{{\rm cont}}
! 62: \def\GCD{{\rm GCD}}
! 63: %
! 64: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 65:
! 66: \begin{document}
! 67: %
! 68: \title*{A Computer Algebra System Risa/Asir and OpenXM}
! 69: %
! 70: %
! 71: \toctitle{A Computer Algebra System Risa/Asir and OpenXM}
! 72: % allows explicit linebreak for the table of content
! 73: %
! 74: %
! 75: \titlerunning{Risa/Asir and OpenXM}
! 76: % allows abbreviation of title, if the full title is too long
! 77: % to fit in the running head
! 78: %
! 79: \author{Masayuki Noro\inst{1}}
! 80: %
! 81: %\authorrunning{Masayuki Noro}
! 82: % if there are more than two authors,
! 83: % please abbreviate author list for running head
! 84: %
! 85: %
! 86: \institute{Kobe University, Rokko, Kobe 657-8501, Japan}
! 87:
! 88: \maketitle % typesets the title of the contribution
! 89:
! 90: \begin{abstract}
! 91: OpenXM \cite{OPENXM} is an infrastructure for exchanging mathematical
! 92: data. It defines a client-server architecture for parallel and
! 93: distributed computation. Risa/Asir is software for polynomial
! 94: computation. It has been developed for testing new algorithms, and now
! 95: it acts as both a client and a server in the OpenXM package. In this
! 96: article we present an overview of Risa/Asir and its performances on
! 97: several functions. We also show Risa/Asir's OpenXM interfaces and
! 98: examples of usages of them.
! 99: \end{abstract}
! 100:
! 101: \section{A computer algebra system Risa/Asir}
! 102:
! 103: \subsection{What is Risa/Asir?}
! 104:
! 105: Risa/Asir \cite{RISA} is software mainly for polynomial
! 106: computation. Its major functions are polynomial factorization and
! 107: Groebner basis computation, whose core parts are implemented as
! 108: builtin functions. Some higher algorithms such as primary ideal
! 109: decomposition or Galois group computation are built on them by the
! 110: user language. The user language is called Asir language. Asir
! 111: language can be regarded as C language without type declaration of
! 112: variables, with list processing, and with automatic garbage
! 113: collection. A builtin {\tt gdb}-like user language debugger is
! 114: available. It is open source and the source code and binaries are
! 115: available via ftp or CVS.
! 116: Risa/Asir is not only an standalone computer algebra system but also a
! 117: main component in OpenXM package \cite{OPENXM}, which is a collection
! 118: of software comliant to OpenXM protocol specification. OpenXM is an
! 119: infrastructure for exchanging mathematical data and Risa/Asir has
! 120: three kind of OpenXM intefaces : an inteface as a server, as a cllient
! 121: and as a subroutine library. We will explain them in the later
! 122: section.
! 123:
! 124: Our goals of developing Risa/Asir are as follows:
! 125:
! 126: \begin{enumerate}
! 127: \item Providing a test bed of new algorithms
! 128:
! 129: Risa/Asir has been a platform for testing experimental algorithms in
! 130: polynomial factorization, computation related to Groebner basis,
! 131: cryptography and quantifier elimination. As to Groebner basis, we have
! 132: been mainly interested in problems over {\bf Q} and we tried applying
! 133: various modular techniques to overcome difficulties caused by huge
! 134: intermediate coefficients. We have had several results and they have
! 135: been implemented in Risa/Asir.
! 136:
! 137: \item Gereral purpose open system
! 138:
! 139: We need a lot of functions to make Risa/Asir a general purpose
! 140: computer algebra system. In recent years we can obtain various high
! 141: performance applications or libraries as free software. We wrapped
! 142: such software as OpenXM servers and we started to release a collection
! 143: of such servers and cleints as OpenXM package in 1997. Risa/Asir is
! 144: now a main client in the package.
! 145:
! 146: \item Environment for parallel and distributed computation
! 147:
! 148: The origin of OpenXM is a protocol for doing parallel distributed
! 149: compuatations by connecting multiple Risa/Asir. OpenXM is also
! 150: designed to provide an enviroment efficient parallel distributed
! 151: computation. Currently only client-server communication is possible,
! 152: but we are preparing a specification OpenXM-RFC 102 allowing
! 153: client-client communication, which will enable us to execute
! 154: wider range of parallel algorithms efficiently.
! 155: \end{enumerate}
! 156:
! 157: \subsection{Groebner basis and the related computation}
! 158:
! 159: Currently Risa/Asir can only deal with polynomial ring. Operations on
! 160: modules over polynomial rings have not yet supported. However, both
! 161: commutative polynomial rings and Weyl algebra are supported and one
! 162: can compute Groebner basis in both rings over the rationals, fields of
! 163: rational functions and finite fields. In the early stage of our
! 164: development, our effort was mainly devoted to improve the efficiency
! 165: of computation over the rationals. Our main tool is modular
! 166: computation. For Buchberger algorithm we adopted the trace lifting
! 167: algorithm by Traverso \cite{TRAV} and elaborated it by applying our
! 168: theory on a correspondence between Groebner basis and its modular
! 169: image \cite{NOYO}. We also combine the trace lifting with
! 170: homogenization to stabilize selection strategies, which enables us to
! 171: compute several examples efficiently which is hard to compute without
! 172: such a combination. Our modular method can be applied to the change
! 173: of ordering algorithm and rational univariate representation. We also
! 174: made a test implementation of $F_4$ algorithm \cite{F4}. Later we will
! 175: show timing data on Groebner basis computation.
! 176:
! 177: \subsection{Polynomial factorization}
! 178:
! 179: Here we briefly review functions on polynomial factorization. For
! 180: univariate factorization over {\bf Q}, the classical
! 181: Berlekamp-Zassenhaus algorithm is implemented. Efficient algorithms
! 182: recently proposed have not yet implemented. For Univariate factorizer
! 183: over algebraic number fields, Trager's algorithm \cite{TRAGER} is
! 184: implemented with some modifications. Its major applications are
! 185: splitting field and Galois group computation of polynomials over the
! 186: rationals. For such purpose a tower of simple extensions are suitable
! 187: because factors represented over a simple extension often have huge
! 188: coefficients \cite{ANY}. For univariate factorization over finite
! 189: fields, equal degree factorization + Cantor-Zassenhaus algorithm is
! 190: implemented. We can use various representation of finite fields:
! 191: $GF(p)$ with a machine integer prime $p$, $GF(p)$, $GF(p^n)$ with any
! 192: odd prime $p$, $GF(2^n)$ with a bit representation of polynomials over
! 193: $GF(2)$ and $GF(p^n)$ with small $p^n$ represented by a primitive
! 194: root. For multivariate factorization over the rationals, the
! 195: classical EZ(Extented Zassenhaus) type algorithm is implemented.
! 196:
! 197: \subsection{Other functions}
! 198: By applying Groebner basis computation and polynomial factorization,
! 199: we have implemented several higher level algorithms. A typical
! 200: application is primary ideal decomposition of polynomial ideals over
! 201: {\bf Q}, which needs both functions. Shimoyama-Yokoyama algorithm
! 202: \cite{SY} for primary decompsition is written in the user language.
! 203: Splitting field and Galois group computation are closely related and
! 204: are also important applications of polynomial factorization. Our
! 205: implementation of Galois group computation algorithm \cite{ANY}
! 206: requires splitting field computation, which is written in the
! 207: user language.
! 208:
! 209: \section{Techniques for efficient Groebner basis computation over {\bf Q}}
! 210: \label{gbtech}
! 211:
! 212: In this section we review several practical techniques to improve
! 213: Groebner basis computation over {\bf Q}, which are easily
! 214: implemented but may not be well known.
! 215: We use the following notations.
! 216: \begin{description}
! 217: \item $\phi_p$ : the canonical projection from ${\bf Z}$ onto $GF(p)$
! 218: \item $HT(f)$ : the head term of a polynomail with respect to a term order
! 219: \item $HC(f)$ : the head coefficient of a polynomail with respect to a term order
! 220: \end{description}
! 221:
! 222: \subsection{Combination of homogenization and trace lifting}
! 223:
! 224: Traverso's trace lifting algorithm can be
! 225: formulated in an abstract form as follows \cite{FPARA}.
! 226: \begin{tabbing}
! 227: Input : a finite subset $F \subset {\bf Z}[X]$\\
! 228: Output : a Groebner basis $G$ of $Id(F)$ with respect to a term order $<$\\
! 229: do \= \\
! 230: \> $p \leftarrow$ a new prime\\
! 231: \>Guess \= a Groebner basis candidate $G \subset Id(F)$
! 232: such that $\phi_p(G)$ \\
! 233: \>\> is a Groebner basis of $Id(\phi_p(F))$ in ${GF(p)}[X]$\\
! 234: \>Check that $G$ is a Groebner basis of $Id(G)$ and $F \subset Id(G)$\\
! 235: \>If $G$ passes the check return $G$\\
! 236: end do
! 237: \end{tabbing}
! 238: We can apply various methods for {\tt guess} part of the above
! 239: algorithm. Originally we guess the candidate by replacing zero normal
! 240: form checks over {\bf Q} with those over $GF(p)$ in the Buchberger
! 241: algorithm, which we call {\it tl\_guess}. In Asir one can specify
! 242: another method {\it tl\_h\_guess\_dh}, which is a combination of
! 243: {\it tl\_guess} and homogenization.
! 244: \begin{tabbing}
! 245: $tl\_h\_guess\_dh(F,p)$\\
! 246: Input : $F\subset {\bf Z}[X]$, a prime $p$\\
! 247: Output : a Groebner basis candidate\\
! 248: $F_h \leftarrow$ the homogenization of $F$\\
! 249: $G_h \leftarrow tl\_guess(F_h,p)$ under an appropriate term order\\
! 250: $G \leftarrow$ the dehomogenization of $G_h$\\
! 251: $G \leftarrow G \setminus \{g \in G| \exists h \in G \setminus \{g\}$
! 252: such that $HT(h)|HT(g)$ \}
! 253: \end{tabbing}
! 254: The input is homogenized to suppress intermediate coefficient swells
! 255: of intermediate basis elements. The number of zero normal forms may
! 256: increase by the homogenization, but they are detected over
! 257: GF(p). Finally, by dehomogenizing the candidate we can expect that
! 258: lots of redundant elements can be removed. We will show later that this is
! 259: surely efficient for some input polynomial sets.
! 260:
! 261: \subsection{Minimal polynomial computation by modular method}
! 262: Let $I$ be a zero-dimensional ideal in $R={\bf Q}[x_1,\ldots,x_n]$.
! 263: Then the minimal polynomial $m(x_i)$ of a variable $x_i$ in $R/I$ can
! 264: be computed by a partial FGLM \cite{FGLM}, but it often takes long
! 265: time if one searches $m(x_i)$ incrementally over {\bf Q}. In this
! 266: case we can apply a simple modular method to compute the minimal
! 267: polynomial.
! 268: \begin{tabbing}
! 269: Input : a Groebner basis $G$ of $I$, a variable $x_i$\\
! 270: Output : the minimal polynomial of $x$ in $R/I$\\
! 271: do \= \\
! 272: \> $p \leftarrow$ a new prime such that $p \not{|} HC(g)$ for all $g \in G$\\
! 273: \> $m_p \leftarrow$ the minimal polynomial of $x_i$ in $GF(p)[x_1,\ldots,x_n]/Id(\phi_p(G))$\\
! 274: \> If there exists $m(x_i) \in I$ such that $\phi_p(m) = m_p$ and $\deg(m)=\deg(m_p)$\\
! 275: \> then return $m(x_i)$\\
! 276: end do
! 277: \end{tabbing}
! 278: In this algorithm, $m_p$ can be obtained by a partial FGLM over
! 279: $GF(p)$ because $\phi_p(G)$ is a Groebner basis. Once we know the
! 280: candidate of $\deg(m(x_i))$, $m(x_i)$ can be determined by solving a
! 281: system of linear equations via the method of indeterminate
! 282: coefficient. Arguments on \cite{NOYO} ensures that $m(x_i)$ is what we
! 283: want if it exists. Note that the full FGLM can also be computed by the
! 284: same method.
! 285:
! 286: \subsection{Integer contents reduction}
! 287:
! 288: In some cases the cost to remove integer contents during nomal form
! 289: computations is dominant. We can remove the content of an integral
! 290: polynomial $f$ efficiently by the following method \cite{REPL}.
! 291: \begin{tabbing}
! 292: Input : an integral polynomial $f$\\
! 293: Output : a pair $(\cont(f),f/\cont(f))$\\
! 294: $g_0 \leftarrow$ an estimate of $\cont(f)$ such that $\cont(f)|g_0$\\
! 295: Write $f$ as $f = g_0q+r$ by division with remainder for each coefficient\\
! 296: If $r = 0$ then return $(g_0,q)$\\
! 297: else return $(g,g_0/g \cdot q + r/g)$, where $g = \GCD(g_0,\cont(r))$
! 298: \end{tabbing}
! 299: By serataing the set of coefficients of $f$ into two subsets and by
! 300: computing GCD of sums in the elements in the subsets we can estimate
! 301: $g_0$ with high accuracy. Then other components are easily computed.
! 302:
! 303: %\subsection{Demand loading of reducers}
! 304: %An execution of the Buchberer algorithm may produce vary large number
! 305: %of intermediate basis elements. In Asir, we can specify that such
! 306: %basis elements should be put on disk to enlarge free memory space.
! 307: %This does not reduce the efficiency so much because all basis elements
! 308: %are not necessarily used in a single normal form computation, and the
! 309: %cost for reading basis elements from disk is often negligible because
! 310: %of the cost for coefficient computations.
! 311:
! 312: \section{Risa/Asir performance}
! 313:
! 314: We show timing data on Risa/Asir for polynomial factorization
! 315: and Groebner basis computation. The measurements were made on
! 316: a PC with PentiumIII 1GHz and 1Gbyte of main memory. Timings
! 317: are given in seconds. In the tables `---' means it was not
! 318: measured.
! 319:
! 320: \subsection{Groebner basis computation}
! 321:
! 322: Table \ref{gbmod} and Table \ref{gbq} shows timing data for Groebner
! 323: basis compuation over $GF(32003)$ and over {\bf Q} respectively.
! 324: $C_n$ is the cyclic $n$ system and $K_n$ is the Katsura $n$ system,
! 325: both are famous bench mark problems. We also measured the timing for
! 326: $McKay$ system over {\bf Q} \cite{REPL}. the term order is graded
! 327: reverse lexicographic order. In the both tables, the first three rows
! 328: are timings for the Buchberger algorithm, and the last two rows are
! 329: timings for $F_4$ algorithm. As to the Buchberger algorithm over
! 330: $GF(32003)$, Singular\cite{SINGULAR} shows the best performance among
! 331: the three systems. $F_4$ implementation in Risa/Asir is faster than
! 332: the Buchberger algorithm implementation in Singluar, but it is still
! 333: several times slower than $F_4$ implemenataion in FGb \cite{FGB}. In
! 334: Table \ref{gbq}, $C_7$ and $McKay$ can be computed by the Buchberger
! 335: algorithm with the methods described in Section \ref{gbtech}. It is
! 336: obvious that $F_4$ implementation in Risa/Asir over {\bf Q} is too
! 337: immature. Nevertheless the timing of $McKay$ is greatly reduced.
! 338: Why is $F_4$ efficient in this case? The answer is in the right
! 339: half of Fig. \ref{f4vsbuch}. During processing S-polynomials of degree
! 340: 16, the Buchberger algorithm produces intermediate polynomials with
! 341: huge coefficients, but if we compute normal forms of these polynomials
! 342: by using all subsequently generated basis elements, then their
! 343: coefficients will be reduced after removing contents. As $F_4$
! 344: algorithm automatically produces the reduced basis elements, the
! 345: degree 16 computation is quite easy in $F_4$.
! 346:
! 347:
! 348: \begin{table}[hbtp]
! 349: \begin{center}
! 350: \begin{tabular}{|c||c|c|c|c|c|c|c|} \hline
! 351: & $C_7$ & $C_8$ & $K_7$ & $K_8$ & $K_9$ & $K_{10}$ & $K_{11}$ \\ \hline
! 352: Asir $Buchberger$ & 31 & 1687 & 2.6 & 27 & 294 & 4309 & --- \\ \hline
! 353: Singular & 8.7 & 278 & 0.6 & 5.6 & 54 & 508 & 5510 \\ \hline
! 354: CoCoA 4 & 241 & $>$ 5h & 3.8 & 35 & 402 &7021 & --- \\ \hline\hline
! 355: Asir $F_4$ & 5.3 & 129 & 0.5 & 4.5 & 31 & 273 & 2641 \\ \hline
! 356: FGb(estimated) & 0.9 & 23 & 0.1 & 0.8 & 6 & 51 & 366 \\ \hline
! 357: \end{tabular}
! 358: \end{center}
! 359: \caption{Groebner basis computation over $GF(32003)$}
! 360: \label{gbmod}
! 361: \end{table}
! 362:
! 363: \begin{table}[hbtp]
! 364: \begin{center}
! 365: \begin{tabular}{|c||c|c|c|c|c|} \hline
! 366: & $C_7$ & $Homog. C_7$ & $K_7$ & $K_8$ & $McKay$ \\ \hline
! 367: Asir $Buchberger$ & 389 & 594 & 29 & 299 & 34950 \\ \hline
! 368: Singular & --- & 15247 & 7.6 & 79 & $>$ 20h \\ \hline
! 369: CoCoA 4 & --- & 13227 & 57 & 709 & --- \\ \hline\hline
! 370: Asir $F_4$ & 989 & 456 & 90 & 991 & 4939 \\ \hline
! 371: FGb(estimated) & 8 &11 & 0.6 & 5 & 10 \\ \hline
! 372: \end{tabular}
! 373: \end{center}
! 374: \caption{Groebner basis computation over {\bf Q}}
! 375: \label{gbq}
! 376: \end{table}
! 377:
! 378: \begin{figure}[hbtp]
! 379: \begin{center}
! 380: \epsfxsize=12cm
! 381: \epsffile{blenall.ps}
! 382: \end{center}
! 383: \caption{Maximal coefficient bit length of intermediate bases}
! 384: \label{f4vsbuch}
! 385: \end{figure}
! 386:
! 387: \subsection{Polynomial factorization}
! 388:
! 389: Table \ref{unifac} shows timing data for univariate factorization over
! 390: {\bf Q}. $N_{i,j}$ is an irreducible polynomial which are hard to
! 391: factor by the classical algorithm. $N_{i,j}$ is a norm of a polynomial
! 392: and $\deg(N_i) = i$ with $j$ modular factors. Risa/Asir is
! 393: disadvantageous in factoring polynomials of this type because the
! 394: algorithm used in Risa/Asir has exponential complexity. In contrast,
! 395: CoCoA 4\cite{COCOA} and NTL-5.2\cite{NTL} show nice performances
! 396: because they implement recently developed algorithms.
! 397:
! 398: \begin{table}[hbtp]
! 399: \begin{center}
! 400: \begin{tabular}{|c||c|c|c|c|} \hline
! 401: & $N_{105,23}$ & $N_{120,20}$ & $N_{168,24}$ & $N_{210,54}$ \\ \hline
! 402: Asir & 0.86 & 59 & 840 & hard \\ \hline
! 403: Asir NormFactor & 1.6 & 2.2& 6.1& hard \\ \hline
! 404: %Singular& hard? & hard?& hard? & hard? \\ \hline
! 405: CoCoA 4 & 0.2 & 7.1 & 16 & 0.5 \\ \hline\hline
! 406: NTL-5.2 & 0.16 & 0.9 & 1.4 & 0.4 \\ \hline
! 407: \end{tabular}
! 408: \end{center}
! 409: \caption{Univariate factorization over {\bf Q}}
! 410: \label{unifac}
! 411: \end{table}
! 412:
! 413: Table \ref{multifac} shows timing data for multivariate
! 414: factorization over {\bf Q}.
! 415: $W_{i,j,k}$ is a product of three multivariate polynomials
! 416: $Wang[i]$, $Wang[j]$, $Wang[k]$ given in a data file
! 417: {\tt fctrdata} in Asir library directory. It is also included
! 418: in Risa/Asir source tree and located in {\tt asir2000/lib}.
! 419: For these examples Risa/Asir shows reasonable performance
! 420: compared with other famous systems.
! 421:
! 422: \begin{table}[hbtp]
! 423: \begin{center}
! 424: \begin{tabular}{|c||c|c|c|c|c|} \hline
! 425: & $W_{1,2,3}$ & $W_{4,5,6}$ & $W_{7,8,9}$ & $W_{10,11,12}$ & $W_{13,14,15}$ \\ \hline
! 426: variables & 3 & 5 & 5 & 5 & 4 \\ \hline
! 427: monomials & 905 & 41369 & 51940 & 30988 & 3344 \\ \hline\hline
! 428: Asir & 0.2 & 4.7 & 14 & 17 & 0.4 \\ \hline
! 429: %Singular& $>$15min & --- & ---& ---& ---\\ \hline
! 430: CoCoA 4 & 5.2 & $>$15min & $>$15min & $>$15min & 117 \\ \hline\hline
! 431: Mathematica 4& 0.2 & 16 & 23 & 36 & 1.1 \\ \hline
! 432: Maple 7& 0.5 & 18 & 967 & 48 & 1.3 \\ \hline
! 433: \end{tabular}
! 434: \end{center}
! 435: \caption{Multivariate factorization over {\bf Q}}
! 436: \label{multifac}
! 437: \end{table}
! 438:
! 439: \section{OpenXM and Risa/Asir OpenXM interfaces}
! 440:
! 441: \subsection{OpenXM overview}
! 442:
! 443: OpenXM stands for Open message eXchange protocol for Mathematics.
! 444: Form the viewpoint of protocol design, it is a child of OpenMath
! 445: \cite{OPENMATH}. However our approch is somewhat different. Our main
! 446: purpose is to provide an environment for integrating {\it existing}
! 447: mathematical software systems. OpenXM RFC-100 \cite{RFC100} defines a
! 448: client-server architecture. Under this specification, a client
! 449: invokes an OpenXM (OX) server. The client can send OpenXM (OX)
! 450: messages to the server. OX messages consist of {\it data} and {\it
! 451: command}. Data is encoded according to the common mathematical object
! 452: (CMO) format which defines serialized representation of mathematical
! 453: objects. An OX server is a stackmachine. If data is sent as an OX
! 454: message, the server pushes the data onto its stack. There is a common
! 455: set of stackmachine commands and all OX server understands its subset.
! 456: The command set includes commands for manipulating the stack and
! 457: requests for execution of a procedure. In addition, a server may
! 458: accept its own command sequences if the server wraps some interactive
! 459: software. That is the server may be a hybrid server.
! 460:
! 461: OpenXM RFC-100 also defines methods for session management. In particular
! 462: the method to reset a server is carefully designed and it provides
! 463: a robust way of using servers both for interactive and non-interactive
! 464: purposes.
! 465:
! 466: \subsection{OpenXM client interface of {\tt asir}}
! 467:
! 468: Risa/Asir is a main client in OpenXM package. The application {\tt
! 469: asir} can access to OpenXM servers via several builtin interface
! 470: functions. and various inferfaces to existing OpenXM servers are
! 471: prepared as user defined functions written in Asir language. We show
! 472: a typical OpenXM session.
! 473:
! 474: \begin{verbatim}
! 475: [1] P = ox_launch(); /* invoke an OpenXM asir server */
! 476: 0
! 477: [2] ox_push_cmo(P,x^10-y^10);
! 478: /* push a polynomial onto the stack */
! 479: 0
! 480: [3] ox_execute_function(P,"fctr",1); /* call factorizer */
! 481: 0
! 482: [4] ox_pop_cmo(P); /* get the result from the stack */
! 483: [[1,1],[x^4+y*x^3+y^2*x^2+y^3*x+y^4,1],
! 484: [x^4-y*x^3+y^2*x^2-y^3*x+y^4,1],[x-y,1],[x+y,1]]
! 485: [5] ox_cmo_rpc(P,"fctr,",x^10000-2^10000*y^10000);
! 486: /* call factorizer; an utility function */
! 487: 0
! 488: [6] ox_reset(P); /* reset the computation in the server */
! 489: 1
! 490: [7] ox_shutdown(P); /* shutdown the server */
! 491: 0
! 492: \end{verbatim}
! 493:
! 494: \subsection{OpenXM server {\tt ox\_asir}}
! 495:
! 496: An application {\tt ox\_asir} is a wrapper of {\tt asir} and provides
! 497: all the functions of {\tt asir} to OpenXM clients. It completely
! 498: implements the OpenXM reset protocol and also provides remote
! 499: debugging of user programs running on the server. We show a program
! 500: for checking whether a polynomial set is a Groebner basis or not. A
! 501: client executes {\tt gbcheck()} and servers execute {\tt
! 502: sp\_nf\_for\_gbcheck()} which is a simple normal form computation of a
! 503: S-polynomial. First of all the client collects all critical pairs
! 504: necessary for the check. Then the client requests normal form
! 505: computations to idling servers. If there are no idling servers the
! 506: clients waits for some servers to return results by {\tt
! 507: ox\_select()}, which is a wrapper of UNIX {\tt select()}. If we have
! 508: large number of critcal pairs to be processed, we can expect
! 509: good load balancing by {\tt ox\_select()}.
! 510:
! 511: \begin{verbatim}
! 512: def gbcheck(B,V,O,Procs) {
! 513: map(ox_reset,Procs);
! 514: dp_ord(O); D = map(dp_ptod,B,V);
! 515: L = dp_gr_checklist(D); DP = L[0]; Plist = L[1];
! 516: /* register DP in servers */
! 517: map(ox_cmo_rpc,Procs,"register_data_for_gbcheck",vtol(DP));
! 518: /* discard return value in stack */
! 519: map(ox_pop_cmo,Procs);
! 520: Free = Procs; Busy = [];
! 521: while ( Plist != [] || Busy != [] )
! 522: if ( Free == [] || Plist == [] ) {
! 523: /* someone is working; wait for data */
! 524: Ready = ox_select(Busy);
! 525: /* update Busy list and Free list */
! 526: Busy = setminus(Busy,Ready); Free = append(Ready,Free);
! 527: for ( ; Ready != []; Ready = cdr(Ready) )
! 528: if ( ox_get(car(Ready)) != 0 ) {
! 529: /* a normal form is non zero */
! 530: map(ox_reset,Procs); return 0;
! 531: }
! 532: } else {
! 533: /* update Busy list and Free list */
! 534: Id = car(Free); Free = cdr(Free); Busy = cons(Id,Busy);
! 535: /* take a pair */
! 536: Pair = car(Plist); Plist = cdr(Plist);
! 537: /* request a normal form computation */
! 538: ox_cmo_rpc(Id,"sp_nf_for_gbcheck",Pair);
! 539: ox_push_cmd(Id,262); /* 262 = OX_popCMO */
! 540: }
! 541: map(ox_reset,Procs); return 1;
! 542: }
! 543: \end{verbatim}
! 544:
! 545: \subsection{Asir OpenXM library {\tt libasir.a}}
! 546:
! 547: Asir OpenXM library {\tt libasir.a} includes functions simulating the
! 548: stack machine commands supported in {\tt ox\_asir}. By linking {\tt
! 549: libasir.a} an application can use the same functions as in {\tt
! 550: ox\_asir} without accessing to {\tt ox\_asir} via TCP/IP.
! 551:
! 552: \section{Concluding remarks}
! 553: We have shown the current status of Risa/Asir and its OpenXM
! 554: interfaces. As a result of our policy of development, it is true that
! 555: Risa/Asir does not have abundant functions. However it is a completely
! 556: open system and its total performance is not bad. As OpenXM interface
! 557: specification is completely documented, we can add another function to
! 558: Risa/Asir by wrapping an existing software system as an OX server and
! 559: vice versa. User program debugger can be used both for local and
! 560: remote debugging. By combining the debugger and the function to reset
! 561: servers, one will be able to enjoy parallel and distributed
! 562: computation.
! 563: %
! 564: \begin{thebibliography}{7}
! 565: %
! 566: \addcontentsline{toc}{section}{References}
! 567:
! 568: \bibitem{ANY}
! 569: Anay, H., Noro, M., Yokoyama, K. (1996)
! 570: Computation of the Splitting fields and the Galois Groups of Polynomials.
! 571: Algorithms in Algebraic geometry and Applications,
! 572: Birkh\"auser (Proceedings of MEGA'94), 29--50.
! 573:
! 574: \bibitem{FPARA}
! 575: Jean-Charles Faug\`ere (1994)
! 576: Parallelization of Groebner basis.
! 577: Proceedings of PASCO'94, 124--132.
! 578:
! 579: \bibitem{F4}
! 580: Jean-Charles Faug\`ere (1999)
! 581: A new efficient algorithm for computing Groebner bases ($F_4$).
! 582: Journal of Pure and Applied Algebra (139) 1-3 , 61--88.
! 583:
! 584: \bibitem{FGLM}
! 585: Faug\`ere, J.-C. et al. (1993)
! 586: Efficient computation of zero-dimensional Groebner bases by change of ordering.
! 587: Journal of Symbolic Computation 16, 329--344.
! 588:
! 589: \bibitem{RFC100}
! 590: M. Maekawa, et al. (2001)
! 591: The Design and Implementation of OpenXM-RFC 100 and 101.
! 592: Proceedings of ASCM2001, World Scientific, 102--111.
! 593:
! 594: \bibitem{RISA}
! 595: Noro, M. et al. (1994-2001)
! 596: A computer algebra system Risa/Asir.
! 597: {\tt http://www.openxm.org}, {\tt http://www.math.kobe-u.ac.jp/Asir/asir.html}.
! 598:
! 599: \bibitem{REPL}
! 600: Noro, M., McKay, J. (1997)
! 601: Computation of replicable functions on Risa/Asir.
! 602: Proceedings of PASCO'97, ACM Press, 130--138.
! 603:
! 604: \bibitem{NOYO}
! 605: Noro, M., Yokoyama, K. (1999)
! 606: A Modular Method to Compute the Rational Univariate
! 607: Representation of Zero-Dimensional Ideals.
! 608: Journal of Symbolic Computation, 28, 1, 243--263.
! 609:
! 610: \bibitem{OPENXM}
! 611: OpenXM committers (2000-2001)
! 612: OpenXM package.
! 613: {\tt http://www.openxm.org}.
! 614:
! 615: \bibitem{SY}
! 616: Shimoyama, T., Yokoyama, K. (1996)
! 617: Localization and Primary Decomposition of Polynomial Ideals.
! 618: Journal of Symbolic Computation, 22, 3, 247--277.
! 619:
! 620: \bibitem{TRAGER}
! 621: Trager, B.M. (1976)
! 622: Algebraic Factoring and Rational Function Integration.
! 623: Proceedings of SYMSAC 76, 219--226.
! 624:
! 625: \bibitem{TRAV}
! 626: Traverso, C. (1988)
! 627: Groebner trace algorithms.
! 628: LNCS {\bf 358} (Proceedings of ISSAC'88), Springer-Verlag, 125--138.
! 629:
! 630: \bibitem{COCOA}
! 631: {\tt http://cocoa.dima.unige.it/}.
! 632:
! 633: \bibitem{FGB}
! 634: {\tt http://www-calfor.lip6.fr/\~\,jcf/}.
! 635:
! 636: \bibitem{NTL}
! 637: {\tt http://www.shoup.net/}.
! 638:
! 639: \bibitem{OPENMATH}
! 640: {\tt http://www.openmath.org/}.
! 641:
! 642: \bibitem{SINGULAR}
! 643: {\tt http://www.singular.uni-kl.de/}.
! 644:
! 645: \end{thebibliography}
! 646:
! 647: %INDEX%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 648: \clearpage
! 649: \addcontentsline{toc}{section}{Index}
! 650: \flushbottom
! 651: \printindex
! 652: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! 653:
! 654: \end{document}
! 655:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>