2 * Introduction to Maximas Database::
3 * Functions and Variables for Properties::
4 * Functions and Variables for Facts::
5 * Functions and Variables for Predicates::
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 -----------------------------------------------------------------------------
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 それぞれの宣言フラグに関する記述で注意しているように、
36 もし@var{object}が@var{feature}を持つよう宣言されているなら、
37 @code{featurep(@var{object}, @var{feature})}は、
39 しかしながら、@code{featurep}はいくつかのフラグを認識しません;
42 @code{features}も参照してください。
44 @code{declare}は以下のプロパティを認識します:
48 @code{ev}のフラグ引数として@var{a_i}が現れた時
49 @var{a_i}で名付けられた関数を適用するように
51 @code{evfun}を参照してください。
54 @code{ev}のフラグ引数として@var{a_i}が現れた時
55 @code{ev}の実行中@var{a_i}が@code{true}にバインドされるように
57 @code{evflag}を参照してください。
59 @c OBSOLETE @code{special} (RECOGNIZED BY DECLARE BUT NEVER USED ANYWHERE)
62 @var{a_i}がバインドされていない状態に評価された時、
63 Maximaにエラーをトリガーするように伝えます。
66 @var{a_i}を名詞としてパースするようにMaximaに伝えます。
67 この効果は、@var{a_i}のインスタンスを@code{'@var{a_i}}や@code{nounify(@var{a_i})}
68 で置き換えることです。どちらに置き換えるかは文脈に依存します。
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)
77 @var{a_i}をスカラー変数と考えるようにMaximaに伝えます。
79 @item @code{nonscalar}
80 @var{a_i}を非スカラー変数と考えるようにMaximaに伝えます。
81 普通の使い方は、変数をシンボルベクトルや行列として宣言することです。
84 Maximaに@var{a_i}を配列でないものと考えるように伝えます。
85 この宣言は添字付き変数名の多重評価を抑制します。
88 @var{a_i}を「主変数」と考えるようにMaximaに伝えます。
89 @code{ordergreatp}で決定されるように、
90 Maximaの式の標準順序では、主変数は他のすべての定数や変数に続きます。
92 @item @code{alphabetic}
93 (文字列の)@var{a_i}の中の文字すべてをアルファベット文字として認識するように
97 @var{a_i}をfeature名として認識するようにMaximaに伝えます。
98 他のアトムは、@var{a_i}プロパティを持つように定義されます。
100 @item @code{rassociative}, @code{lassociative}
101 @var{a_i}を右結合、もしくは左結合関数として認識するようにMaximaに伝えます。
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に伝えます。
122 もしリテラル定数や宣言定数なら、因子は定数とみなされます。
124 @var{a_i}が2つ以上の引数を持つ時、
125 もし2番目の引数がシンボルであり、因子が2番目の引数の制約を受けなければ、
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に伝えます。
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に伝えます。
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
164 @var{a_i}を正関数として認識するようにMaximaに伝えます。
166 @item @code{integervalued}
167 @var{a_i}を整数値を返す関数として認識するようにMaximaに伝えます。
173 @code{evfun}と@code{evflag}宣言。
176 @c declare (expand, evfun);
178 @c (a + b)^3, expand;
179 @c declare (demoivre, evflag);
181 @c exp (a + b*%i), demoivre;
184 (%i1) declare (expand, evfun);
189 (%i3) (a + b)^3, expand;
191 (%o3) b + 3 a b + 3 a b + a
192 (%i4) declare (demoivre, evflag);
194 (%i5) exp (a + b*%i);
197 (%i6) exp (a + b*%i), demoivre;
199 (%o6) %e (%i sin(b) + cos(b))
206 @c declare (aa, bindtest);
214 (%i2) declare (aa, bindtest);
218 -- an error. Quitting. To debug this try debugmode(true);
228 @c factor (12345678);
229 @c declare (factor, noun);
230 @c factor (12345678);
234 (%i1) factor (12345678);
237 (%i2) declare (factor, noun);
239 (%i3) factor (12345678);
240 (%o3) factor(12345678)
246 @code{constant}, @code{scalar}, @code{nonscalar}, @code{mainvar}宣言。
249 @c declare (bb, constant);
250 @c declare (cc, scalar);
251 @c declare (dd, nonscalar);
252 @c declare (ee, mainvar);
260 @c xx\~yy\`\@ : 1729;
261 @c declare ("~`@", alphabetic);
262 @c xx~yy`@ + @yy`xx + `xx@@yy~;
266 (%i1) xx\~yy\`\@@ : 1729;
268 (%i2) declare ("~`@@", alphabetic);
270 (%i3) xx~yy`@@ + @@yy`xx + `xx@@@@yy~;
271 (%o3) `xx@@@@yy~ + @@yy`xx + 1729
272 (%i4) listofvars (%);
273 (%o4) [@@yy`xx, `xx@@@@yy~]
279 @c declare (FOO, feature);
281 @c featurep (x, FOO);
284 (%i1) declare (FOO, feature);
286 (%i2) declare (x, FOO);
288 (%i3) featurep (x, FOO);
292 @code{rassociative}, @code{lassociative}宣言。
295 @c declare (F, rassociative);
296 @c declare (G, lassociative);
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)));
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);
313 (%i3) H (H (a, b), H (c, H (d, e)));
314 (%o3) H(a, b, c, d, e)
317 @code{symmetric}, @code{antisymmetric}宣言。
321 @c declare (S, symmetric);
323 @c S (a, c, e, d, b);
325 @c declare (T, antisymmetric);
327 @c T (a, c, e, d, b);
332 (%i2) declare (S, symmetric);
336 (%i4) S (a, c, e, d, b);
337 (%o4) S(a, b, c, d, e)
340 (%i6) declare (T, antisymmetric);
344 (%i8) T (a, c, e, d, b);
345 (%o8) T(a, b, c, d, e)
348 @code{oddfun}, @code{evenfun}宣言。
352 @c declare (o, oddfun);
355 @c declare (e, evenfun);
359 (%i1) o (- u) + o (u);
361 (%i2) declare (o, oddfun);
363 (%i3) o (- u) + o (u);
365 (%i4) e (- u) - e (u);
367 (%i5) declare (e, evenfun);
369 (%i6) e (- u) - e (u);
377 @c declare (F1, outative);
379 @c declare (zz, constant);
385 (%i2) declare (F1, outative);
389 (%i4) declare (zz, constant);
395 @code{multiplicative}宣言。
399 @c declare (F2, multiplicative);
403 (%i1) F2 (a * b * c);
405 (%i2) declare (F2, multiplicative);
407 (%i3) F2 (a * b * c);
408 (%o3) F2(a) F2(b) F2(c)
415 @c declare (F3, additive);
419 (%i1) F3 (a + b + c);
421 (%i2) declare (F3, additive);
423 (%i3) F3 (a + b + c);
424 (%o3) F3(c) + F3(b) + F3(a)
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);
435 (%i1) 'sum (F(k) + G(k), k, 1, inf);
439 (%o1) > (G(k) + F(k))
443 (%i2) declare (nounify (sum), linear);
445 (%i3) 'sum (F(k) + G(k), k, 1, inf);
450 (%o3) > G(k) + > F(k)
458 @category{Declarations and inferences}
462 @c -----------------------------------------------------------------------------
466 Maximaは、関数や変数のある数学的プロパティを認識します。
469 @code{declare (@var{x}, @var{foo})}は、
470 プロパティ@var{foo}を関数もしくは変数@var{x}に与えます。
472 @code{declare (@var{foo}, feature)}は、
473 新しいフィーチャー@var{foo}を宣言します。
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}は既知のフィーチャーのリストです。
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
495 プラス、任意のユーザー定義フィーチャーです。
497 @code{features}は、数学的フィーチャーのリストです。
498 非数学的で、システム依存のフィーチャーのリストもあります。
499 @code{status}を参照してください。
502 @category{Declarations and inferences}
506 @c -----------------------------------------------------------------------------
508 @deffn {関数} get (@var{a}, @var{i})
510 @var{i}が示すアトム @var{a}のユーザープロパティを検索し、
511 もしaがプロパティ @var{i}を持たないなら、 @code{false}を返します。
513 @code{get}は、引数を評価します。
516 @c put (%e, 'transcendental, 'type);
517 @c put (%pi, 'transcendental, 'type)$
518 @c put (%i, 'algebraic, 'type)$
519 @c typeof (expr) := block ([q],
521 @c then return ('algebraic),
522 @c if not atom (expr)
523 @c then return (maplist ('typeof, expr)),
524 @c q: get (expr, 'type),
526 @c then errcatch (error(expr,"is not numeric.")) else q)$
527 @c typeof (2*%e + x*%pi);
528 @c typeof (2*%e + %pi);
531 (%i1) put (%e, 'transcendental, 'type);
533 (%i2) put (%pi, 'transcendental, 'type)$
534 (%i3) put (%i, 'algebraic, 'type)$
535 (%i4) typeof (expr) := block ([q],
537 then return ('algebraic),
539 then return (maplist ('typeof, expr)),
540 q: get (expr, 'type),
542 then errcatch (error(expr,"is not numeric.")) else q)$
543 (%i5) typeof (2*%e + x*%pi);
545 (%o5) [[transcendental, []], [algebraic, transcendental]]
546 (%i6) typeof (2*%e + %pi);
547 (%o6) [transcendental, [algebraic, transcendental]]
552 @category{Declarations and inferences}
556 @c -----------------------------------------------------------------------------
558 @deffn {プロパティ} nonarray
560 コマンド@code{declare(a, nonarray)}はMaximaに
561 @var{a}が配列でないものと考えるように伝えます。
562 もし@var{a}が添字付き変数なら、この宣言は多重評価を抑制します。
569 @c declare(a, nonarray);
573 (%i1) a:'b$ b:'c$ c:'d$
579 (%i5) declare(a, nonarray);
587 @category{Expressions}
593 @c -----------------------------------------------------------------------------
596 @code{declare (f, posfun)}は、
598 @code{is (f(x) > 0)}は@code{true}を出力します。
601 @category{Declarations and inferences}
606 @c NEEDS WORK ESPECIALLY EXAMPLES
607 @c WHOLE BUSINESS WITH PROPERTIES IS PRETTY CONFUSING, TRY TO CLEAR IT UP
609 @c -----------------------------------------------------------------------------
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}のためのものです。
623 @category{Declarations and inferences}
624 @category{Display functions}
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 -----------------------------------------------------------------------------
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}関数を使ってアクティブになった文脈のリストです。
645 @category{Declarations and inferences}
649 @c -----------------------------------------------------------------------------
650 @anchor{activecontexts}
651 @defvr {システム変数} activecontexts
654 変数@code{activecontexts}は、
656 @code{activate}関数を使ってアクティブになった文脈のリストです。
657 ゆえに、それらは現在の文脈の部分文脈です。
660 @category{Declarations and inferences}
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 -----------------------------------------------------------------------------
671 @defvr {システム変数} askexp
672 @code{asksign}がコールされた時、
673 @code{askexp}は、@code{asksign}がテストしている式です。
675 以前は、control-AでMaximaブレイクに入ることによって、
676 ユーザーが@code{askexp}を検査することができました。
679 @category{Declarations and inferences}
683 @c THERE IS PROBABLY MORE TO THE STORY THAN WHAT IS INDICATED HERE ...
685 @c -----------------------------------------------------------------------------
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
697 可能ならばデータベースに情報をインストールしようとします。
698 @code{askinteger (@var{expr})}は、
699 @code{askinteger (@var{expr}, integer)}と同値です。
702 @code{askinteger (@var{expr}, even)}や@code{askinteger (@var{expr}, odd)}は、
703 それぞれ、@var{expr}が偶数か奇数か、決定しようとします。
706 @category{Declarations and inferences}
710 @c THERE IS PROBABLY MORE TO THE STORY THAN WHAT IS INDICATED HERE ...
712 @c -----------------------------------------------------------------------------
714 @deffn {関数} asksign (@var{expr})
716 最初に、指定された式が正か負かゼロか決定しようとします。
717 できなければ、演繹を完了するのに必要な質問をユーザーに尋ねます。
718 ユーザーの答えは、現在の計算の演繹のため、データベースに記録されます。
719 @code{asksign}の戻り値は、@code{pos}, @code{neg}もしくは@code{zero}のいずれか1つです。
722 @category{Declarations and inferences}
726 @c -----------------------------------------------------------------------------
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}によって決定されない多くの明らかな結果があります。
752 @code{assume}は複素数を伴う述語論理を扱いません。
753 もし述語論理が複素数を含むなら、@code{assume}は@code{inconsistent}か@code{redundant}を返します。
755 @code{assume}は引数を評価します。
757 @code{is}や@code{facts}, @code{forget}, @code{context}, @code{declare}も参照してください。
762 @c assume (xx > 0, yy < -1, zz >= 0);
763 @c assume (aa < bb and bb < cc);
767 @c is (sinh (bb - aa) > 0);
769 @c prederror : false;
770 @c is (sinh (bb - aa) > 0);
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]
779 (%o3) [xx > 0, - 1 > yy, zz >= 0, bb > aa, cc > bb]
784 (%i6) is (sinh (bb - aa) > 0);
786 (%i7) forget (bb > aa);
788 (%i8) prederror : false;
790 (%i9) is (sinh (bb - aa) > 0);
792 (%i10) is (bb^2 < cc^2);
797 @category{Declarations and inferences}
801 @c -----------------------------------------------------------------------------
802 @anchor{assumescalar}
803 @defvr {オプション変数} assumescalar
806 @code{assumescalar}は、
807 @code{nonscalarp (expr)}が@code{false}であるような式@code{expr}が、
808 ある変換に関してスカラーのように振る舞うと仮定されるかどうかを決めるのを助けます。
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 そんな式は、上でリストされた演算子すべてに関してスカラーのように振る舞います。
829 @category{Declarations and inferences}
833 @c -----------------------------------------------------------------------------
835 @defvr {オプション変数} assume_pos
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}です。
848 変数@code{assume_pos_pred}を介して、ある程度変えることができます。
850 @code{sign}と@code{asksign}は、
851 式の中のオペランドの符号から式の符号を演繹しようとします。
852 例えば、もし@code{a}や@code{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
864 @category{Declarations and inferences}
868 @c -----------------------------------------------------------------------------
869 @anchor{assume_pos_pred}
870 @defvr {オプション変数} assume_pos_pred
873 @code{assume_pos_pred}が関数名や、引数@var{x}のラムダ式に割り当てられている時、
875 @var{x}が、@code{assume_pos}のためのパラメータと考えられるかどうかを決定するために
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}も参照してください。
893 @c assume_pos_pred: symbolp$
896 @c assume_pos_pred: lambda ([x], display (x), true)$
899 @c asksign (foo (a));
900 @c asksign (foo (a) + bar (b));
901 @c asksign (log (a));
905 (%i1) assume_pos: true$
906 (%i2) assume_pos_pred: symbolp$
911 (%i5) assume_pos_pred: lambda ([x], display (x), true)$
916 (%i7) asksign (a[1]);
921 (%i8) asksign (foo (a));
925 (%i9) asksign (foo (a) + bar (b));
931 (%i10) asksign (log (a));
934 Is a - 1 positive, negative, or zero?
938 (%i11) asksign (a - b);
947 Is b - a positive, negative, or zero?
954 @category{Declarations and inferences}
958 @c -----------------------------------------------------------------------------
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}を参照してください。
978 @category{Declarations and inferences}
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]}
991 現在アクティブな文脈を含んでいる、現在存在する文脈のリストです。
994 文脈と呼ばれる事実の集まりにバインドし、名付けることを可能にします。
996 文脈を単にアクティベートしたりデアクティベートすることで、
997 たくさんの数の事実をMaximaに仮定させたり忘れさせたりできます。
1001 @code{forget}をコールすることで1つ1つ破壊されるまで、
1002 あるいは、それらが属する文脈を破壊するために@code{kill}をコールすることで、全体として破壊されるまで、記憶装置に保持されます。
1005 その根はいつも文脈@code{global}であり、
1006 文脈@code{global}は、いくつかの関数が必要とするMaximaについての情報を含みます。
1007 アクティブな文脈の部分文脈である任意の文脈の中の事実すべてそうであるように、
1009 その文脈の中の事実すべては、「アクティブ」(それらが演繹や探索に使われるという意味)
1013 ユーザーは、@code{initial}と呼ばれる文脈の中にいます。
1014 それは、部分文脈として@code{global}を持ちます。
1016 @code{facts}, @code{newcontext},
1017 @code{supcontext}, @code{killcontext}, @code{activate}, @code{deactivate}, @code{assume}, @code{forget}も参照してください。
1020 @category{Declarations and inferences}
1024 @c -----------------------------------------------------------------------------
1026 @deffn {関数} deactivate (@var{context_1}, @dots{}, @var{context_n})
1028 特定の文脈@var{context_1}, @dots{}, @var{context_n}をデアクティベートします。
1031 @category{Declarations and inferences}
1035 @c -----------------------------------------------------------------------------
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 ()}(すなわち引数なし)は現在の文脈をリストします。
1051 @category{Declarations and inferences}
1055 @c -----------------------------------------------------------------------------
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}は述語論理のリスト)は、
1066 @category{Declarations and inferences}
1070 @c -----------------------------------------------------------------------------
1072 @deffn {関数} is (@var{expr})
1074 @code{assume}データベースの中の事実から述語論理@var{expr}が確かか否かを決定
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}も参照してください。
1092 @code{is}は述語論理の評価を引き起こします。
1101 (%i2) is (%pi > %e);
1105 @code{is}は、@code{assume}データベースから述語論理を演繹しようとします。
1112 @c is (equal (a, c));
1115 (%i1) assume (a > b);
1117 (%i2) assume (b > c);
1123 (%i5) is (equal (a, c));
1127 もし@code{is}が@code{assume}データベースから述語論理を証明もしくは否定できなかったら、
1128 グローバルフラグ@code{prederror}が@code{is}の振る舞いを決めます。
1134 @c prederror: false$
1138 (%i1) assume (a > b);
1140 (%i2) prederror: true$
1142 Maxima was unable to evaluate the predicate:
1144 -- an error. Quitting. To debug this try debugmode(true);
1145 (%i4) prederror: false$
1151 @category{Predicate functions}
1152 @category{Declarations and inferences}
1156 @c -----------------------------------------------------------------------------
1157 @anchor{killcontext}
1158 @deffn {関数} killcontext (@var{context_1}, @dots{}, @var{context_n})
1160 文脈@var{context_1}, @dots{}, @var{context_n}を消します。
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}を返します。
1178 @category{Declarations and inferences}
1182 @c -----------------------------------------------------------------------------
1184 @deffn {関数} maybe (@var{expr})
1186 述語論理@var{expr}が@code{assume}データベースの事実から正しいかどうかを
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}も参照してください。
1206 (%i1) maybe (x > 0);
1208 (%i2) assume (x > 1);
1210 (%i3) maybe (x > 0);
1215 @category{Predicate functions}
1216 @category{Declarations and inferences}
1220 @c -----------------------------------------------------------------------------
1222 @deffn {関数} newcontext (@var{name})
1224 @var{name}と呼ばれる新しい、空の文脈を生成します。
1225 @var{name}は、唯一の部分文脈として@code{global}を持ちます。
1226 新しく生成された文脈は現在アクティブな文脈になります。
1228 @code{newcontext}は、引数を評価します。
1229 @code{newcontext}は、@var{name}を返します。
1232 @category{Declarations and inferences}
1236 @c -----------------------------------------------------------------------------
1238 @deffn {関数} sign (@var{expr})
1239 現在のデータベースの事実に基づいて@var{expr}の符号を決定しようとします。
1241 @code{pos} (positive), @code{neg} (negative), @code{zero}, @code{pz}
1242 (正もしくはゼロ), @code{nz} (負もしくはゼロ), @code{pn} (正もしくは負),
1243 or @code{pnz} (正、負もしくはゼロ、すなわちなにもわからない).
1246 @category{Declarations and inferences}
1250 @c -----------------------------------------------------------------------------
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}が指定されないなら、
1263 @category{Declarations and inferences}
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 -----------------------------------------------------------------------------
1274 @deffn {関数} charfun (@var{p})
1276 述語論理@var{p}が@code{false}に評価される時、0を返します;
1277 述語論理@var{p}が@code{true}に評価される時、1を返します。
1278 述語論理が@code{true}も@code{false}でもない何かに評価される時(unknown),
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)];
1290 (%i1) charfun (x < 1);
1291 (%o1) charfun(x < 1)
1292 (%i2) subst (x = -1, %);
1294 (%i3) e : charfun ('"and" (-1 < x, x < 1))$
1295 (%i4) [subst (x = -1, e), subst (x = 0, e), subst (x = 1, e)];
1300 @category{Mathematical functions}
1304 @c -----------------------------------------------------------------------------
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}を返します。
1321 @c compare (%i, %i);
1322 @c compare (%i, %i + 1);
1323 @c compare (1/x, 0);
1324 @c compare (x, abs(x));
1327 (%i1) compare (1, 2);
1329 (%i2) compare (1, x);
1331 (%i3) compare (%i, %i);
1333 (%i4) compare (%i, %i + 1);
1335 (%i5) compare (1/x, 0);
1337 (%i6) compare (x, abs(x));
1341 関数@code{compare}は引数の実領域が空でないか決定しようとはしません; 従って、
1344 @c compare (acos (x^2 + 1), acos (x^2 + 1) + 1);
1347 (%i1) compare (acos (x^2 + 1), acos (x^2 + 1) + 1);
1351 @c IT IS NOT QUITE TRUE, WHAT ABOUT x=0 ?
1352 @code{acos (x^2 + 1)}の実領域は空です。
1355 @category{Declarations and inferences}
1359 @c NEEDS EXPANSION, CLARIFICATION, AND EXAMPLES
1360 @c CROSS REF declare, properties, ETC
1362 @c -----------------------------------------------------------------------------
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 ??
1371 @category{Declarations and inferences}
1372 @category{Constants}
1376 @c -----------------------------------------------------------------------------
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}で宣言された定数、
1390 @code{constantp}は引数を評価します。
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));
1404 (%i1) constantp (7 * sin(2));
1406 (%i2) constantp (rat (17/29));
1408 (%i3) constantp (%pi * sin(%e));
1410 (%i4) constantp (exp (x));
1412 (%i5) declare (x, constant);
1414 (%i6) constantp (exp (x));
1416 (%i7) constantp (foo (x) + bar (%e) + baz (2));
1422 @category{Predicate functions}
1423 @category{Constants}
1427 @c -----------------------------------------------------------------------------
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}を返します。
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}です。
1459 @code{equal}はそれ自身で評価も整理もされません。
1462 @c equal (x^2 - 1, (x + 1) * (x - 1));
1463 @c equal (x, x + 1);
1467 (%i1) equal (x^2 - 1, (x + 1) * (x - 1));
1469 (%o1) equal(x - 1, (x - 1) (x + 1))
1470 (%i2) equal (x, x + 1);
1471 (%o2) equal(x, x + 1)
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つの式は構文法的に等しくなくても(すなわち同一でなくても)同値でありえます。
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));
1489 @c is (equal (x, y));
1493 (%i1) ratsimp (x^2 - 1 - (x + 1) * (x - 1));
1495 (%i2) is (equal (x^2 - 1, (x + 1) * (x - 1)));
1497 (%i3) is (x^2 - 1 = (x + 1) * (x - 1));
1499 (%i4) ratsimp (x - (x + 1));
1501 (%i5) is (equal (x, x + 1));
1503 (%i6) is (x = x + 1);
1505 (%i7) ratsimp (x - y);
1507 (%i8) is (equal (x, y));
1513 @code{is}が、@code{equal}を@code{true}もしくは@code{false}への換算に失敗したとき、
1514 結果は、グローバルフラグ@code{prederror}に依ります。
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));
1525 (%i1) [aa : x^2 + 2*x + 1, bb : x^2 - 2*x - 1];
1527 (%o1) [x + 2 x + 1, x - 2 x - 1]
1528 (%i2) ratsimp (aa - bb);
1530 (%i3) prederror : true;
1532 (%i4) is (equal (aa, bb));
1533 Maxima was unable to evaluate the predicate:
1535 equal(x + 2 x + 1, x - 2 x - 1)
1536 -- an error. Quitting. To debug this try debugmode(true);
1537 (%i5) prederror : false;
1539 (%i6) is (equal (aa, bb));
1543 いくつかの演算子が@code{equal}や@code{notequal}を
1544 @code{true}もしくは@code{false}に評価します。
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];
1553 (%i1) if equal (y, y - 1) then FOO else 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);
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]
1564 @code{not @var{expr}}は、@var{expr}の評価を伴うので、
1565 @code{not equal(@var{a}, @var{b})}は、@code{is(notequal(@var{a}, @var{b}))}と同値です。
1568 @c [notequal (2*z, 2*z - 1), not equal (2*z, 2*z - 1)];
1569 @c is (notequal (2*z, 2*z - 1));
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));
1579 @category{Operators}
1583 @c -----------------------------------------------------------------------------
1585 @deffn {関数} notequal (@var{a}, @var{b})
1587 @code{equal(@var{a}, @var{b})}の否定を表します。
1593 @c maybe (equal (a, b));
1595 @c not equal (a, b);
1596 @c maybe (notequal (a, b));
1599 @c maybe (equal (a, b));
1601 @c maybe (notequal (a, b));
1606 (%i2) maybe (equal (a, b));
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));
1614 (%i6) assume (a > b);
1618 (%i8) maybe (equal (a, b));
1620 (%i9) notequal (a, b);
1621 (%o9) notequal(a, b)
1622 (%i10) maybe (notequal (a, b));
1627 @category{Operators}
1631 @c -----------------------------------------------------------------------------
1633 @deffn {関数} unknown (@var{expr})]
1635 @var{expr}がMaximaの整理器が認識しない演算子や関数を含む時だけ、
1639 @category{Predicate functions}
1640 @category{Simplification functions}
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 -----------------------------------------------------------------------------
1649 @deffn {関数} zeroequiv (@var{expr}, @var{v})
1651 変数@var{v}の式@var{expr}がゼロと同値かどうかテストし、
1652 @code{true}, @code{false}, もしくは@code{dontknow}を返します。
1654 @code{zeroequiv}は以下の制限を持ちます:
1658 Maximaが微分や評価する方法を知らない関数を使わない。
1661 結果としてエラーになります。(しかしこれは起こりにくいことです。)
1663 もし式が1階微分方程式の解ではない関数(例えばベッセル関数)を含むなら、
1666 アルゴリズムは、注意深く選ばれた部分式に関してランダムに選ばれた点での評価を使います。
1667 アルゴリズムはエラーの可能性を細小にしようとしますが、これはいつも危険な仕事です。
1670 例えば、@code{zeroequiv (sin(2 * x) - 2 * sin(x) * cos(x), x)}は@code{true}を返し、
1671 @code{zeroequiv (%e^x + x, x)}は@code{false}を返します。
1673 @code{zeroequiv (log(a * b) - log(a) - log(b), a)}は、
1674 余分なパラメータ@code{b}があるので、@code{dontknow}を返します。
1677 @category{Predicate functions}