Annotation of OpenXM/doc/Papers/dag-noro-proc.tex, Revision 1.11
1.11 ! noro 1: % $OpenXM: OpenXM/doc/Papers/dag-noro-proc.tex,v 1.10 2002/01/04 06:06:09 noro Exp $
1.1 noro 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}}
1.11 ! noro 63: \def\Q{{\bf Q}}
1.1 noro 64: %
65: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
66:
67: \begin{document}
68: %
69: \title*{A Computer Algebra System Risa/Asir and OpenXM}
70: %
71: %
72: \toctitle{A Computer Algebra System Risa/Asir and OpenXM}
73: % allows explicit linebreak for the table of content
74: %
75: %
76: \titlerunning{Risa/Asir and OpenXM}
77: % allows abbreviation of title, if the full title is too long
78: % to fit in the running head
79: %
1.7 noro 80: \author{Masayuki Noro}
1.1 noro 81: %
82: %\authorrunning{Masayuki Noro}
83: % if there are more than two authors,
84: % please abbreviate author list for running head
85: %
86: %
87: \institute{Kobe University, Rokko, Kobe 657-8501, Japan}
88:
89: \maketitle % typesets the title of the contribution
90:
1.11 ! noro 91: %\begin{abstract}
! 92: %Risa/Asir is software for polynomial computation. It has been
! 93: %developed for testing experimental polynomial algorithms, and now it
! 94: %acts also as a main component in the OpenXM package \cite{noro:OPENXM}.
! 95: %OpenXM is an infrastructure for exchanging mathematical
! 96: %data. It defines a client-server architecture for parallel and
! 97: %distributed computation. In this article we present an overview of
! 98: %Risa/Asir and review several techniques for improving performances of
! 99: %Groebner basis computation over {\bf Q}. We also show Risa/Asir's
! 100: %OpenXM interfaces and their usages.
! 101: %\end{abstract}
! 102:
! 103: \section{Introduction}
! 104:
! 105: %Risa/Asir $B$O(B, $B?t(B, $BB?9`<0$J$I$KBP$9$k1i;;$r<BAu$9$k(B engine,
! 106: %$B%f!<%68@8l$r<BAu$9$k(B parser and interpreter $B$*$h$S(B,
! 107: %$BB>$N(B application $B$H$N(B interaction $B$N$?$a$N(B OpenXM interface $B$+$i$J$k(B
! 108: %computer algebra system $B$G$"$k(B.
! 109: Risa/Asir is a computer algebra system which consists of an engine for
! 110: operations on numbers and polynomials, a parser and an interpreter for
! 111: the user language, and a communication interface called OpenXM API for
! 112: interaction with other applications.
! 113: %engine $B$G$O(B, $B?t(B, $BB?9`<0$J$I$N(B arithmetics $B$*$h$S(B, $BB?9`<0(B
! 114: %GCD, $B0x?tJ,2r(B, $B%0%l%V%J4pDl7W;;$,<BAu$5$l$F$$$k(B. $B$3$l$i$OAH$_9~$_4X?t(B
! 115: %$B$H$7$F%f!<%68@8l$+$i8F$S=P$5$l$k(B.
! 116: The engine implements fundamental arithmetics on numbers and polynomials,
! 117: polynomial GCD, polynomial factorizations and Groebner basis computations,
! 118: etc. These can be called from the user language as builtin functions.
! 119: %Risa/Asir $B$N%f!<%68@8l$O(B C $B8@8l(B like $B$JJ8K!$r$b$A(B, $BJQ?t$N7?@k8@$,(B
! 120: %$B$J$$(B, $B%j%9%H=hM}$*$h$S<+F0(B garbage collection $B$D$-$N%$%s%?%W%j%?(B
! 121: %$B8@8l$G$"$k(B. $B%f!<%68@8l%W%m%0%i%`$O(B parser $B$K$h$jCf4V8@8l$K(B
! 122: %$BJQ49$5$l(B, interpreter $B$K$h$j2r<a<B9T$5$l$k(B. interpreter $B$K$O(B
! 123: %gdb $BIw$N(B debugger $B$,AH$_9~$^$l$F$$$k(B.
! 124: The user language has C-like syntax, without type declarations
! 125: of variables, with list processing and with automatic garbage collection.
! 126: The interpreter is equipped with a {\tt gdb}-like debugger.
! 127: %$B$3$l$i$N5!G=$O(B OpenXM interface $B$rDL$7$FB>$N(B application $B$+$i$b;HMQ2D(B
! 128: %$BG=$G$"$k(B. OpenXM \cite{noro:RFC100} $B$O?t3X%=%U%H%&%'%"$N(B client-server
! 129: %$B7?$NAj8_8F$S=P$7$N$?$a$N(B $B%W%m%H%3%k$G$"$k(B.
! 130: These functions can be called from other applications via OpenXM API.
! 131: OpenXM \cite{noro:RFC100} is a protocol for client-server
! 132: communications between mathematical software. We are distributing
! 133: OpenXM package \cite{noro:OPENXM}, which is a collection of various
! 134: clients and servers comlient to the OpenXM protocol specification.
! 135:
! 136: %Risa/Asir $B$OB?9`<00x?tJ,2r(B, $B%,%m%"727W;;(B \cite{noro:ANY}, $B%0%l%V%J4pDl(B
! 137: %$B7W;;(B \cite{noro:NM,noro:NY}, $B=`AG%$%G%"%kJ,2r(B \cite{noro:SY}, $B0E9f(B
! 138: %\cite{noro:IKNY} $B$K$*$1$k<B83E*%"%k%4%j%:%`(B $B$r%F%9%H$9$k$?$a$N%W%i%C%H(B
! 139: %$B%U%)!<%`$H$7$F3+H/$5$l$F$-$?(B. $B$^$?(B, OpenXM API $B$rMQ$$$F(B parallel
! 140: %distributed computation $B$N<B83$K$bMQ$$$i$l$F$$$k(B. $B:,44$r$J$9$N$OB?9`(B
! 141: %$B<00x?tJ,2r$*$h$S%0%l%V%J4pDl7W;;$G$"$k(B. $BK\9F$G$O(B, $BFC$K(B, $B%0%l%V%J4pDl(B
! 142: %$B7W;;$K4X$7$F(B, $B$=$N4pK\$*$h$S(B {\bf Q} $B>e$G$N7W;;$N:$Fq$r9nI~$9$k$?$a$N(B
! 143: %$B$5$^$6$^$J9)IW$*$h$S$=$N8z2L$K$D$$$F=R$Y$k(B. $B$^$?(B, Risa/Asir $B$O(B OpenXM
! 144: %package $B$K$*$1$k<gMW$J(B component $B$N0l$D$G$"$k(B. Risa/Asir $B$r(B client $B$"(B
! 145: %$B$k$$$O(B server $B$H$7$FMQ$$$kJ,;6JBNs7W;;$K$D$$$F(B, $B<BNc$r$b$H$K2r@b$9$k(B.
! 146: Risa/Asir has been used for implementing and testing experimental
! 147: algorithms such as polynomial factorizations, splitting field and
! 148: Galois group computations \cite{noro:ANY}, Groebner basis computations
! 149: \cite{noro:REPL,noro:NOYO} primary ideal decomposition \cite{noro:SY}
! 150: and cryptgraphy \cite{noro:IKNY}. In these applications the important
! 151: funtions are polynomial factorization and Groebner basis
! 152: computation. We focus on Groebner basis computation and we review its
! 153: fundamentals and vaious efforts for improving efficiency especially
! 154: over $\Q$. Risa/Asir is also a main component of OpenXM package and
! 155: it has been used for parallel distributed computation with OpenXM API.
! 156: We will explain how one can execute parallel distributed computation
! 157: by using Risa/Asir as a client or a server.
1.1 noro 158:
1.11 ! noro 159: \section{Efficient Groebner basis computation over {\bf Q}}
! 160: \label{tab:gbtech}
1.1 noro 161:
162: In this section we review several practical techniques to improve
163: Groebner basis computation over {\bf Q}, which are easily
164: implemented but may not be well known.
165: We use the following notations.
166: \begin{description}
1.9 noro 167: \item $<$ : a term order in the set of monomials. It is a total order such that
168:
169: $\forall t, 1 \le t$ and $\forall s, t, u, s<t \Rightarrow us<ut$.
170: \item $Id(F)$ : a polynomial ideal generated by a polynomial set $F$.
171: \item $HT(f)$ : the head term of a polynomial with respect to a term order.
172: \item $HC(f)$ : the head coefficient of a polynomial with respect to a term order.
173: \item $T(f)$ : terms with non zero coefficients in $f$.
174: \item $Spoly(f,g)$ : the S-polynomial of $\{f,g\}$
175:
176: $Spoly(f,g) = T_{f,g}/HT(f)\cdot f/HC(f) -T_{f,g}/HT(g)\cdot g/HC(g)$, where
177: $T_{f,g} = LCM(HT(f),HT(g))$.
178: \item $\phi_p$ : the canonical projection from ${\bf Z}$ onto $GF(p)$.
1.1 noro 179: \end{description}
1.9 noro 180:
181: \subsection{Groebner basis computation and its improvements}
182:
183: A Groebner basis of an ideal $Id(F)$ can be computed by the Buchberger
184: algorithm. The key oeration in the algorithm is the following
185: division by a polynomial set.
186: \begin{tabbing}
187: while \= $\exists g \in G$, $\exists t \in T(f)$ such that $HT(g)|t$ do\\
188: \> $f \leftarrow f - t/HT(g) \cdot c/HC(g) \cdot g$, \quad
189: where $c$ is the coeffcient of $t$ in $f$
190: \end{tabbing}
191: This division terminates for any term order.
192: With this division, we can show the most primitive version of the
193: Buchberger algorithm.
194: \begin{tabbing}
195: Input : a finite polynomial set $F$\\
196: Output : a Groebner basis $G$ of $Id(F)$ with respect to a term order $<$\\
197: $G \leftarrow F$; \quad $D \leftarrow \{\{f,g\}| f, g \in G, f \neq g \}$\\
198: while \= $D \neq \emptyset$ do \\
199: \> $\{f,g\} \leftarrow$ an element of $D$; \quad
200: $D \leftarrow D \setminus \{P\}$\\
201: \> $R \leftarrow$ a remainder of $Spoly(f,g)$ on division by $G$\\
202: \> if $R \neq 0$ then $D \leftarrow D \cup \{\{f,R\}| f \in G\}$; \quad
203: $G \leftarrow G \cup \{R\}$\\
204: end do\\
205: return G
206: \end{tabbing}
207: Though this algorithm gives a Groebner basis of $Id(F)$,
208: it is not practical at all. We need lots of techniques to make
209: it practical. The following are major improvements:
210: \begin{itemize}
211: \item Useless pair detection
212:
213: We don't have to process all the pairs in $D$ and several useful
1.11 ! noro 214: criteria for detecting useless pairs were proposed (cf. \cite{noro:BW}).
1.9 noro 215:
216: \item Selection strategy
217:
218: The selection of $\{f,g\}$ greatly affects the subsequent computation.
1.11 ! noro 219: The typical strategies are the normal startegy \cite{noro:BUCH}
! 220: and the sugar strategy \cite{noro:SUGAR}.
1.9 noro 221: The latter was proposed for efficient computation under a non
222: degree-compatible order.
223:
224: \item Modular methods
225:
226: Even if we apply several criteria, it is difficult to detect all pairs
227: whose S-polynomials are reduced to zero, and the cost to process them
1.11 ! noro 228: often occupies a major part in the whole computation. The trace
! 229: algorithms \cite{noro:TRAV} were proposed to reduce such cost. This
! 230: will be explained in more detail in Section \ref{sec:gbhomo}.
1.9 noro 231:
232: \item Change of ordering
233:
234: For elimination, we need a Groebner basis with respect to a non
1.11 ! noro 235: degree-compatible order, but it is often hard to compute it by the
! 236: Buchberger algorithm. If the ideal is zero dimensional, we can apply a
! 237: change of ordering algorithm \cite{noro:FGLM} for a Groebner basis
! 238: with respect to any order and we can obtain a Groebner basis with
! 239: respect to a desired order.
1.9 noro 240:
241: \end{itemize}
242: By implementing these techniques, one can obtain Groebner bases for
243: wider range of inputs. Nevertheless there are still intractable
244: problems with these classical tools. In the subsequent sections
245: we show several methods for further improvements.
1.1 noro 246:
247: \subsection{Combination of homogenization and trace lifting}
1.11 ! noro 248: \label{sec:gbhomo}
1.1 noro 249:
1.11 ! noro 250: The trace lifting algorithm can be
! 251: formulated in an abstract form as follows (c.f. \cite{noro:FPARA}).
1.1 noro 252: \begin{tabbing}
253: Input : a finite subset $F \subset {\bf Z}[X]$\\
254: Output : a Groebner basis $G$ of $Id(F)$ with respect to a term order $<$\\
255: do \= \\
256: \> $p \leftarrow$ a new prime\\
257: \>Guess \= a Groebner basis candidate $G \subset Id(F)$
258: such that $\phi_p(G)$ \\
259: \>\> is a Groebner basis of $Id(\phi_p(F))$ in ${GF(p)}[X]$\\
260: \>Check that $G$ is a Groebner basis of $Id(G)$ and $F \subset Id(G)$\\
261: \>If $G$ passes the check return $G$\\
262: end do
263: \end{tabbing}
1.5 noro 264: We can apply various methods for {\it guess} part of the above
265: algorithm. In the original algorithm we guess the candidate by
266: replacing zero normal form checks over {\bf Q} with those over $GF(p)$
267: in the Buchberger algorithm, which we call {\it tl\_guess}. In Asir
268: one can specify another method {\it tl\_h\_guess\_dh}, which is a
269: combination of {\it tl\_guess} and homogenization.
1.1 noro 270: \begin{tabbing}
271: $tl\_h\_guess\_dh(F,p)$\\
272: Input : $F\subset {\bf Z}[X]$, a prime $p$\\
273: Output : a Groebner basis candidate\\
274: $F_h \leftarrow$ the homogenization of $F$\\
275: $G_h \leftarrow tl\_guess(F_h,p)$ under an appropriate term order\\
276: $G \leftarrow$ the dehomogenization of $G_h$\\
277: $G \leftarrow G \setminus \{g \in G| \exists h \in G \setminus \{g\}$
278: such that $HT(h)|HT(g)$ \}
279: \end{tabbing}
280: The input is homogenized to suppress intermediate coefficient swells
281: of intermediate basis elements. The number of zero normal forms may
282: increase by the homogenization, but they are detected over
1.5 noro 283: $GF(p)$. Finally, by dehomogenizing the candidate we can expect that
1.7 noro 284: lots of redundant elements can be removed.
1.1 noro 285:
286: \subsection{Minimal polynomial computation by modular method}
1.7 noro 287:
1.1 noro 288: Let $I$ be a zero-dimensional ideal in $R={\bf Q}[x_1,\ldots,x_n]$.
289: Then the minimal polynomial $m(x_i)$ of a variable $x_i$ in $R/I$ can
1.11 ! noro 290: be computed by a partial FGLM \cite{noro:FGLM}, but it often takes long
1.1 noro 291: time if one searches $m(x_i)$ incrementally over {\bf Q}. In this
292: case we can apply a simple modular method to compute the minimal
293: polynomial.
294: \begin{tabbing}
295: Input : a Groebner basis $G$ of $I$, a variable $x_i$\\
1.8 noro 296: Output : the minimal polynomial of $x_i$ in $R/I$\\
1.1 noro 297: do \= \\
298: \> $p \leftarrow$ a new prime such that $p \not{|} HC(g)$ for all $g \in G$\\
299: \> $m_p \leftarrow$ the minimal polynomial of $x_i$ in $GF(p)[x_1,\ldots,x_n]/Id(\phi_p(G))$\\
300: \> If there exists $m(x_i) \in I$ such that $\phi_p(m) = m_p$ and $\deg(m)=\deg(m_p)$\\
301: \> then return $m(x_i)$\\
302: end do
303: \end{tabbing}
304: In this algorithm, $m_p$ can be obtained by a partial FGLM over
305: $GF(p)$ because $\phi_p(G)$ is a Groebner basis. Once we know the
306: candidate of $\deg(m(x_i))$, $m(x_i)$ can be determined by solving a
307: system of linear equations via the method of indeterminate
1.7 noro 308: coefficient, and it can be solved efficiently by $p$-adic method.
1.11 ! noro 309: Arguments on \cite{noro:NOYO} ensures that $m(x_i)$ is what we want if it
1.7 noro 310: exists. Note that the full FGLM can also be computed by the same
311: method.
1.1 noro 312:
313: \subsection{Integer contents reduction}
1.11 ! noro 314: \label{sec:gbcont}
1.1 noro 315:
1.5 noro 316: In some cases the cost to remove integer contents during normal form
1.1 noro 317: computations is dominant. We can remove the content of an integral
1.11 ! noro 318: polynomial $f$ efficiently by the following method \cite{noro:REPL}.
1.1 noro 319: \begin{tabbing}
320: Input : an integral polynomial $f$\\
321: Output : a pair $(\cont(f),f/\cont(f))$\\
322: $g_0 \leftarrow$ an estimate of $\cont(f)$ such that $\cont(f)|g_0$\\
1.7 noro 323: Write $f$ as $f = g_0q+r$ by division with remainder by $g_0$ for each coefficient\\
1.1 noro 324: If $r = 0$ then return $(g_0,q)$\\
325: else return $(g,g_0/g \cdot q + r/g)$, where $g = \GCD(g_0,\cont(r))$
326: \end{tabbing}
1.5 noro 327: By separating the set of coefficients of $f$ into two subsets and by
1.7 noro 328: computing GCD of sums of the elements in each subset we can estimate
1.1 noro 329: $g_0$ with high accuracy. Then other components are easily computed.
330:
331: %\subsection{Demand loading of reducers}
1.5 noro 332: %An execution of the Buchberger algorithm may produce vary large number
1.1 noro 333: %of intermediate basis elements. In Asir, we can specify that such
334: %basis elements should be put on disk to enlarge free memory space.
335: %This does not reduce the efficiency so much because all basis elements
336: %are not necessarily used in a single normal form computation, and the
337: %cost for reading basis elements from disk is often negligible because
338: %of the cost for coefficient computations.
339:
1.11 ! noro 340: \subsection{Performances of Groebner basis computation}
1.10 noro 341:
1.11 ! noro 342: We show timing data on Risa/Asir for Groebner basis computation. The
! 343: measurements were made on a PC with PentiumIII 1GHz and 1Gbyte of main
! 344: memory. Timings are given in seconds. In the tables `---' means it was
! 345: not measured. $C_n$ is the cyclic $n$ system and $K_n$ is the Katsura
! 346: $n$ system, both are famous bench mark problems \cite{noro:BENCH}. $McKay$
! 347: \cite{noro:REPL} is a system whose Groebner basis is hard to compute over
! 348: {\bf Q}. In Risa/Asir we have a test implemention of $F_4$ algorithm
! 349: \cite{noro:F4} and we also show its current performance. The term order is
! 350: graded reverse lexicographic order.
! 351:
! 352: Table \ref{tab:gbmod} shows timing data for Groebner basis computation
! 353: over $GF(32003)$. $F_4$ implementation in Risa/Asir outperforms
! 354: Buchberger algorithm implementation, but it is still several times
! 355: slower than $F_4$ implementation in FGb \cite{noro:FGB}.
! 356:
! 357: Table \ref{tab:gbq} shows timing data for Groebner basis computation over
! 358: $\Q$, where we compare the timing data under various configuration of
! 359: algorithms. {\bf TR}, {\bf Homo}, {\bf Cont} means trace lifting,
! 360: homogenization and contents reduction respectively.
! 361: \ref{tab:gbq} also shows timings of minimal polynomial
! 362: computation for zero-dimensional ideals. Table \ref{tab:gbq} shows that
! 363: it is difficult or practically impossible to compute Groebner bases of
! 364: $C_7$, $C_8$ and $McKay$ without the methods described in Section
! 365: \ref{sec:gbhomo} and \ref{sec:gbcont}.
1.10 noro 366: Though $F_4$ implementation in Risa/Asir over {\bf Q} is still
367: experimental, the timing of $McKay$ is greatly reduced.
1.11 ! noro 368: Fig. \ref{tab:f4vsbuch} explains why $F_4$ is efficient in this case. The
1.10 noro 369: figure shows that the Buchberger algorithm produces normal forms with
370: huge coefficients for S-polynomials after the 250-th one, which are
371: the computations in degree 16. However, we know that the reduced
372: basis elements have much smaller coefficients after removing contents.
373: As $F_4$ algorithm automatically produces the reduced ones, the degree
374: 16 computation is quite easy in $F_4$.
1.1 noro 375:
376: \begin{table}[hbtp]
377: \begin{center}
378: \begin{tabular}{|c||c|c|c|c|c|c|c|} \hline
379: & $C_7$ & $C_8$ & $K_7$ & $K_8$ & $K_9$ & $K_{10}$ & $K_{11}$ \\ \hline
380: Asir $Buchberger$ & 31 & 1687 & 2.6 & 27 & 294 & 4309 & --- \\ \hline
1.10 noro 381: %Singular & 8.7 & 278 & 0.6 & 5.6 & 54 & 508 & 5510 \\ \hline
382: %CoCoA 4 & 241 & $>$ 5h & 3.8 & 35 & 402 &7021 & --- \\ \hline\hline
1.1 noro 383: Asir $F_4$ & 5.3 & 129 & 0.5 & 4.5 & 31 & 273 & 2641 \\ \hline
384: FGb(estimated) & 0.9 & 23 & 0.1 & 0.8 & 6 & 51 & 366 \\ \hline
385: \end{tabular}
386: \end{center}
387: \caption{Groebner basis computation over $GF(32003)$}
1.11 ! noro 388: \label{tab:gbmod}
1.1 noro 389: \end{table}
390: \begin{table}[hbtp]
391: \begin{center}
1.10 noro 392: \begin{tabular}{|c||c|c|c|c|c|} \hline
393: & $C_7$ & $C_8$ & $K_7$ & $K_8$ & $McKay$ \\ \hline
1.11 ! noro 394: TR+Homo+Cont & 389 & 54000 & 29 & 299 & 34950 \\ \hline
1.10 noro 395: TR+Homo & --- & --- & --- & --- & --- \\ \hline
1.11 ! noro 396: TR & --- & --- & --- & --- & --- \\ \hline \hline
! 397: Minipoly & --- & --- & --- & --- & N/A \\ \hline
1.10 noro 398: %Singular & --- & 15247 & --- & 7.6 & 79 & $>$ 20h \\ \hline
399: %CoCoA 4 & --- & 13227 & --- & 57 & 709 & --- \\ \hline\hline
400: %Asir $F_4$ & 989 & 456 & --- & 90 & 991 & 4939 \\ \hline
401: %FGb(estimated) & 8 &11 & 288 & 0.6 & 5 & 10 \\ \hline
1.1 noro 402: \end{tabular}
403: \end{center}
1.11 ! noro 404: \caption{Groebner basis and minimal polynomial computation over {\bf Q}}
! 405: \label{tab:gbq}
1.1 noro 406: \end{table}
407:
408: \begin{figure}[hbtp]
409: \begin{center}
410: \epsfxsize=12cm
1.6 noro 411: %\epsffile{../compalg/ps/blenall.ps}
412: \epsffile{blen.ps}
1.1 noro 413: \end{center}
414: \caption{Maximal coefficient bit length of intermediate bases}
1.11 ! noro 415: \label{tab:f4vsbuch}
1.1 noro 416: \end{figure}
417:
1.11 ! noro 418: %Table \ref{minipoly} shows timing data for the minimal polynomial
! 419: %computations of all variables over {\bf Q} by the modular method.
! 420: %\begin{table}[hbtp]
! 421: %\begin{center}
! 422: %\begin{tabular}{|c||c|c|c|c|c|} \hline
! 423: % & $C_6$ & $C_7$ & $K_6$ & $K_7$ & $K_8$ \\ \hline
1.10 noro 424: %Singular & 0.9 & 846 & 307 & 60880 & --- \\ \hline
1.11 ! noro 425: %Asir & 1.5 & 182 & 12 & 164 & 3420 \\ \hline
! 426: %\end{tabular}
! 427: %\end{center}
! 428: %\caption{Minimal polynomial computation}
! 429: %\label{minipoly}
! 430: %\end{table}
1.1 noro 431:
1.11 ! noro 432: %\subsection{Polynomial factorization}
! 433: %
1.3 noro 434: %Table \ref{unifac} shows timing data for univariate factorization over
435: %{\bf Q}. $N_{i,j}$ is an irreducible polynomial which are hard to
436: %factor by the classical algorithm. $N_{i,j}$ is a norm of a polynomial
437: %and $\deg(N_i) = i$ with $j$ modular factors. Risa/Asir is
438: %disadvantageous in factoring polynomials of this type because the
439: %algorithm used in Risa/Asir has exponential complexity. In contrast,
1.11 ! noro 440: %CoCoA 4\cite{noro:COCOA} and NTL-5.2\cite{noro:NTL} show nice performances
1.3 noro 441: %because they implement recently developed algorithms.
442: %
443: %\begin{table}[hbtp]
444: %\begin{center}
445: %\begin{tabular}{|c||c|c|c|c|} \hline
446: % & $N_{105,23}$ & $N_{120,20}$ & $N_{168,24}$ & $N_{210,54}$ \\ \hline
447: %Asir & 0.86 & 59 & 840 & hard \\ \hline
448: %Asir NormFactor & 1.6 & 2.2& 6.1& hard \\ \hline
449: %%Singular& hard? & hard?& hard? & hard? \\ \hline
450: %CoCoA 4 & 0.2 & 7.1 & 16 & 0.5 \\ \hline\hline
451: %NTL-5.2 & 0.16 & 0.9 & 1.4 & 0.4 \\ \hline
452: %\end{tabular}
453: %\end{center}
454: %\caption{Univariate factorization over {\bf Q}}
455: %\label{unifac}
456: %\end{table}
1.11 ! noro 457: %
! 458: %Table \ref{multifac} shows timing data for multivariate factorization
! 459: %over {\bf Q}. $W_{i,j,k}$ is a product of three multivariate
! 460: %polynomials $Wang[i]$, $Wang[j]$, $Wang[k]$ given in a data file {\tt
! 461: %fctrdata} in Asir library directory. It is also included in Risa/Asir
! 462: %source tree and located in {\tt asir2000/lib}. These examples have
! 463: %leading coefficients of large degree which vanish at 0 which tend to
! 464: %cause so-called the leading coefficient problem the bad zero
! 465: %problem. Risa/Asir's implementation carefully treats such cases and it
! 466: %shows reasonable performance compared with other famous systems.
! 467: %\begin{table}[hbtp]
! 468: %\begin{center}
! 469: %\begin{tabular}{|c||c|c|c|c|c|} \hline
! 470: % & $W_{1,2,3}$ & $W_{4,5,6}$ & $W_{7,8,9}$ & $W_{10,11,12}$ & $W_{13,14,15}$ \\ \hline
! 471: %variables & 3 & 5 & 5 & 5 & 4 \\ \hline
! 472: %monomials & 905 & 41369 & 51940 & 30988 & 3344 \\ \hline\hline
! 473: %Asir & 0.2 & 4.7 & 14 & 17 & 0.4 \\ \hline
1.1 noro 474: %Singular& $>$15min & --- & ---& ---& ---\\ \hline
1.10 noro 475: %CoCoA 4 & 5.2 & $>$15min & $>$15min & $>$15min & 117 \\ \hline\hline
1.11 ! noro 476: %Mathematica 4& 0.2 & 16 & 23 & 36 & 1.1 \\ \hline
! 477: %Maple 7& 0.5 & 18 & 967 & 48 & 1.3 \\ \hline
! 478: %\end{tabular}
! 479: %\end{center}
! 480: %\caption{Multivariate factorization over {\bf Q}}
! 481: %\label{multifac}
! 482: %\end{table}
! 483: %As to univariate factorization over {\bf Q}, the univariate factorizer
! 484: %implements old algorithms and its behavior is what one expects,
! 485: %that is, it shows average performance in cases where there are little
! 486: %extraneous factors, but shows poor performance for hard to factor
! 487: %polynomials with many extraneous factors.
1.3 noro 488:
1.1 noro 489: \section{OpenXM and Risa/Asir OpenXM interfaces}
490:
491: \subsection{OpenXM overview}
492:
493: OpenXM stands for Open message eXchange protocol for Mathematics.
1.5 noro 494: From the viewpoint of protocol design, it can be regarded as a child
1.11 ! noro 495: of OpenMath \cite{noro:OPENMATH}. However our approach is somewhat
1.5 noro 496: different. Our main purpose is to provide an environment for
497: integrating {\it existing} mathematical software systems. OpenXM
1.11 ! noro 498: RFC-100 \cite{noro:RFC100} defines a client-server architecture. Under
1.5 noro 499: this specification, a client invokes an OpenXM ({\it OX}) server. The
500: client can send OpenXM ({\it OX}) messages to the server. OX messages
501: consist of {\it data} and {\it command}. Data is encoded according to
502: the common mathematical object ({\it CMO}) format which defines
503: serialized representation of mathematical objects. An OX server is a
504: stackmachine. If data is sent as an OX message, the server pushes the
505: data onto its stack. There is a common set of stackmachine commands
506: and each OX server understands its subset. The command set includes
507: stack manipulating commands and requests for execution of a procedure.
508: In addition, a server may accept its own command sequences if the
509: server wraps some interactive software. That is the server may be a
510: hybrid server.
1.1 noro 511:
512: OpenXM RFC-100 also defines methods for session management. In particular
513: the method to reset a server is carefully designed and it provides
514: a robust way of using servers both for interactive and non-interactive
1.11 ! noro 515: purposes.
1.1 noro 516:
1.10 noro 517: \subsection{OpenXM API in Risa/Asir user language}
1.1 noro 518:
519: Risa/Asir is a main client in OpenXM package. The application {\tt
1.5 noro 520: asir} can access to OpenXM servers via several built-in interface
521: functions. and various interfaces to existing OpenXM servers are
522: prepared as user defined functions written in Asir language.
523: We show a typical OpenXM session.
1.1 noro 524:
525: \begin{verbatim}
526: [1] P = ox_launch(); /* invoke an OpenXM asir server */
527: 0
528: [2] ox_push_cmo(P,x^10-y^10);
529: /* push a polynomial onto the stack */
530: 0
531: [3] ox_execute_function(P,"fctr",1); /* call factorizer */
532: 0
533: [4] ox_pop_cmo(P); /* get the result from the stack */
534: [[1,1],[x^4+y*x^3+y^2*x^2+y^3*x+y^4,1],
535: [x^4-y*x^3+y^2*x^2-y^3*x+y^4,1],[x-y,1],[x+y,1]]
536: [5] ox_cmo_rpc(P,"fctr,",x^10000-2^10000*y^10000);
1.7 noro 537: /* call factorizer; a utility function */
1.1 noro 538: 0
539: [6] ox_reset(P); /* reset the computation in the server */
540: 1
541: [7] ox_shutdown(P); /* shutdown the server */
542: 0
543: \end{verbatim}
544:
545: \subsection{OpenXM server {\tt ox\_asir}}
546:
547: An application {\tt ox\_asir} is a wrapper of {\tt asir} and provides
548: all the functions of {\tt asir} to OpenXM clients. It completely
1.7 noro 549: implements the OpenXM reset protocol and also allows remote
1.5 noro 550: debugging of user programs running on the server. As an example we
551: show a program for checking whether a polynomial set is a Groebner
552: basis or not. A client executes {\tt gbcheck()} and servers execute
553: {\tt sp\_nf\_for\_gbcheck()} which is a simple normal form computation
1.7 noro 554: of an S-polynomial. First of all the client collects all critical pairs
1.1 noro 555: necessary for the check. Then the client requests normal form
556: computations to idling servers. If there are no idling servers the
557: clients waits for some servers to return results by {\tt
558: ox\_select()}, which is a wrapper of UNIX {\tt select()}. If we have
1.5 noro 559: large number of critical pairs to be processed, we can expect good
560: load balancing by {\tt ox\_select()}.
1.1 noro 561:
562: \begin{verbatim}
563: def gbcheck(B,V,O,Procs) {
564: map(ox_reset,Procs);
565: dp_ord(O); D = map(dp_ptod,B,V);
566: L = dp_gr_checklist(D); DP = L[0]; Plist = L[1];
567: /* register DP in servers */
568: map(ox_cmo_rpc,Procs,"register_data_for_gbcheck",vtol(DP));
569: /* discard return value in stack */
570: map(ox_pop_cmo,Procs);
571: Free = Procs; Busy = [];
572: while ( Plist != [] || Busy != [] )
573: if ( Free == [] || Plist == [] ) {
574: /* someone is working; wait for data */
575: Ready = ox_select(Busy);
576: /* update Busy list and Free list */
577: Busy = setminus(Busy,Ready); Free = append(Ready,Free);
578: for ( ; Ready != []; Ready = cdr(Ready) )
579: if ( ox_get(car(Ready)) != 0 ) {
580: /* a normal form is non zero */
581: map(ox_reset,Procs); return 0;
582: }
583: } else {
584: /* update Busy list and Free list */
585: Id = car(Free); Free = cdr(Free); Busy = cons(Id,Busy);
586: /* take a pair */
587: Pair = car(Plist); Plist = cdr(Plist);
588: /* request a normal form computation */
589: ox_cmo_rpc(Id,"sp_nf_for_gbcheck",Pair);
590: ox_push_cmd(Id,262); /* 262 = OX_popCMO */
591: }
592: map(ox_reset,Procs); return 1;
593: }
594: \end{verbatim}
595:
1.10 noro 596: \subsection{OpenXM C language API in {\tt libasir.a}}
1.1 noro 597:
1.10 noro 598: Risa/Asir subroutine library {\tt libasir.a} contains functions
599: simulating the stack machine commands supported in {\tt ox\_asir}. By
600: linking {\tt libasir.a} an application can use the same functions as
601: in {\tt ox\_asir} without accessing to {\tt ox\_asir} via
602: TCP/IP. There is also a stack, which can be manipulated by the library
603: functions. In order to make full use of this interface, one has to
604: prepare conversion functions between CMO and the data structures
605: proper to the application itself. A function {\tt
606: asir\_ox\_pop\_string()} is provided to convert CMO to a human
607: readable form, which may be sufficient for a simple use of this
608: interface.
1.1 noro 609:
610: \section{Concluding remarks}
1.11 ! noro 611: %We have shown the current status of Risa/Asir and its OpenXM
! 612: %interfaces. As a result of our policy of development, it is true that
! 613: %Risa/Asir does not have abundant functions. However it is a completely
! 614: %open system and its total performance is not bad. Especially on
! 615: %Groebner basis computation over {\bf Q}, many techniques for improving
! 616: %practical performances have been implemented. As the OpenXM interface
! 617: %specification is completely documented, we can easily add another
! 618: %function to Risa/Asir by wrapping an existing software system as an OX
! 619: %server, and other clients can call functions in Risa/Asir by
! 620: %implementing the OpenXM client interface. With the remote debugging
! 621: %and the function to reset servers, one will be able to enjoy parallel
! 622: %and distributed computation with OpenXM facilities.
! 623: %
! 624: We have shown that many techniques for
! 625: improving practical performances are implemented in Risa/Asir's
! 626: Groebner basis engine. Though another important function, the
! 627: polynomial factorizer only implements classical algorithms, its
! 628: performance is comparable with or superior to that of Maple or
! 629: Mathematica and is still practically useful. By preparing OpenXM
! 630: interface or simply linking the Asir OpenXM library, one can call
! 631: these efficient functions from any application. Risa/Asir is a
! 632: completely open system. It is open source software
! 633: and the OpenXM interface specification is completely documented, one
! 634: can easily write interfaces to call functions in Risa/Asir and one
! 635: will be able to enjoy parallel and distributed computation.
! 636:
! 637:
1.1 noro 638: \begin{thebibliography}{7}
639: %
640: \addcontentsline{toc}{section}{References}
641:
1.11 ! noro 642: \bibitem{noro:ANY}
1.1 noro 643: Anay, H., Noro, M., Yokoyama, K. (1996)
644: Computation of the Splitting fields and the Galois Groups of Polynomials.
645: Algorithms in Algebraic geometry and Applications,
646: Birkh\"auser (Proceedings of MEGA'94), 29--50.
647:
1.11 ! noro 648: \bibitem{noro:FPARA}
1.1 noro 649: Jean-Charles Faug\`ere (1994)
650: Parallelization of Groebner basis.
651: Proceedings of PASCO'94, 124--132.
652:
1.11 ! noro 653: \bibitem{noro:F4}
1.1 noro 654: Jean-Charles Faug\`ere (1999)
655: A new efficient algorithm for computing Groebner bases ($F_4$).
656: Journal of Pure and Applied Algebra (139) 1-3 , 61--88.
657:
1.11 ! noro 658: \bibitem{noro:FGLM}
1.1 noro 659: Faug\`ere, J.-C. et al. (1993)
660: Efficient computation of zero-dimensional Groebner bases by change of ordering.
661: Journal of Symbolic Computation 16, 329--344.
662:
1.11 ! noro 663: \bibitem{noro:RFC100}
1.1 noro 664: M. Maekawa, et al. (2001)
665: The Design and Implementation of OpenXM-RFC 100 and 101.
666: Proceedings of ASCM2001, World Scientific, 102--111.
667:
1.11 ! noro 668: \bibitem{noro:RISA}
1.1 noro 669: Noro, M. et al. (1994-2001)
670: A computer algebra system Risa/Asir.
671: {\tt http://www.openxm.org}, {\tt http://www.math.kobe-u.ac.jp/Asir/asir.html}.
672:
1.11 ! noro 673: \bibitem{noro:REPL}
1.1 noro 674: Noro, M., McKay, J. (1997)
675: Computation of replicable functions on Risa/Asir.
676: Proceedings of PASCO'97, ACM Press, 130--138.
677:
1.11 ! noro 678: \bibitem{noro:NOYO}
1.1 noro 679: Noro, M., Yokoyama, K. (1999)
680: A Modular Method to Compute the Rational Univariate
681: Representation of Zero-Dimensional Ideals.
682: Journal of Symbolic Computation, 28, 1, 243--263.
683:
1.11 ! noro 684: \bibitem{noro:OPENXM}
1.1 noro 685: OpenXM committers (2000-2001)
686: OpenXM package.
687: {\tt http://www.openxm.org}.
1.7 noro 688:
1.11 ! noro 689: \bibitem{noro:RUR}
1.7 noro 690: Rouillier, R. (1996)
691: R\'esolution des syst\`emes z\'ero-dimensionnels.
692: Doctoral Thesis(1996), University of Rennes I, France.
1.1 noro 693:
1.11 ! noro 694: \bibitem{noro:SY}
1.1 noro 695: Shimoyama, T., Yokoyama, K. (1996)
696: Localization and Primary Decomposition of Polynomial Ideals.
697: Journal of Symbolic Computation, 22, 3, 247--277.
698:
1.11 ! noro 699: \bibitem{noro:TRAGER}
1.1 noro 700: Trager, B.M. (1976)
701: Algebraic Factoring and Rational Function Integration.
702: Proceedings of SYMSAC 76, 219--226.
703:
1.11 ! noro 704: \bibitem{noro:TRAV}
1.1 noro 705: Traverso, C. (1988)
706: Groebner trace algorithms.
707: LNCS {\bf 358} (Proceedings of ISSAC'88), Springer-Verlag, 125--138.
708:
1.11 ! noro 709: \bibitem{noro:BENCH}
1.5 noro 710: {\tt http://www.math.uic.edu/\~\,jan/demo.html}.
711:
1.11 ! noro 712: \bibitem{noro:COCOA}
1.1 noro 713: {\tt http://cocoa.dima.unige.it/}.
714:
1.11 ! noro 715: \bibitem{noro:FGB}
1.1 noro 716: {\tt http://www-calfor.lip6.fr/\~\,jcf/}.
717:
1.11 ! noro 718: %\bibitem{noro:NTL}
1.5 noro 719: %{\tt http://www.shoup.net/}.
1.1 noro 720:
1.11 ! noro 721: \bibitem{noro:OPENMATH}
1.1 noro 722: {\tt http://www.openmath.org/}.
723:
1.11 ! noro 724: \bibitem{noro:SINGULAR}
1.1 noro 725: {\tt http://www.singular.uni-kl.de/}.
726:
727: \end{thebibliography}
728:
729: %INDEX%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
730: \clearpage
731: \addcontentsline{toc}{section}{Index}
732: \flushbottom
733: \printindex
734: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
735:
736: \end{document}
737:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>