% $OpenXM: OpenXM/doc/Papers/rims2000.tex,v 1.1 2001/02/01 09:21:39 ohara Exp $
\documentclass{jarticle}
\usepackage{jssac}

\title{OpenXM 1.1.3 の概要}
\author{小 原 　 功 任\affil{金沢大学理学部}
		\mail{ohara@kappa.s.kanazawa-u.ac.jp}
  \and	高 山 　 信 毅\affil{神戸大学理学部}
		\mail{takayama@math.sci.kobe-u.ac.jp}
  \and	田 村 　 恭 士\affil{神戸大学大学院自然科学研究科}
		\mail{tamura@math.sci.kobe-u.ac.jp}
  \and	野 呂 　 正 行\affil{神戸大学理学部}
		\mail{noro@math.sci.kobe-u.ac.jp}
  \and	前 川 　 将 秀\affil{神戸大学大学院自然科学研究科}
		\mail{maekawa@math.sci.kobe-u.ac.jp}
}

\begin{document}
\maketitle

\section{OpenXMとは}

OpenXM は, おなじタイプまたは異なるタイプの数学プロセス間でメッセージを
交換するための規約である.  数学プロセス間でメッセージをやりとりすること
により, ある数学プロセスから他の数学プロセスを呼び出して計算を行なったり, 
他のマシンで計算を行なわせたりすることが目的である.  開発の動機は, 手作
り(または研究的な)数学ソフトウェアの相互乗り入れの実現および分散計算の実
装が第一であったが, もちろん数学ソフトウェア間だけでなく, ワープロソフト
ウェアや, インタラクティブな数学本, さらには数学デジタル博物館用のソフト
ウェアがこの規約に従い, 数学ソフトウェアを呼び出すことなどにも利用できる. 
当面の目標は OpenXM 数学ソフトパッケージを作ることである.  これはさまざ
まな数学ソフトウェアを一つのパッケージとして簡単に好きな言語より使えるよ
うにするプロジェクトである.  現在 OpenXM.tar.gz には, asir, sm1, phc,
gnuplot, tigers が入っている.  OpenXM プロジェクトでは数ヵ月おきに安定版
のソフトウェアをリリースしていて, 2001年1月現在のバージョンは 1.1.3 であ
る.

この論文では, 特に TCP/IP を用いた実装に準拠してOpenXM の説明を行う.

\section{OpenXM の計算のモデル}

ここでは OX-RFC-100 \cite{OpenXM:RFC-100} で規定された計算の仕組みについ
て説明する.

まず, OpenXM のソフトウェアはクライアント・サーバモデルをとっている.
さらにサーバはコントローラとエンジンの二つのプロセスに分かれている.
クライアントとエンジンは同一のマシン上になくてもよいが, コントローラとエ
ンジンは同一のマシン上になければならない.

これらのクライアントとサーバの間でメッセージを交換することで計算を進行さ
せるのが, OpenXM の考え方である.
クライアントはエンジンに対してメッセージを送り, 計算を行わせる.
計算が終わったら, 計算結果を送り返させるように指示するメッセージをエンジ
ンに送ると, エンジンはメッセージをクライアントに送り, 結果を返す.
メッセージの構造や通信路の構成など, 規約の詳細については, ここでは解説し
ないが, それらについては \cite{OpenXM:RFC-100} をご覧になられたい.

\setlength{\unitlength}{0.5cm}
\begin{picture}(20,7)(0,0)
\thicklines
\put(5,1.7){\line(1,0){7}}
\put(5,4.7){\line(3,-1){7}}
\put(12,1){\framebox(5,2.5){client}}
\put(1,4){\framebox(4,1.5){controller}}
\put(1,1){\framebox(4,1.5){engine}}
\thinlines
\put(0,0.3){\framebox(6,6){}}
\put(1.5,-0.7){server}
\end{picture}

\bigskip

さらに, サーバが新たにクライアントになることも許される.
したがって, OX-RFC-100~\cite{OpenXM:RFC-100} では, 各数学プロセスが次の
ような木構造をなす, 分散・並列計算モデルを定義したことになる.

\bigskip

\begin{picture}(20,14)(0,0)
\put(7,12){\framebox(4,1.5){client}}
\put(2,6){\framebox(4,1.5){server}}
\put(7,6){\framebox(4,1.5){server}}
\put(12,6){\framebox(4,1.5){server}}
\put(0,0){\framebox(4,1.5){server}}
\put(5,0){\framebox(4,1.5){server}}
\put(13.5,0){\framebox(4,1.5){server}}

\put(9,12){\vector(-1,-1){4.3}}
\put(9,12){\vector(0,-1){4.3}}
\put(9,12){\vector(1,-1){4.3}}
\put(4,6){\vector(-1,-2){2.2}}
\put(4,6){\vector(1,-2){2.2}}
\put(14,6){\vector(1,-3){1.4}}
\end{picture}

\section{OX サーバと提供される数学関数}

OpenXM の各サーバおよびその数学的機能のうち幾つかを例を
あげて説明しよう.

\subsection{{\tt ox\_asir}}
Risa/Asir は Free で配布されている汎用数式処理ソフトウェアである.
たとえば次のような機能を持つ.
\begin{enumerate}
\item ${\bf Q}$ 係数の $n$ 変数多項式の因数分解 (関数 {\tt fctr}). \\
例:
\begin{verbatim}
  fctr(y^5-4*y^4+(-x^2+2*x+3)*y^3-x^2*y^2+4*x^2*y+x^4-2*x^3-3*x^2);
  [[1,1],[y^3-x^2,1],[y-x-1,1],[y+x-3,1]
\end{verbatim}
\item ${\bf Q}$ の代数拡大体における 1 変数多項式の因数分解.
(関数 {\tt af})\\
次の例は多項式 $x^6-1$ を ${\bf Q}$ に $x^2+x+1=0$ の根を添加した
体で因数分解する例である.
\begin{verbatim}
[374] load("gr")$ load("sp")$
[375] A1=newalg(x^2+x+1);
(#0)
[476] af(x^6-1,[A1]);
[[1,1],[x+(#0+1),1],[x+(#0),1],[x-1,1],[x+(-#0),1],[x+1,1],[x+(-#0-1),1]]
\end{verbatim}
$x^2+x+1=0$ の根を $\omega$ としよう.
($\omega^3=1$, $\omega+1 = -\omega^2$  である.)
上の結果は, $\omega$ を用いると,
$$ x^6-1 = (x+\omega+1)(x+\omega)(x-1)(x-\omega)(x+1)(x-\omega-1)$$
と因数分解されることを示している.
\item 多項式環および微分作用素環 (ワイル代数) におけるグレブナ基底計算
(関数 {\tt gr} および {\tt dp\_gr\_weyl\_main}).
応用として準素イデアル分解の機能ももつ (関数 {\tt primadec}).
\\
例として変数の消去をグレブナ基底の計算でおこなってみよう.
$I$ を $n$ 変数多項式環 ${\bf Q}[x_1, \ldots, x_n]$ のイデアルとするとき
$I \cap {\bf Q}[x_1]$ の生成元は, $I$ のグレブナ基底を 辞書式順序
(lexicographic order) $x_n > \cdots > x_2 > x_1$ で計算して,
グレブナ基底の中から, $x_1$ のみの多項式を取り出してくれば求まる.
たとえば, $I$ として, $x_1^2+x_2^2-4$, $x_1 x_2 -1$ で生成される
イデアルを考える.
%$
\begin{verbatim}
[375] load("gr")$
[461] gr([x1^2+x2^2-4,x1*x2-1],[x2,x1],2);
[-x1^4+4*x1^2-1,x2+x1^3-4*x1]
\end{verbatim}
$-x_1^4+4*x_1^2-1$ が, $I \cap {\bf Q}[x_1]$ の生成元である.
消去法とグレブナ基底との関連については, たとえば
Cox, Little, O'Shea の教科書 \cite{OpenXM:CLO} の 2 章, 3 章に
入門的な説明がある.
\end{enumerate}

Asir が用いている数学アルゴリズムについては,
野呂による解説 \cite{OpenXM:noro-book} を参照.

\subsection{ {\tt ox\_sm1} }
{\tt Kan/sm1} および {\tt Kan/k0} は微分作用素環(ワイル代数) $D$ における
グレブナ基底計算をもとにして, $D$ 加群の種々の構成や, 代数多様体の
コホモロジの計算をおこなう.
現在, 因数分解, 準素イデアル分解, $b$-関数の $D$ での計算などは,
OpenXM プロトコル (OX-RFC 100, 101) を利用して, {\tt ox\_asir} が
担当しており, {\tt ox\_sm1} はサーバであるのみならず,
asir の OpenXM サーバ機能をフルに利用しているクライアントでもある.
Kan はたとえば次のような機能をもつ.
\begin{enumerate}
\item $D$ でのグレブナ基底計算 (関数 {\tt gb}). \\
グレブナ基底計算の応用として, あたえられた連立線形偏微分方程式系の
解空間の次元の計算 (holonomic rank) がある.  これを例として挙げて
おこう.
\begin{verbatim}
sm1>(cohom.sm1) run ;
sm1> [ [( x*Dx + y*Dy -3 ) ( Dx-Dy )] (x,y)] rank ::
   1
\end{verbatim}
この出力は微分方程式系
\[
 \left[
     x\frac{\partial}{\partial x}+y\frac{\partial}{\partial y}-3 \right]f
 = \left[ \frac{\partial}{\partial x}-\frac{\partial}{\partial y}\right]f = 0
\]
の解空間の次元は $1$ であることを意味する.
この場合は実際に解を書き出すことができて, $f=(x+y)^3$ が解である.
\item 代数多様体, たとえば ${\bf C}^n \setminus V(f)$ のコホモロジ群の
計算 ( 関数 {\tt deRham} ). \\
たとえば {\tt Kan/k0} での計算は次のようになる.
\begin{verbatim}
% cd OpenXM/src/k097/lib/restriction
% k0
This is kan/k0 Version 1998,12/15
sm1 version = 3.001203
Default ring is Z[x,h].
In(2)= load("demo.k");
In(3)= DeRham2WithAsir( x^3-y^2 ):
Step1: Annhilating ideal (II)[    -3*x^2*Dy-2*y*Dx , -2*x*Dx-3*y*Dy-6 ]
Step2: (-1,1)-minimal resolution (Res0)  [
  [
    [    2*x*Dx+3*y*Dy-h^2 ]
    [    -3*y*Dx^2+2*x*Dy*h ]
  ]
  [
    [    3*y*Dx^2-2*x*Dy*h , 2*x*Dx+3*y*Dy ]
  ]
 ]
Step3: computing the cohomology of the truncated complex.
Roots and b-function are [    [    1 ]  , [    9*s^3-18*s^2+11*s-2 ]  ]


[    [    0 , 1 , 1 ]  ,
[    [    0 , [   ]  ]  , [    1 , [   ]  ]  , [    1 , [   ]  ]  ]  ]
\end{verbatim}
Step1の $1/(x^3-y^2)$ の満たす最大の微分方程式の計算,
Step3の一般化された $b$-関数とその根の計算では {\tt ox\_asir} を呼び出して
計算している.
\item $D^m/I$ の $(u,v)$-minimal free resolution
(関数 {\tt Sminimal}).
\end{enumerate}
$D$ 加群のアルゴリズムのアルゴリズムについては,
本 \cite{OpenXM:SST} が入門的話題から最先端の話題までを扱っている.

\subsection{PHC}

PHC pack は Jan Verschelde により開発された,
多面体ホモトピー法により代数方程式系の数値解を求めるシステムである.
ホモトピー法というのは, たとえば
代数方程式
$ x^n - x^3+x^2-5 = 0$
を解くために, まずスタートシステム
$ x^n - 5 = 0$ を解き, その解を連続的に
もとの方程式の解に延長する方法である.
連立代数方程式系の場合には, よい性質をもつスタートシステムを作る
必要があり, そのために多面体の分割をもちいる. これが
多面体ホモトピー法である.
本 \cite{OpenXM:CLO2} の 7.5 節にこの方法の基礎となる
多面体の幾何と根の数の勘定に関する説明がある.
多面体ホモトピー法については, Verschelde による解説の他,
論文 \cite{OpenXM:HS} などが読みやすい.

\subsection{gnuplot, M2, tigers, pari, mathematica, OMproxy}

長さの関係もあり詳しくは紹介できないので,
表題のソフトウェアを簡単に紹介しよう.
\begin{enumerate}
\item gnuplot はグラフを作成するソフトウェア.
\item M2 (Macaulay 2) は D.Grayson と M.Stillman により開発されている,
計算代数幾何用のソフトウェア.
\item tigers は B.Hubert により開発された, affine toric variety の全ての
グレブナ基底を求めるソフトウェア.
\item pari は A. Cohen らにより開発されている, 整数論用のソフトウェア.
\item Mathematica は有名なので説明の必要はないであろう.
\item OMproxy は Java でかかれた, OpenXM のクラスライブラリおよび
OpenMath とのデータの相互変換のためのソフトウェアである.
\end{enumerate}

\subsection{ 1077 functions are available on our servers and libraries}

OX server の提供する関数にどのようなものがあるか,
リストと簡単なデモを掲載しておこう.
これらの関数のなかの一部については, 前節までで簡単に説明した.
より詳しくは各コンポーネントシステムのマニュアルや参照されている
論文, 本を見る必要がある.

\noindent
\fbox{\large {Operations on Integers}}

\noindent
{idiv},{irem} (division with remainder),
{ishift} (bit shifting),
{iand},{ior},{ixor} (logical operations),
{igcd},(GCD by various methods such as Euclid's algorithm and
the accelerated GCD algorithm),
{fac} (factorial),
{inv} (inverse modulo an integer),
{random} (random number generator by the Mersenne twister algorithm).

\medbreak
\noindent
\fbox{\large {Ground Fields}}

\noindent
Arithmetics on various fields: the rationals,
${\bf Q}(\alpha_1,\alpha_2,\ldots,\alpha_n)$
($\alpha_i$ is algebraic over ${\bf Q}(\alpha_1,\ldots,\alpha_{i-1})$),
$GF(p)$ ($p$ is a prime of arbitrary size), $GF(2^n)$.

\medbreak
\noindent
\fbox{\large {Operations on Polynomials}}

\noindent
{sdiv }, {srem } (division with remainder),
{ptozp } (removal of the integer content),
{diff } (differentiation),
{gcd } (GCD over the rationals),
{res } (resultant),
{subst } (substitution),
{umul} (fast multiplication of dense univariate polynomials
by a hybrid method with Karatsuba and FFT+Chinese remainder),
{urembymul\_precomp} (fast dense univariate polynomial
division with remainder by the fast multiplication and
the precomputed inverse of a divisor),

\noindent
\fbox{\large {Polynomial Factorization}}
{fctr } (factorization over the rationals),
{fctr\_ff } (univariate factorization over finite fields),
{af } (univariate factorization over algebraic number fields),
{sp} (splitting field computation).

\medbreak
\noindent
\fbox{\large {Groebner basis}}

\noindent
{dp\_gr\_main } (Groebner basis computation of a polynomial ideal
over the rationals by the trace lifting),
{dp\_gr\_mod\_main } (Groebner basis over small finite fields),
{tolex } (Modular change of ordering for a zero-dimensional ideal),
{tolex\_gsl } (Modular rational univariate representation
for a zero-dimensional ideal),
{dp\_f4\_main } ($F_4$ over the rationals),
{dp\_f4\_mod\_main } ($F_4$ over small finite fields).

\medbreak
\noindent
\fbox{\large {Ideal Decomposition}}

\noindent
{primedec} (Prime decomposition of the radical),
{primadec} (Primary decomposition of ideals by Shimoyama/Yokoyama algorithm).

\medbreak
\noindent
\fbox{\large {Quantifier Elimination}}

\noindent
{qe} (real quantifier elimination in a linear and
quadratic first-order formula),
{simpl} (heuristic simplification of a first-order formula).

%%$
{\scriptsize
\begin{verbatim}
[0] MTP2 = ex([x11,x12,x13,x21,x22,x23,x31,x32,x33],
x11+x12+x13 @== a1 @&& x21+x22+x23 @== a2 @&& x31+x32+x33 @== a3
@&& x11+x21+x31 @== b1 @&& x12+x22+x32 @== b2 @&& x13+x23+x33 @== b3
@&& 0 @<= x11 @&& 0 @<= x12 @&& 0 @<= x13 @&& 0 @<= x21
@&& 0 @<= x22 @&& 0 @<= x23 @&& 0 @<= x31 @&& 0 @<= x32 @&& 0 @<= x33)$
[1] TSOL= a1+a2+a3@=b1+b2+b3 @&& a1@>=0 @&& a2@>=0 @&& a3@>=0
@&& b1@>=0 @&& b2@>=0 @&& b3@>=0$
[2] QE_MTP2 = qe(MTP2)$
[3] qe(all([a1,a2,a3,b1,b2,b3],QE_MTP2 @equiv TSOL));
@true
\end{verbatim}}

\medbreak
\noindent
\fbox{\large {Visualization of curves}}

\noindent
{plot} (plotting of a univariate function),
{ifplot} (plotting zeros of a bivariate polynomial),
{conplot} (contour plotting of a bivariate polynomial function).

\medbreak
\noindent
\fbox{\large {Miscellaneous functions}}

\noindent
{det} (determinant),
{qsort} (sorting of an array by the quick sort algorithm),
{eval} (evaluation of a formula containing transcendental functions
such as
{sin}, {cos}, {tan}, {exp},
{log})
{roots} (finding all roots of a univariate polynomial),
{lll} (computation of an LLL-reduced basis of a lattice).

\medbreak
\noindent
\fbox{\large {$D$-modules}} ($D$ is the Weyl algebra)

\noindent
{gb } (Gr\"obner basis),
{syz} (syzygy),
{annfs} (Annhilating ideal of $f^s$),
{bfunction},
{schreyer} (free resolution by the Schreyer method),
{vMinRes} (V-minimal free resolution),
{characteristic} (Characteristic variety),
{restriction} in the derived category of $D$-modules,
{integration} in the derived category,
{tensor}  in the derived category,
{dual} (Dual as a D-module),
{slope}.

\medbreak
\noindent
\fbox{\large {Cohomology groups}}

\noindent
{deRham} (The de Rham cohomology groups of
${\bf C}^n \setminus V(f)$,
{ext} (Ext modules for a holonomic $D$-module $M$
and the ring of formal power series).

\medbreak
\noindent
\fbox{\large {Differential equations}}

\noindent
Helping to derive and prove {combinatorial} and
{special function identities},
{gkz} (GKZ hypergeometric differential equations),
{appell} (Appell's hypergeometric differential equations),
{indicial} (indicial equations),
{rank} (Holonomic rank),
{rrank} (Holonomic rank of regular holonomic systems),
{dsolv} (series solutions of holonomic systems).

\medbreak
\noindent
\fbox{\large {OpenMATH support}}

\noindent
{om\_xml} (CMO to OpenMATH XML),
{om\_xml\_to\_cmo} (OpenMATH XML to CMO).

\medbreak
\noindent
\fbox{\large {Homotopy Method}}

\noindent
{phc} (Solving systems of algebraic equations by
numerical and polyhedral homotopy methods).

\medbreak
\noindent
\fbox{\large {Toric ideal}}

\noindent
{tigers} (Enumerate all Gr\"obner basis of a toric ideal.
Finding test sets for integer program),
{arithDeg} (Arithmetic degree of a monomial ideal),
{stdPair} (Standard pair decomposition of a monomial ideal).

\medbreak
\noindent
\fbox{\large {Communications}}

\noindent
{ox\_launch} (starting a server),
{ox\_launch\_nox},
{ox\_shutdown},
{ox\_launch\_generic},
{generate\_port},
{try\_bind\_listen},
{try\_connect},
{try\_accept},
{register\_server},
{ox\_rpc},
{ox\_cmo\_rpc},
{ox\_execute\_string},
{ox\_reset} (reset the server),
{ox\_intr},
{register\_handler},
{ox\_push\_cmo},
{ox\_push\_local},
{ox\_pop\_cmo},
{ox\_pop\_local},
{ox\_push\_cmd},
{ox\_sync},
{ox\_get},
{ox\_pops},
{ox\_select},
{ox\_flush},
{ox\_get\_serverinfo}

\medbreak
\noindent
In addition to these functions, {Mathematica functions}
can be called as server functions.

\medbreak
\noindent
\fbox{\large {Examples}}
{\footnotesize
\begin{verbatim}
[345] sm1_deRham([x^3-y^2*z^2,[x,y,z]]);
[1,1,0,0]
/* dim H^i = 1 (i=0,1), =0 (i=2,3) */
\end{verbatim}}

\noindent
{\footnotesize \begin{verbatim}
[287] phc(katsura(7)); B=map(first,Phc)$
[291] gnuplot_plotDots(B,0)$
\end{verbatim} }

% \epsfxsize=3cm
% \begin{center}
% %\epsffile{../calc2000/katsura7.ps}
% \epsffile{katsura7.ps}
% \end{center}
%%The first components of the solutions to the system of algebraic equations Katsura 7.

\medbreak
\noindent
\fbox{ {Authors}}
Castro-Jim\'enez, Dolzmann, Hubert, Murao, Noro, Oaku, Okutani,
Shimoyama, Sturm, Takayama, Tamura, Verschelde, Yokoyama.


\section{OX サーバを組み合わせて利用した例}

具体的な数学的問題をもとに数学ソフトウェアの開発をするというのは
一つの健全な開発手法であろう.

OX サーバの開発でも, そのような開発手法をとりたいと思っており,
いろいろな数学的問題をさがしている.

その中の一つの問題は, 多変数超幾何関数に関して何でも答えられるシステムの
開発である.
ここでは, 多変数超幾何関数として, いわゆる GKZ hypergeometric system
の解を考えている.
GKZ hypergeometric system は $n$ 次元空間の点集合に付随してきまる
連立線形偏微分方程式系である.
$n$ 次元空間の点集合を考えるため, 多面体の幾何を扱う必要があるし,
連立線形偏微分方程式系を考えるため, $D$ 加群を扱う必要もある.
GKZ system は affine toric ideal を含むため, affine toric ideal の
システムも必要である.
関数の数値計算のためには, 数値積分的な手法も重要であるが, これはまだ
全く手をつけていない.
GKZ hypergeometric system については, 本 \cite{OpenXM:SST} を参照.

現在の {\tt OpenXM/src/asir-contrib} のパッケージは,
GKZ hypergeometric system に関して何でもこたえられるシステムを目標に,
asir をクライアントとして, ox servers をいろいろくっつけたシステムである.

例を一つあげよう.
{\tt dsolv\_starting\_term} は正則ホロノミック系を cone 上で収束する
多変数の級数で解くための
関数の一つであり, 級数展開の主部をもとめる.
\begin{enumerate}
\item 行列(点配置) $\pmatrix{ 1&1&1&1&1 \cr
                              1&1&0&-1&0 \cr
                              0&1&1&-1&0 \cr}$ に付随する
GKZ hypergeometric system を関数 {\tt sm1\_gkz} で求める.
\begin{verbatim}
[1076]   F = sm1_gkz( [ [[1,1,1,1,1],[1,1,0,-1,0],[0,1,1,-1,0]], [1,0,0]]);
[[x5*dx5+x4*dx4+x3*dx3+x2*dx2+x1*dx1-1,-x4*dx4+x2*dx2+x1*dx1,
  -x4*dx4+x3*dx3+x2*dx2,
  -dx2*dx5+dx1*dx3,dx5^2-dx2*dx4],[x1,x2,x3,x4,x5]]
\end{verbatim}
\item このシステム {\tt F} の 方向 $(1,1,1,1,0)$ における
級数解の主部を求める.
\begin{verbatim}
[1077]  A= dsolv_starting_term(F[0],F[1],[1,1,1,1,0])$
Computing the initial ideal.
Done.
Computing a primary ideal decomposition.
Primary ideal decomposition of the initial Frobenius ideal
to the direction [1,1,1,1,0] is
[[[x5+2*x4+x3-1,x5+3*x4-x2-1,x5+2*x4+x1-1,3*x5^2+(8*x4-6)*x5-8*x4+3,
   x5^2-2*x5-8*x4^2+1,x5^3-3*x5^2+3*x5-1],
 [x5-1,x4,x3,x2,x1]]]

----------- root is [ 0 0 0 0 1 ]
----------- dual system is
[x5^2+(-3/4*x4-1/2*x3-1/4*x2-1/2*x1)*x5+1/8*x4^2
 +(1/4*x3+1/4*x1)*x4+1/4*x2*x3-1/8*x2^2+1/4*x1*x2,
 x4-2*x3+3*x2-2*x1,x5-x3+x2-x1,1]
\end{verbatim}
\item 展開の主部 4 通りあり, それぞれを因数分解すると,
次のようになる.
たとえば, 3 番目の
{\tt [[1,1],[x5,1],[-log(x1)+log(x2)-log(x3)+log(x5),1]], }
は,
\[
x_5 (-\log x_1 + \log x_2 - \log x_3 + \log x_5) =
   x+5 \log \frac{x_2 x_5}{x_1 x_3}
\]
から始まる級数解が存在することを意味する.
\begin{verbatim}
[1078] A[0];
[[ 0 0 0 0 1 ]]
[1079] map(fctr,A[1][0]);
[[[1/8,1],[x5,1],[log(x2)+log(x4)-2*log(x5),1],
          [2*log(x1)-log(x2)+2*log(x3)+log(x4)-4*log(x5),1]],
 [[1,1],[x5,1],[-2*log(x1)+3*log(x2)-2*log(x3)+log(x4),1]],
 [[1,1],[x5,1],[-log(x1)+log(x2)-log(x3)+log(x5),1]],
 [[1,1],[x5,1]]]
\end{verbatim}
\end{enumerate}
{\tt dsolv\_starting\_term} では, kan/sm1 が D-加群の計算,
asir が準素イデアル分解の計算, 解の計算を担当している.
解の展開の方向が何通り存在するかを調べるには,
tigers を援用するとよい.

\section{新しい数学ソフトウェアを OpenXM に追加するには?}

研究上, 必要な計算の一部を実行するのに, OpenXM 非対応の数式処理システム
が必要な場合がありうる.  また, 普段使いなれているシステムでプログラムを
書きたいということもある.  そのような場合に, その数式処理システムを
OpenXM 規約に対応させる方法を説明しよう.  ある数式処理システムを新たに
OpenXM サーバにするには, みっつのやり方が考えられる.

ひとつは, そのシステム自体に直接に変更を加えることである.  これはもちろ
ん, そのシステムのソースがなければ不可能である.  この例としては,
gnuplot, PHC, TiGERS がある.

ふたつめは, そのシステムを呼び出すような wrapper を用意することである.
クライアントと wrapper との間は, OpenXM プロトコルで通信し, wrapper は
OpenXM サーバとしてふるまう.  数式処理システムと wrapper との間はそのシ
ステムの固有の通信プロトコルを用いる.  この方法をとっているのは,
Mathematica である.  Mathematica の場合は, wrapper と Mathematica kernel
との間は, MathLink を用いて通信している.

最後は, その数式処理システムが内蔵する言語で, OpenXM サーバを書くことで
ある.  Macaulay 2 は, この方法を用いている.  ただし, 任意のファイルディ
スクリプタを読み書きする機能はなかったので, M2 起動時に, 標準入出力はファ
イルディスクリプタ 3,4 に dup されている.  (3,4 は OpenXM 規約で決められ
た特別なディスクリプタである)

\section{OpenXM の入手方法}

OpenXM の入手手順は公式ウェブページ {\tt http://www.openxm.org/} に指示
されているが, ここで少し補足しておく.

まず, OpenXM には安定版と開発版がある.
安定版にはリリース番号がつけられ, 原則的に匿名 ftp または Web で入手可能
である.
公式の匿名 ftp サイトは \\
{\tt ftp://ftp.math.sci.kobe-u.ac.jp/pub/OpenXM/}である.

OpenXM の開発版はいま, 開発途上のソースそのものである.  したがって, 稀で
はあるが, 思わぬバグが入り込んでいたりコンパイルができない場合も有り得る
ので要注意である.  ただし, 新しい機能は開発版にしか存在しないこともある.

開発版は CVS あるいは CVSup によって入手可能である.

\subsection{匿名 CVS による入手}

OpenXM プロジェクトではソフトウェアの開発, 保守に CVS を利用している.
ユーザは, committer でなくとも, 匿名 CVS によって, ソースを入手できる.

まず, オペレーティングシステムに CVS がインストールされている必要がある.
現在の多くのシステムでは最初から CVS がインストールされているか, あるい
は, バイナリパッケージで用意されている.  もし, CVS がインストールされて
いなければ, {\tt http://www.cvshome.org/} から入手してほしい.

さて, 以下の手順で, 匿名 CVS を利用できる.
まず, 最初の一回は, パスワードを登録する手続きが必要である.

\begin{verbatim}
% setenv CVSROOT :pserver:anoncvs@kerberos.math.kobe-u.ac.jp:/home/cvs
% cvs login
\end{verbatim}

ここで, パスワードを聞かれるので, anoncvs と入力する.  これで,
{\tt \$HOME/.cvspass} にパスワードが記入されたはずである.

準備が終わったら, 実際に checkout を行おう.
\begin{verbatim}
% setenv CVSROOT :pserver:anoncvs@kerberos.math.kobe-u.ac.jp:/home/cvs
% cvs checkout OpenXM OpenXM_contrib OpenXM_contrib2
\end{verbatim}

カレントディレクトリに
{\tt OpenXM},
{\tt OpenXM\_contrib},
{\tt OpenXM\_contrib2} の3つのディレクトリができているはずである.
OpenXM のソースはこれらのディレクトリに含まれている.

\subsection{CVSup による入手}
CVSup はフリーソフトウェアであり,
{\tt http://www.polstra.com/projects/freeware/CVSup/}
からソースまたはバイナリが入手できる.

CVSup では開発版の最新のソースのみを入手できる.  CVS でのように, 特定の
バージョンを指定してダウンロードすることはできない.

さて, CVSup をインストールしたら, OpenXM のソースを展開するディレクトリと,
CVSup の作業ディレクトリを決める.
ここではそれぞれ,
/home/ohara/openxm および /home/ohara/tmp としよう.  これらのディレクトリはあら
かじめ用意しておく. さて, 次の内容で openxm-supfile を作成する.
\begin{verbatim}
*default host=cvsup.math.sci.kobe-u.ac.jp
*default base=/home/ohara/tmp
*default prefix=/home/ohara/openxm
*default release=cvs tag=.
*default delete use-rel-suffix
*default compress
openxm
openxm-contrib
openxm-contrib2
\end{verbatim}
あとはコマンドラインから次のように打ち込む.
\begin{verbatim}
% cvsup -g openxm-supfile		
\end{verbatim}
開発版の全てのソースが /home/ohara/openxm/ 以下にダウンロードされるはず
である.

\begin{thebibliography}{99}
\bibitem{OpenXM:CLO}
Cox, D., Little, J., O'Shea, D.,
{\it Ideals, Varieties, and Algorithms}, 2nd edition,
Springer-Verlag, 1996.

\bibitem{OpenXM:CLO2}
Cox, D., Little, J., O'Shea, D.,
{\it Using Algebraic Geometry},
Springer-Verlag, 1998.

\bibitem{OpenXM:HS}
Huber, B., Sturmfels, B.,
A Polyhedral Method for Solving Sparse Polynomial Systems,
Mathematics of Computation,
{\bf 64} (1995), 1541--1555.

\bibitem{OpenXM:SST}
Saito, M., Sturmfels, B., Takayama, N.,
{\it Gr\"obner deformations of hypergeometric differential
equations}.  Algorithms and Computation in Mathematics, 6.
Springer-Verlag, Berlin, 2000.

\bibitem{OpenXM:noro-book}
野呂正行:  計算代数入門, Rokko Lectures in Mathematics, 9, 2000. \\
ISBN 4-907719-09-4. \\
{\tt ftp://ftp.math.kobe-u.ac.jp/pub/OpenXM/Head/openxm-head.tar.gz}
のディレクトリ {\tt OpenXM/doc/compalg} にこの本の \TeX ソースがある.

\bibitem{OpenXM:RFC-100}
高山信毅, 野呂正行: OpenXM の設計と実装 (OX-RFC-100), 2000/11/17.\\
{\tt http://www.math.sci.kobe-u.ac.jp/OpenXM/1.1.3/html/OpenXM-ja/OpenXM/}

\bibitem{OpenXM:RFC-101}
小原功任: 
エンジン起動プロトコル (OX-RFC-101 Draft). \\
{\tt http://www.math.sci.kobe-u.ac.jp/OpenXM/1.1.3/html/OX-RFC-101-ja/OX-RFC-101/}


\end{thebibliography}

\end{document}
