Annotation of OpenXM/src/asir-doc/parts/type.texi, Revision 1.3
1.3 ! noro 1: @comment $OpenXM$
! 2: \BJP
1.1 noro 3: @node $B7?(B,,, Top
4: @chapter $B7?(B
1.3 ! noro 5: \E
! 6: \BEG
! 7: @node Data types,,, Top
! 8: @chapter Data types
! 9: \E
1.1 noro 10:
11: @menu
1.3 ! noro 12: \BJP
1.1 noro 13: * Asir $B$G;HMQ2DG=$J7?(B::
14: * $B?t$N7?(B::
15: * $BITDj85$N7?(B::
1.3 ! noro 16: \E
! 17: \BEG
! 18: * Types in Asir::
! 19: * Types of numbers::
! 20: * Types of indeterminates::
! 21: \E
1.1 noro 22: @end menu
23:
1.3 ! noro 24: \BJP
1.1 noro 25: @node Asir $B$G;HMQ2DG=$J7?(B,,, $B7?(B
26: @section @b{Asir} $B$G;HMQ2DG=$J7?(B
1.3 ! noro 27: \E
! 28: \BEG
! 29: @node Types in Asir,,, Data types
! 30: @section Types in @b{Asir}
! 31: \E
1.1 noro 32:
33: @noindent
1.3 ! noro 34: \BJP
1.1 noro 35: @b{Asir} $B$K$*$$$F$O(B, $B2DFI$J7A<0$GF~NO$5$l$?$5$^$6$^$JBP>]$O(B, $B%Q!<%6$K$h$j(B
36: $BCf4V8@8l$KJQ49$5$l(B, $B%$%s%?%W%j%?$K$h$j(B @b{Risa} $B$N7W;;%(%s%8%s$r8F$S=P$7(B
37: $B$J$,$iFbIt7A<0$KJQ49$5$l$k(B. $BJQ49$5$l$?BP>]$O(B, $B<!$N$$$:$l$+$N7?$r;}$D(B.
38: $B3FHV9f$O(B, $BAH$_9~$_H!?t(B @code{type()} $B$K$h$jJV$5$l$kCM$KBP1~$7$F$$$k(B.
39: $B3FNc$O(B, @b{Asir} $B$N%W%m%s%W%H$KBP$9$kF~NO$,2DG=$J7A<0$N$$$/$D$+$r(B
40: $B<($9(B.
1.3 ! noro 41: \E
! 42: \BEG
! 43: In @b{Asir}, various objects described according to the syntax of
! 44: @b{Asir} are translated to intermediate forms and by @b{Asir}
! 45: interpreter further translated into internal forms with the help of
! 46: basic algebraic engine. Such an object in an internal form has one of
! 47: the following types listed below.
! 48: In the list, the number coincides with the value returned by the
! 49: built-in function @code{type()}.
! 50: Each example shows possible forms of inputs for @b{Asir}'s prompt.
! 51: \E
1.1 noro 52:
53: @table @code
1.2 noro 54: @item 0 @b{0}
1.1 noro 55:
1.3 ! noro 56: \BJP
1.1 noro 57: $B<B:]$K$O(B 0 $B$r<1JL;R$K$b$DBP>]$OB8:_$7$J$$(B. 0 $B$O(B, C $B$K$*$1$k(B 0 $B%]%$%s%?$K(B
58: $B$h$jI=8=$5$l$F$$$k(B. $B$7$+$7(B, $BJX59>e(B @b{Asir} $B$N(B @code{type(0)} $B$O(B
59: $BCM(B 0 $B$rJV$9(B.
1.3 ! noro 60: \E
! 61: \BEG
! 62: As a matter of fact, no object exists that has 0 as its identification
! 63: number. The number 0 is implemented as a null (0) pointer of C language.
! 64: For convenience's sake, a 0 is returned for the input @code{type(0)}.
! 65: \E
1.1 noro 66:
1.3 ! noro 67: \JP @item 1 @b{$B?t(B}
! 68: \EG @item 1 @b{number}
1.1 noro 69:
70: @example
71: 1 2/3 14.5 3+2*@@i
72: @end example
73:
1.3 ! noro 74: \JP $B?t$O(B, $B$5$i$K$$$/$D$+$N7?$KJ,$1$i$l$k(B. $B$3$l$K$D$$$F$O2<$G=R$Y$k(B.
! 75: \EG Numbers have sub-types. @xref{Types of numbers}.
1.1 noro 76:
1.3 ! noro 77: \JP @item 2 @b{$BB?9`<0(B} ($B?t$G$J$$(B)
! 78: \EG @item 2 @b{polynomial} (but not a number)
1.1 noro 79:
80: @example
81: x afo (2.3*x+y)^10
82: @end example
83:
1.3 ! noro 84: \BJP
1.1 noro 85: $BB?9`<0$O(B, $BA4$FE83+$5$l(B, $B$=$N;~E@$K$*$1$kJQ?t=g=x$K=>$C$F(B, $B:F5"E*$K(B
86: 1 $BJQ?tB?9`<0$H$7$F9_QQ$N=g$K@0M}$5$l$k(B (@xref{$BJ,;6I=8=B?9`<0(B}).
87: $B$3$N;~(B, $B$=$NB?9`<0$K8=$l$k=g=x:GBg$NJQ?t$r(B @b{$B<gJQ?t(B} $B$H8F$V(B.
1.3 ! noro 88: \E
! 89: \BEG
! 90: Every polynomial is maintained internally in its full expanded form,
! 91: represented as a nested univariate polynomial, according to the current
! 92: variable ordering, arranged by the descending order of exponents.
! 93: (@xref{Distributed polynomial}).
! 94: In the representation, the indeterminate (or variable), appearing in
! 95: the polynomial, with maximum ordering is called the @b{main variable}.
! 96: Moreover, we call the coefficient of the maximum degree term of
! 97: the polynomial with respect to the main variable the @b{leading coefficient}.
! 98: \E
1.1 noro 99:
1.3 ! noro 100: \JP @item 3 @b{$BM-M}<0(B} ($BB?9`<0$G$J$$(B)
! 101: \EG @item 3 @b{rational expression} (not a polynomial)
1.1 noro 102:
103: @example
104: (x+1)/(y^2-y-x) x/x
105: @end example
106:
1.3 ! noro 107: \BJP
1.1 noro 108: $BM-M}<0$O(B, $BJ,JlJ,;R$,LsJ,2DG=$G$b(B, $BL@<(E*$K(B @code{red()} $B$,8F$P$l$J$$(B
109: $B8B$jLsJ,$O9T$o$l$J$$(B. $B$3$l$O(B, $BB?9`<0$N(B GCD $B1i;;$,6K$a$F=E$$1i;;$G$"$k(B
110: $B$?$a$G(B, $BM-M}<0$N1i;;$OCm0U$,I,MW$G$"$k(B.
1.3 ! noro 111: \E
! 112: \BEG
! 113: Note that in @b{Risa/Asir} a rational expression is not simplified
! 114: by reducing the common divisors unless @code{red()} is called
! 115: explicitly, even if it is possible. This is because the GCD computation
! 116: of polynomials is a considerably heavy operation. You have to be careful
! 117: enough in operating rational expressions.
! 118: \E
1.1 noro 119:
1.3 ! noro 120: \JP @item 4 @b{$B%j%9%H(B}
! 121: \EG @item 4 @b{list}
1.1 noro 122:
123: @example
124: [] [1,2,[3,4],[x,y]]
125: @end example
126:
1.3 ! noro 127: \BJP
1.1 noro 128: $B%j%9%H$OFI$_=P$7@lMQ$G$"$k(B. @code{[]} $B$O6u%j%9%H$r0UL#$9$k(B. $B%j%9%H$KBP$9$k(B
129: $BA`:n$H$7$F$O(B, @code{car()}, @code{cdr()}, @code{cons()} $B$J$I$K$h$kA`:n$NB>$K(B,
130: $BFI$_=P$7@lMQ$NG[Ns$H$_$J$7$F(B, @code{[@var{index}]} $B$rI,MW$J$@$1$D$1$k$3$H$K$h$j(B
131: $BMWAG$N<h$j=P$7$r9T$&$3$H$,$G$-$k(B. $BNc$($P(B
1.3 ! noro 132: \E
! 133: \BEG
! 134: Lists are all read-only object. A null list is specified by @code{[]}.
! 135: There are operations for lists: @code{car()}, @code{cdr()},
! 136: @code{cons()} etc. And further more, element referencing by indexing is
! 137: available. Indexing is done by putting @code{[@var{index}]}'s after a
! 138: program variable as many as are required.
! 139: For example,
! 140: \E
1.1 noro 141:
142: @example
143: [0] L = [[1,2,3],[4,[5,6]],7]$
144: [1] L[1][1];
145: [5,6]
146: @end example
147:
1.3 ! noro 148: \BJP
1.1 noro 149: $BCm0U$9$Y$-$3$H$O(B, $B%j%9%H(B, $BG[Ns(B ($B9TNs(B, $B%Y%/%H%k(B) $B6&$K(B, $B%$%s%G%C%/%9$O(B
150: 0 $B$+$i;O$^$k$3$H$H(B, $B%j%9%H$NMWAG$N<h$j=P$7$r%$%s%G%C%/%9$G9T$&$3$H$O(B,
151: $B7k6I$O@hF,$+$i%]%$%s%?$r$?$I$k$3$H$KAjEv$9$k$?$a(B, $BG[Ns$KBP$9$kA`:n$K(B
152: $BHf3S$7$FBg$-$J%j%9%H$G$O;~4V$,$+$+$k>l9g$,$"$k$H$$$&$3$H$G$"$k(B.
1.3 ! noro 153: \E
! 154: \BEG
! 155: Notice that for lists, matrices and vectors, the index begins with
! 156: number 0. Also notice that referencing list elements is done by
! 157: following pointers from the first element. Therefore, it sometimes takes
! 158: much more time to perform referencing operations on a large list than
! 159: on a vectors or a matrices with the same size.
! 160: \E
1.1 noro 161:
1.3 ! noro 162: \JP @item 5 @b{$B%Y%/%H%k(B}
! 163: \EG @item 5 @b{vector}
1.1 noro 164:
165: @example
166: newvect(3) newvect(2,[a,1])
167: @end example
168:
1.3 ! noro 169: \BJP
1.1 noro 170: $B%Y%/%H%k$O(B, @code{newvect()} $B$GL@<(E*$K@8@.$9$kI,MW$,$"$k(B. $BA0<T$NNc$G(B
171: $B$O(B2 $B@.J,$N(B 0 $B%Y%/%H%k$,@8@.$5$l(B, $B8e<T$G$O(B, $BBh(B 0 $B@.J,$,(B @code{a}, $BBh(B 1
172: $B@.J,$,(B @code{1} $B$N%Y%/%H%k$,@8@.$5$l$k(B. $B=i4|2=$N$?$a$N(B $BBh(B 2 $B0z?t$O(B, $BBh(B
173: 1 $B0z?t0J2<$ND9$5$N%j%9%H$r<u$1IU$1$k(B. $B%j%9%H$NMWAG$O:8$+$iMQ$$$i$l(B, $BB-(B
174: $B$j$J$$J,$O(B 0 $B$,Jd$o$l$k(B. $B@.J,$O(B @code{[@var{index}]} $B$K$h$j<h$j=P$;$k(B. $B<B:](B
175: $B$K$O(B, $B3F@.J,$K(B, $B%Y%/%H%k(B, $B9TNs(B, $B%j%9%H$r4^$`G$0U$N7?$NBP>]$rBeF~$G$-$k(B
176: $B$N$G(B, $BB?<!85G[Ns$r%Y%/%H%k$GI=8=$9$k$3$H$,$G$-$k(B.
1.3 ! noro 177: \E
! 178: \BEG
! 179: Vector objects are created only by explicit execution of @code{newvect()}
! 180: command. The first example above creates a null vector object with
! 181: 3 elements. The other example creates a vector object
! 182: with 2 elements which is initialized such that its 0-th element
! 183: is @code{a} and 1st element is @code{1}.
! 184: The second argument for @code{newvect} is used to initialize
! 185: elements of the newly created vector. A list with size smaller or equal
! 186: to the first argument will be accepted. Elements of the initializing
! 187: list is used from the left to the right. If the list is too short to
! 188: specify all the vector elements,
! 189: the unspecified elements are filled with as many 0's as are required.
! 190: Any vector element is designated by indexing, e.g.,
! 191: @code{[@var{index}]}.
! 192: @code{Asir} allows any type, including vector, matrix and list,
! 193: for each respective element of a vector.
! 194: As a matter of course, arrays with arbitrary dimensions can be
! 195: represented by vectors, because each element of a vector can be a vector
! 196: or matrix itself.
! 197: An element designator of a vector can be a left value of assignment
! 198: statement. This implies that an element designator is treated just like
! 199: a simple program variable.
! 200: Note that an assignment to the element designator of a vector has effect
! 201: on the whole value of that vector.
! 202: \E
1.1 noro 203:
204: @example
205: [0] A3 = newvect(3);
206: [ 0 0 0 ]
207: [1] for (I=0;I<3;I++)A3[I] = newvect(3);
208: [2] for (I=0;I<3;I++)for(J=0;J<3;J++)A3[I][J]=newvect(3);
209: [3] A3;
210: [ [ [ 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 ] ] ]
211: [4] A3[0];
212: [ [ 0 0 0 ] [ 0 0 0 ] [ 0 0 0 ] ]
213: [5] A3[0][0];
214: [ 0 0 0 ]
215: @end example
216:
1.3 ! noro 217: \JP @item 6 @b{$B9TNs(B}
! 218: \EG @item 6 @b{matrix}
1.1 noro 219:
220: @example
221: newmat(2,2) newmat(2,3,[[x,y],[z]])
222: @end example
223:
1.3 ! noro 224: \BJP
1.1 noro 225: $B9TNs$N@8@.$b(B @code{newmat()} $B$K$h$jL@<(E*$K9T$o$l$k(B. $B=i4|2=$b(B, $B0z?t(B
226: $B$,%j%9%H$N%j%9%H$H$J$k$3$H$r=|$$$F$O%Y%/%H%k$HF1MM$G(B, $B%j%9%H$N3FMWAG(B
227: ($B$3$l$O$^$?%j%9%H$G$"$k(B) $B$O(B, $B3F9T$N=i4|2=$K;H$o$l(B, $BB-$j$J$$ItJ,$K$O(B
228: 0 $B$,Kd$a$i$l$k(B. $B9TNs$b(B, $B3FMWAG$K$OG$0U$NBP>]$rBeF~$G$-$k(B. $B9TNs$N3F(B
229: $B9T$O(B, $B%Y%/%H%k$H$7$F<h$j=P$9$3$H$,$G$-$k(B.
1.3 ! noro 230: \E
! 231: \BEG
! 232: Like vector objects, matrix objects are also created only by explicit
! 233: execution of @code{newmat()} command. Initialization of the matrix
! 234: elements are done in a similar manner with that of the vector elements
! 235: except that the elements are specified by a list of lists. Each element,
! 236: again a list, is used to initialize each row; if the list is too short
! 237: to specify all the row elements, unspecified elements are filled with
! 238: as many 0's as are required.
! 239: Like vectors, any matrix element is designated by indexing, e.g.,
! 240: @code{[@var{index}][@var{index}]}.
! 241: @code{Asir} also allows any type, including vector, matrix and list,
! 242: for each respective element of a matrix.
! 243: An element designator of a matrix can also be a left value of assignment
! 244: statement. This implies that an element designator is treated just like
! 245: a simple program variable.
! 246: Note that an assignment to the element designator of a matrix has effect
! 247: on the whole value of that matrix.
! 248: Note also that every row, (not column,) of a matrix can be extracted
! 249: and referred to as a vector.
! 250: \E
1.1 noro 251:
252: @example
253: [0] M=newmat(2,3);
254: [ 0 0 0 ]
255: [ 0 0 0 ]
256: [1] M[1];
257: [ 0 0 0 ]
258: [2] type(@@@@);
259: 5
260: @end example
261:
1.3 ! noro 262: \JP @item 7 @b{$BJ8;zNs(B}
! 263: \EG @item 7 @b{string}
1.1 noro 264:
265: @example
266: "" "afo"
267: @end example
268:
1.3 ! noro 269: \BJP
1.1 noro 270: $BJ8;zNs$O(B, $B<g$K%U%!%$%kL>$J$I$KMQ$$$i$l$k(B. $BJ8;zNs$KBP$7$F$O2C;;$N$_$,(B
271: $BDj5A$5$l$F$$$F(B, $B7k2L$O(B 2 $B$D$NJ8;zNs$N7k9g$G$"$k(B.
1.3 ! noro 272: \E
! 273: \BEG
! 274: Strings are used mainly for naming files. It is also used for giving
! 275: comments of the results. Operator symbol @code{+} denote the
! 276: concatenation operation of two strings.
! 277: \E
1.1 noro 278:
279: @example
280: [0] "afo"+"take";
281: afotake
282: @end example
1.2 noro 283:
1.3 ! noro 284: \JP @item 8 @b{$B9=B$BN(B}
! 285: \EG @item 8 @b{structure}
1.1 noro 286:
287: @example
288: newstruct(afo)
289: @end example
290:
1.3 ! noro 291: \JP $B9=B$BN$K4X$7$F$O(B, $B>O$r2~$a$F2r@b$9$kM=Dj$G$"$k(B.
! 292: \EG For type @b{structure}, we shall describe it in a later chapter.
! 293: (Not written yet.)
1.1 noro 294:
1.3 ! noro 295: \JP @item 9 @b{$BJ,;6I=8=B?9`<0(B}
! 296: \EG @item 9 @b{distributed polynomial}
1.1 noro 297:
298: @example
299: 2*<<0,1,2,3>>-3*<<1,2,3,4>>
300: @end example
301:
1.3 ! noro 302: \BJP
1.1 noro 303: $B$3$l$O(B, $B$[$H$s$I%0%l%V%J4pDl@lMQ$N7?$G(B, $BDL>o$N7W;;$G$3$N7?$,I,MW$H(B
304: $B$J$k$3$H$O$^$:$J$$$,(B, $B%0%l%V%J4pDl7W;;%Q%C%1!<%8<+BN$,%f!<%68@8l(B
305: $B$G=q$+$l$F$$$k$?$a(B, $B%f!<%6$,A`:n$G$-$k$h$&FHN)$7$?7?$H$7$F(B @b{Asir}
306: $B$G;HMQ$G$-$k$h$&$K$7$F$"$k(B. $B$3$l$K$D$$$F$O(B @xref{$B%0%l%V%J4pDl$N7W;;(B}.
1.3 ! noro 307: \E
! 308: \BEG
! 309: This is the short for `Distributed representation of polynomials.'
! 310: This type is specially devised for computation of Groebner bases.
! 311: Though for ordinary users this type may never be needed, it is provided
! 312: as a distinguished type that user can operate by @code{Asir}.
! 313: This is because the Groebner basis package provided with
! 314: @code{Risa/Asir} is written in the @code{Asir} user language.
! 315: For details @xref{Groebner basis computation}.
! 316: \E
! 317:
! 318: \JP @item 10 @b{$BId9f$J$7%^%7%s(B 32bit $B@0?t(B}
! 319: \EG @item 10 @b{32bit unsigned integer}
! 320:
! 321: \JP @item 11 @b{$B%(%i!<%*%V%8%'%/%H(B}
! 322: \EG @item 11 @b{error object}
1.1 noro 323:
1.3 ! noro 324: \JP $B0J>eFs$D$O(B, Open XM $B$K$*$$$FMQ$$$i$l$kFC<l%*%V%8%'%/%H$G$"$k(B.
! 325: \EG These are special objects used for OpenXM.
1.1 noro 326:
1.3 ! noro 327: \JP @item 12 @b{GF(2) $B>e$N9TNs(B}
! 328: \EG @item 12 @b{matrix over GF(2)}
1.1 noro 329:
1.3 ! noro 330: \BJP
1.1 noro 331: $B8=:_(B, $BI8?t(B 2 $B$NM-8BBN$K$*$1$k4pDlJQ49$N$?$a$N%*%V%8%'%/%H$H$7$FMQ$$$i$l(B
332: $B$k(B.
1.3 ! noro 333: \E
! 334: \BEG
! 335: This is used for basis conversion in finite fields of characteristic 2.
! 336: \E
1.1 noro 337:
1.3 ! noro 338: \JP @item 13 @b{MATHCAP $B%*%V%8%'%/%H(B}
! 339: \EG @item 13 @b{MATHCAP object}
1.1 noro 340:
1.3 ! noro 341: \JP Open XM $B$K$*$$$F(B, $B<BAu$5$l$F$$$k5!G=$rAw<u?.$9$k$?$a$N%*%V%8%'%/%H$G$"$k(B.
! 342: \EG This object is used to express available funcionalities for Open XM.
1.1 noro 343:
1.2 noro 344: @item 14 @b{first order formula}
1.1 noro 345:
1.3 ! noro 346: \JP quantifier elimination $B$GMQ$$$i$l$k0l3,=R8lO@M}<0(B.
! 347: \EG This expresses a first order formula used in quantifier elimination.
1.2 noro 348:
1.3 ! noro 349: \JP @item -1 @b{VOID $B%*%V%8%'%/%H(B}
! 350: \EG @item -1 @b{VOID object}
1.2 noro 351:
1.3 ! noro 352: \JP $B7?<1JL;R(B -1 $B$r$b$D%*%V%8%'%/%H$O4X?t$NLa$jCM$J$I$,L58z$G$"$k$3$H$r<($9(B.
! 353: \BEG
! 354: The object with the object identifier -1 indicates that a return value
! 355: of a function is void.
! 356: \E
1.1 noro 357: @end table
358:
1.3 ! noro 359: \BJP
1.1 noro 360: @node $B?t$N7?(B,,, $B7?(B
361: @section $B?t$N7?(B
1.3 ! noro 362: \E
! 363: \BEG
! 364: @node Types of numbers,,, Data types
! 365: @section Types of numbers
! 366: \E
1.1 noro 367:
368: @table @code
369: @item 0
1.3 ! noro 370: \JP @b{$BM-M}?t(B}
! 371: \EG @b{rational number}
1.1 noro 372:
1.3 ! noro 373: \BJP
1.1 noro 374: $BM-M}?t$O(B, $BG$0UB?G\D9@0?t(B (@b{bignum}) $B$K$h$j<B8=$5$l$F$$$k(B. $BM-M}?t$O>o$K(B
375: $B4{LsJ,?t$GI=8=$5$l$k(B.
1.3 ! noro 376: \E
! 377: \BEG
! 378: Rational numbers are implemented by arbitrary precision integers
! 379: (@b{bignum}). A rational number is always expressed by a fraction of
! 380: lowest terms.
! 381: \E
1.1 noro 382:
383: @item 1
1.3 ! noro 384: \JP @b{$BG\@:EYIbF0>.?t(B}
! 385: \EG @b{double precision floating point number (double float)}
1.1 noro 386:
1.3 ! noro 387: \BJP
1.1 noro 388: $B%^%7%s$NDs6!$9$kG\@:EYIbF0>.?t$G$"$k(B. @b{Asir} $B$N5/F0;~$K$O(B,
389: $BDL>o$N7A<0$GF~NO$5$l$?IbF0>.?t$O$3$N7?$KJQ49$5$l$k(B. $B$?$@$7(B,
390: @code{ctrl()} $B$K$h$j(B @b{bigfloat} $B$,A*Br$5$l$F$$$k>l9g$K$O(B
391: @b{bigfloat} $B$KJQ49$5$l$k(B.
1.3 ! noro 392: \E
! 393: \BEG
! 394: The numbers of this type are numbers provided by the computer hardware.
! 395: By default, when @b{Asir} is started, floating point numbers in a
! 396: ordinary form are transformed into numbers of this type. However,
! 397: they will be transformed into @b{bigfloat} numbers
! 398: when the switch @b{bigfloat} is turned on (enabled) by @code{ctrl()}
! 399: command.
! 400: \E
1.1 noro 401:
402: @example
403: [0] 1.2;
404: 1.2
405: [1] 1.2e-1000;
406: 0
407: [2] ctrl("bigfloat",1);
408: 1
409: [3] 1.2e-1000;
410: 1.20000000000000000513 E-1000
411: @end example
412:
1.3 ! noro 413: \BJP
1.1 noro 414: $BG\@:EYIbF0>.?t$HM-M}?t$N1i;;$O(B, $BM-M}?t$,IbF0>.?t$KJQ49$5$l$F(B,
415: $BIbF0>.?t$H$7$F1i;;$5$l$k(B.
1.3 ! noro 416: \E
! 417: \BEG
! 418: A rational number shall be converted automatically into a double float
! 419: number before the operation with another double float number and the
! 420: result shall be computed as a double float number.
! 421: \E
1.1 noro 422:
423: @item 2
1.3 ! noro 424: \JP @b{$BBe?tE*?t(B}
! 425: \EG @b{algebraic number}
1.1 noro 426:
1.3 ! noro 427: \JP @xref{$BBe?tE*?t$K4X$9$k1i;;(B}.
! 428: \EG @xref{Algebraic numbers}.
1.1 noro 429:
430: @item 3
431: @b{bigfloat}
432:
1.3 ! noro 433: \BJP
1.1 noro 434: @b{bigfloat} $B$O(B, @b{Asir} $B$G$O(B @b{PARI} $B%i%$%V%i%j$K$h$j(B
435: $B<B8=$5$l$F$$$k(B. @b{PARI} $B$K$*$$$F$O(B, @b{bigfloat} $B$O(B, $B2>?tIt(B
436: $B$N$_G$0UB?G\D9$G(B, $B;X?tIt$O(B 1 $B%o!<%I0JFb$N@0?t$K8B$i$l$F$$$k(B.
437: @code{ctrl()} $B$G(B @b{bigfloat} $B$rA*Br$9$k$3$H$K$h$j(B, $B0J8e$NIbF0>.?t(B
438: $B$NF~NO$O(B @b{bigfloat} $B$H$7$F07$o$l$k(B. $B@:EY$O%G%U%)%k%H$G$O(B
439: 10 $B?J(B 9 $B7eDxEY$G$"$k$,(B, @code{setprec()} $B$K$h$j;XDj2DG=$G$"$k(B.
1.3 ! noro 440: \E
! 441: \BEG
! 442: The @b{bigfloat} numbers of @b{Asir} is realized by @b{PARI} library.
! 443: A @b{bigfloat} number of @b{PARI} has an arbitrary precision mantissa
! 444: part. However, its exponent part admits only an integer with a single
! 445: word precision.
! 446: Floating point operations will be performed all in @b{bigfloat} after
! 447: activating the @b{bigfloat} switch by @code{ctrl()} command.
! 448: The default precision is about 9 digits, which can be specified by
! 449: @code{setprec()} command.
! 450: \E
1.1 noro 451:
452: @example
453: [0] ctrl("bigfloat",1);
454: 1
455: [1] eval(2^(1/2));
456: 1.414213562373095048763788073031
457: [2] setprec(100);
458: 9
459: [3] eval(2^(1/2));
460: 1.41421356237309504880168872420969807856967187537694807317654396116148
461: @end example
462:
1.3 ! noro 463: \BJP
1.1 noro 464: @code{eval()} $B$O(B, $B0z?t$K4^$^$l$kH!?tCM$r2DG=$J8B$j?tCM2=$9$kH!?t$G$"$k(B.
465: @code{setprec()} $B$G;XDj$5$l$?7e?t$O(B, $B7k2L$N@:EY$rJ]>Z$9$k$b$N$G$O$J$/(B,
466: @b{PARI} $BFbIt$GMQ$$$i$l$kI=8=$N%5%$%:$r<($9$3$H$KCm0U$9$Y$-$G$"$k(B.
1.3 ! noro 467: \E
! 468: \BEG
! 469: Function @code{eval()} evaluates numerically its argument as far as
! 470: possible.
! 471: Notice that the integer given for the argument of @code{setprec()} does
! 472: not guarantee the accuracy of the result,
! 473: but it indicates the representation size of numbers with which internal
! 474: operations of @b{PARI} are performed.
! 475: \E
1.1 noro 476: (@ref{eval}, @xref{pari})
477:
478: @item 4
1.3 ! noro 479: \JP @b{$BJ#AG?t(B}
! 480: \EG @b{complex number}
1.1 noro 481:
1.3 ! noro 482: \BJP
1.1 noro 483: $BJ#AG?t$O(B, $BM-M}?t(B, $BG\@:EYIbF0>.?t(B, @b{bigfloat} $B$r<BIt(B, $B5uIt$H$7$F(B
484: @code{a+b*@@i} (@@i $B$O5u?tC10L(B) $B$H$7$FM?$($i$l$k?t$G$"$k(B. $B<BIt(B, $B5uIt$O(B
485: $B$=$l$>$l(B @code{real()}, @code{imag()} $B$G<h$j=P$;$k(B.
1.3 ! noro 486: \E
! 487: \BEG
! 488: A @b{complex} number of @b{Risa/Asir} is a number with the form
! 489: @code{a+b*@@i}, where @@i is the unit of imaginary number, and @code{a}
! 490: and @code{b}
! 491: are either a @b{rational} number, @b{double float} number or
! 492: @b{bigfloat} number, respectively.
! 493: The real part and the imaginary part of a @b{complex} number can be
! 494: taken out by @code{real()} and @code{imag()} respectively.
! 495: \E
1.1 noro 496:
497: @item 5
1.3 ! noro 498: \JP @b{$B>.I8?t$NM-8BAGBN$N85(B}
! 499: \EG @b{element of a small finite prime field}
1.1 noro 500:
1.3 ! noro 501: \BJP
1.1 noro 502: $B$3$3$G8@$&>.I8?t$H$O(B, $BI8?t$,(B 2^27 $BL$K~$N$b$N$N$3$H$G$"$k(B. $B$3$N$h$&$JM-8B(B
503: $BBN$O(B, $B8=:_$N$H$3$m%0%l%V%J4pDl7W;;$K$*$$$FFbItE*$KMQ$$$i$l(B, $BM-8BBN78?t$N(B
504: $BJ,;6I=8=B?9`<0$N78?t$r<h$j=P$9$3$H$GF@$i$l$k(B. $B$=$l<+?H$OB0$9$kM-8BBN$K4X(B
505: $B$9$k>pJs$O;}$?$:(B, @code{setmod()} $B$G@_Dj$5$l$F$$$kAG?t(B @var{p} $B$rMQ$$$F(B
506: GF(@var{p}) $B>e$G$N1i;;$,E,MQ$5$l$k(B.
1.3 ! noro 507: \E
! 508: \BEG
! 509: Here a small finite fieid means that its characteristic is less than
! 510: 2^27.
! 511: At present small finite fields are used mainly
! 512: for groebner basis computation, and elements in such finite fields
! 513: can be extracted by taking coefficients of distributed polynomials
! 514: whose coefficients are in finite fields. Such an element itself does not
! 515: have any information about the field to which the element belongs, and
! 516: field operations are executed by using a prime @var{p} which is set by
! 517: @code{setmod()}.
! 518: \E
1.1 noro 519:
520: @item 6
1.3 ! noro 521: \JP @b{$BBgI8?t$NM-8BAGBN$N85(B}
! 522: \EG @b{element of large finite prime field}
1.1 noro 523:
1.3 ! noro 524: \BJP
1.1 noro 525: $BI8?t$H$7$FG$0U$NAG?t$,$H$l$k(B.
526: $B$3$N7?$N?t$O(B, $B@0?t$KBP$7(B@code{simp_ff} $B$rE,MQ$9$k$3$H$K$h$jF@$i$l$k(B.
1.3 ! noro 527: \E
! 528: \BEG
! 529: This type expresses an element of a finite prime field whose characteristic
! 530: is an arbitrary prime. An object of this type is obtained by applying
! 531: @code{simp_ff} to an integer.
! 532: \E
1.1 noro 533:
534: @item 7
1.3 ! noro 535: \JP @b{$BI8?t(B 2 $B$NM-8BBN$N85(B}
! 536: \EG @b{element of a finite field of characteristic 2}
1.1 noro 537:
1.3 ! noro 538: \BJP
1.1 noro 539: $BI8?t(B 2 $B$NG$0U$NM-8BBN$N85$rI=8=$9$k(B. $BI8?t(B 2 $B$NM-8BBN(B F $B$O(B, $B3HBg<!?t(B
540: [F:GF(2)] $B$r(B n $B$H$9$l$P(B, GF(2) $B>e4{Ls$J(B n $B<!B?9`<0(B f(t) $B$K$h$j(B
541: F=GF(2)[t]/(f(t)) $B$H$"$i$o$5$l$k(B. $B$5$i$K(B, GF(2)[t] $B$N85(B g $B$O(B, f(t)
1.3 ! noro 542: $B$b4^$a$F<+A3$J;EJ}$G%S%C%HNs$H$_$J$5$l$k$?$a(B, $B7A<0>e$O(B, F $B$N85(B
1.1 noro 543: g mod f $B$O(B, g, f $B$r$"$i$o$9(B 2 $B$D$N%S%C%HNs$GI=8=$9$k$3$H$,$G$-$k(B.
1.3 ! noro 544: \E
! 545: \BEG
! 546: This type expresses an element of a finite field of characteristic 2.
! 547: Let @var{F} be a finite field of characteristic 2. If @var{[F:GF(2)]}
! 548: is equal to @var{n}, then @var{F} is expressed as @var{F=GF(2)[t]/(f(t))},
! 549: where @var{f(t)} is an irreducible polynomial over @var{GF(2)}
! 550: of degree @var{n}.
! 551: As an element @var{g} of @var{GF(2)[t]} can be expressed by a bit string,
! 552: An element @var{g mod f} in @var{F} can be expressed by two bit strings
! 553: representing @var{g} and @var{f} respectively.
! 554: \E
1.1 noro 555:
1.3 ! noro 556: \JP F $B$N85$rF~NO$9$k$$$/$D$+$NJ}K!$,MQ0U$5$l$F$$$k(B.
! 557: \EG Several methods to input an element of @var{F} are provided.
1.1 noro 558:
559: @itemize @bullet
560: @item
561: @code{@@}
562:
1.3 ! noro 563: \BJP
1.1 noro 564: @code{@@} $B$O$=$N8e$m$K?t;z(B, $BJ8;z$rH<$C$F(B, $B%R%9%H%j$dFC<l$J?t$r$"$i$o$9$,(B,
565: $BC1FH$G8=$l$?>l9g$K$O(B, F=GF(2)[t]/(f(t)) $B$K$*$1$k(B t mod f $B$r$"$i$o$9(B.
566: $B$h$C$F(B, @@ $B$NB?9`<0$H$7$F(B F $B$N85$rF~NO$G$-$k(B. (@@^10+@@+1 $B$J$I(B)
1.3 ! noro 567: \E
! 568: \BEG
! 569: @code{@@} represents @var{t mod f} in @var{F=GF(2)[t](f(t))}.
! 570: By using @code{@@} one can input an element of @var{F}. For example
! 571: @code{@@^10+@@+1} represents an element of @var{F}.
! 572: \E
1.1 noro 573:
574: @item
575: @code{ptogf2n}
576:
1.3 ! noro 577: \JP $BG$0UJQ?t$N(B 1 $BJQ?tB?9`<0$r(B, @code{ptogf2n} $B$K$h$jBP1~$9$k(B F $B$N85$KJQ49$9$k(B.
! 578: \BEG
! 579: @code{ptogf2n} converts a univariate polynomial into an element of @var{F}.
! 580: \E
1.1 noro 581:
582: @item
583: @code{ntogf2n}
584:
1.3 ! noro 585: \BJP
1.1 noro 586: $BG$0U$N<+A3?t$r(B, $B<+A3$J;EJ}$G(B F $B$N85$H$_$J$9(B. $B<+A3?t$H$7$F$O(B, 10 $B?J(B,
587: 16 $B?J(B (0x $B$G;O$^$k(B), 2 $B?J(B (0b $B$G;O$^$k(B) $B$GF~NO$,2DG=$G$"$k(B.
1.3 ! noro 588: \E
! 589: \BEG
! 590: As a bit string, a non-negative integer can be regarded as an element
! 591: of @var{F}. Note that one can input a non-negative integer in decimal,
! 592: hexadecimal (@code{0x} prefix) and binary (@code{0b} prefix) formats.
! 593: \E
1.1 noro 594:
595: @item
1.3 ! noro 596: \JP @code{$B$=$NB>(B}
! 597: \EG @code{micellaneous}
1.1 noro 598:
1.3 ! noro 599: \BJP
1.1 noro 600: $BB?9`<0$N78?t$r4]$4$H(B F $B$N85$KJQ49$9$k$h$&$J>l9g(B, @code{simp_ff}
601: $B$K$h$jJQ49$G$-$k(B.
1.3 ! noro 602: \E
! 603: \BEG
! 604: @code{simp_ff} is available if one wants to convert the whole
! 605: coefficients of a polynomial.
! 606: \E
1.1 noro 607:
608: @end itemize
609: @end table
610:
1.3 ! noro 611: \BJP
1.1 noro 612: $BBgI8?tAGBN$NI8?t(B, $BI8?t(B 2 $B$NM-8BBN$NDj5AB?9`<0$O(B, @code{setmod_ff}
613: $B$G@_Dj$9$k(B.
614: $BM-8BBN$N85$I$&$7$N1i;;$G$O(B, @code{setmod_ff} $B$K$h$j@_Dj$5$l$F$$$k(B
615: modulus $B$G(B, $BB0$9$kBN$,J,$+$j(B, $B$=$NCf$G1i;;$,9T$o$l$k(B.
616: $B0lJ}$,M-M}?t$N>l9g$K$O(B, $B$=$NM-M}?t$O<+F0E*$K8=:_@_Dj$5$l$F$$$k(B
617: $BM-8BBN$N85$KJQ49$5$l(B, $B1i;;$,9T$o$l$k(B.
1.3 ! noro 618: \E
! 619: \BEG
! 620: The characteristic of a large finite prime field and the defining
! 621: polynomial of a finite field of characteristic 2 are set by @code{setmod_ff}.
! 622: Elements of finite fields do not have informations about the modulus.
! 623: Upon an arithmetic operation, the modulus set by @code{setmod_ff} is
! 624: used. If one of the operands is a rational number, it is automatically
! 625: converted into an element of the finite field currently set and
! 626: the operation is done in the finite field.
! 627: \E
1.1 noro 628:
1.3 ! noro 629: \BJP
1.1 noro 630: @node $BITDj85$N7?(B,,, $B7?(B
631: @section $BITDj85$N7?(B
1.3 ! noro 632: \E
! 633: \BEG
! 634: @node Types of indeterminates,,, Data types
! 635: @section Types of indeterminates
! 636: \E
1.1 noro 637:
638: @noindent
1.3 ! noro 639: \BJP
1.1 noro 640: $BB?9`<0$NJQ?t$H$J$jF@$kBP>]$r(B@b{$BITDj85(B}$B$H$h$V(B. @b{Asir} $B$G$O(B,
641: $B1Q>.J8;z$G;O$^$j(B, $BG$0U8D$N%"%k%U%!%Y%C%H(B, $B?t;z(B, @samp{_} $B$+$i$J$kJ8;zNs(B
642: $B$rITDj85$H$7$F07$&$,(B, $B$=$NB>$K$b%7%9%F%`$K$h$jITDj85$H$7$F07$o$l$k$b$N(B
643: $B$,$$$/$D$+$"$k(B. @b{Asir} $B$NFbIt7A<0$H$7$F$O(B, $B$3$l$i$OA4$FB?9`<0$H$7$F$N(B
644: $B7?$r;}$D$,(B, $B?t$HF1MM(B, $BITDj85$N7?$K$h$j6hJL$5$l$k(B.
1.3 ! noro 645: \E
! 646: \BEG
! 647: An algebraic object is recognized as an indeterminate when it can be
! 648: a (so-called) variable in polynomials.
! 649: An ordinary indeterminate is usually denoted by a string that start with
! 650: a small alphabetical letter followed by an arbitrary number of
! 651: alphabetical letters, digits or @samp{_}.
! 652: In addition to such ordinary indeterminates,
! 653: there are other kinds of indeterminates in a wider sense in @b{Asir}.
! 654: Such indeterminates in the wider sense have type @b{polynomial},
! 655: and further are classified into sub-types of the type @b{indeterminate}.
! 656: \E
1.1 noro 657:
658: @table @code
659: @item 0
1.3 ! noro 660: \JP @b{$B0lHLITDj85(B}
! 661: \EG @b{ordinary indeterminate}
1.1 noro 662:
1.3 ! noro 663: \JP $B1Q>.J8;z$G;O$^$kJ8;zNs(B. $BB?9`<0$NJQ?t$H$7$F:G$bIaDL$KMQ$$$i$l$k(B.
! 664: \BEG
! 665: An object of this sub-type is denoted by a string that start with
! 666: a small alphabetical letter followed by an arbitrary number of
! 667: alphabetical letters, digits or @samp{_}.
! 668: This kind of indeterminates are most commonly used for variables of
! 669: polynomials.
! 670: \E
1.1 noro 671:
672: @example
673: [0] [vtype(a),vtype(aA_12)];
674: [0,0]
675: @end example
676:
677: @item 1
1.3 ! noro 678: \JP @b{$BL$Dj78?t(B}
! 679: \EG @b{undetermined coefficient}
1.1 noro 680:
1.3 ! noro 681: \BJP
1.1 noro 682: @code{uc()} $B$O(B, @samp{_} $B$G;O$^$kJ8;zNs$rL>A0$H$9$kITDj85$r@8@.$9$k(B.
683: $B$3$l$i$O(B, $B%f!<%6$,F~NO$G$-$J$$$H$$$&$@$1$G(B, $B0lHLITDj85$HJQ$o$i$J$$$,(B,
684: $B%f!<%6$,F~NO$7$?ITDj85$H>WFM$7$J$$$H$$$&@-<A$rMxMQ$7$FL$Dj78?t$N(B
685: $B<+F0@8@.$J$I$KMQ$$$k$3$H$,$G$-$k(B.
1.3 ! noro 686: \E
! 687: \BEG
! 688: The function @code{uc()} creates an indeterminate which is denoted by
! 689: a string that begins with @samp{_}. Such an indeterminate cannot be
! 690: directly input by its name. Other properties are the same as those of
! 691: @b{ordinary indeterminate}. Therefore, it has a property that it cannot
! 692: cause collision with the name of ordinary indeterminates input by the
! 693: user. And this property is conveniently used to create undetermined
! 694: coefficients dynamically by programs.
! 695: \E
1.1 noro 696:
697: @example
698: [1] U=uc();
699: _0
700: [2] vtype(U);
701: 1
702: @end example
703:
704: @item 2
1.3 ! noro 705: \JP @b{$BH!?t7A<0(B}
! 706: \EG @b{function form}
1.1 noro 707:
1.3 ! noro 708: \BJP
1.1 noro 709: $BAH$_9~$_H!?t(B, $B%f!<%6H!?t$N8F$S=P$7$O(B, $BI>2A$5$l$F2?$i$+$N(B @b{Asir} $B$N(B
710: $BFbIt7A<0$KJQ49$5$l$k$,(B, @code{sin(x)}, @code{cos(x+1)} $B$J$I$O(B, $BI>2A8e(B
711: $B$b$=$N$^$^$N7A$GB8:_$9$k(B. $B$3$l$OH!?t7A<0$H8F$P$l(B, $B$=$l<+?H$,(B 1 $B$D$N(B
712: $BITDj85$H$7$F07$o$l$k(B. $B$^$?$d$dFC<l$JNc$H$7$F(B, $B1_<~N((B @code{@@pi} $B$d(B
713: $B<+A3BP?t$NDl(B @code{@@e} $B$bH!?t7A<0$H$7$F07$o$l$k(B.
1.3 ! noro 714: \E
! 715: \BEG
! 716: A function call to a built-in function or to an user defined function
! 717: is usually evaluated by @b{Asir} and retained in a proper internal form.
! 718: Some expressions, however, will remain in the same form after evaluation.
! 719: For example, @code{sin(x)} and @code{cos(x+1)} will remain as if they
! 720: were not evaluated. These (unevaluated) forms are called
! 721: `function forms' and are treated as if they are indeterminates in a
! 722: wider sense. Also, special forms such as @code{@@pi} the ratio of
! 723: circumference and diameter, and @code{@@e} Napier's number, will be
! 724: treated as `function forms.'
! 725: \E
1.1 noro 726:
727: @example
728: [3] V=sin(x);
729: sin(x)
730: [4] vtype(V);
731: 2
732: [5] vars(V^2+V+1);
733: [sin(x)]
734: @end example
735:
736: @item 3
1.3 ! noro 737: \JP @b{$BH!?t;R(B}
! 738: \EG @b{functor}
1.1 noro 739:
1.3 ! noro 740: \BJP
1.1 noro 741: $BH!?t8F$S=P$7$O(B, @var{fname(args)} $B$H$$$&7A$G9T$J$o$l$k$,(B, @var{fname} $B$N(B
742: $BItJ,$rH!?t;R$H8F$V(B. $BH!?t;R$K$O(B, $BH!?t$N<oN`$K$h$jAH$_9~$_H!?t;R(B,
743: $B%f!<%6Dj5AH!?t;R(B, $B=iEyH!?t;R$J$I$,$"$k$,(B, $BH!?t;R$OC1FH$GITDj85$H$7$F(B
744: $B5!G=$9$k(B.
1.3 ! noro 745: \E
! 746: \BEG
! 747: A function call (or a function form) has a form @var{fname(args)}.
! 748: Here, @var{fname} alone is called a @b{functor}.
! 749: There are several kinds of @b{functor}s: built-in functor, user defined
! 750: functor and functor for the elementary functions. A functor alone is
! 751: treated as an indeterminate in a wider sense.
! 752: \E
1.1 noro 753:
754: @example
755: [6] vtype(sin);
756: 3
757: @end example
758: @end table
759:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>