%$OpenXM: OpenXM/doc/calc2000p/calc2000.tex,v 1.2 2000/06/30 00:33:34 noro Exp $
%% You need acmconf.cls and flushend.sty to compile this file.
%% They may be obtained from 
%%  http://riksun.riken.go.jp/archives/tex-archive/macros/latex/contrib/supported/acmconf/
\documentclass[notitlepage]{book}
\usepackage{behringer1}
%\documentclass{article}
%% \CopyrightText{\copyright 2000, }
\IfFileExists{graphicx.sty}{\usepackage{graphicx}}{}
\IfFileExists{epsfig.sty}{\usepackage{epsfig}}{}
%\ConferenceName{ISSAC 2000, St. Andrews, UK, 2000}
%\ConferenceShortName{ISSAC2000}
\def\OpenXM{{\rm OpenXM\ }}

\begin{document}
%\date{January 16, 2000}
\date{}
\title{OpenXM 
      --- an Open System \\ to Integrate Mathematical Software}
\author{
{\hfil}
\and
{Masahide Maekawa \quad Yukio Okutani}\\
{Nobuki Takayama \quad Yasushi Tamura}\\
Kobe University
\and
{\hfil}
\and
{Masayuki Noro}\\
{Fujitsu Labs}
\and
{Katsuyoshi Ohara}\\
{Kanazawa University}
}
\maketitle

OpenXM (Open message eXchange protocol for Mathematics)
is a project aiming to integrate data, control and user interfaces
with the following fundamental architecture.
\begin{enumerate}
\item Communication is an exchange of {\it OX (OpenXM) messages},
which are classified into three types:
DATA, COMMAND, and SPECIAL.
{\it OX data messages} wrap mathematical data.
We use standards of mathematical data formats such as OpenMath and MP
as well as our own data format {\it CMO}
({\it Common Mathematical Object format}).
\item Each server, which provides services to other processes, is a stack machine. The stack machine is called the {\it OX stack machine}.
Existing mathematical software tools are wrapped with this stack machine.
\item Any server may have a hybrid interface;
it may accept and execute not only stack machine commands, 
but also its original command sequences.
For example,
if we send the following string to the {\tt ox\_asir} server 
(OpenXM server based on Risa/Asir)\\
\verb+            "fctr(x^100-y^100);"+\\
and call the stack machine command\\
\verb+            SM_executeStringByLocalParser+\\
then the server executes the asir command
\verb+fctr(x^100-y^100);+ 
(factorize $x^{100}-y^{100}$ over ${\bf Q}$)
and pushes the result onto the stack.
\item Network transparent supports for controlling servers are provided.
For example OpenXM defines a robust reset procedure to restart computations
without any confusion in I/O buffers.
It is very useful for debugging programs running on distributed environment.
\end{enumerate}
%OpenXM has been designed and implemented from experimental mathematician's
%point of view, i.e., 
OpenXM is supposed to be used to connect mathematical
softwares in the academic community and to test new ideas in distributed
algorithms in mathematics.
Currently the following servers are available in the OpenXM package.

\begin{description}
\item{\tt ox\_asir}
A server for Risa/Asir, a general-purpose computer algebra
system. It provides almost
all functionalities of Risa/Asir such as polynomial factorization,
Gr\"obner basis computation and primary ideal decomposition.
\item{\tt ox\_sm1}
A server for Kan/sm1, a system for computation in 
the ring of differential operators including computation of Gr\"obner bases
and cohomology groups.
\item {\tt ox\_phc}
A server for PHC pack, a general-purpose solver for
polynomial systems by homotopy continuation. 
\item {\tt ox\_tigers}
A server for TiGERS, a system to enumerate
all Gr\"obner bases of affine toric ideals.
It can be used to determine the state polytope
of a given affine toric ideal.
\item {\tt ox\_gnuplot}
A server for GNUPLOT, a famous plotting tool.
\item {\tt ox\_math}
A server for Mathematica.
\item {\tt OMproxy}
A server for translation between CMO and OpenMath/XML expressions.
It is written in Java.
This module provides Java classes OXmessage, CMO, and SM
for the OpenXM protocol, too.
\end{description}
In addition to these servers, Risa/Asir, Kan/sm1 and Mathematica
can act as clients. 
For example, the following is a command sequence to ask $1+1$ from
the Asir client to the {\tt ox\_sm1} server:
\begin{verbatim}
  P = sm1_start(); ox_push_cmo(P,1); ox_push_cmo(P,1);
  ox_execute_string(P,"add"); ox_pop_cmo(P);
\end{verbatim}
The OpenXM package is implemented on the  OpenXM for TCP/IP, 
which uses the client-server model.
The OpenXM on MPI is currently tested on Risa/Asir,
where collective operations such as broadcast and reduction
are implemented to achieve a real speedup for massively parallel cases.
A C library interface is available for some servers.
The source code and binary packages are distributed from
{\tt http://www.openxm.org}.
The current version is 1.1.2.
Documents and a full paper including references are available
from this cite, too.
\end{document}
