型
*

Data types
**********

Asir で使用可能な型
============

Types in Asir
=============

Asir においては, 可読な形式で入力されたさまざまな対象は, パーザにより中間言語に変換され, インタプリタにより Risa の計算エンジンを呼び出しながら内部形式に変換される. 変換された対象は, 次のいずれかの型を持つ. 各番号は, 組み込み函数 type() により返される値に対応している. 各例は, Asir のプロンプトに対する入力が可能な形式のいくつかを示す.

In Asir, various objects described according to the syntax of Asir are translated to intermediate forms and by Asir interpreter further translated into internal forms with the help of basic algebraic engine.  Such an object in an internal form has one of the following types listed below. In the list, the number coincides with the value returned by the built-in function type(). Each example shows possible forms of inputs for Asir's prompt.

0 0

     実際には 0 を識別子にもつ対象は存在しない. 0 は, C における 0 ポインタにより表現されている. しかし, 便宜上 Asir の type(0) は値 0 を返す.

     As a matter of fact, no object exists that has 0 as its identification number.  The number 0 is implemented as a null (0) pointer of C language. For convenience's sake,  a 0 is returned for the input type(0).

1 数

1 number

          1 2/3  14.5  3+2*@i

     数は, さらにいくつかの型に分けられる. これについては下で述べる.

     Numbers have sub-types. See Types of numbers.

2 多項式 (数でない)

2 polynomial (but not a number)

          x  afo  (2.3*x+y)^10

     多項式は, 全て展開され, その時点における変数順序に従って, 再帰的に 1 変数多項式として降冪の順に整理される. (see 分散表現多項式.) この時, その多項式に現れる順序最大の変数を 主変数 と呼ぶ.

     Every polynomial is maintained internally in its full expanded form, represented as a nested univariate polynomial, according to the current variable ordering, arranged by the descending order of exponents. (see Distributed polynomial.) In the representation, the indeterminate (or variable), appearing in the polynomial, with maximum ordering is called the main variable. Moreover, we call the coefficient of the maximum degree term of the polynomial with respect to the main variable the leading coefficient.

3 有理式 (多項式でない)

3 rational expression (not a polynomial)

          (x+1)/(y^2-y-x)  x/x

     有理式は, 分母分子が約分可能でも, 明示的に red() が呼ばれない限り約分は行われない. これは, 多項式の GCD 演算が極めて重い演算であるためで, 有理式の演算は注意が必要である.

     Note that in Risa/Asir a rational expression is not simplified by reducing the common divisors unless red() is called explicitly, even if it is possible.  This is because the GCD computation of polynomials is a considerably heavy operation.  You have to be careful enough in operating rational expressions.

4 リスト

4 list

          []  [1,2,[3,4],[x,y]]

     リストは読み出し専用である. [] は空リストを意味する. リストに対する操作としては, car(), cdr(), cons() などによる操作の他に, 読み出し専用の配列とみなして, [INDEX] を必要なだけつけることにより要素の取り出しを行うことができる. 例えば

     Lists are all read-only object. A null list is specified by []. There are operations for lists: car(), cdr(), cons() etc.  And further more, element referencing by indexing is available.  Indexing is done by putting [INDEX]'s after a program variable as many as are required. For example,

          [0] L = [[1,2,3],[4,[5,6]],7]$
          [1] L[1][1];
          [5,6]

     注意すべきことは, リスト, 配列 (行列, ベクトル) 共に, インデックスは 0 から始まることと, リストの要素の取り出しをインデックスで行うことは, 結局は先頭からポインタをたどることに相当するため, 配列に対する操作に比較して大きなリストでは時間がかかる場合があるということである.

     Notice that for lists, matrices and vectors, the index begins with number 0.  Also notice that referencing list elements is done by following pointers from the first element.  Therefore, it sometimes takes much more time to perform referencing operations on a large list than on a vectors or a matrices with the same size.

5 ベクトル

5 vector

          newvect(3)  newvect(2,[a,1])

     ベクトルは, newvect() で明示的に生成する必要がある. 前者の例では2 成分の 0 ベクトルが生成され, 後者では, 第 0 成分が a, 第 1 成分が 1 のベクトルが生成される. 初期化のための 第 2 引数は, 第 1 引数以下の長さのリストを受け付ける. リストの要素は左から用いられ, 足りない分は 0 が補われる. 成分は [INDEX] により取り出せる. 実際には, 各成分に, ベクトル, 行列, リストを含む任意の型の対象を代入できるので, 多次元配列をベクトルで表現することができる.

     Vector objects are created only by explicit execution of newvect() command.  The first example above creates a null vector object with 3 elements.  The other example creates a vector object with 2 elements which is initialized such that its 0-th element is a and 1st element is 1. The second argument for newvect is used to initialize elements of the newly created vector.  A list with size smaller or equal to the first argument will be accepted.  Elements of the initializing list is used from the left to the right.  If the list is too short to specify all the vector elements, the unspecified elements are filled with as many 0's as are required. Any vector element is designated by indexing, e.g., [INDEX]. Asir allows any type, including vector, matrix and list, for each respective element of a vector. As a matter of course, arrays with arbitrary dimensions can be represented by vectors, because each element of a vector can be a vector or matrix itself. An element designator of a vector can be a left value of assignment statement.  This implies that an element designator is treated just like a simple program variable. Note that an assignment to the element designator of a vector has effect on the whole value of that vector.

          [0] A3 = newvect(3);
          [ 0 0 0 ]
          [1] for (I=0;I<3;I++)A3[I] = newvect(3);
          [2] for (I=0;I<3;I++)for(J=0;J<3;J++)A3[I][J]=newvect(3);
          [3] A3;
          [ [ [ 0 0 0 ] [ 0 0 0 ] [ 0 0 0 ] ]
          [ [ 0 0 0 ] [ 0 0 0 ] [ 0 0 0 ] ]
          [ [ 0 0 0 ] [ 0 0 0 ] [ 0 0 0 ] ] ]
          [4] A3[0];
          [ [ 0 0 0 ] [ 0 0 0 ] [ 0 0 0 ] ]
          [5] A3[0][0];
          [ 0 0 0 ]

6 行列

6 matrix

          newmat(2,2)  newmat(2,3,[[x,y],[z]])

     行列の生成も newmat() により明示的に行われる. 初期化も, 引数がリストのリストとなることを除いてはベクトルと同様で, リストの各要素 (これはまたリストである) は, 各行の初期化に使われ, 足りない部分には 0 が埋められる. 行列も, 各要素には任意の対象を代入できる. 行列の各行は, ベクトルとして取り出すことができる.

     Like vector objects, matrix objects are also created only by explicit execution of newmat() command. Initialization of the matrix elements are done in a similar manner with that of the vector elements except that the elements are specified by a list of lists.  Each element, again a list, is used to initialize each row; if the list is too short to specify all the row elements, unspecified elements are filled with as many 0's as are required. Like vectors, any matrix element is designated by indexing, e.g., [INDEX][INDEX]. Asir also allows any type, including vector, matrix and list, for each respective element of a matrix. An element designator of a matrix can also be a left value of assignment statement.  This implies that an element designator is treated just like a simple program variable. Note that an assignment to the element designator of a matrix has effect on the whole value of that matrix. Note also that every row, (not column,) of a matrix can be extracted and referred to as a vector.

          [0] M=newmat(2,3);
          [ 0 0 0 ]
          [ 0 0 0 ]
          [1] M[1];
          [ 0 0 0 ]
          [2] type(@@);
          5

7 文字列

7 string

          ""  "afo"

     文字列は, 主にファイル名などに用いられる. 文字列に対しては加算のみが定義されていて, 結果は 2 つの文字列の結合である.

     Strings are used mainly for naming files.  It is also used for giving comments of the results.  Operator symbol + denote the concatenation  operation of two strings.

          [0] "afo"+"take";
          afotake

8 構造体

8 structure

          newstruct(afo)

     Asir における構造体は, C における構造体を簡易化したものである. 固定長配列の各成分を名前でアクセスできるオブジェクトで, 構造体定義毎に名前をつける.

     The type structure is a simplified version of that in C language. It is defined as a fixed length array and each entry of the array is accessed by its name. A name is associated with each structure.

9 分散表現多項式

9 distributed polynomial

          2*<<0,1,2,3>>-3*<<1,2,3,4>>

     これは, ほとんどグレブナ基底専用の型で, 通常の計算でこの型が必要となることはまずないが, グレブナ基底計算パッケージ自体がユーザ言語で書かれているため, ユーザが操作できるよう独立した型として  Asir で使用できるようにしてある. これについては see グレブナ基底の計算.

     This is the short for `Distributed representation of polynomials.' This type is specially devised for computation of Groebner bases. Though for ordinary users this type may never be needed, it is provided as a distinguished type that user can operate by Asir. This is because the Groebner basis package provided with Risa/Asir is written in the Asir user language. For details see Groebner basis computation.

10 符号なしマシン 32bit 整数

10 32bit unsigned integer

11 エラーオブジェクト

11 error object

     以上二つは, Open XM において用いられる特殊オブジェクトである.

     These are special objects used for OpenXM.

12 GF(2) 上の行列

12 matrix over GF(2)

     現在, 標数 2 の有限体における基底変換のためのオブジェクトとして用いられる.

     This is used for basis conversion in finite fields of characteristic 2.

13 MATHCAP オブジェクト

13 MATHCAP object

     Open XM において, 実装されている機能を送受信するためのオブジェクトである.

     This object is used to express available funcionalities for Open XM.

14 first order formula

     quantifier elimination で用いられる一階述語論理式.

     This expresses a first order formula used in quantifier elimination.

15 matrix over GF(P)

     小標数有限体上の行列.

     A matrix over a small finite field.

16 byte array

     符号なし byte の配列

     An array of unsigned bytes.

-1 VOID オブジェクト

-1 VOID object

     型識別子 -1 をもつオブジェクトは関数の戻り値などが無効であることを示す.

     The object with the object identifier -1 indicates that a return value of a function is void.

数の型
===

Types of numbers
================

0
     有理数

     rational number

     有理数は, 任意多倍長整数 (bignum) により実現されている. 有理数は常に既約分数で表現される.

     Rational numbers are implemented by arbitrary precision integers (bignum).  A rational number is always expressed by a fraction of lowest terms.

1
     倍精度浮動小数

     double precision floating point number (double float)

     マシンの提供する倍精度浮動小数である. Asir の起動時には, 通常の形式で入力された浮動小数はこの型に変換される. ただし, ctrl() により bigfloat が選択されている場合には bigfloat に変換される.

     The numbers of this type are numbers provided by the computer hardware. By default, when Asir is started, floating point numbers in a ordinary form are transformed into numbers of this type.  However, they will be transformed into bigfloat numbers when the switch bigfloat is turned on (enabled) by ctrl() command.

          [0] 1.2;
          1.2
          [1] 1.2e-1000;
          0
          [2] ctrl("bigfloat",1);
          1
          [3] 1.2e-1000;
          1.20000000000000000513 E-1000

     倍精度浮動小数と有理数の演算は, 有理数が浮動小数に変換されて, 浮動小数として演算される.

     A rational number shall be converted automatically into a double float number before the operation with another double float number and the result shall be computed as a double float number.

2
     代数的数

     algebraic number

     See 代数的数に関する演算.

     See Algebraic numbers.

3
     bigfloat

     bigfloat は, Asir では MPFR ライブラリにより実現されている. MPFR においては, bigfloat は, 仮数部のみ任意多倍長で, 指数部は 64bit 整数である. ctrl() で bigfloat を選択することにより, 以後の浮動小数の入力は bigfloat として扱われる. 精度はデフォルトでは 10 進 9 桁程度であるが, setprec(), setbprec() により指定可能である.

     The bigfloat numbers of Asir is realized by MPFR library. A bigfloat number of MPFR has an arbitrary precision mantissa part.  However, its exponent part admits only a 64bit integer. Floating point operations will be performed all in bigfloat after activating the bigfloat switch by ctrl() command. The default precision is 53 bits (about 15 digits), which can be specified by setbprec() and setprec() command.

          [0] ctrl("bigfloat",1);
          1
          [1] eval(2^(1/2));
          1.4142135623731
          [2] setprec(100);
          15
          [3] eval(2^(1/2));
          1.41421356237309504880168872420969807856967187537694...764157
          [4] setbprec(100);
          332
          [5] 1.41421356237309504880168872421

     eval() は, 引数に含まれる函数値を可能な限り数値化する函数である. setbprec() で指定された2 進桁数は, 丸めモードに応じた結果の精度を保証する. setprec() で指定される10進桁数は 2 進桁数に変換されて設定される.

     Function eval() evaluates numerically its argument as far as possible. Notice that the integer given for the argument of setbprec() guarantees the accuracy of the result according to the current rounding mode. The argument of setbprec() is converted to the corresonding bit length and set.

     (see eval deval.)

4
     複素数

     complex number

     複素数は, 有理数, 倍精度浮動小数, bigfloat を実部, 虚部として a+b*@i (@i は虚数単位) として与えられる数である. 実部, 虚部はそれぞれ real(), imag() で取り出せる.

     A complex number of Risa/Asir is a number with the form a+b*@i, where @i is the unit of imaginary number, and a and b are either a rational number, double float number or bigfloat number, respectively. The real part and the imaginary part of a complex number can be taken out by real() and imag() respectively.

5
     小標数の有限素体の元

     element of a small finite prime field

     ここで言う小標数とは, 標数が 2^27 未満のもののことである. このような有限体は, 現在のところグレブナ基底計算において内部的に用いられ, 有限体係数の分散表現多項式の係数を取り出すことで得られる. それ自身は属する有限体に関する情報は持たず, setmod() で設定されている素数 P を用いて GF(P) 上での演算が適用される.

     Here a small finite fieid means that its characteristic is less than 2^27. At present small finite fields are used mainly for groebner basis computation, and elements in such finite fields can be extracted by taking coefficients of distributed polynomials whose coefficients are in finite fields. Such an element itself does not have any information about the field to which the element belongs, and field operations are executed by using a prime P which is set by setmod().

6
     大標数の有限素体の元

     element of large finite prime field

     標数として任意の素数がとれる. この型の数は, 整数に対しsimp_ff を適用することにより得られる.

     This type expresses an element of a finite prime field whose characteristic is an arbitrary prime. An object of this type is obtained by applying simp_ff to an integer.

7
     標数 2 の有限体の元

     element of a finite field of characteristic 2

     標数 2 の任意の有限体の元を表現する. 標数 2 の有限体 F は, 拡大次数 [F:GF(2)] を n とすれば, GF(2) 上既約な n 次多項式 f(t) により F=GF(2)[t]/(f(t)) とあらわされる. さらに, GF(2)[t] の元 g は, f(t) も含めて自然な仕方でビット列とみなされるため, 形式上は, F の元 g mod f は, g, f  をあらわす 2 つのビット列で表現することができる.

     This type expresses an element of a finite field of characteristic 2. Let F be a finite field of characteristic 2. If [F:GF(2)] is equal to N, then F is expressed as F=GF(2)[t]/(f(t)), where f(t) is an irreducible polynomial over GF(2) of degree N. As an element G of GF(2)[t] can be expressed by a bit string, An element G MOD F in F can be expressed by two bit strings representing G and F respectively.

     F の元を入力するいくつかの方法が用意されている.

     Several methods to input an element of F are provided.

       * @

          @ はその後ろに数字, 文字を伴って, ヒストリや特殊な数をあらわすが, 単独で現れた場合には, F=GF(2)[t]/(f(t)) における t mod f をあらわす. よって, @ の多項式として F の元を入力できる. (@^10+@+1 など)

          @ represents T MOD F in F=GF(2)[t](f(t)). By using @ one can input an element of F. For example @^10+@+1 represents an element of F.

       * ptogf2n

          任意変数の 1 変数多項式を, ptogf2n により対応する F の元に変換する.

          ptogf2n converts a univariate polynomial into an element of F.

       * ntogf2n

          任意の自然数を, 自然な仕方で F の元とみなす. 自然数としては, 10 進, 16 進 (0x で始まる), 2 進 (0b で始まる) で入力が可能である.

          As a bit string, a non-negative integer can be regarded as an element of F. Note that one can input a non-negative integer in decimal, hexadecimal (0x prefix) and binary (0b prefix) formats.

       * その他

          micellaneous

          多項式の係数を丸ごと F の元に変換するような場合, simp_ff により変換できる.

          simp_ff is available if one wants to convert the whole coefficients of a polynomial.

8
     位数 P^N の有限体の元

     element of a finite field of characteristic P^N

     位数が P^N (P は任意の素数, N は正整数) は, 標数 P および GF(P) 上既約な N 次多項式 m(x) を setmod_ff により指定することにより設定する. この体の元は m(x) を法とする GF(P) 上の多項式として表現される.

     A finite field of order P^N, where P is an arbitrary prime and N is a positive integer, is set by setmod_ff by specifying its characteristic P and an irreducible polynomial of degree N over GF(P). An element of this field is represented by a polynomial over GF(P) modulo m(x).

9
     位数 P^N の有限体の元 (小位数)

     element of a finite field of characteristic P^N (small order)

     位数が P^N の有限体 (P^N が 2^29 以下, P が 2^14 以上なら N は 1) は, 標数 P および拡大次数 N を setmod_ff により指定することにより設定する. この体の 0 でない元は, P が 2^14 未満の場合, GF(P^N) の乗法群の生成元を固定することにより, この元のべきとして表される. これにより, この体の 0 でない元は, このべき指数として表現される. P が 2^14 以上の場合は通常の剰余による表現となるが, 共通のプログラムで双方の場合を扱えるようにこのような仕様となっている.

     A finite field of order P^N, where P^N must be less than 2^29 and N must be equal to 1 if P is greater or equal to 2^14, is set by setmod_ff by specifying its characteristic P the extension degree N. If P is less than 2^14, each non-zero element of this field is a power of a fixed element, which is a generator of the multiplicative group of the field, and it is represented by its exponent. Otherwise, each element is represented by the redue modulo P. This specification is useful for treating both cases in a single program.

10
     位数 P^N の小位数有限体の代数拡大の元

     element of a finite field which is an algebraic extension of a small finite field of characteristic P^N

     前項の, 位数が P^N の小位数有限体の M 次拡大の元である. 標数 P および拡大次数 N, M を setmod_ff により指定することにより設定する. 基礎体上の M 次既約多項式が自動生成され, その代数拡大の生成元の定義多項式として用いられる. 生成元は @s である.

     An extension field K of the small finite field F of order P^N is set by setmod_ff by specifying its characteristic P the extension degree N and M=[K:F]. An irreducible polynomial of degree M over K is automatically generated and used as the defining polynomial of the generator of the extension K/F. The generator is denoted by @s.

11
     分散表現の代数的数

     algebraic number represented by a distributed polynomial

     See 代数的数に関する演算.

     See Algebraic numbers.

小標数有限素体以外の有限体は setmod_ff で設定する. 有限体の元どうしの演算では, 一方が有理数の場合には, その有理数は自動的に現在設定されている有限体の元に変換され, 演算が行われる.

Finite fields other than small finite prime fields are set by setmod_ff. Elements of finite fields do not have informations about the modulus. Upon an arithmetic operation, i f one of the operands is a rational number, it is automatically converted into an element of the finite field currently set and the operation is done in the finite field.

不定元の型
=====

Types of indeterminates
=======================

多項式の変数となり得る対象を不定元とよぶ. Asir では, 英小文字で始まり, 任意個のアルファベット, 数字, _ からなる文字列を不定元として扱うが, その他にもシステムにより不定元として扱われるものがいくつかある. Asir の内部形式としては, これらは全て多項式としての型を持つが, 数と同様, 不定元の型により区別される.

An algebraic object is recognized as an indeterminate when it can be a (so-called) variable in polynomials. An ordinary indeterminate is usually denoted by a string that start with a small alphabetical letter followed by an arbitrary number of alphabetical letters, digits or _. In addition to such ordinary indeterminates, there are other kinds of indeterminates in a wider sense in Asir. Such indeterminates in the wider sense have type polynomial, and further are classified into sub-types of the type indeterminate.

0
     一般不定元

     ordinary indeterminate

     英小文字で始まる文字列. 多項式の変数として最も普通に用いられる.

     An object of this sub-type is denoted by a string that start with a small alphabetical letter followed by an arbitrary number of alphabetical letters, digits or _. This kind of indeterminates are most commonly used for variables of polynomials.

          [0] [vtype(a),vtype(aA_12)];
          [0,0]

1
     未定係数

     undetermined coefficient

     uc() は, _ で始まる文字列を名前とする不定元を生成する. これらは, ユーザが入力できないというだけで, 一般不定元と変わらないが, ユーザが入力した不定元と衝突しないという性質を利用して未定係数の自動生成などに用いることができる.

     The function uc() creates an indeterminate which is denoted by a string that begins with _.  Such an indeterminate cannot be directly input by its name.  Other properties are the same as those of ordinary indeterminate.  Therefore, it has a property that it cannot cause collision with the name of ordinary indeterminates input by the user.  And this property is conveniently used to create undetermined coefficients dynamically by programs.

          [1] U=uc();
          _0
          [2] vtype(U);
          1

2
     函数形式

     function form

     組み込み函数, ユーザ函数の呼び出しは, 評価されて何らかの Asir の内部形式に変換されるが, sin(x), cos(x+1) などは, 評価後もそのままの形で存在する. これは函数形式と呼ばれ, それ自身が 1 つの不定元として扱われる. またやや特殊な例として, 円周率 @pi や自然対数の底 @e も函数形式として扱われる.

     A function call to a built-in function or to an user defined function is usually evaluated by Asir and retained in a proper internal form. Some expressions, however, will remain in the same form after evaluation. For example, sin(x) and cos(x+1) will remain as if they were not evaluated.  These (unevaluated) forms are called `function forms' and are treated as if they are indeterminates in a wider sense.  Also, special forms such as @pi the ratio of circumference and diameter, and @e Napier's number, will be treated as `function forms.'

          [3] V=sin(x);
          sin(x)
          [4] vtype(V);
          2
          [5] vars(V^2+V+1);
          [sin(x)]

3
     函数子

     functor

     函数呼び出しは, FNAME(ARGS) という形で行なわれるが, FNAME の部分を函数子と呼ぶ. 函数子には, 函数の種類により組み込み函数子, ユーザ定義函数子, 初等函数子などがあるが, 函数子は単独で不定元として機能する.

     A function call (or a function form) has a form FNAME(ARGS). Here, FNAME alone is called a functor. There are several kinds of functors: built-in functor, user defined functor and functor for the elementary functions.  A functor alone is treated as an indeterminate in a wider sense.

          [6] vtype(sin);
          3