[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11. Maximas Database


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11.1 Introduction to Maximas Database


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11.2 Functions and Variables for Properties

プロパティ: alphabetic

alphabeticdeclareが認識するプロパティタイプです。 式 declare(s, alphabetic)sの中の文字すべてをアルファベット文字として認識するように Maximaに命じます。 sは文字列でなければいけません。

Identifiersも参照してください。

例:

 
(%i1) xx\~yy\`\@ : 1729;
(%o1)                         1729
(%i2) declare ("~`@", alphabetic);
(%o2)                         done
(%i3) xx~yy`@ + @yy`xx + `xx@@yy~;
(%o3)               `xx@@yy~ + @yy`xx + 1729
(%i4) listofvars (%);
(%o4)                  [@yy`xx, `xx@@yy~]

プロパティ: bindtest

コマンド declare(x, bindtest)xがバインドされずに評価された時、 Maximaにエラーを起こすように命じます。

 
(%i1) aa + bb;
(%o1)                        bb + aa
(%i2) declare (aa, bindtest);
(%o2)                         done
(%i3) aa + bb;
aa unbound variable
 -- an error.  Quitting.  To debug this try debugmode(true);
(%i4) aa : 1234;
(%o4)                         1234
(%i5) aa + bb;
(%o5)                       bb + 1234

プロパティ: constant

declare(a, constant)aが定数であるように宣言します。 シンボルが定数であるという宣言は定数でない値をシンボルに割り当てることを 妨げません。

constantpdeclareを参照してください。

例:

 
(%i1) declare(c, constant);
(%o1)                         done
(%i2) constantp(c);
(%o2)                         true
(%i3) c : x;
(%o3)                           x
(%i4) constantp(c);
(%o4)                         false

関数: constantp (expr)

もし exprが定数式なら trueを返します。 そうでないなら falseを返します。

もし引数が、(/R/をつけて表示される有理数を含む)数や %pi, %e, %iにようなシンボル定数、定数にバインドされた変数、 declareで宣言された定数、引数が定数の関数のいずれかなら、 式を定数式とみなします。

constantpは引数を評価します。

例:

 
(%i1) constantp (7 * sin(2));
(%o1)                                true
(%i2) constantp (rat (17/29));
(%o2)                                true
(%i3) constantp (%pi * sin(%e));
(%o3)                                true
(%i4) constantp (exp (x));
(%o4)                                false
(%i5) declare (x, constant);
(%o5)                                done
(%i6) constantp (exp (x));
(%o6)                                true
(%i7) constantp (foo (x) + bar (%e) + baz (2));
(%o7)                                false
(%i8)

Categories:  Predicate functions · Constants

関数: declare (a_1, p_1, a_2, p_2, …)

アトムやアトムのリスト a_iにプロパティやプロパティのリスト p_iを割り当てます。 a_ip_iがリストの時、プロパティすべてをアトムのそれぞれが得ます。

declareは引数をクォートします。 declareはいつも doneを返します。

それぞれの宣言フラグに関する記述で注意しているように、 いくつかのフラグに関して、 もし objectfeatureを持つよう宣言されているなら、 featurep(object, feature)trueを返します。

フィーチャーシステムについてさらに知るには features.を参照してください。 アトムからプロパティを削除するには remove.を使ってください。

declareは以下のプロパティを認識します:

additive

代入 a_i(x + y + z + ...) --> a_i(x) + a_i(y) + a_i(z) + ... によって、 a_i式を整理するように Maximaに命じます。 代入は1番目の引数のみで実行されます。

alphabetic

a_iの中の文字すべてをアルファベット文字として認識するように Maximaに命じます。(a_iは文字列でなければいけません。)

antisymmetric, commutative, symmetric

a_iを対称もしくは反対称関数として認識するように Maximaに命じます。 commutativesymmetricと同じです。

bindtest

a_iがバインドされずに評価された時、 Maximaにエラーを起こすように命じます。

constant

a_iをシンボル定数とみなすように Maximaに命じます。

even, odd

a_iを偶数か奇数の整数変数として認識するように Maximaに命じます。

oddfun, evenfun

a_iを偶関数もしくは奇関数として認識するように Maximaに命じます。

evflag

evのフラグ引数として a_iが現れた時、 evの実行中 a_itrueにバインドするように evに命じます。 evflagを参照してください。

evfun

evのフラグ引数として a_iが現れた時、 a_iと名付けられた関数を適用するように evに命じます。 evfunを参照してください。

feature

a_iをフィーチャー名として認識するように Maximaに命じます。 すると他のアトムを a_iプロパティを持つように定義できるようになります。

increasing, decreasing

a_iを単調増加関数か単調減少関数として認識するように Maximaに命じます。

integer, noninteger

a_iを整数変数か非整数変数として認識するように Maximaに命じます。

integervalued

a_iを整数値を返す関数として認識するように Maximaに命じます。

lassociative, rassociative

a_iを右結合か左結合関数として認識するように Maximaに命じます。

linear

a_ioutativeかつ additiveに宣言することと同値です。

mainvar

a_iを「主変数」とみなすように Maximaに命じます。 ordergreatpで決定されるように、 Maximaの式の標準順序では主変数は他のすべての定数や変数に続きます。

multiplicative

代入 a_i(x * y * z * ...) --> a_i(x) * a_i(y) * a_i(z) * ... によって、 a_i式を整理するように Maximaに命じます。 代入は1番目の引数のみで実行されます。

nary

a_iを n項関数として認識するように Maximaに命じます。

nary宣言は nary関数をコールするのとは同じではありません。 declare(foo, nary)だけの効果は、 Maxima整理器をネストされた式を平坦にするように指示することです。 例えば foo(x, foo(y, z))foo(x, y, z)に整理します。

nonarray

a_iを配列でないものとみなすように Maximaに命じます。 この宣言は添字付き変数名の多重評価を抑制します。

nonscalar

a_iを非スカラー変数とみなすように Maximaに命じます。 普通の使い方は変数をシンボルベクトルや行列として宣言することです。

noun

a_iを名詞としてパースするように Maximaに命じます。 この効果は a_iのインスタンスを 'a_inounify(a_i)で置き換えることです。 どちらに置き換えるかは文脈に依存します。

outative

a_i式を最初の引数から定数因子を引き出すことで整理するように Maximaに命じます。

a_iが1つ引数を持つ時、 もしリテラル定数や宣言定数なら因子は定数とみなされます。

a_iが2つ以上の引数を持つ時、 もし2番目の引数がシンボルで、因子が2番目の引数の制約を受けないなら、 因子は定数とみなされます。

posfun

a_iを正関数として認識するように Maximaに命じます。

rational, irrational

a_iを有理変数か非有理実変数として認識するように Maximaに命じます。

real, imaginary, complex

a_iを実変数か純虚数変数、複素変数として認識するように Maximaに命じます。

scalar

a_iをスカラー変数とみなすように Maximaに命じます。

プロパティの使い方の例はドキュメントの中のプロパティの個別の記述それぞれで入手可能です。

プロパティ: decreasing
プロパティ: increasing

コマンド declare(f, decreasing)declare(f, increasing)fを減少関数や増加関数として認識するように Maximaに命じます。

他のプロパティに関しては declareも参照してください。

例:

 
(%i1) assume(a > b);
(%o1)                        [a > b]
(%i2) is(f(a) > f(b));
(%o2)                        unknown
(%i3) declare(f, increasing);
(%o3)                         done
(%i4) is(f(a) > f(b));
(%o4)                         true

プロパティ: even
プロパティ: odd

declare(a, even)declare(a, odd)は シンボル aを偶数や奇数の整数変数としてみなすように Maximaに命じます。 関数 evenpや, oddp, integerpは プロパティ evenoddはを認識しません。

declareaskintegerも参照してください。

例:

 
(%i1) declare(n, even);
(%o1)                         done
(%i2) askinteger(n, even);
(%o2)                          yes
(%i3) askinteger(n);
(%o3)                          yes
(%i4) evenp(n);
(%o4)                         false

宣言: feature

Maximaは、システムフィーチャと数学式に適用されるフィーチャの、 2つの異なるタイプのフィーチャを理解します。 システムフィーチャについての情報に関しては statusも参照してください。 数学的フィーチャについての情報に関しては featuresfeaturepも参照してください。

featureそれ自身は関数名でも変数名でもありません。

関数: featurep (a, f)

現在のデータベースの中の事実に基づいてオブジェクト aがフィーチャ fを持つかどうかを決定しようとします。 もしそうなら trueを返し、そうでないなら falseを返します。

featurepffの否定も確立できない時は、 falseを返すことに注意してください。

featurepは引数を評価します。

declarefeaturesも参照してください。

 
(%i1) declare (j, even)$
(%i2) featurep (j, integer);
(%o2)                           true

宣言: features

Maximaは関数や変数のある数学的プロパティを認識します。 それらは「フィーチャー」と呼ばれます。

declare (x, foo)は プロパティ fooを関数もしくは変数 xに与えます。

declare (foo, feature)は 新しいフィーチャー fooを宣言します。 例えば、 declare ([red, green, blue], feature)は、 3つの新しいフィーチャー red, green, blueを宣言します。

もし xfooプロパティを持つなら、 述語論理 featurep (x, foo)trueを返し、 そうでなければ、falseを返します。

インフォリスト featuresは既知のフィーチャーのリストです。 それらは、

   integer        noninteger      even
   odd            rational        irrational
   real           imaginary       complex
   analytic       increasing      decreasing
   oddfun         evenfun         posfun
   constant       commutative     lassociative
   rassociative   symmetric       antisymmetric
   integervalued

に任意のユーザー定義フィーチャーを加えたものです。

featuresは数学的フィーチャーのリストです。 非数学的でシステム依存のフィーチャーのリストもあります。 statusを参照してください。

例:

 
(%i1) declare (FOO, feature);
(%o1)                         done
(%i2) declare (x, FOO);
(%o2)                         done
(%i3) featurep (x, FOO);
(%o3)                         true

関数: get (a, i)

iが示すアトム aのユーザープロパティを検索し、 もし aがプロパティ iを持たないなら falseを返します。

getは引数を評価します。

putqputも参照してください。

 
(%i1) put (%e, 'transcendental, 'type);
(%o1)                    transcendental
(%i2) put (%pi, 'transcendental, 'type)$
(%i3) put (%i, 'algebraic, 'type)$
(%i4) typeof (expr) := block ([q],
        if numberp (expr)
        then return ('algebraic),
        if not atom (expr)
        then return (maplist ('typeof, expr)),
        q: get (expr, 'type),
        if q=false
        then errcatch (error(expr,"is not numeric.")) else q)$
(%i5) typeof (2*%e + x*%pi);
x is not numeric.
(%o5)  [[transcendental, []], [algebraic, transcendental]]
(%i6) typeof (2*%e + %pi);
(%o6)     [transcendental, [algebraic, transcendental]]

プロパティ: integer
プロパティ: noninteger

declare(a, integer)declare(a, noninteger)aを整数変数か非整数変数として認識するように Maximaに命じます。

declareも参照してください。

例:

 
(%i1) declare(n, integer, x, noninteger);
(%o1)                         done
(%i2) askinteger(n);
(%o2)                          yes
(%i3) askinteger(x);
(%o3)                          no

プロパティ: integervalued

declare(f, integervalued)fを整数値関数として認識するように Maximaに命じます。

declareも参照してください。

例:

 
(%i1) exp(%i)^f(x);
                              %i f(x)
(%o1)                      (%e  )
(%i2) declare(f, integervalued);
(%o2)                         done
(%i3) exp(%i)^f(x);
                              %i f(x)
(%o3)                       %e

プロパティ: nonarray

コマンドdeclare(a, nonarray)はMaximaに aが配列でないものと考えるように命じます。 もし aが添字付き変数ならこの宣言は多重評価を抑制します。

例:

 
(%i1) a:'b$ b:'c$ c:'d$


(%i4) a[x];
(%o4)                          d
                                x
(%i5) declare(a, nonarray);
(%o5)                         done
(%i6) a[x];
(%o6)                          a
                                x

Categories:  Expressions

宣言: nonscalar

アトムをドット演算子に関してリストか行列のように振る舞うようにします。

declareも参照してください。

関数: nonscalarp (expr)

もし exprが非スカラー、すなわち、 非スカラーとして宣言されたアトムかリスト、行列を含むなら、 trueを返します。

scalarpdeclareも参照してください。

Categories:  Predicate functions · Vectors · Matrices

プロパティ: posfun

declare (f, posfun)fを正の関数と宣言します。 is (f(x) > 0)trueを出力します。

declareも参照してください。

関数: printprops  
    printprops (a, i)  
    printprops ([a_1, …, a_n], i)  
    printprops (all, i)

アトム aに関連付けられた指標 iの属性を表示します。 aはアトムのリストだったり、アトム allだったりします。 aの場合、与えられたプロパティを持つすべてのアトムに適用します。 例えば、 printprops ([f, g], atvalue)printpropsは表示できないプロパティ、 すなわち atvalue, atomgrad, gradef, matchdeclareのためのものです。

関数: properties (a)

アトム aに関連づけられたプロパティすべての名前のリストを返します。

特殊シンボル: props

propsは、declare関数で指定されたプロパティはもちろん、 atvalue, matchdeclare, などが指定したような、 infolistsで明示的に言及されたもの以外の任意のプロパティを持つアトムです。

関数: propvars (prop)

propsリスト上の propが示すプロパティを持つアトムのリストを返します。 従って、 propvars (atvalue)は atvalueを持つアトムのリストを返します。

関数: put (atom, value, indicator)

valueatomの (indicatorが指定する)プロパティに割り当てます。 indicatorは任意のプロパティの名前を取り得ますが、 システム定義のプロパティは取りません。

remputの効果をひっくり返します。

putは引数を評価します。 putvalueを返します。

例:

 
(%i1) put (foo, (a+b)^5, expr);
                                   5
(%o1)                       (b + a)
(%i2) put (foo, "Hello", str);
(%o2)                         Hello
(%i3) properties (foo);
(%o3)            [[user properties, str, expr]]
(%i4) get (foo, expr);
                                   5
(%o4)                       (b + a)
(%i5) get (foo, str);
(%o5)                         Hello

関数: qput (atom, value, indicator)

valueatomの (indicatorが指定する)プロパティに割り当てます。 引数がクォートされることを除いて、これは putと同じです。

例:

 
(%i1) foo: aa$
(%i2) bar: bb$
(%i3) baz: cc$
(%i4) put (foo, bar, baz);
(%o4)                          bb
(%i5) properties (aa);
(%o5)                [[user properties, cc]]
(%i6) get (aa, cc);
(%o6)                          bb
(%i7) qput (foo, bar, baz);
(%o7)                          bar
(%i8) properties (foo);
(%o8)            [value, [user properties, baz]]
(%i9) get ('foo, 'baz);
(%o9)                          bar

プロパティ: rational
プロパティ: irrational

declare(a, rational)declare(a, irrational)aを有理実変数か非有理実変数として認識するように Maximaに命じます。

declareも参照してください。

プロパティ: real
プロパティ: imaginary
プロパティ: complex

declare(a, real)や, declare(a, imaginary), declare(a, complex)aを実変数、純虚数変数、複素変数として認識するように Maximaに命じます。

declareも参照してください。

関数: rem (atom, indicator)

atomから indicatorが示すプロパティを取り除きます。 remputの効果をひっくり返します。

remが呼び出された時、もし atomindicatorプロパティを持っていたなら、 remdoneを返します。 もしそんなプロパティを持っていなかったら falseを返します。

関数: remove  
    remove (a_1, p_1, …, a_n, p_n)  
    remove ([a_1, …, a_m], [p_1, …, p_n], …)  
    remove ("a", operator)  
    remove (a, transfun)  
    remove (all, p)

アトムに関連づけられたプロパティを取り除きます。

remove (a_1, p_1, ..., a_n, p_n)はアトム a_kからプロパティ p_kを取り除きます。

remove ([a_1, ..., a_m], [p_1, ..., p_n], ...)はアトム a_1, …, a_mからプロパティ p_1, ..., p_nを取り除きます。 リストのペアは複数を取り得ます。

remove (all, p)はプロパティ pを、それを持つアトムすべてから取り除きます。

取り除かれるプロパティは、 function, macro, mode_declareのようなシステム定義のプロパティかもしれません。 removeputで定義されたプロパティを取り除きません。

翻訳された Lispバージョンの関数を取り除くために プロパティは transfunを取ることができます。 これを実行した後は、翻訳バージョンでなく Maximaバージョンの関数が実行されます。

remove ("a", operator)または、同値の remove ("a", op)は、aから prefix, infix, nary, postfix, matchfix, nofixが宣言した演算子プロパティを取り除きます。 演算子名はクォートされた文字列として書かれなければいけないことに注意してください。

アトムが指定されたプロパティを持つ持たないに関わらず、 removeはいつも doneを返します。 この振る舞いは、もっと具体的な削除関数remvalue, remarray, remfunction, remruleと違っています。

removeは引数をクォートします。

プロパティ: scalar

declare(a, scalar)aをスカラ変数とみなすように Maximaに命じます。

declareも参照してください。

関数: scalarp (expr)

もし exprが数か、定数、 declarescalarと宣言された変数、 または、数と定数とそんな変数から完全に構成され、行列やリストを含まない変数なら、 trueを返します。

Categories:  Predicate functions · Vectors · Matrices


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11.3 Functions and Variables for Facts

関数: activate (context_1, …, context_n)

文脈 context_1, …, context_nをアクティベートします。 これらの文脈に関する事実は、演繹し情報を検索するために利用可能となります。 これらの文脈に関する事実は facts ()によってリストされません。

変数 activecontextsは、 activate関数を使ってアクティブになった文脈のリストです。

システム変数: activecontexts

デフォルト値: []

変数activecontextsは、 現在の文脈の部分文脈なのでアクティブである文脈と対照的に、 activate関数を使ってアクティブになった文脈のリストです。

関数: askinteger  
    askinteger (expr, integer)  
    askinteger (expr)  
    askinteger (expr, even)  
    askinteger (expr, odd)

askinteger (expr, integer)assumeデータベースから exprが整数かどうかを決定しようとします。 もしそうでなく決定できなければ、 askintegerはユーザーに入力を促し、 可能ならばデータベースに情報をインストールしようとします。 askinteger (expr)askinteger (expr, integer)と同値です。

同様に、 askinteger (expr, even)askinteger (expr, odd)は それぞれ、exprが偶数か奇数か決定しようとします。

関数: asksign (expr)

最初に、指定された式が正か負かゼロか決定しようとします。 できなければ、演繹を完了するのに必要な質問をユーザーに尋ねます。 ユーザーの答えは、現在の計算の演繹のため、データベースに記録されます。 asksignの戻り値は posneg, zeroのいずれか1つです。

関数: assume (pred_1, …, pred_n)

述語論理 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は複素数を伴う述語論理を扱いません。 もし述語論理が複素数を含むなら assumeinconsistentredundantを返します。

assumeは引数を評価します。

isfacts, 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

オプション変数: assumescalar

デフォルト値: true

assumescalarは、 nonscalarp (expr)falseであるような式 exprが ある変換に対してスカラーのように振る舞うと仮定されるかどうかを決めるのを助けます。

exprがリストや行列以外の任意の式を表してるとし [1, 2, 3]が任意のリストや行列を表しているとすると、 もし assumescalartruescalarp (expr)trueconstantp (expr)trueなら、 expr . [1, 2, 3][expr, 2 expr, 3 expr]をもたらします。

もし assumescalartrueなら、 そんな式は可換演算子に対してだけスカラーのように振る舞いますが、 非可換乗算 .に対してはそうは振る舞いません。

assumescalarfalseの時 そんな式は非スカラーのように振る舞います。

assumescalarallの時、 そんな式は上でリストされた演算子すべてに対してスカラーのように振る舞います。

オプション変数: assume_pos

デフォルト値: false

assume_postrueで パラメータ xの符号が現在の文脈や他の考慮から決定できない時、 signasksign (x)trueを返します。 これによって、 integrateや他の計算から起こるような 自動生成される asksign問い合わせを事前に防ぐことができます。

デフォルトでは、パラメータは symbolp (x)subvarp (x)のような xです。 パラメータとして考えられる式のクラスは、 変数 assume_pos_predを介してある程度変えることができます。

signasksignは、 式の中のオペランドの符号から式の符号を演繹しようとします。 例えば、もしabがともに正なら a + bも正です。

しかしながら、asksign問い合わせすべてを迂回する方法はありません。 特に asksign引数が差 x - yか 対数 log(x)の時、 たとえ assume_postrueassume_pos_predが 引数すべてに trueを返す関数であっても、 asksignはいつもユーザーからの入力を要請します。

オプション変数: assume_pos_pred

デフォルト値: false

assume_pos_predが関数名や引数 xのラムダ式に割り当てられている時、 xassume_posのためのパラメータと考えられるかどうかを決定するために その関数がコールされます。 assume_posfalseの時、 assume_pos_predは無視されます。

signasksignが、 アトムか添字付き変数、関数コール式のいずれかの引数 xassume_pos_pred関数をコールします。 もし assume_pos_pred関数が trueを返すなら、 xassume_posのためのパラメータと考えられます。

デフォルトでは、パラメータは symbolp (x)subvarp (x)のような xです。

assumeassume_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

オプション変数: context

デフォルト値: initial

contextassumeforgetによって保守される事実の集まりの名前です。

assumecontextと名付けられた集まりに事実を追加する一方、 forgetは事実を取り除きます。

contextを名前 fooにバインドすると 現在の文脈は fooに変わります。 もし指定された文脈 fooがまだ存在しないなら、 自動的に newcontextがコールされて生成されます。 指定された文脈は自動的にアクティベートされます。

文脈メカニズムの一般的な記述に関しては contextsを参照してください。

オプション変数: contexts

デフォルト値: [initial, global]

contextsは現在存在する文脈のリストです。現在アクティブな文脈を含んでいます。

文脈メカニズムによって ユーザーが文脈と呼ばれる事実の集まりにバインドし、名付けることが可能になります。 一旦名付けると、 ユーザーは文脈を単にアクティベートしたりデアクティベートすることで たくさんの数の事実をMaximaに仮定させたり忘れさせたりできます。

任意のシンボルのアトムが文脈となることができ、 その文脈の中に含まれた事実は、 forgetをコールすることで1つ1つ破壊されるまで、 あるいは、それらが属する文脈を破壊するためにkillをコールすることで 全体として破壊されるまで、記憶装置に保持されます。

文脈は階層的に存在します。 その根はいつも文脈 globalであり、 文脈 globalはいくつかの関数が必要とするMaximaについての情報を含みます。 アクティブな文脈の部分文脈である任意の文脈の中の事実すべてそうであるように、 与えられた文脈の中では その文脈の中の事実すべては「アクティブ」(それらが演繹や探索に使われるという意味)です。

Maximaが新たに起動された時、 ユーザーは initialと呼ばれる文脈の中にいます。 それは部分文脈として globalを持ちます。

facts, newcontext, supcontext, killcontext, activate, deactivate, assume, forgetも参照してください。

関数: deactivate (context_1, …, context_n)

特定の文脈 context_1, …, context_nをデアクティベートします。

関数: facts  
    facts (item)  
    facts ()

もし itemが文脈の名前なら facts (item)は指定された文脈の factsのリストを返します。

もし itemが文脈の名前でないなら、 facts (item)は現在の文脈の中で itemについて知っている factsのリストを返します。 異なる文脈中のアクティブな factsはリストされません。

facts ()(すなわち引数なし)は現在の文脈をリストします。

関数: forget  
    forget (pred_1, …, pred_n)  
    forget (L)

assumeで規定された述語論理を取り除きます。 述語論理は以前に規定されたものと同値の(必ずしも同一である必要はない)式です。

forget (L) (Lは述語論理のリスト)はリスト上のそれぞれの項目を忘れます。

関数: is (expr)

assumeデータベースの中の事実から述語論理 exprが確かか否かを決定しようとします。

もし述語論理が確かに truefalseなら、 isはそれぞれ truefalseを返します。 そうでないなら戻り値はグローバルフラグ prederrorに依存します。 prederrortrueの時 isはエラーメッセージを出力します。 そうでないなら isunknownを出力します。

ev(expr, pred) (対話プロンプトでは expr, predと書けます)は is(expr)と同値です。

assume, facts, maybeも参照してください。

例:

isは述語論理の評価を引き起こします。

 
(%i1) %pi > %e;
(%o1)                       %pi > %e
(%i2) is (%pi > %e);
(%o2)                         true

isassumeデータベースから述語論理を演繹しようとします。

 
(%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

もし isassumeデータベースから述語論理を証明もしくは否定できなかったら グローバルフラグ prederrorisの振る舞いを決めます。

 
(%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

関数: killcontext (context_1, …, context_n)

文脈 context_1, …, context_nを消します。

もし文脈の1つが現在の文脈なら 新しい文脈は消されなかった現在の文脈の最初の利用可能な部分文脈になるでしょう。 もし最初の利用可能な消されなかった文脈が globalなら、 initialが代わりに使われます。 もし initial文脈が消されたら 新しい空のinitial文脈が生成されます。

現在の文脈の部分文脈であるためか 関数 activateの使用による理由で現在アクティブになっている文脈を消すことを killcontextは拒否します。

killcontextは引数を評価します。 killcontextdoneを返します。

関数: maybe (expr)

述語論理exprassumeデータベースの事実から正しいかどうかを 決定しようとします。

もし述語論理が確かに truefalseなら、 maybeはそれぞれ truefalseを返します。 そうでないなら maybeunknownを返します。

maybeprederror: 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

関数: newcontext  
    newcontext (name)  
    newcontext ()

nameと呼ばれる新しい空の文脈を生成します。 nameは唯一の部分文脈として globalを持ちます。 新しく生成された文脈は現在アクティブな文脈になります。

もし nameが指定されないなら、(gensymを使って)新しい名前を生成して返します。

newcontextは引数を評価します。 newcontextは (もし指定されたら) nameを、そうでなければ新しい文脈名を返します。

関数: sign (expr)

現在のデータベースの事実に基づいて exprの符号を決定しようとします。 以下の答えの1つを返します; pos (positive)か, neg (negative), zero, pz (正もしくはゼロ), nz (負もしくはゼロ), pn (正もしくは負), pnz (正、負もしくはゼロ、すなわちなにもわからない).

関数: supcontext  
    supcontext (name, context)  
    supcontext (name)  
    supcontext ()

nameと呼ばれる新しい文脈を生成します。 nameは部分文脈として contextを持ちます。 contextは存在しなければいけません。

もし contextが指定されないなら現在の文脈が仮定されます。

もし nameが指定されないなら、(gensymを使って)新しい名前を生成して返します。

supcontextは引数を評価します。 supcontextは (もし指定されたら) nameを、そうでなければ新しい文脈名を返します。


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

11.4 Functions and Variables for Predicates

関数: charfun (p)

述語論理 pfalseに評価される時 0を返します; 述語論理 ptrueに評価される時 1を返します。 述語論理が truefalseでもない何かに評価される時(unknown) 名詞形を返します。

例:

 
(%i1) charfun (x < 1);
(%o1)                    charfun(x < 1)
(%i2) subst (x = -1, %);
(%o2)                           1
(%i3) e : charfun ('"and" (-1 < x, x < 1))$
(%i4) [subst (x = -1, e), subst (x = 0, e), subst (x = 1, e)];
(%o4)                       [0, 1, 0]

Categories:  Mathematical functions

関数: compare (x, y)

is (x op y)trueに評価されるような比較演算子 op (<, <=, >, >=, =, #)を返します; xy%iに依存し、かつ x # yの時、 notcomparableを返します; 該当する演算子がなかったり Maximaが演算子を決定できなかった時には unknownを返します。

例:

 
(%i1) compare (1, 2);
(%o1)                           <
(%i2) compare (1, x);
(%o2)                        unknown
(%i3) compare (%i, %i);
(%o3)                           =
(%i4) compare (%i, %i + 1);
(%o4)                     notcomparable
(%i5) compare (1/x, 0);
(%o5)                           #
(%i6) compare (x, abs(x));
(%o6)                          <=

関数 compareは引数の実領域が空でないか決定しようとはしません; 従って、

 
(%i1) compare (acos (x^2 + 1), acos (x^2 + 1) + 1);
(%o1)                           <

acos (x^2 + 1)の実領域は空です。

関数: equal (a, b)

同値、すなわち同じ値であることを表します。

equalはそれ自身で評価も整理もされません。 関数 isequalをブーリアン値に評価しようとします。 もし abratisimp(a - b)を評価することで決定されるように変数の可能な値すべてで等しいときだけ is(equal(a, b)trueを返します; もし ratsimpが0を返したら2つの式は同値と考えられます。 2つの式は構文法的に等しくなくても(すなわち同一でなくても)同値でありえます。

isが equalを truefalseへの換算に失敗した時、 結果はグローバルフラグ prederrorに依存します。 prederrortrueの時 isはエラーメッセージを出力します。 そうでないなら isunknownを返します。

isに加えていくつかの他の演算子、すなわち if, and, or, notequalnotequaltruefalseに評価します。

equalの否定は notequalです。

例:

equalはそれ自身で評価も整理もされません。

 
(%i1) equal (x^2 - 1, (x + 1) * (x - 1));
                        2
(%o1)            equal(x  - 1, (x - 1) (x + 1))
(%i2) equal (x, x + 1);
(%o2)                    equal(x, x + 1)
(%i3) equal (x, y);
(%o3)                      equal(x, y)

関数isequalをブーリアン値に評価しようとします。 is(equal(a, b)ratisimp(a - b)が0を返すとき trueを返します。 2つの式は構文法的に等しくなくても(すなわち同一でなくても)同値でありえます。

 
(%i1) ratsimp (x^2 - 1 - (x + 1) * (x - 1));
(%o1)                           0
(%i2) is (equal (x^2 - 1, (x + 1) * (x - 1)));
(%o2)                         true
(%i3) is (x^2 - 1 = (x + 1) * (x - 1));
(%o3)                         false
(%i4) ratsimp (x - (x + 1));
(%o4)                          - 1
(%i5) is (equal (x, x + 1));
(%o5)                         false
(%i6) is (x = x + 1);
(%o6)                         false
(%i7) ratsimp (x - y);
(%o7)                         x - y
(%i8) is (equal (x, y));
(%o8)                        unknown
(%i9) is (x = y);
(%o9)                         false

isequaltruefalseへの換算に失敗したとき、 結果はグローバルフラグ prederrorに依存します。

 
(%i1) [aa : x^2 + 2*x + 1, bb : x^2 - 2*x - 1];
                    2             2
(%o1)             [x  + 2 x + 1, x  - 2 x - 1]
(%i2) ratsimp (aa - bb);
(%o2)                        4 x + 2
(%i3) prederror : true;
(%o3)                         true
(%i4) is (equal (aa, bb));
Maxima was unable to evaluate the predicate:
       2             2
equal(x  + 2 x + 1, x  - 2 x - 1)
 -- an error.  Quitting.  To debug this try debugmode(true);
(%i5) prederror : false;
(%o5)                         false
(%i6) is (equal (aa, bb));
(%o6)                        unknown

いくつかの演算子が equalnotequaltruefalseに評価します。

 
(%i1) if equal (y, y - 1) then FOO else BAR;
(%o1)                          BAR
(%i2) eq_1 : equal (x, x + 1);
(%o2)                    equal(x, x + 1)
(%i3) eq_2 : equal (y^2 + 2*y + 1, (y + 1)^2);
                         2                   2
(%o3)             equal(y  + 2 y + 1, (y + 1) )
(%i4) [eq_1 and eq_2, eq_1 or eq_2, not eq_1];
(%o4)                  [false, true, true]

not exprexprの評価を伴うので、 not equal(a, b)is(notequal(a, b))と同値です。

 
(%i1) [notequal (2*z, 2*z - 1), not equal (2*z, 2*z - 1)];
(%o1)            [notequal(2 z, 2 z - 1), true]
(%i2) is (notequal (2*z, 2*z - 1));
(%o2)                         true

Categories:  Operators

関数: notequal (a, b)

equal(a, b)の否定を表します。

例:

 
(%i1) equal (a, b);
(%o1)                      equal(a, b)
(%i2) maybe (equal (a, b));
(%o2)                        unknown
(%i3) notequal (a, b);
(%o3)                    notequal(a, b)
(%i4) not equal (a, b);
(%o4)                    notequal(a, b)
(%i5) maybe (notequal (a, b));
(%o5)                        unknown
(%i6) assume (a > b);
(%o6)                        [a > b]
(%i7) equal (a, b);
(%o7)                      equal(a, b)
(%i8) maybe (equal (a, b));
(%o8)                         false
(%i9) notequal (a, b);
(%o9)                    notequal(a, b)
(%i10) maybe (notequal (a, b));
(%o10)                        true

Categories:  Operators

関数: unknown (expr)]

exprがMaximaの整理器が認識しない演算子や関数を含む時だけ trueを返します。

関数: zeroequiv (expr, v)

変数 vの式 exprがゼロと同値かどうかテストし、 trueか, false, dontknowを返します。

zeroequivは以下の制限を持ちます:

  1. Maximaが微分や評価する方法を知らない関数を使わない。
  2. もし式が実線上で極を持つなら結果としてエラーになります。 (しかしこれは起こりにくいことです。)
  3. もし式が1階微分方程式の解ではない関数(例えばベッセル関数)を含むなら 正しくない結果になるかもしれません。
  4. アルゴリズムは注意深く選ばれた部分式に関してランダムに選ばれた点での評価を使います。 アルゴリズムはエラーの可能性を細小にしようとしますが、これはいつも危険な仕事です。

例えば、zeroequiv (sin(2 * x) - 2 * sin(x) * cos(x), x)trueを返し、 zeroequiv (%e^x + x, x)falseを返します。 一方、 zeroequiv (log(a * b) - log(a) - log(b), a)は 余分なパラメータbがあるので dontknowを返します。

Categories:  Predicate functions


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by 市川雄二 on June, 5 2017 using texi2html 1.76.