version 1.4, 2000/01/24 02:48:24 |
version 1.11, 2001/08/27 05:39:15 |
|
|
%% $OpenXM: OpenXM/doc/OpenXM-specs/cmo-basic1.tex,v 1.3 2000/01/23 05:28:33 noro Exp $ |
%% $OpenXM: OpenXM/doc/OpenXM-specs/cmo-basic1.tex,v 1.10 2001/04/10 11:56:29 takayama Exp $ |
//&jp \section{ 数, 多項式 の CMO 表現 } |
//&jp \section{ 数, 多項式 の CMO 表現 } |
//&eg \section{ CMOexpressions for numbers and polynomials } |
//&eg \section{ CMOexpressions for numbers and polynomials } |
\label{sec:basic1} |
\label{sec:basic1} |
|
|
以下, グループ CMObject/Basic, CMObject/Tree |
以下, グループ CMObject/Basic, CMObject/Tree |
および CMObject/DistributedPolynomial |
および CMObject/DistributedPolynomial |
に属する CMObject の形式を説明する. |
に属する CMObject の形式を説明する. |
\noroa{ tagged list を導入すべきか? cf. SSkan/plugin/cmo.txt } |
|
|
|
|
\noindent |
|
{\tt OpenXM/src/ox\_toolkit} にある {\tt bconv} をもちいると |
|
CMO expression を binary format に変換できるので, |
|
これを参考にするといい. |
*/ |
*/ |
/*&eg |
/*&eg |
In the sequel, we will explain on the groups |
In the sequel, we will explain on the groups |
CMObject/Basic, CMObject/Tree |
CMObject/Basic, CMObject/Tree |
and CMObject/DistributedPolynomial. |
and CMObject/DistributedPolynomial. |
|
|
|
\noindent |
|
The program {\tt bconv} at {\tt OpenXM/src/ox\_toolkit} |
|
translates |
|
CMO expressions into binary formats. |
|
It is convinient to understand the binary formats explained in |
|
this section. |
*/ |
*/ |
|
|
|
/*&C |
|
\noindent Example: |
|
\begin{verbatim} |
|
bash$ ./bconv |
|
> (CMO_ZZ,123123); |
|
00 00 00 14 00 00 00 01 00 01 e0 f3 |
|
\end{verbatim} |
|
*/ |
/*&jp |
/*&jp |
|
|
\bigbreak |
\bigbreak |
Line 46 ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/B |
|
Line 64 ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/B |
|
\mbox{Zero} &:& ({\tt CMO\_ZERO}) \\ |
\mbox{Zero} &:& ({\tt CMO\_ZERO}) \\ |
& & \mbox{ --- ユニバーサルな ゼロを表す. } \\ |
& & \mbox{ --- ユニバーサルな ゼロを表す. } \\ |
\mbox{ZZ} &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots |
\mbox{ZZ} &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots |
{\sl byte}\, \mbox{a[m]} ) \\ |
{\sl byte}\, \mbox{a[$|$f$|$]} ) \\ |
&:& \mbox{ --- bignum をあらわす. a[i] についてはあとで説明}\\ |
&:& \mbox{ --- bignum をあらわす. a[i] についてはあとで説明}\\ |
\mbox{QQ} &:& ({\tt CMO\_QQ}, {\sl ZZ}\, {\rm a}, {\sl ZZ}\, {\rm b}) \\ |
\mbox{QQ} &:& ({\tt CMO\_QQ}, |
|
{\sl int32}\, {\rm m}, {\sl byte}\, \mbox{a[1]}, \ldots, {\sl byte}\, \mbox{a[$|$m$|$]}, |
|
{\sl int32}\, {\rm n}, {\sl byte}\, \mbox{b[1]}, \ldots, {\sl byte}\, \mbox{b[$|$n$|$]})\\ |
& & \mbox{ --- 有理数 $a/b$ を表す. } \\ |
& & \mbox{ --- 有理数 $a/b$ を表す. } \\ |
\mbox{Rational} &:& ({\tt CMO\_RATIONAL}, {\sl CMObject}\, {\rm a}, {\sl CMObject}\, {\rm b}) \\ |
\mbox{Rational} &:& ({\tt CMO\_RATIONAL}, {\sl CMObject}\, {\rm a}, {\sl CMObject}\, {\rm b}) \\ |
& & \mbox{ --- $a/b$ を表す. } \\ |
& & \mbox{ --- $a/b$ を表す. } \\ |
Line 66 ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/B |
|
Line 86 ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/B |
|
\mbox{Zero} &:& ({\tt CMO\_ZERO}) \\ |
\mbox{Zero} &:& ({\tt CMO\_ZERO}) \\ |
& & \mbox{ --- Universal zero } \\ |
& & \mbox{ --- Universal zero } \\ |
\mbox{ZZ} &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots |
\mbox{ZZ} &:& ({\tt CMO\_ZZ},{\sl int32}\, {\rm f}, {\sl byte}\, \mbox{a[1]}, \ldots |
{\sl byte}\, \mbox{a[m]} ) \\ |
{\sl byte}\, \mbox{a[$|$m$|$]} ) \\ |
&:& \mbox{ --- bignum. The meaning of a[i] will be explained later.}\\ |
&:& \mbox{ --- bignum. The meaning of a[i] will be explained later.}\\ |
\mbox{QQ} &:& ({\tt CMO\_QQ}, {\sl ZZ}\, {\rm a}, {\sl ZZ}\, {\rm b}) \\ |
\mbox{QQ} &:& ({\tt CMO\_QQ}, |
|
{\sl int32}\, {\rm m}, {\sl byte}\, \mbox{a[1]}, \ldots, {\sl byte}\, \mbox{a[$|$m$|$]}, |
|
{\sl int32}\, {\rm n}, {\sl byte}\, \mbox{b[1]}, \ldots, {\sl byte}\, \mbox{b[$|$n$|$]})\\ |
& & \mbox{ --- Rational number $a/b$. } \\ |
& & \mbox{ --- Rational number $a/b$. } \\ |
\mbox{Rational} &:& ({\tt CMO\_RATIONAL}, {\sl CMObject}\, {\rm a}, {\sl CMObject}\, {\rm b}) \\ |
\mbox{Rational} &:& ({\tt CMO\_RATIONAL}, {\sl CMObject}\, {\rm a}, {\sl CMObject}\, {\rm b}) \\ |
& & \mbox{ --- Rational expression $a/b$. } \\ |
& & \mbox{ --- Rational expression $a/b$. } \\ |
Line 81 ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/B |
|
Line 103 ZZ, QQ, Zero, Rational, Indeterminate,$\in$ CMObject/B |
|
*/ |
*/ |
|
|
/*&jp |
/*&jp |
|
\subsection{Indeterminate および Tree} |
Indeterminate は変数名をあらわす. |
Indeterminate は変数名をあらわす. |
v はバイト列であればなにを用いてもよいが, |
v はバイト列であればなにを用いてもよいが, |
システム毎に変数名として用いられるバイト列は制限がある. |
システム毎に変数名として用いられるバイト列は制限がある. |
Line 92 escape sequence を用いて実現するのは, 無理があるようで |
|
Line 115 escape sequence を用いて実現するのは, 無理があるようで |
|
テーブルを作成する必要があるであろう.) |
テーブルを作成する必要があるであろう.) |
*/ |
*/ |
/*&eg |
/*&eg |
|
\subsection{Indetermnate and Tree} |
Indeterminate is a name of a variable. |
Indeterminate is a name of a variable. |
v may be any sequence of bytes, but each system has its own |
v may be any sequence of bytes, but each system has its own |
restrictions on the names of variables. |
restrictions on the names of variables. |
Line 106 Group CMObject/Tree requires CMObject/Basic. \\ |
|
Line 130 Group CMObject/Tree requires CMObject/Basic. \\ |
|
Tree, Lambda $\in$ CMObject/Basic. \\ |
Tree, Lambda $\in$ CMObject/Basic. \\ |
\begin{eqnarray*} |
\begin{eqnarray*} |
\mbox{Tree} &:& ({\tt CMO\_TREE}, {\sl Cstring}\, {\rm name}, |
\mbox{Tree} &:& ({\tt CMO\_TREE}, {\sl Cstring}\, {\rm name}, |
{\sl Cstring}\, {\rm cdname}, {\sl List}\, {\rm leaves}) \\ |
{\sl List}\, {\rm attributes}, {\sl List}\, {\rm leaves}) \\ |
& & \mbox{ --- 名前 name の定数または関数. 関数の評価はおこなわない. } \\ |
& & \mbox{ --- 名前 name の定数または関数. 関数の評価はおこなわない. } \\ |
& & \mbox{ --- cdname は空文字列でなければ name の意味が説明されている }\\ |
& & \mbox{ --- attributes は空リストでなければ name の属性を保持している. }\\ |
& & \mbox{ --- OpenMath CD (content dictionary) の名前. } \\ |
& & \mbox{ --- 属性リストは, key と 値のペアである. }\\ |
\mbox{Lambda} &:& ({\tt CMO\_LAMBDA}, {\sl List}\, {\rm args}, |
\mbox{Lambda} &:& ({\tt CMO\_LAMBDA}, {\sl List}\, {\rm args}, |
{\sl Tree} {\rm body}) \\ |
{\sl Tree} {\rm body}) \\ |
& & \mbox{ --- body を args を引数とする関数とする. } \\ |
& & \mbox{ --- body を args を引数とする関数とする. } \\ |
Line 123 Group CMObject/Tree requires CMObject/Basic. \\ |
|
Line 147 Group CMObject/Tree requires CMObject/Basic. \\ |
|
Tree, Lambda $\in$ CMObject/Basic. \\ |
Tree, Lambda $\in$ CMObject/Basic. \\ |
\begin{eqnarray*} |
\begin{eqnarray*} |
\mbox{Tree} &:& ({\tt CMO\_TREE}, {\sl Cstring}\, {\rm name}, |
\mbox{Tree} &:& ({\tt CMO\_TREE}, {\sl Cstring}\, {\rm name}, |
{\sl Cstring}\, {\rm cdname}, {\sl List}\, {\rm leaves}) \\ |
{\sl List}\, {\rm attributes}, {\sl List}\, {\rm leaves}) \\ |
& & \mbox{ --- A function or a constant of name. Functions are not evaluated. } \\ |
& & \mbox{ --- A function or a constant of name. Functions are not evaluated. } \\ |
& & \mbox{ --- cdname may be a null. If it is not null, it is the name of}\\ |
& & \mbox{ --- attributes may be a null list. If it is not null, it is a list of}\\ |
& & \mbox{ --- the OpenMath CD (content dictionary). } \\ |
& & \mbox{ --- key and value pairs. } \\ |
\mbox{Lambda} &:& ({\tt CMO\_LAMBDA}, {\sl List}\, {\rm args}, |
\mbox{Lambda} &:& ({\tt CMO\_LAMBDA}, {\sl List}\, {\rm args}, |
{\sl Tree} {\rm body}) \\ |
{\sl Tree} {\rm body}) \\ |
& & \mbox{ --- a function with the arguments body. } \\ |
& & \mbox{ --- a function with the arguments body. } \\ |
Line 167 stack machine commands for delayed evaluation. |
|
Line 191 stack machine commands for delayed evaluation. |
|
However it makes the implementation of stack machines complicated. |
However it makes the implementation of stack machines complicated. |
It is desirable that CMObject is independent of OX stack machine. |
It is desirable that CMObject is independent of OX stack machine. |
Therefore we introduce an OpenMath like tree representation for CMO |
Therefore we introduce an OpenMath like tree representation for CMO |
tree object. |
Tree object. |
This method allows us to implement tree structure easily |
This method allows us to implement tree structure easily |
on individual OpenXM systems. |
on individual OpenXM systems. |
Note that CMO Tree corresponds to Symbol and Application in OpenMath. |
Note that CMO Tree corresponds to Symbol and Application in OpenMath. |
Line 190 It is the same as the Lambda expression in Lisp. |
|
Line 214 It is the same as the Lambda expression in Lisp. |
|
//&jp 例: $sin(x+e)$ の表現. |
//&jp 例: $sin(x+e)$ の表現. |
//&eg Example: the expression of $sin(x+e)$. |
//&eg Example: the expression of $sin(x+e)$. |
\begin{verbatim} |
\begin{verbatim} |
(CMO_TREE, (CMO_STRING, "sin"), (CMO_STRING, "basic"), |
(CMO_TREE, (CMO_STRING, "sin"), |
|
(CMO_LIST,[size=]1,(CMO_LIST,[size=]2,(CMO_STRING, "cdname"), |
|
(CMO_STRING,"basic"))) |
(CMO_LIST,[size=]1, |
(CMO_LIST,[size=]1, |
(CMO_TREE, (CMO_STRING, "plus"), (CMO_STRING, "basic"), |
(CMO_TREE, (CMO_STRING, "plus"), (CMO_STRING, "basic"), |
(CMO_LIST,[size=]2, (CMO_INDETERMINATE,"x"), |
(CMO_LIST,[size=]2, (CMO_INDETERMINATE,"x"), |
//&jp (CMO_TREE,(CMO_STRING, "e"), 自然対数の底 |
//&jp (CMO_TREE,(CMO_STRING, "e"), 自然対数の底 |
//&eg (CMO_TREE,(CMO_STRING, "e"), Napier's number |
//&eg (CMO_TREE,(CMO_STRING, "e"), the base of natural logarithms |
(CMO_STRING, "basic")) |
(CMO_STRING, "basic")) |
)) |
)) |
) |
) |
) |
) |
\end{verbatim} |
\end{verbatim} |
|
//&jp Leave の成分には, 多項式を含む任意のオブジェクトがきてよい. |
|
//&eg Elements of the leave may be any objects including polynomials. |
|
|
\noindent |
\noindent |
Example: |
Example: |
\begin{verbatim} |
\begin{verbatim} |
sm1> [(plus) (Basic) [(123).. (345)..]] [(class) (tree)] dc :: |
sm1> [(plus) (Basic) [(123).. (345)..]] [(class) (tree)] dc :: |
Class.tree [ $plus$ , $Basic$ , [ 123 , 345 ] ] |
Class.tree [ $plus$ , $basic$ , [ 123 , 345 ] ] |
\end{verbatim} |
\end{verbatim} |
|
|
|
|
Line 533 $\in$ CMObject/RecursivePolynomial \\ |
|
Line 561 $\in$ CMObject/RecursivePolynomial \\ |
|
\mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} \\ |
\mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} \\ |
\mbox{RringDefinition} |
\mbox{RringDefinition} |
& : & \mbox{ {\sl List} v } \\ |
& : & \mbox{ {\sl List} v } \\ |
& & \quad \mbox{ --- v は, 変数名(indeterminate) のリスト. } \\ |
& & \quad \mbox{ --- v は, 変数名(indeterminate) または Tree のリスト. } \\ |
& & \quad \mbox{ --- 順序の高い順. } \\ |
& & \quad \mbox{ --- 順序の高い順. } \\ |
\end{eqnarray*} |
\end{eqnarray*} |
*/ |
*/ |
Line 563 $\in$ CMObject/RecursivePolynomial \\ |
|
Line 591 $\in$ CMObject/RecursivePolynomial \\ |
|
\mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} \\ |
\mbox{ Polynomial in 1 variable}\, | \, \mbox{Coefficient} \\ |
\mbox{RringDefinition} |
\mbox{RringDefinition} |
& : & \mbox{ {\sl List} v } \\ |
& : & \mbox{ {\sl List} v } \\ |
& & \quad \mbox{ --- v is a list of names of indeterminates. } \\ |
& & \quad \mbox{ --- v is a list of names of indeterminates or trees. } \\ |
& & \quad \mbox{ --- It is sorted in the decreasing order. } \\ |
& & \quad \mbox{ --- It is sorted in the decreasing order. } \\ |
\end{eqnarray*} |
\end{eqnarray*} |
*/ |
*/ |
Line 677 $\in$ CMObject/MachineDouble \\ |
|
Line 705 $\in$ CMObject/MachineDouble \\ |
|
|
|
\bigbreak |
\bigbreak |
//&jp 次に IEEE 準拠の float および Big float を定義しよう. |
//&jp 次に IEEE 準拠の float および Big float を定義しよう. |
//&eg We define IEEE conformant float and big float. |
//&eg We define float and big float conforming to the IEEE standard. |
\begin{verbatim} |
\begin{verbatim} |
#define CMO_BIGFLOAT 50 |
#define CMO_BIGFLOAT 50 |
#define CMO_IEEE_DOUBLE_FLOAT 51 |
#define CMO_IEEE_DOUBLE_FLOAT 51 |
Line 688 IEEE 準拠の float については, IEEE 754 double precisio |
|
Line 716 IEEE 準拠の float については, IEEE 754 double precisio |
|
format (64 bit) の定義を見よ. |
format (64 bit) の定義を見よ. |
*/ |
*/ |
/*&eg |
/*&eg |
See IEEE 754 double precision floating-point (64 bit) for the details of IEEE |
See IEEE 754 double precision floating-point (64 bit) for the details of |
conformant float. |
float conforming to the IEEE standard. |
*/ |
*/ |
|
|
\noindent |
\noindent |