Next: Functions and Variables for Predicates, Previous: Functions and Variables for Properties, Up: Maximas Database [Contents][Index]
文脈context_1, …, context_nをアクティベートします。
これらの文脈に関する事実は、演繹し情報を検索するために利用可能となります。
これらの文脈に関する事実は、facts ()
によってリストされません。
変数activecontexts
は、
activate
関数を使ってアクティブになった文脈のリストです。
デフォルト値: []
変数activecontexts
は、
アクティブである文脈と対照的に、
activate
関数を使ってアクティブになった文脈のリストです。
ゆえに、それらは現在の文脈の部分文脈です。
asksign
がコールされた時、
askexp
は、asksign
がテストしている式です。
以前は、control-AでMaximaブレイクに入ることによって、
ユーザーがaskexp
を検査することができました。
askinteger (expr, integer)
は、
assume
データベースから、exprが整数かどうかを決定しようとします。
そうでなく、もし決定できなければ、askinteger
はユーザーに入力を促し、
可能ならばデータベースに情報をインストールしようとします。
askinteger (expr)
は、
askinteger (expr, integer)
と同値です。
同様に、
askinteger (expr, even)
やaskinteger (expr, odd)
は、
それぞれ、exprが偶数か奇数か、決定しようとします。
最初に、指定された式が正か負かゼロか決定しようとします。
できなければ、演繹を完了するのに必要な質問をユーザーに尋ねます。
ユーザーの答えは、現在の計算の演繹のため、データベースに記録されます。
asksign
の戻り値は、pos
, neg
もしくはzero
のいずれか1つです。
述語論理pred_1, …, pred_nを現在の文脈に追加します。
もし述語論理が現在の文脈と矛盾していたり、冗長だったりしたなら、文脈に追加されません。
文脈はassume
がコールされる毎に述語論理を累積していきます。
assume
は、文脈に追加された述語論理を要素に持つリストか、
適用されたアトムredundant
もしくはinconsistent
を返します。
述語論理pred_1, …, pred_nは
関係演算子< <= equal notequal >= >
を持つ式のみ許されます。
述語論理はリテラル等号=
やリテラル不等号#
の式は使えません。
integerp
のような述語関数も使えません。
形式pred_1 and ...and pred_n
の合成された述語論理が認識されます。
しかし、pred_1 or ... or pred_n
は認識されません。
もしpred_k
が関係述語論理なら、not pred_k
は認識されます。
形式not (pred_1 and pred_2)
の式や
not (pred_1 or pred_2)
は認識されません。
Maximaの推論メカニズムはそれほど強くありません;
is
によって決定されない多くの明らかな結果があります。
これは既知の弱みです。
assume
は複素数を伴う述語論理を扱いません。
もし述語論理が複素数を含むなら、assume
はinconsistent
かredundant
を返します。
assume
は引数を評価します。
is
やfacts
, forget
, context
, declare
も参照してください。
例:
(%i1) assume (xx > 0, yy < -1, zz >= 0); (%o1) [xx > 0, yy < - 1, zz >= 0] (%i2) assume (aa < bb and bb < cc); (%o2) [bb > aa, cc > bb] (%i3) facts (); (%o3) [xx > 0, - 1 > yy, zz >= 0, bb > aa, cc > bb] (%i4) is (xx > yy); (%o4) true (%i5) is (yy < -yy); (%o5) true (%i6) is (sinh (bb - aa) > 0); (%o6) true (%i7) forget (bb > aa); (%o7) [bb > aa] (%i8) prederror : false; (%o8) false (%i9) is (sinh (bb - aa) > 0); (%o9) unknown (%i10) is (bb^2 < cc^2); (%o10) unknown
デフォルト値: true
assumescalar
は、
nonscalarp (expr)
がfalse
であるような式expr
が、
ある変換に関してスカラーのように振る舞うと仮定されるかどうかを決めるのを助けます。
Let
expr
がリストや行列以外の任意の式を表してるとし、
[1, 2, 3]
が任意のリストや行列を表しているとすると、
もしassumescalar
がtrue
、
もしくはscalarp (expr)
がtrue
、
もしくはconstantp (expr)
がtrue
なら、
expr . [1, 2, 3]
は、[expr, 2 expr, 3 expr]
をもたらします。
もしassumescalar
がtrue
なら、
そんな式は可換演算子に関してだけスカラーのように振る舞いますが、
非可換乗算.
に関してはそうは振る舞いません。
assumescalar
がfalse
の時
そんな式は、非スカラーのように振る舞います。
assumescalar
がall
の時、
そんな式は、上でリストされた演算子すべてに関してスカラーのように振る舞います。
デフォルト値: false
assume_pos
がtrue
で、
パラメータxの符号が現在の文脈や他の考慮から決定できない時、
sign
やasksign (x)
は、true
を返します。
これは、integrate
や他の計算から起こるような、
自動生成されるasksign
問い合わせを事前に防ぐことができます。
デフォルトでは、パラメータはsymbolp (x)
もしくは
subvarp (x)
のようなxです。
パラメータとして考えられる式のクラスは、
変数assume_pos_pred
を介して、ある程度変えることができます。
sign
とasksign
は、
式の中のオペランドの符号から式の符号を演繹しようとします。
例えば、もしa
やb
がともに正なら、
a + b
も正です。
しかしながら、asksign
問い合わせすべてを迂回する方法はありません。
特に、asksign
引数が、差x - y
もしくは
対数log(x)
の時、
たとえassume_pos
がtrue
で、assume_pos_pred
が
引数すべてにtrue
を返す関数であっても、
asksign
は、いつもユーザーからの入力を要請します。
デフォルト値: false
assume_pos_pred
が関数名や、引数xのラムダ式に割り当てられている時、
その関数は、
xが、assume_pos
のためのパラメータと考えられるかどうかを決定するために
コールされます。
assume_pos
がfalse
の時、
assume_pos_pred
は、無視されます。
assume_pos_pred
関数は、引数xでsign
とasksign
によってコールされます。
ここで、xはアトム、添字付き変数、関数コール式のいずれかです。
もしassume_pos_pred
関数がtrue
を返すなら、
xは、assume_pos
のためのパラメータと考えられます。
デフォルトでは、パラメータは、symbolp (x)
もしくはsubvarp (x)
のようなxです。
assume
とassume_pos
も参照してください。
例:
(%i1) assume_pos: true$ (%i2) assume_pos_pred: symbolp$ (%i3) sign (a); (%o3) pos (%i4) sign (a[1]); (%o4) pnz (%i5) assume_pos_pred: lambda ([x], display (x), true)$ (%i6) asksign (a); x = a (%o6) pos (%i7) asksign (a[1]); x = a 1 (%o7) pos (%i8) asksign (foo (a)); x = foo(a) (%o8) pos (%i9) asksign (foo (a) + bar (b)); x = foo(a) x = bar(b) (%o9) pos (%i10) asksign (log (a)); x = a Is a - 1 positive, negative, or zero? p; (%o10) pos (%i11) asksign (a - b); x = a x = b x = a x = b Is b - a positive, negative, or zero? p; (%o11) neg
デフォルト値: initial
context
は、assume
とforget
によって保守される事実の集まりの名前です。
assume
は、context
と名付けられた集まりに事実を追加する一方、
forget
は、事実を取り除きます。
context
を名前fooにバインドすることは、
現在の文脈をfooに変えます。
もし指定された文脈fooがまだ存在しないなら、
newcontext
のコールによって自動的に生成されます。
指定された文脈は自動的にアクティベートされます。
文脈メカニズムの一般的な記述に関しては、contexts
を参照してください。
デフォルト値: [initial, global]
contexts
は、
現在アクティブな文脈を含んでいる、現在存在する文脈のリストです。
文脈メカニズムは、ユーザーが 文脈と呼ばれる事実の集まりにバインドし、名付けることを可能にします。 一旦これがなされると、ユーザーは、 文脈を単にアクティベートしたりデアクティベートすることで、 たくさんの数の事実をMaximaに仮定させたり忘れさせたりできます。
任意のシンボルのアトムは、文脈となりえ、
その文脈の中に含まれた事実は、
forget
をコールすることで1つ1つ破壊されるまで、
あるいは、それらが属する文脈を破壊するためにkill
をコールすることで、全体として破壊されるまで、記憶装置に保持されます。
文脈は階層的に存在します。
その根はいつも文脈global
であり、
文脈global
は、いくつかの関数が必要とするMaximaについての情報を含みます。
アクティブな文脈の部分文脈である任意の文脈の中の事実すべてそうであるように、
与えられた文脈の中では、
その文脈の中の事実すべては、「アクティブ」(それらが演繹や探索に使われるという意味)
です。
新鮮なMaximaが起動された時、
ユーザーは、initial
と呼ばれる文脈の中にいます。
それは、部分文脈としてglobal
を持ちます。
facts
, newcontext
,
supcontext
, killcontext
, activate
, deactivate
, assume
, forget
も参照してください。
特定の文脈context_1, …, context_nをデアクティベートします。
もしitemが文脈の名前なら、
facts (item)
は指定された文脈のfacts
のリストを返します。
もしitemが文脈の名前でなければ、
facts (item)
は現在の文脈の中で、
itemについて知っているfacts
のリストを返します。
異なる文脈中のアクティブなfacts
はリストされません。
facts ()
(すなわち引数なし)は現在の文脈をリストします。
assume
で規定された述語論理を取り除きます。
述語論理は以前に規定されたものと同値の(必ずしも同一である必要なない)式です。
forget (L)
(Lは述語論理のリスト)は、
リスト上のそれぞれの項目を忘れます。
assume
データベースの中の事実から述語論理exprが確かか否かを決定
しようとします。
もし述語論理が確かにtrue
もしくはfalse
なら、
is
は、それぞれtrue
もしくはfalse
を返します。
そうでなければ、戻り値は、グローバルフラグprederror
に依存します。
prederror
がtrue
の時、
is
はエラーメッセージを出力します。
そうでなければ、is
はunknown
を出力します。
ev(expr, pred)
(対話プロンプトでは、expr, pred
と書けます)
は、is(expr)
と同値です。
assume
, facts
, maybe
も参照してください。
例:
is
は述語論理の評価を引き起こします。
(%i1) %pi > %e; (%o1) %pi > %e (%i2) is (%pi > %e); (%o2) true
is
は、assume
データベースから述語論理を演繹しようとします。
(%i1) assume (a > b); (%o1) [a > b] (%i2) assume (b > c); (%o2) [b > c] (%i3) is (a < b); (%o3) false (%i4) is (a > c); (%o4) true (%i5) is (equal (a, c)); (%o5) false
もしis
がassume
データベースから述語論理を証明もしくは否定できなかったら、
グローバルフラグprederror
がis
の振る舞いを決めます。
(%i1) assume (a > b); (%o1) [a > b] (%i2) prederror: true$ (%i3) is (a > 0); Maxima was unable to evaluate the predicate: a > 0 -- an error. Quitting. To debug this try debugmode(true); (%i4) prederror: false$ (%i5) is (a > 0); (%o5) unknown
文脈context_1, …, context_nを消します。
もし文脈の1つが現在の文脈なら、
新しい文脈は、
消されなかった現在の文脈の最初の利用可能な部分文脈になるでしょう。
もし最初の利用可能な消されなかった文脈がglobal
なら、
initial
が代わりに使われます。
もしinitial
文脈が消されたら、
新しい、空のinitial
文脈が生成されます。
killcontext
は、現在アクティブな文脈を消すことを拒否します。
なぜなら、それは現在の文脈の部分文脈、もしくは
関数activate
の使用によってアクティブになっているから。
killcontext
は、引数を評価します。
killcontext
は、done
を返します。
述語論理exprがassume
データベースの事実から正しいかどうかを
決定しようとします。
もし述語論理が確かにtrue
もしくはfalse
なら、
maybe
は、それぞれtrue
もしくはfalse
を返します。
そうでなければ、maybe
はunknown
を返します。
maybe
は、prederror: false
でのis
と関数的に同値です。
しかし、prederror
に値を実際に割り当てることなく結果が計算されます。
assume
, facts
, is
も参照してください。
例:
(%i1) maybe (x > 0); (%o1) unknown (%i2) assume (x > 1); (%o2) [x > 1] (%i3) maybe (x > 0); (%o3) true
nameと呼ばれる新しい、空の文脈を生成します。
nameは、唯一の部分文脈としてglobal
を持ちます。
新しく生成された文脈は現在アクティブな文脈になります。
newcontext
は、引数を評価します。
newcontext
は、nameを返します。
現在のデータベースの事実に基づいてexprの符号を決定しようとします。
以下の答えの1つを返します;
pos
(positive), neg
(negative), zero
, pz
(正もしくはゼロ), nz
(負もしくはゼロ), pn
(正もしくは負),
or pnz
(正、負もしくはゼロ、すなわちなにもわからない).
nameと呼ばれる新しい文脈を生成します。 nameは、部分文脈としてcontextを持ちます。 contextは存在しなければいけません。
もしcontextが指定されないなら、 現在の文脈が仮定されます。
Next: Functions and Variables for Predicates, Previous: Functions and Variables for Properties, Up: Maximas Database [Contents][Index]