Fix bug #1848: taytorat leaks internal gensyms from multivar expansions
[maxima.git] / doc / info / ja / Database.texi
blob19299ebf977a1d621e9bdb68cec7bd43dc961226
1 @menu
2 * Introduction to Maximas Database::
3 * Functions and Variables for Properties::
4 * Functions and Variables for Facts::
5 * Functions and Variables for Predicates::
6 @end menu
8 @c -----------------------------------------------------------------------------
9 @node Introduction to Maximas Database, Functions and Variables for Properties, Maximas Database, Maximas Database
10 @section Introduction to Maximas Database
11 @c -----------------------------------------------------------------------------
13 @c -----------------------------------------------------------------------------
14 @node Functions and Variables for Properties, Functions and Variables for Facts, Introduction to Maximas Database, Maximas Database
15 @section Functions and Variables for Properties
16 @c -----------------------------------------------------------------------------
18 @c NEEDS EXPANSION, CLARIFICATION, AND EXAMPLES
19 @c THIS ITEM IS EXTREMELY IMPORTANT
20 @c ENSURE THAT ALL KEYWORDS RECOGNIZED BY declare HAVE THEIR OWN DOCUMENTATION ITEMS !!
21 @c ALSO: HOW TO FIND THE LIST OF ALL SYMBOLS WHICH HAVE A GIVEN PROPERTY ??
23 @c -----------------------------------------------------------------------------
24 @anchor{declare}
25 @deffn {関数} declare (@var{a_1}, @var{p_1}, @var{a_2}, @var{p_2}, @dots{})
27 アトムやアトムのリスト@var{a_i}に、プロパティやプロパティのリスト@var{p_i}を割り当てます。
28 @var{a_i}や@var{p_i}がリストの時、
29 アトムのそれぞれは、プロパティすべてを得ます。
31 @code{declare}は引数をクォートします。
32 @code{declare}はいつも@code{done}を返します。
34 それぞれの宣言フラグに関する記述で注意しているように、
35 いくつかのフラグに関して、
36 もし@var{object}が@var{feature}を持つよう宣言されているなら、
37 @code{featurep(@var{object}, @var{feature})}は、
38 @code{true}を返します。
39 しかしながら、@code{featurep}はいくつかのフラグを認識しません;
40 これはバグです。
42 @code{features}も参照してください。
44 @code{declare}は以下のプロパティを認識します:
46 @table @asis
47 @item @code{evfun}
48 @code{ev}のフラグ引数として@var{a_i}が現れた時
49 @var{a_i}で名付けられた関数を適用するように
50 @code{ev}に伝えます。
51 @code{evfun}を参照してください。
53 @item @code{evflag}
54 @code{ev}のフラグ引数として@var{a_i}が現れた時
55 @code{ev}の実行中@var{a_i}が@code{true}にバインドされるように
56 @code{ev}に伝えます。
57 @code{evflag}を参照してください。
59 @c OBSOLETE @code{special} (RECOGNIZED BY DECLARE BUT NEVER USED ANYWHERE)
61 @item @code{bindtest}
62 @var{a_i}がバインドされていない状態に評価された時、
63 Maximaにエラーをトリガーするように伝えます。
65 @item @code{noun}
66 @var{a_i}を名詞としてパースするようにMaximaに伝えます。
67 この効果は、@var{a_i}のインスタンスを@code{'@var{a_i}}や@code{nounify(@var{a_i})}
68 で置き換えることです。どちらに置き換えるかは文脈に依存します。
70 @item @code{constant}
71 @var{a_i}をシンボル定数と考えるようにMaximaに伝えます。
72 @c WHAT MAXIMA KNOWS ABOUT SYMBOLIC CONSTANTS IS PRETTY LIMITED
73 @c DUNNO IF WE WANT TO GET INTO DETAILS HERE.
74 @c MAYBE IN THE DOCUMENTATION FOR CONSTANT (IF THERE IS SUCH)
76 @item @code{scalar}
77 @var{a_i}をスカラー変数と考えるようにMaximaに伝えます。
79 @item @code{nonscalar}
80 @var{a_i}を非スカラー変数と考えるようにMaximaに伝えます。
81 普通の使い方は、変数をシンボルベクトルや行列として宣言することです。
83 @item @code{nonarray}
84 Maximaに@var{a_i}を配列でないものと考えるように伝えます。
85 この宣言は添字付き変数名の多重評価を抑制します。
87 @item @code{mainvar}
88 @var{a_i}を「主変数」と考えるようにMaximaに伝えます。
89 @code{ordergreatp}で決定されるように、
90 Maximaの式の標準順序では、主変数は他のすべての定数や変数に続きます。
92 @item @code{alphabetic}
93 (文字列の)@var{a_i}の中の文字すべてをアルファベット文字として認識するように
94 Maximaに伝えます。
96 @item @code{feature}
97 @var{a_i}をfeature名として認識するようにMaximaに伝えます。
98 他のアトムは、@var{a_i}プロパティを持つように定義されます。
100 @item @code{rassociative}, @code{lassociative}
101 @var{a_i}を右結合、もしくは左結合関数として認識するようにMaximaに伝えます。
103 @item @code{nary}
104 @var{a_i}をn項関数として認識するようにMaximaに伝えます。
106 @code{nary}宣言は、@code{nary}関数をコールするのとは同じではありません。
107 @code{declare(foo, nary)}だけの効果は、Maxima整理器を
108 ネストされた式を平坦にするように指示することです。
109 例えば、@code{foo(x, foo(y, z))}を@code{foo(x, y, z)}に整理します。
111 @item @code{symmetric}, @code{antisymmetric}, @code{commutative}
112 @var{a_i}を対称もしくは反対称関数として認識するようにMaximaに伝えます。
113 @code{commutative}は@code{symmetric}と同じです。
115 @item @code{oddfun}, @code{evenfun}
116 @var{a_i}を偶関数もしくは奇関数として認識するようにMaximaに伝えます。
118 @item @code{outative}
119 @var{a_i}式を最初の引数から定数因子を引き出すことで整理するようにMaximaに伝えます。
121 @var{a_i}が1つ引数を持つ時、
122 もしリテラル定数や宣言定数なら、因子は定数とみなされます。
124 @var{a_i}が2つ以上の引数を持つ時、
125 もし2番目の引数がシンボルであり、因子が2番目の引数の制約を受けなければ、
126 因子は定数とみなされます。
128 @item @code{multiplicative}
129 代入@code{@var{a_i}(x * y * z * ...)} @code{-->}
130 @code{@var{a_i}(x) * @var{a_i}(y) * @var{a_i}(z) * ...}.
131 によって、@var{a_i}式を整理するようにMaximaに伝えます。
132 代入は、1番目の引数のみで実行されます。
134 @item @code{additive}
135 代入@code{@var{a_i}(x + y + z + ...)} @code{-->}
136 @code{@var{a_i}(x) + @var{a_i}(y) + @var{a_i}(z) + ...}.
137 によって、@var{a_i}式を整理するようにMaximaに伝えます。
138 代入は、1番目の引数のみで実行されます。
140 @item @code{linear}
141 @var{a_i}を@code{outative}かつ@code{additive}に宣言することと同値です。
143 @c OBSOLETE @code{analytic} (RECOGNIZED BY DECLARE BUT NEVER USED ANYWHERE)
145 @item @code{integer}, @code{noninteger}
146 @var{a_i}を整数もしくは非整数変数として認識するようにMaximaに伝えます。
148 @item @code{even}, @code{odd}
149 @var{a_i}を偶数変数もしくは奇数変数として認識するようにMaximaに伝えます。
151 @item @code{rational}, @code{irrational}
152 @var{a_i}を有理変数もしくは非有理実変数として認識するようにMaximaに伝えます。
154 @item @code{real}, @code{imaginary}, @code{complex}
155 @var{a_i}を実変数もしくは純虚数変数もしくは複素変数として認識するようにMaximaに伝えます。
157 @item @code{increasing}, @code{decreasing}
158 @var{a_i}を単調増加関数もしくは単調減少関数として認識するようにMaximaに伝えます。
159 @c MAXIMA FAILS TO DEDUCE F(2) > F(1) FOR INCREASING FUNCTION F
160 @c AND FAILS TO DEDUCE ANYTHING AT ALL ABOUT DECREASING FUNCTIONS
161 @c REPORTED AS SF BUG # 1483194
163 @item @code{posfun}
164 @var{a_i}を正関数として認識するようにMaximaに伝えます。
166 @item @code{integervalued}
167 @var{a_i}を整数値を返す関数として認識するようにMaximaに伝えます。
169 @end table
171 例:
173 @code{evfun}と@code{evflag}宣言。
175 @c ===beg===
176 @c declare (expand, evfun);
177 @c (a + b)^3;
178 @c (a + b)^3, expand;
179 @c declare (demoivre, evflag);
180 @c exp (a + b*%i);
181 @c exp (a + b*%i), demoivre;
182 @c ===end===
183 @example
184 (%i1) declare (expand, evfun);
185 (%o1)                         done
186 (%i2) (a + b)^3;
187                                    3
188 (%o2)                       (b + a)
189 (%i3) (a + b)^3, expand;
190                      3        2      2      3
191 (%o3)               b  + 3 a b  + 3 a  b + a
192 (%i4) declare (demoivre, evflag);
193 (%o4)                         done
194 (%i5) exp (a + b*%i);
195                              %i b + a
196 (%o5)                      %e
197 (%i6) exp (a + b*%i), demoivre;
198                       a
199 (%o6)               %e  (%i sin(b) + cos(b))
200 @end example
202 @code{bindtest}宣言。
204 @c ===beg===
205 @c aa + bb;
206 @c declare (aa, bindtest);
207 @c aa + bb;
208 @c aa : 1234;
209 @c aa + bb;
210 @c ===end===
211 @example
212 (%i1) aa + bb;
213 (%o1)                        bb + aa
214 (%i2) declare (aa, bindtest);
215 (%o2)                         done
216 (%i3) aa + bb;
217 aa unbound variable
218  -- an error.  Quitting.  To debug this try debugmode(true);
219 (%i4) aa : 1234;
220 (%o4)                         1234
221 (%i5) aa + bb;
222 (%o5)                       bb + 1234
223 @end example
225 @code{noun}宣言。
227 @c ===beg===
228 @c factor (12345678);
229 @c declare (factor, noun);
230 @c factor (12345678);
231 @c ''%, nouns;
232 @c ===end===
233 @example
234 (%i1) factor (12345678);
235                              2
236 (%o1)                     2 3  47 14593
237 (%i2) declare (factor, noun);
238 (%o2)                         done
239 (%i3) factor (12345678);
240 (%o3)                   factor(12345678)
241 (%i4) ''%, nouns;
242                              2
243 (%o4)                     2 3  47 14593
244 @end example
246 @code{constant}, @code{scalar}, @code{nonscalar}, @code{mainvar}宣言。
248 @c ===beg===
249 @c declare (bb, constant);
250 @c declare (cc, scalar);
251 @c declare (dd, nonscalar);
252 @c declare (ee, mainvar);
253 @c ===end===
254 @example
255 @end example
257 @code{alphabetic}宣言。
259 @c ===beg===
260 @c xx\~yy\`\@ : 1729;
261 @c declare ("~`@", alphabetic);
262 @c xx~yy`@ + @yy`xx + `xx@@yy~;
263 @c listofvars (%);
264 @c ===end===
265 @example
266 (%i1) xx\~yy\`\@@ : 1729;
267 (%o1)                         1729
268 (%i2) declare ("~`@@", alphabetic);
269 (%o2)                         done
270 (%i3) xx~yy`@@ + @@yy`xx + `xx@@@@yy~;
271 (%o3)               `xx@@@@yy~ + @@yy`xx + 1729
272 (%i4) listofvars (%);
273 (%o4)                  [@@yy`xx, `xx@@@@yy~]
274 @end example
276 @code{feature}宣言。
278 @c ===beg===
279 @c declare (FOO, feature);
280 @c declare (x, FOO);
281 @c featurep (x, FOO);
282 @c ===end===
283 @example
284 (%i1) declare (FOO, feature);
285 (%o1)                         done
286 (%i2) declare (x, FOO);
287 (%o2)                         done
288 (%i3) featurep (x, FOO);
289 (%o3)                         true
290 @end example
292 @code{rassociative}, @code{lassociative}宣言。
294 @c ===beg===
295 @c declare (F, rassociative);
296 @c declare (G, lassociative);
297 @c ===end===
298 @example
299 @end example
301 @code{nary}宣言。
303 @c ===beg===
304 @c H (H (a, b), H (c, H (d, e)));
305 @c declare (H, nary);
306 @c H (H (a, b), H (c, H (d, e)));
307 @c ===end===
308 @example
309 (%i1) H (H (a, b), H (c, H (d, e)));
310 (%o1)               H(H(a, b), H(c, H(d, e)))
311 (%i2) declare (H, nary);
312 (%o2)                         done
313 (%i3) H (H (a, b), H (c, H (d, e)));
314 (%o3)                   H(a, b, c, d, e)
315 @end example
317 @code{symmetric}, @code{antisymmetric}宣言。
319 @c ===beg===
320 @c S (b, a);
321 @c declare (S, symmetric);
322 @c S (b, a);
323 @c S (a, c, e, d, b);
324 @c T (b, a);
325 @c declare (T, antisymmetric);
326 @c T (b, a);
327 @c T (a, c, e, d, b);
328 @c ===end===
329 @example
330 (%i1) S (b, a);
331 (%o1)                        S(b, a)
332 (%i2) declare (S, symmetric);
333 (%o2)                         done
334 (%i3) S (b, a);
335 (%o3)                        S(a, b)
336 (%i4) S (a, c, e, d, b);
337 (%o4)                   S(a, b, c, d, e)
338 (%i5) T (b, a);
339 (%o5)                        T(b, a)
340 (%i6) declare (T, antisymmetric);
341 (%o6)                         done
342 (%i7) T (b, a);
343 (%o7)                       - T(a, b)
344 (%i8) T (a, c, e, d, b);
345 (%o8)                   T(a, b, c, d, e)
346 @end example
348 @code{oddfun}, @code{evenfun}宣言。
350 @c ===beg===
351 @c o (- u) + o (u);
352 @c declare (o, oddfun);
353 @c o (- u) + o (u);
354 @c e (- u) - e (u);
355 @c declare (e, evenfun);
356 @c e (- u) - e (u);
357 @c ===end===
358 @example
359 (%i1) o (- u) + o (u);
360 (%o1)                     o(u) + o(- u)
361 (%i2) declare (o, oddfun);
362 (%o2)                         done
363 (%i3) o (- u) + o (u);
364 (%o3)                           0
365 (%i4) e (- u) - e (u);
366 (%o4)                     e(- u) - e(u)
367 (%i5) declare (e, evenfun);
368 (%o5)                         done
369 (%i6) e (- u) - e (u);
370 (%o6)                           0
371 @end example
373 @code{outative}宣言。
375 @c ===beg===
376 @c F1 (100 * x);
377 @c declare (F1, outative);
378 @c F1 (100 * x);
379 @c declare (zz, constant);
380 @c F1 (zz * y);
381 @c ===end===
382 @example
383 (%i1) F1 (100 * x);
384 (%o1)                       F1(100 x)
385 (%i2) declare (F1, outative);
386 (%o2)                         done
387 (%i3) F1 (100 * x);
388 (%o3)                       100 F1(x)
389 (%i4) declare (zz, constant);
390 (%o4)                         done
391 (%i5) F1 (zz * y);
392 (%o5)                       zz F1(y)
393 @end example
395 @code{multiplicative}宣言。
397 @c ===beg===
398 @c F2 (a * b * c);
399 @c declare (F2, multiplicative);
400 @c F2 (a * b * c);
401 @c ===end===
402 @example
403 (%i1) F2 (a * b * c);
404 (%o1)                       F2(a b c)
405 (%i2) declare (F2, multiplicative);
406 (%o2)                         done
407 (%i3) F2 (a * b * c);
408 (%o3)                   F2(a) F2(b) F2(c)
409 @end example
411 @code{additive}宣言。
413 @c ===beg===
414 @c F3 (a + b + c);
415 @c declare (F3, additive);
416 @c F3 (a + b + c);
417 @c ===end===
418 @example
419 (%i1) F3 (a + b + c);
420 (%o1)                     F3(c + b + a)
421 (%i2) declare (F3, additive);
422 (%o2)                         done
423 (%i3) F3 (a + b + c);
424 (%o3)                 F3(c) + F3(b) + F3(a)
425 @end example
427 @code{linear}宣言。
429 @c ===beg===
430 @c 'sum (F(k) + G(k), k, 1, inf);
431 @c declare (nounify (sum), linear);
432 @c 'sum (F(k) + G(k), k, 1, inf);
433 @c ===end===
434 @example
435 (%i1) 'sum (F(k) + G(k), k, 1, inf);
436                        inf
437                        ====
438                        \
439 (%o1)                   >    (G(k) + F(k))
440                        /
441                        ====
442                        k = 1
443 (%i2) declare (nounify (sum), linear);
444 (%o2)                         done
445 (%i3) 'sum (F(k) + G(k), k, 1, inf);
446 @group
447                      inf          inf
448                      ====         ====
449                      \            \
450 (%o3)                 >    G(k) +  >    F(k)
451                      /            /
452                      ====         ====
453                      k = 1        k = 1
454 @end group
455 @end example
457 @opencatbox
458 @category{Declarations and inferences}
459 @closecatbox
460 @end deffn
462 @c -----------------------------------------------------------------------------
463 @anchor{features}
464 @defvr {宣言} features
466 Maximaは、関数や変数のある数学的プロパティを認識します。
467 それらは「フィーチャー」と呼ばれます。
469 @code{declare (@var{x}, @var{foo})}は、
470 プロパティ@var{foo}を関数もしくは変数@var{x}に与えます。
472 @code{declare (@var{foo}, feature)}は、
473 新しいフィーチャー@var{foo}を宣言します。
474 例えば、
475 @code{declare ([red, green, blue], feature)}は、
476 3つの新しいフィーチャー@code{red}, @code{green}, @code{blue}を宣言します。
478 もし@var{x}が@var{foo}プロパティを持つなら、
479 述語論理@code{featurep (@var{x}, @var{foo})}は、@code{true}を返し、
480 そうでなければ、@code{false}を返します。
482 インフォリスト@code{features}は既知のフィーチャーのリストです。
483 それらは、
485 @verbatim
486    integer        noninteger      even
487    odd            rational        irrational
488    real           imaginary       complex
489    analytic       increasing      decreasing
490    oddfun         evenfun         posfun
491    commutative    lassociative    rassociative
492    symmetric      antisymmetric
493 @end verbatim
495 プラス、任意のユーザー定義フィーチャーです。
497 @code{features}は、数学的フィーチャーのリストです。
498 非数学的で、システム依存のフィーチャーのリストもあります。
499 @code{status}を参照してください。
501 @opencatbox
502 @category{Declarations and inferences}
503 @closecatbox
504 @end defvr
506 @c -----------------------------------------------------------------------------
507 @anchor{get}
508 @deffn {関数} get (@var{a}, @var{i})
510 @var{i}が示すアトム @var{a}のユーザープロパティを検索し、
511 もしaがプロパティ @var{i}を持たないなら、 @code{false}を返します。
513 @code{get}は、引数を評価します。
515 @c ===beg===
516 @c put (%e, 'transcendental, 'type);
517 @c put (%pi, 'transcendental, 'type)$
518 @c put (%i, 'algebraic, 'type)$
519 @c typeof (expr) := block ([q],
520 @c         if numberp (expr)
521 @c         then return ('algebraic),
522 @c         if not atom (expr)
523 @c         then return (maplist ('typeof, expr)),
524 @c         q: get (expr, 'type),
525 @c         if q=false
526 @c         then errcatch (error(expr,"is not numeric.")) else q)$
527 @c typeof (2*%e + x*%pi);
528 @c typeof (2*%e + %pi);
529 @c ===end===
530 @example
531 (%i1) put (%e, 'transcendental, 'type);
532 (%o1)                    transcendental
533 (%i2) put (%pi, 'transcendental, 'type)$
534 (%i3) put (%i, 'algebraic, 'type)$
535 (%i4) typeof (expr) := block ([q],
536         if numberp (expr)
537         then return ('algebraic),
538         if not atom (expr)
539         then return (maplist ('typeof, expr)),
540         q: get (expr, 'type),
541         if q=false
542         then errcatch (error(expr,"is not numeric.")) else q)$
543 (%i5) typeof (2*%e + x*%pi);
544 x is not numeric.
545 (%o5)  [[transcendental, []], [algebraic, transcendental]]
546 (%i6) typeof (2*%e + %pi);
547 (%o6)     [transcendental, [algebraic, transcendental]]
549 @end example
551 @opencatbox
552 @category{Declarations and inferences}
553 @closecatbox
554 @end deffn
556 @c -----------------------------------------------------------------------------
557 @anchor{nonarray}
558 @deffn {プロパティ} nonarray
560 コマンド@code{declare(a, nonarray)}はMaximaに
561 @var{a}が配列でないものと考えるように伝えます。
562 もし@var{a}が添字付き変数なら、この宣言は多重評価を抑制します。
564 例:
566 @c ===beg===
567 @c a:'b$ b:'c$ c:'d$
568 @c a[x];
569 @c declare(a, nonarray);
570 @c a[x];
571 @c ===end===
572 @example
573 (%i1) a:'b$ b:'c$ c:'d$
576 (%i4) a[x];
577 (%o4)                          d
578                                 x
579 (%i5) declare(a, nonarray);
580 (%o5)                         done
581 (%i6) a[x];
582 (%o6)                          a
583                                 x
584 @end example
586 @opencatbox
587 @category{Expressions}
588 @closecatbox
589 @end deffn
591 @c NEEDS EXAMPLES
593 @c -----------------------------------------------------------------------------
594 @anchor{posfun}
595 @defvr {宣言} posfun
596 @code{declare (f, posfun)}は、
597 @code{f}を正の関数と宣言します。
598 @code{is (f(x) > 0)}は@code{true}を出力します。
600 @opencatbox
601 @category{Declarations and inferences}
602 @category{Operators}
603 @closecatbox
604 @end defvr
606 @c NEEDS WORK ESPECIALLY EXAMPLES
607 @c WHOLE BUSINESS WITH PROPERTIES IS PRETTY CONFUSING, TRY TO CLEAR IT UP
609 @c -----------------------------------------------------------------------------
610 @anchor{printprops}
611 @deffn {関数} printprops (@var{a}, @var{i})
612 @deffnx {関数} printprops ([@var{a_1}, ..., @var{a_n}], @var{i})
613 @deffnx {関数} printprops (all, @var{i})
615 アトム@var{a}に関連付けられた指標@var{i}の属性を表示します。
616 @var{a}は、アトムのリストもしくはアトム@code{all}もありえます。
617 その場合,与えられたプロパティを持つすべてのアトムに適用します。
618 例えば、 @code{printprops ([f, g], atvalue)}。
619 @code{printprops}は、表示できないプロパティ、
620 すなわち@mref{atvalue}, @mref{atomgrad}, @mref{gradef}, @mref{matchdeclare}のためのものです。
622 @opencatbox
623 @category{Declarations and inferences}
624 @category{Display functions}
625 @closecatbox
627 @end deffn
629 @c -----------------------------------------------------------------------------
630 @node Functions and Variables for Facts, Functions and Variables for Predicates, Functions and Variables for Properties, Maximas Database
631 @section Functions and Variables for Facts
632 @c -----------------------------------------------------------------------------
634 @c -----------------------------------------------------------------------------
635 @anchor{activate}
636 @deffn {関数} activate (@var{context_1}, @dots{}, @var{context_n})
637 文脈@var{context_1}, @dots{}, @var{context_n}をアクティベートします。
638 これらの文脈に関する事実は、演繹し情報を検索するために利用可能となります。
639 これらの文脈に関する事実は、@code{facts ()}によってリストされません。
641 変数@code{activecontexts}は、
642 @code{activate}関数を使ってアクティブになった文脈のリストです。
644 @opencatbox
645 @category{Declarations and inferences}
646 @closecatbox
647 @end deffn
649 @c -----------------------------------------------------------------------------
650 @anchor{activecontexts}
651 @defvr {システム変数} activecontexts
652 デフォルト値: @code{[]}
654 変数@code{activecontexts}は、
655 アクティブである文脈と対照的に、
656 @code{activate}関数を使ってアクティブになった文脈のリストです。
657 ゆえに、それらは現在の文脈の部分文脈です。
659 @opencatbox
660 @category{Declarations and inferences}
661 @closecatbox
662 @end defvr
664 @c After studying src/compar.lisp, it appears that askexp would
665 @c work as advertised, except that it doesn't appear to be possible
666 @c to open a break prompt with ^A or any other character.
667 @c What should we do about askexp ???
669 @c -----------------------------------------------------------------------------
670 @anchor{askexp}
671 @defvr {システム変数} askexp
672 @code{asksign}がコールされた時、
673 @code{askexp}は、@code{asksign}がテストしている式です。
675 以前は、control-AでMaximaブレイクに入ることによって、
676 ユーザーが@code{askexp}を検査することができました。
678 @opencatbox
679 @category{Declarations and inferences}
680 @closecatbox
681 @end defvr
683 @c THERE IS PROBABLY MORE TO THE STORY THAN WHAT IS INDICATED HERE ...
685 @c -----------------------------------------------------------------------------
686 @anchor{askinteger}
687 @deffn  {関数} askinteger (@var{expr}, integer)
688 @deffnx {関数} askinteger (@var{expr})
689 @deffnx {関数} askinteger (@var{expr}, even)
690 @deffnx {関数} askinteger (@var{expr}, odd)
692 @code{askinteger (@var{expr}, integer)}は、
693 @code{assume}データベースから、@var{expr}が整数かどうかを決定しようとします。
694 そうでなく、もし決定できなければ、@code{askinteger}はユーザーに入力を促し、
695 @c UMM, askinteger AND asksign DO NOT APPEAR TO HAVE ANY EFFECT ON THE assume
696 @c DATABASE !!!
697 可能ならばデータベースに情報をインストールしようとします。
698 @code{askinteger (@var{expr})}は、
699 @code{askinteger (@var{expr}, integer)}と同値です。
701 同様に、
702 @code{askinteger (@var{expr}, even)}や@code{askinteger (@var{expr}, odd)}は、
703 それぞれ、@var{expr}が偶数か奇数か、決定しようとします。
705 @opencatbox
706 @category{Declarations and inferences}
707 @closecatbox
708 @end deffn
710 @c THERE IS PROBABLY MORE TO THE STORY THAN WHAT IS INDICATED HERE ...
712 @c -----------------------------------------------------------------------------
713 @anchor{asksign}
714 @deffn {関数} asksign (@var{expr})
716 最初に、指定された式が正か負かゼロか決定しようとします。
717 できなければ、演繹を完了するのに必要な質問をユーザーに尋ねます。
718 ユーザーの答えは、現在の計算の演繹のため、データベースに記録されます。
719 @code{asksign}の戻り値は、@code{pos}, @code{neg}もしくは@code{zero}のいずれか1つです。
721 @opencatbox
722 @category{Declarations and inferences}
723 @closecatbox
724 @end deffn
726 @c -----------------------------------------------------------------------------
727 @anchor{assume}
728 @deffn {関数} assume (@var{pred_1}, @dots{}, @var{pred_n})
730 述語論理@var{pred_1}, @dots{}, @var{pred_n}を現在の文脈に追加します。
731 もし述語論理が現在の文脈と矛盾していたり、冗長だったりしたなら、文脈に追加されません。
732 文脈は@code{assume}がコールされる毎に述語論理を累積していきます。
734 @code{assume}は、文脈に追加された述語論理を要素に持つリストか、
735 適用されたアトム@code{redundant}もしくは@code{inconsistent}を返します。
737 述語論理@var{pred_1}, @dots{}, @var{pred_n}は
738 関係演算子@code{< <= equal notequal >= >}を持つ式のみ許されます。
739 述語論理はリテラル等号@code{=}やリテラル不等号@code{#}の式は使えません。
740 @code{integerp}のような述語関数も使えません。
742 形式@code{@var{pred_1} and ...and @var{pred_n}}の合成された述語論理が認識されます。
743 しかし、@code{@var{pred_1} or ... or @var{pred_n}}は認識されません。
744 もし@code{pred_k}が関係述語論理なら、@code{not @var{pred_k}}は認識されます。
745 形式@code{not (@var{pred_1} and @var{pred_2})}の式や
746 @code{not (@var{pred_1} or @var{pred_2})}は認識されません。
748 Maximaの推論メカニズムはそれほど強くありません;
749 @code{is}によって決定されない多くの明らかな結果があります。
750 これは既知の弱みです。
752 @code{assume}は複素数を伴う述語論理を扱いません。
753 もし述語論理が複素数を含むなら、@code{assume}は@code{inconsistent}か@code{redundant}を返します。
755 @code{assume}は引数を評価します。
757 @code{is}や@code{facts}, @code{forget}, @code{context}, @code{declare}も参照してください。
759 例:
761 @c ===beg===
762 @c assume (xx > 0, yy < -1, zz >= 0);
763 @c assume (aa < bb and bb < cc);
764 @c facts ();
765 @c is (xx > yy);
766 @c is (yy < -yy);
767 @c is (sinh (bb - aa) > 0);
768 @c forget (bb > aa);
769 @c prederror : false;
770 @c is (sinh (bb - aa) > 0);
771 @c is (bb^2 < cc^2);
772 @c ===end===
773 @example
774 (%i1) assume (xx > 0, yy < -1, zz >= 0);
775 (%o1)              [xx > 0, yy < - 1, zz >= 0]
776 (%i2) assume (aa < bb and bb < cc);
777 (%o2)                  [bb > aa, cc > bb]
778 (%i3) facts ();
779 (%o3)     [xx > 0, - 1 > yy, zz >= 0, bb > aa, cc > bb]
780 (%i4) is (xx > yy);
781 (%o4)                         true
782 (%i5) is (yy < -yy);
783 (%o5)                         true
784 (%i6) is (sinh (bb - aa) > 0);
785 (%o6)                         true
786 (%i7) forget (bb > aa);
787 (%o7)                       [bb > aa]
788 (%i8) prederror : false;
789 (%o8)                         false
790 (%i9) is (sinh (bb - aa) > 0);
791 (%o9)                        unknown
792 (%i10) is (bb^2 < cc^2);
793 (%o10)                       unknown
794 @end example
796 @opencatbox
797 @category{Declarations and inferences}
798 @closecatbox
799 @end deffn
801 @c -----------------------------------------------------------------------------
802 @anchor{assumescalar}
803 @defvr {オプション変数} assumescalar
804 デフォルト値: @code{true}
806 @code{assumescalar}は、
807 @code{nonscalarp (expr)}が@code{false}であるような式@code{expr}が、
808 ある変換に関してスカラーのように振る舞うと仮定されるかどうかを決めるのを助けます。
810 Let 
811 @code{expr}がリストや行列以外の任意の式を表してるとし、
812 @code{[1, 2, 3]}が任意のリストや行列を表しているとすると、
813 もし@code{assumescalar}が@code{true}、
814 もしくは@code{scalarp (expr)}が@code{true}、
815 もしくは@code{constantp (expr)}が@code{true}なら、
816 @code{expr . [1, 2, 3]}は、@code{[expr, 2 expr, 3 expr]}をもたらします。
818 もし@code{assumescalar}が@code{true}なら、
819 そんな式は可換演算子に関してだけスカラーのように振る舞いますが、
820 非可換乗算@code{.}に関してはそうは振る舞いません。
822 @code{assumescalar}が@code{false}の時
823 そんな式は、非スカラーのように振る舞います。
825 @code{assumescalar}が@code{all}の時、
826 そんな式は、上でリストされた演算子すべてに関してスカラーのように振る舞います。
828 @opencatbox
829 @category{Declarations and inferences}
830 @closecatbox
831 @end defvr
833 @c -----------------------------------------------------------------------------
834 @anchor{assume_pos}
835 @defvr {オプション変数} assume_pos
836 デフォルト値: @code{false}
838 @code{assume_pos}が@code{true}で、
839 パラメータ@var{x}の符号が現在の文脈や他の考慮から決定できない時、
840 @c WHAT ARE THOSE OTHER CONSIDERATIONS ??
841 @code{sign}や@code{asksign (@var{x})}は、@code{true}を返します。
842 これは、@code{integrate}や他の計算から起こるような、
843 自動生成される@code{asksign}問い合わせを事前に防ぐことができます。
845 デフォルトでは、パラメータは@code{symbolp (@var{x})}もしくは
846 @code{subvarp (@var{x})}のような@var{x}です。
847 パラメータとして考えられる式のクラスは、
848 変数@code{assume_pos_pred}を介して、ある程度変えることができます。
850 @code{sign}と@code{asksign}は、
851 式の中のオペランドの符号から式の符号を演繹しようとします。
852 例えば、もし@code{a}や@code{b}がともに正なら、
853 @code{a + b}も正です。
855 しかしながら、@code{asksign}問い合わせすべてを迂回する方法はありません。
856 特に、@code{asksign}引数が、差@code{@var{x} - @var{y}}もしくは
857 対数@code{log(@var{x})}の時、
858 たとえ@code{assume_pos}が@code{true}で、@code{assume_pos_pred}が
859 引数すべてに@code{true}を返す関数であっても、
860 @code{asksign}は、いつもユーザーからの入力を要請します。
862 @c NEED EXAMPLES HERE
863 @opencatbox
864 @category{Declarations and inferences}
865 @closecatbox
866 @end defvr
868 @c -----------------------------------------------------------------------------
869 @anchor{assume_pos_pred}
870 @defvr {オプション変数} assume_pos_pred
871 デフォルト値: @code{false}
873 @code{assume_pos_pred}が関数名や、引数@var{x}のラムダ式に割り当てられている時、
874 その関数は、
875 @var{x}が、@code{assume_pos}のためのパラメータと考えられるかどうかを決定するために
876 コールされます。
877 @code{assume_pos}が@code{false}の時、
878 @code{assume_pos_pred}は、無視されます。
880 @code{assume_pos_pred}関数は、引数@var{x}で@code{sign}と@code{asksign}によってコールされます。
881 ここで、@var{x}はアトム、添字付き変数、関数コール式のいずれかです。
882 もし@code{assume_pos_pred}関数が@code{true}を返すなら、
883 @var{x}は、@code{assume_pos}のためのパラメータと考えられます。
885 デフォルトでは、パラメータは、@code{symbolp (@var{x})}もしくは@code{subvarp (@var{x})}のような@var{x}です。
887 @code{assume}と@code{assume_pos}も参照してください。
889 例:
891 @c ===beg===
892 @c assume_pos: true$
893 @c assume_pos_pred: symbolp$
894 @c sign (a);
895 @c sign (a[1]);
896 @c assume_pos_pred: lambda ([x], display (x), true)$
897 @c asksign (a);
898 @c asksign (a[1]);
899 @c asksign (foo (a));
900 @c asksign (foo (a) + bar (b));
901 @c asksign (log (a));
902 @c asksign (a - b);
903 @c ===end===
904 @example
905 (%i1) assume_pos: true$
906 (%i2) assume_pos_pred: symbolp$
907 (%i3) sign (a);
908 (%o3)                          pos
909 (%i4) sign (a[1]);
910 (%o4)                          pnz
911 (%i5) assume_pos_pred: lambda ([x], display (x), true)$
912 (%i6) asksign (a);
913                               x = a
915 (%o6)                          pos
916 (%i7) asksign (a[1]);
917                              x = a
918                                   1
920 (%o7)                          pos
921 (%i8) asksign (foo (a));
922                            x = foo(a)
924 (%o8)                          pos
925 (%i9) asksign (foo (a) + bar (b));
926                            x = foo(a)
928                            x = bar(b)
930 (%o9)                          pos
931 (%i10) asksign (log (a));
932                               x = a
934 Is  a - 1  positive, negative, or zero?
937 (%o10)                         pos
938 (%i11) asksign (a - b);
939                               x = a
941                               x = b
943                               x = a
945                               x = b
947 Is  b - a  positive, negative, or zero?
950 (%o11)                         neg
951 @end example
953 @opencatbox
954 @category{Declarations and inferences}
955 @closecatbox
956 @end defvr
958 @c -----------------------------------------------------------------------------
959 @anchor{context}
960 @defvr {オプション変数} context
961 デフォルト値: @code{initial}
963 @code{context}は、@code{assume}と@code{forget}によって保守される事実の集まりの名前です。
965 @code{assume}は、@code{context}と名付けられた集まりに事実を追加する一方、
966 @code{forget}は、事実を取り除きます。
968 @code{context}を名前@var{foo}にバインドすることは、
969 現在の文脈を@var{foo}に変えます。
970 もし指定された文脈@var{foo}がまだ存在しないなら、
971 @code{newcontext}のコールによって自動的に生成されます。
972 @c ISN'T THIS NEXT BIT EQUIVALENT TO THE FIRST ??
973 指定された文脈は自動的にアクティベートされます。
975 文脈メカニズムの一般的な記述に関しては、@code{contexts}を参照してください。
977 @opencatbox
978 @category{Declarations and inferences}
979 @closecatbox
980 @end defvr
982 @c UMM, I'M HAVING TROUBLE GETTING THE CONTEXT-SWITCHING STUFF TO BEHAVE AS EXPECTED
983 @c SOME EXAMPLES WILL HELP A LOT HERE
985 @c -----------------------------------------------------------------------------
986 @anchor{option_contexts}
987 @defvr {オプション変数} contexts
988 デフォルト値: @code{[initial, global]}
990 @code{contexts}は、
991 現在アクティブな文脈を含んでいる、現在存在する文脈のリストです。
993 文脈メカニズムは、ユーザーが
994 文脈と呼ばれる事実の集まりにバインドし、名付けることを可能にします。
995 一旦これがなされると、ユーザーは、
996 文脈を単にアクティベートしたりデアクティベートすることで、
997 たくさんの数の事実をMaximaに仮定させたり忘れさせたりできます。
999 任意のシンボルのアトムは、文脈となりえ、
1000 その文脈の中に含まれた事実は、
1001 @code{forget}をコールすることで1つ1つ破壊されるまで、
1002 あるいは、それらが属する文脈を破壊するために@code{kill}をコールすることで、全体として破壊されるまで、記憶装置に保持されます。
1004 文脈は階層的に存在します。
1005 その根はいつも文脈@code{global}であり、
1006 文脈@code{global}は、いくつかの関数が必要とするMaximaについての情報を含みます。
1007 アクティブな文脈の部分文脈である任意の文脈の中の事実すべてそうであるように、
1008 与えられた文脈の中では、
1009 その文脈の中の事実すべては、「アクティブ」(それらが演繹や探索に使われるという意味)
1010 です。
1012 新鮮なMaximaが起動された時、
1013 ユーザーは、@code{initial}と呼ばれる文脈の中にいます。
1014 それは、部分文脈として@code{global}を持ちます。
1016 @code{facts}, @code{newcontext},
1017 @code{supcontext}, @code{killcontext}, @code{activate}, @code{deactivate}, @code{assume}, @code{forget}も参照してください。
1019 @opencatbox
1020 @category{Declarations and inferences}
1021 @closecatbox
1022 @end defvr
1024 @c -----------------------------------------------------------------------------
1025 @anchor{deactivate}
1026 @deffn {関数} deactivate (@var{context_1}, @dots{}, @var{context_n})
1028 特定の文脈@var{context_1}, @dots{}, @var{context_n}をデアクティベートします。
1030 @opencatbox
1031 @category{Declarations and inferences}
1032 @closecatbox
1033 @end deffn
1035 @c -----------------------------------------------------------------------------
1036 @anchor{facts}
1037 @deffn {関数} facts (@var{item})
1038 @deffnx {関数} facts ()
1040 もし@var{item}が文脈の名前なら、
1041 @code{facts (@var{item})}は指定された文脈の@code{facts}のリストを返します。
1043 もし@var{item}が文脈の名前でなければ、
1044 @code{facts (@var{item})}は現在の文脈の中で、
1045 @var{item}について知っている@code{facts}のリストを返します。
1046 異なる文脈中のアクティブな@code{facts}はリストされません。
1048 @code{facts ()}(すなわち引数なし)は現在の文脈をリストします。
1050 @opencatbox
1051 @category{Declarations and inferences}
1052 @closecatbox
1053 @end deffn
1055 @c -----------------------------------------------------------------------------
1056 @anchor{forget}
1057 @deffn {関数} forget (@var{pred_1}, @dots{}, @var{pred_n})
1058 @deffnx {関数} forget (@var{L})
1059 @code{assume}で規定された述語論理を取り除きます。
1060 述語論理は以前に規定されたものと同値の(必ずしも同一である必要なない)式です。
1062 @code{forget (@var{L})}(@var{L}は述語論理のリスト)は、
1063 リスト上のそれぞれの項目を忘れます。
1065 @opencatbox
1066 @category{Declarations and inferences}
1067 @closecatbox
1068 @end deffn
1070 @c -----------------------------------------------------------------------------
1071 @anchor{is}
1072 @deffn {関数} is (@var{expr})
1074 @code{assume}データベースの中の事実から述語論理@var{expr}が確かか否かを決定
1075 しようとします。
1077 もし述語論理が確かに@code{true}もしくは@code{false}なら、
1078 @code{is}は、それぞれ@code{true}もしくは@code{false}を返します。
1079 そうでなければ、戻り値は、グローバルフラグ@code{prederror}に依存します。
1080 @code{prederror}が@code{true}の時、
1081 @code{is}はエラーメッセージを出力します。
1082 そうでなければ、@code{is}は@code{unknown}を出力します。
1084 @code{ev(@var{expr}, pred)}
1085 (対話プロンプトでは、@code{@var{expr}, pred}と書けます)
1086 は、@code{is(@var{expr})}と同値です。
1088 @code{assume}, @code{facts}, @code{maybe}も参照してください。
1090 例:
1092 @code{is}は述語論理の評価を引き起こします。
1094 @c ===beg===
1095 @c %pi > %e;
1096 @c is (%pi > %e);
1097 @c ===end===
1098 @example
1099 (%i1) %pi > %e;
1100 (%o1)                       %pi > %e
1101 (%i2) is (%pi > %e);
1102 (%o2)                         true
1103 @end example
1105 @code{is}は、@code{assume}データベースから述語論理を演繹しようとします。
1107 @c ===beg===
1108 @c assume (a > b);
1109 @c assume (b > c);
1110 @c is (a < b);
1111 @c is (a > c);
1112 @c is (equal (a, c));
1113 @c ===end===
1114 @example
1115 (%i1) assume (a > b);
1116 (%o1)                        [a > b]
1117 (%i2) assume (b > c);
1118 (%o2)                        [b > c]
1119 (%i3) is (a < b);
1120 (%o3)                         false
1121 (%i4) is (a > c);
1122 (%o4)                         true
1123 (%i5) is (equal (a, c));
1124 (%o5)                         false
1125 @end example
1127 もし@code{is}が@code{assume}データベースから述語論理を証明もしくは否定できなかったら、
1128 グローバルフラグ@code{prederror}が@code{is}の振る舞いを決めます。
1130 @c ===beg===
1131 @c assume (a > b);
1132 @c prederror: true$
1133 @c is (a > 0);
1134 @c prederror: false$
1135 @c is (a > 0);
1136 @c ===end===
1137 @example
1138 (%i1) assume (a > b);
1139 (%o1)                        [a > b]
1140 (%i2) prederror: true$
1141 (%i3) is (a > 0);
1142 Maxima was unable to evaluate the predicate:
1143 a > 0
1144  -- an error.  Quitting.  To debug this try debugmode(true);
1145 (%i4) prederror: false$
1146 (%i5) is (a > 0);
1147 (%o5)                        unknown
1148 @end example
1150 @opencatbox
1151 @category{Predicate functions}
1152 @category{Declarations and inferences}
1153 @closecatbox
1154 @end deffn
1156 @c -----------------------------------------------------------------------------
1157 @anchor{killcontext}
1158 @deffn {関数} killcontext (@var{context_1}, @dots{}, @var{context_n})
1160 文脈@var{context_1}, @dots{}, @var{context_n}を消します。
1162 もし文脈の1つが現在の文脈なら、
1163 新しい文脈は、
1164 消されなかった現在の文脈の最初の利用可能な部分文脈になるでしょう。
1165 もし最初の利用可能な消されなかった文脈が@code{global}なら、
1166 @code{initial}が代わりに使われます。
1167 もし@code{initial}文脈が消されたら、
1168 新しい、空の@code{initial}文脈が生成されます。
1170 @code{killcontext}は、現在アクティブな文脈を消すことを拒否します。
1171 なぜなら、それは現在の文脈の部分文脈、もしくは
1172 関数@code{activate}の使用によってアクティブになっているから。
1174 @code{killcontext}は、引数を評価します。
1175 @code{killcontext}は、@code{done}を返します。
1177 @opencatbox
1178 @category{Declarations and inferences}
1179 @closecatbox
1180 @end deffn
1182 @c -----------------------------------------------------------------------------
1183 @anchor{maybe}
1184 @deffn {関数} maybe (@var{expr})
1186 述語論理@var{expr}が@code{assume}データベースの事実から正しいかどうかを
1187 決定しようとします。
1189 もし述語論理が確かに@code{true}もしくは@code{false}なら、
1190 @code{maybe}は、それぞれ@code{true}もしくは@code{false}を返します。
1191 そうでなければ、@code{maybe}は@code{unknown}を返します。
1193 @code{maybe}は、@code{prederror: false}での@code{is}と関数的に同値です。
1194 しかし、@code{prederror}に値を実際に割り当てることなく結果が計算されます。
1196 @code{assume}, @code{facts}, @code{is}も参照してください。
1198 例:
1200 @c ===beg===
1201 @c maybe (x > 0);
1202 @c assume (x > 1);
1203 @c maybe (x > 0);
1204 @c ===end===
1205 @example
1206 (%i1) maybe (x > 0);
1207 (%o1)                        unknown
1208 (%i2) assume (x > 1);
1209 (%o2)                        [x > 1]
1210 (%i3) maybe (x > 0);
1211 (%o3)                         true
1212 @end example
1214 @opencatbox
1215 @category{Predicate functions}
1216 @category{Declarations and inferences}
1217 @closecatbox
1218 @end deffn
1220 @c -----------------------------------------------------------------------------
1221 @anchor{newcontext}
1222 @deffn {関数} newcontext (@var{name})
1224 @var{name}と呼ばれる新しい、空の文脈を生成します。
1225 @var{name}は、唯一の部分文脈として@code{global}を持ちます。
1226 新しく生成された文脈は現在アクティブな文脈になります。
1228 @code{newcontext}は、引数を評価します。
1229 @code{newcontext}は、@var{name}を返します。
1231 @opencatbox
1232 @category{Declarations and inferences}
1233 @closecatbox
1234 @end deffn
1236 @c -----------------------------------------------------------------------------
1237 @anchor{sign}
1238 @deffn {関数} sign (@var{expr})
1239 現在のデータベースの事実に基づいて@var{expr}の符号を決定しようとします。
1240 以下の答えの1つを返します;
1241 @code{pos} (positive), @code{neg} (negative), @code{zero}, @code{pz}
1242 (正もしくはゼロ), @code{nz} (負もしくはゼロ), @code{pn} (正もしくは負),
1243 or @code{pnz} (正、負もしくはゼロ、すなわちなにもわからない).
1245 @opencatbox
1246 @category{Declarations and inferences}
1247 @closecatbox
1248 @end deffn
1250 @c -----------------------------------------------------------------------------
1251 @anchor{supcontext}
1252 @deffn {関数} supcontext (@var{name}, @var{context})
1253 @deffnx {関数} supcontext (@var{name})
1255 @var{name}と呼ばれる新しい文脈を生成します。
1256 @var{name}は、部分文脈として@var{context}を持ちます。
1257 @var{context}は存在しなければいけません。
1259 もし@var{context}が指定されないなら、
1260 現在の文脈が仮定されます。
1262 @opencatbox
1263 @category{Declarations and inferences}
1264 @closecatbox
1265 @end deffn
1267 @c -----------------------------------------------------------------------------
1268 @node Functions and Variables for Predicates, , Functions and Variables for Facts, Maximas Database
1269 @section Functions and Variables for Predicates
1270 @c -----------------------------------------------------------------------------
1272 @c -----------------------------------------------------------------------------
1273 @anchor{charfun}
1274 @deffn {関数} charfun (@var{p})
1276 述語論理@var{p}が@code{false}に評価される時、0を返します;
1277 述語論理@var{p}が@code{true}に評価される時、1を返します。
1278 述語論理が@code{true}も@code{false}でもない何かに評価される時(unknown), 
1279 名詞形を返します。
1281 例:
1283 @c ===beg===
1284 @c charfun (x < 1);
1285 @c subst (x = -1, %);
1286 @c e : charfun ('"and" (-1 < x, x < 1))$
1287 @c [subst (x = -1, e), subst (x = 0, e), subst (x = 1, e)];
1288 @c ===end===
1289 @example
1290 (%i1) charfun (x < 1);
1291 (%o1)                    charfun(x < 1)
1292 (%i2) subst (x = -1, %);
1293 (%o2)                           1
1294 (%i3) e : charfun ('"and" (-1 < x, x < 1))$
1295 (%i4) [subst (x = -1, e), subst (x = 0, e), subst (x = 1, e)];
1296 (%o4)                       [0, 1, 0]
1297 @end example
1299 @opencatbox
1300 @category{Mathematical functions}
1301 @closecatbox
1302 @end deffn
1304 @c -----------------------------------------------------------------------------
1305 @anchor{compare}
1306 @deffn {関数} compare (@var{x}, @var{y})
1308 @code{is (@var{x} @var{op} @var{y})}が
1309 @code{true}に評価されるような比較演算子@var{op}
1310 (@code{<},@code{<=},@code{>},@code{>=},@code{=},@code{#})を返します;
1311 @var{x}か@var{y}が @code{%i}に依存して、@code{@var{x} # @code{y}}の時、
1312 @code{notcomparable}を返します;
1313 該当する演算子がなかったり、Maximaが演算子を決定できなかった時には
1314 @code{unknown}を返します。
1316 例:
1318 @c ===beg===
1319 @c compare (1, 2);
1320 @c compare (1, x);
1321 @c compare (%i, %i);
1322 @c compare (%i, %i + 1);
1323 @c compare (1/x, 0);
1324 @c compare (x, abs(x));
1325 @c ===end===
1326 @example
1327 (%i1) compare (1, 2);
1328 (%o1)                           <
1329 (%i2) compare (1, x);
1330 (%o2)                        unknown
1331 (%i3) compare (%i, %i);
1332 (%o3)                           =
1333 (%i4) compare (%i, %i + 1);
1334 (%o4)                     notcomparable
1335 (%i5) compare (1/x, 0);
1336 (%o5)                           #
1337 (%i6) compare (x, abs(x));
1338 (%o6)                          <=
1339 @end example
1341 関数@code{compare}は引数の実領域が空でないか決定しようとはしません; 従って、
1343 @c ===beg===
1344 @c compare (acos (x^2 + 1), acos (x^2 + 1) + 1);
1345 @c ===end===
1346 @example
1347 (%i1) compare (acos (x^2 + 1), acos (x^2 + 1) + 1);
1348 (%o1)                           <
1349 @end example
1351 @c IT IS NOT QUITE TRUE, WHAT ABOUT x=0 ?
1352 @code{acos (x^2 + 1)}の実領域は空です。
1354 @opencatbox
1355 @category{Declarations and inferences}
1356 @closecatbox
1357 @end deffn
1359 @c NEEDS EXPANSION, CLARIFICATION, AND EXAMPLES
1360 @c CROSS REF declare, properties, ETC
1362 @c -----------------------------------------------------------------------------
1363 @anchor{constant}
1364 @deffn {特殊演算子} constant
1366 @code{declare (@var{a}, constant)}は、@var{a}を定数に宣言します。
1367 @mref{declare}を参照してください。
1368 @c WHAT EXACTLY ARE THE CONSEQUENCES OF DECLARING AN ATOM TO BE CONSTANT ??
1370 @opencatbox
1371 @category{Declarations and inferences}
1372 @category{Constants}
1373 @closecatbox
1374 @end deffn
1376 @c -----------------------------------------------------------------------------
1377 @anchor{constantp}
1378 @deffn {関数} constantp (@var{expr})
1380 もし@var{expr}が定数式なら、@code{true}を返します。
1381 そうでなければ、@code{false}を返します。
1382 @c WHAT DOES MAXIMA KNOW ABOUT CONSTANT EXPRESSIONS ??
1384 もし引数が、(@code{/R/}をつけて表示される有理数を含む)数や
1385 @mref{%pi}, @mref{%e}, @mref{%i}にようなシンボル定数、
1386 定数にバインドされた変数、@mref{declare}で宣言された定数、
1387 引数が定数の関数のいずれかなら、
1388 式は定数式と考えられます。
1390 @code{constantp}は引数を評価します。
1392 例:
1394 @c ===beg===
1395 @c constantp (7 * sin(2));
1396 @c constantp (rat (17/29));
1397 @c constantp (%pi * sin(%e));
1398 @c constantp (exp (x));
1399 @c declare (x, constant);
1400 @c constantp (exp (x));
1401 @c constantp (foo (x) + bar (%e) + baz (2));
1402 @c ===end===
1403 @example
1404 (%i1) constantp (7 * sin(2));
1405 (%o1)                                true
1406 (%i2) constantp (rat (17/29));
1407 (%o2)                                true
1408 (%i3) constantp (%pi * sin(%e));
1409 (%o3)                                true
1410 (%i4) constantp (exp (x));
1411 (%o4)                                false
1412 (%i5) declare (x, constant);
1413 (%o5)                                done
1414 (%i6) constantp (exp (x));
1415 (%o6)                                true
1416 (%i7) constantp (foo (x) + bar (%e) + baz (2));
1417 (%o7)                                false
1418 (%i8) 
1419 @end example
1421 @opencatbox
1422 @category{Predicate functions}
1423 @category{Constants}
1424 @closecatbox
1425 @end deffn
1427 @c -----------------------------------------------------------------------------
1428 @anchor{equal}
1429 @deffn {関数} equal (@var{a}, @var{b})
1431 同値、すなわち、同じ値であることを表します。
1433 @code{equal}はそれ自身で評価も整理もされません。
1434 関数@code{is}は、@code{equal}をブーリアン値に評価しようとします。
1435 @code{is(equal(@var{a}, @var{b})}は、
1436 もし@var{a}と@var{b}が、@code{ratisimp(@var{a} - @var{b})}を評価することで決定されるように、
1437 変数の可能な値すべてで等しいときだけ@code{true}を返します;
1438 もし@code{ratsimp}が0を返したら、2つの式は同値と考えれます。
1439 2つの式は構文法的に等しくなくても(すなわち同一でなくても)同値でありえます。
1441 @code{is}が@code{equal}を@code{true}もしくは@code{false}への換算に失敗した時、
1442 結果は、グローバルフラグ@code{prederror}に依ります。
1443 @code{prederror}が@code{true}の時、@code{is}はエラーメッセージを出力します。
1444 そうでなければ、@code{is}は@code{unknown}を返します。
1446 @code{is}に加えて、
1447 いくつかの他の演算子、@code{if}, @code{and}, @code{or}, @code{not}は
1448 @code{equal}と@code{notequal}を@code{true}もしくは@code{false}に評価します。
1450 @c FOLLOWING STATEMENT IS MORE OR LESS TRUE BUT I DON'T THINK THE DETAILS ARE CORRECT
1451 @c Declarations (integer, complex, etc)
1452 @c for variables appearing in @var{a} and @var{b} are ignored by @code{equal}.
1453 @c All variables are effectively assumed to be real-valued.
1455 @code{equal}の否定が@code{notequal}です。
1457 例:
1459 @code{equal}はそれ自身で評価も整理もされません。
1461 @c ===beg===
1462 @c equal (x^2 - 1, (x + 1) * (x - 1));
1463 @c equal (x, x + 1);
1464 @c equal (x, y);
1465 @c ===end===
1466 @example
1467 (%i1) equal (x^2 - 1, (x + 1) * (x - 1));
1468                         2
1469 (%o1)            equal(x  - 1, (x - 1) (x + 1))
1470 (%i2) equal (x, x + 1);
1471 (%o2)                    equal(x, x + 1)
1472 (%i3) equal (x, y);
1473 (%o3)                      equal(x, y)
1474 @end example
1476 関数@code{is}は、@code{equal}をブーリアン値に評価しようとします。
1477 @code{is(equal(@var{a}, @var{b})}は、
1478 @code{ratisimp(@var{a} - @var{b})}が0を返すとき@code{true}を返します。
1479 2つの式は構文法的に等しくなくても(すなわち同一でなくても)同値でありえます。
1481 @c ===beg===
1482 @c ratsimp (x^2 - 1 - (x + 1) * (x - 1));
1483 @c is (equal (x^2 - 1, (x + 1) * (x - 1)));
1484 @c is (x^2 - 1 = (x + 1) * (x - 1));
1485 @c ratsimp (x - (x + 1));
1486 @c is (equal (x, x + 1));
1487 @c is (x = x + 1);
1488 @c ratsimp (x - y);
1489 @c is (equal (x, y));
1490 @c is (x = y);
1491 @c ===end===
1492 @example
1493 (%i1) ratsimp (x^2 - 1 - (x + 1) * (x - 1));
1494 (%o1)                           0
1495 (%i2) is (equal (x^2 - 1, (x + 1) * (x - 1)));
1496 (%o2)                         true
1497 (%i3) is (x^2 - 1 = (x + 1) * (x - 1));
1498 (%o3)                         false
1499 (%i4) ratsimp (x - (x + 1));
1500 (%o4)                          - 1
1501 (%i5) is (equal (x, x + 1));
1502 (%o5)                         false
1503 (%i6) is (x = x + 1);
1504 (%o6)                         false
1505 (%i7) ratsimp (x - y);
1506 (%o7)                         x - y
1507 (%i8) is (equal (x, y));
1508 (%o8)                        unknown
1509 (%i9) is (x = y);
1510 (%o9)                         false
1511 @end example
1513 @code{is}が、@code{equal}を@code{true}もしくは@code{false}への換算に失敗したとき、
1514 結果は、グローバルフラグ@code{prederror}に依ります。
1516 @c ===beg===
1517 @c [aa : x^2 + 2*x + 1, bb : x^2 - 2*x - 1];
1518 @c ratsimp (aa - bb);
1519 @c prederror : true;
1520 @c is (equal (aa, bb));
1521 @c prederror : false;
1522 @c is (equal (aa, bb));
1523 @c ===end===
1524 @example
1525 (%i1) [aa : x^2 + 2*x + 1, bb : x^2 - 2*x - 1];
1526                     2             2
1527 (%o1)             [x  + 2 x + 1, x  - 2 x - 1]
1528 (%i2) ratsimp (aa - bb);
1529 (%o2)                        4 x + 2
1530 (%i3) prederror : true;
1531 (%o3)                         true
1532 (%i4) is (equal (aa, bb));
1533 Maxima was unable to evaluate the predicate:
1534        2             2
1535 equal(x  + 2 x + 1, x  - 2 x - 1)
1536  -- an error.  Quitting.  To debug this try debugmode(true);
1537 (%i5) prederror : false;
1538 (%o5)                         false
1539 (%i6) is (equal (aa, bb));
1540 (%o6)                        unknown
1541 @end example
1543 いくつかの演算子が@code{equal}や@code{notequal}を
1544 @code{true}もしくは@code{false}に評価します。
1546 @c ===beg===
1547 @c if equal (y, y - 1) then FOO else BAR;
1548 @c eq_1 : equal (x, x + 1);
1549 @c eq_2 : equal (y^2 + 2*y + 1, (y + 1)^2);
1550 @c [eq_1 and eq_2, eq_1 or eq_2, not eq_1];
1551 @c ===end===
1552 @example
1553 (%i1) if equal (y, y - 1) then FOO else BAR;
1554 (%o1)                          BAR
1555 (%i2) eq_1 : equal (x, x + 1);
1556 (%o2)                    equal(x, x + 1)
1557 (%i3) eq_2 : equal (y^2 + 2*y + 1, (y + 1)^2);
1558                          2                   2
1559 (%o3)             equal(y  + 2 y + 1, (y + 1) )
1560 (%i4) [eq_1 and eq_2, eq_1 or eq_2, not eq_1];
1561 (%o4)                  [false, true, true]
1562 @end example
1564 @code{not @var{expr}}は、@var{expr}の評価を伴うので、
1565 @code{not equal(@var{a}, @var{b})}は、@code{is(notequal(@var{a}, @var{b}))}と同値です。
1567 @c ===beg===
1568 @c [notequal (2*z, 2*z - 1), not equal (2*z, 2*z - 1)];
1569 @c is (notequal (2*z, 2*z - 1));
1570 @c ===end===
1571 @example
1572 (%i1) [notequal (2*z, 2*z - 1), not equal (2*z, 2*z - 1)];
1573 (%o1)            [notequal(2 z, 2 z - 1), true]
1574 (%i2) is (notequal (2*z, 2*z - 1));
1575 (%o2)                         true
1576 @end example
1578 @opencatbox
1579 @category{Operators}
1580 @closecatbox
1581 @end deffn
1583 @c -----------------------------------------------------------------------------
1584 @anchor{notequal}
1585 @deffn {関数} notequal (@var{a}, @var{b})
1587 @code{equal(@var{a}, @var{b})}の否定を表します。
1589 例:
1591 @c ===beg===
1592 @c equal (a, b);
1593 @c maybe (equal (a, b));
1594 @c notequal (a, b);
1595 @c not equal (a, b);
1596 @c maybe (notequal (a, b));
1597 @c assume (a > b);
1598 @c equal (a, b);
1599 @c maybe (equal (a, b));
1600 @c notequal (a, b);
1601 @c maybe (notequal (a, b));
1602 @c ===end===
1603 @example
1604 (%i1) equal (a, b);
1605 (%o1)                      equal(a, b)
1606 (%i2) maybe (equal (a, b));
1607 (%o2)                        unknown
1608 (%i3) notequal (a, b);
1609 (%o3)                    notequal(a, b)
1610 (%i4) not equal (a, b);
1611 (%o4)                    notequal(a, b)
1612 (%i5) maybe (notequal (a, b));
1613 (%o5)                        unknown
1614 (%i6) assume (a > b);
1615 (%o6)                        [a > b]
1616 (%i7) equal (a, b);
1617 (%o7)                      equal(a, b)
1618 (%i8) maybe (equal (a, b));
1619 (%o8)                         false
1620 (%i9) notequal (a, b);
1621 (%o9)                    notequal(a, b)
1622 (%i10) maybe (notequal (a, b));
1623 (%o10)                        true
1624 @end example
1626 @opencatbox
1627 @category{Operators}
1628 @closecatbox
1629 @end deffn
1631 @c -----------------------------------------------------------------------------
1632 @anchor{unknown}
1633 @deffn {関数} unknown (@var{expr})]
1635 @var{expr}がMaximaの整理器が認識しない演算子や関数を含む時だけ、
1636 @code{true}を返します。
1638 @opencatbox
1639 @category{Predicate functions}
1640 @category{Simplification functions}
1641 @closecatbox
1642 @end deffn
1644 @c THIS FUNCTION APPEARS TO BE A HACK; SEE 4'TH ITEM BELOW
1645 @c DUNNO WHETHER WE CAN CLEAR THIS UP
1647 @c -----------------------------------------------------------------------------
1648 @anchor{zeroequiv}
1649 @deffn {関数} zeroequiv (@var{expr}, @var{v})
1651 変数@var{v}の式@var{expr}がゼロと同値かどうかテストし、
1652 @code{true}, @code{false}, もしくは@code{dontknow}を返します。
1654 @code{zeroequiv}は以下の制限を持ちます:
1656 @enumerate
1657 @item
1658 Maximaが微分や評価する方法を知らない関数を使わない。
1659 @item
1660 もし式が実線上で極を持つなら、
1661 結果としてエラーになります。(しかしこれは起こりにくいことです。)
1662 @item
1663 もし式が1階微分方程式の解ではない関数(例えばベッセル関数)を含むなら、
1664 正しくない結果になるかもしれません。
1665 @item
1666 アルゴリズムは、注意深く選ばれた部分式に関してランダムに選ばれた点での評価を使います。
1667 アルゴリズムはエラーの可能性を細小にしようとしますが、これはいつも危険な仕事です。
1668 @end enumerate
1670 例えば、@code{zeroequiv (sin(2 * x) - 2 * sin(x) * cos(x), x)}は@code{true}を返し、
1671 @code{zeroequiv (%e^x + x, x)}は@code{false}を返します。
1672 一方、
1673 @code{zeroequiv (log(a * b) - log(a) - log(b), a)}は、
1674 余分なパラメータ@code{b}があるので、@code{dontknow}を返します。
1676 @opencatbox
1677 @category{Predicate functions}
1678 @closecatbox
1679 @end deffn