仮定機能
|
使い方
|
|
assume(x1, prop1, x2, prop2, ...)
assume(x1::prop1, x2::prop2, ...)
assume(xproprel1, xproprel2, ...)
additionally(x1, prop1, x2, prop2, ...)
additionally(x1::prop1, x2::prop2, ...)
additionally(xproprel1, xproprel2, ...)
is(x1, prop1)
is(x1::prop1)
is(xproprel1)
coulditbe(x1, prop1)
coulditbe(x1::prop1)
coulditbe(xproprel1)
about(x1)
hasassumptions(x1)
getassumptions(x1)
addproperty(prop1, parents, children)
|
|
パラメータ
|
|
xi
|
-
|
仮定が置かれる数式
|
propi
|
-
|
性質
|
xpropreli
|
-
|
数式 xi に関する性質 propi を記述する関係式
|
parents, children
|
-
|
性質の集合
|
|
|
|
|
説明
|
|
•
|
assume 関数は、変数間のさまざまな性質や関係を設定します。コマンド assuming も同様の機能を提供します。
|
•
|
assume 関数は通常 assume(a>0) のように使用します。これは、記号 a が正の実定数であると仮定されていることを意味します。このような仮定が置かれると、Maple ルーチンは数式を簡単化する際にその情報を使用するようになります。たとえば、sqrt(a^2*b) は a*sqrt(b) になります。また仮定の情報は不等式の評価にも使用されます。たとえば、is(a+1>0) は true を返します。
|
•
|
1 つの変数について仮定を置くと、それ以後は、その変数が仮定を保持することを示すために、変数名にチルダ (~) が追加されます。必要であれば、showassumed インターフェースの設定を更新することで、この挙動を変更できます (interface 参照)。
|
•
|
assume 関数は、複数の組または複数の関係式を引数として持つことができます。複数の引数が与えられた場合、その仮定がすべて同時に満たされることを意味します。たとえば、a<b<c という順序関係を定義する場合、assume(a<b, b<c) と入力します。これで a<b、b<c および a<c が指定されたことになります。
|
•
|
assume 関数を用いて数式 x に対する仮定を置くと、x に対するそれ以前の仮定はすべて削除されます。たとえば、assume(x>0) と入力した後に assume(x<0) と入力しても、何の矛盾も生じません。したがって、assume(0<x) に続けて assume(x<1) と入力することは、assume(0<x, x<1) と同値ではありません。
|
•
|
additionally 関数は、以前の仮定を削除することなしに、新しい仮定を追加します。この関数は、assume と同じ構文です。assume との機能的な相違点は、additionally がオブジェクトを含む既存の性質の集合に対して与えられた性質を追加するということだけです。さまざまな性質を段階的に仮定したい場合は、まず assume を使用し、その後に additionally を使用します。たとえば、 を仮定するには、assume(x>0) を使用してから additionally(x<1) を使用します。
|
•
|
名前に関する仮定は、その名前に対する割り当てを解除することで削除できます。たとえば、x に対して仮定が置かれている場合、x := 'x' とすることでそのすべてが削除されます。
|
•
|
is 関数は、x1 が性質 prop1 を満たすかどうかを決定します。戻り値は true、false または FAIL です。x1 のとり得るすべての値が性質 prop1 を満たす場合、is 関数は true を返します。x1 のとり得る値で性質 prop1 を満たさないものがある場合、is 関数は false を返します。性質が true なのか false なのかを決定できない場合、is 関数は FAIL を返します。これは、論理的帰結を計算するための情報が不十分であるか、うまくできない結果として起こります。
|
|
重要: is コマンドが type typename とともに使用される場合、対応する type(..., typename) コマンドが true を返すと、true を返します。このために、予想しない結果になる可能性があります。
|
•
|
仮定を持つ変数を用いてプログラミングを行う場合に利用できる便利な判定法があります。数式が実数かどうかを判定したい場合には、is(Im(x)=0) を使用します。x が正の実数かどうかを判定したい場合には、is(signum(x)=1) を使用します。x が整数かどうかを判定したい場合には、is(Im(x)=0) and is(frac(x)=0) を使用します。
|
•
|
coulditbe 関数は、性質 prop1 が満たされる x1 の値が存在するかどうかを決定します。戻り値は true、false または FAIL です。性質 prop1 を満たす x1 の値が存在する場合、coulditbe 関数は true を返します。x1 のとり得る値すべてが性質 prop1 を満たさない場合、coulditbe 関数は false を返します。性質が true なのか false なのかを決定できない場合に、coulditbe 関数は FAIL を返します。これは、論理的帰結を計算するための情報が不十分であるか、うまくできない結果として起こります。
|
•
|
環境変数 _EnvTry は、is および coulditbe 関数による判定の強度を指定する際に使用します。現在、_EnvTry には normal (デフォルト) または hard の設定が可能です。_EnvTry を hard に設定すると、is および coulditbe の呼び出しには、指数時間がかかることがあり得ます。
|
•
|
about(x1) 関数は、x1 に関する仮定と性質の情報を返します。
|
•
|
hasassumptions(x1) 関数は、x1 について仮定が存在する場合には true を、そうでない場合には false を返します。
|
•
|
getassumptions(x1) 関数は、関連があるすべてのリストに expression::property の中の適切な仮定を返します。
|
•
|
addproperty(prop1, parents, children) 関数は、性質テーブルに新しい性質をインストールします。この関数を呼び出すには、新しい性質の名前および、性質束において先に定義されている親となる性質と子となる性質の集合を指定する必要があります。空の集合を与えて、親または子となる性質を指定しないことも可能です。たとえば、すでに complex および integer という性質が定義されており、新しい性質 real を定義したいのもと仮定します。この場合、 addproperty(real, {complex}, {integer}) を使用して、すべての実数は複素数であり、すべての整数は実数であるということを指定します。
|
property name
|
例: continuous、unary
|
most type names
|
例: integer、float
|
numerical range
|
例: RealRange( a, b )、RealRange( -infinity, b )、RealRange( a, infinity )、ここで a と b はいずれも数値であるか、または a が数値である場合の Open(a) です。明確に求められなければ、範囲 (Range) は性質束の中には置かれません。これは assume がその包含関係を直接算出する方法を知っているためです。addproperty 関数は、性質束に RealRange を挿入します。この機能は、性質束の中の別の性質が (親または子として) RealRange に関係する際にのみ、必要となります。
|
AndProp(a,b,...)
|
a and b and .. という性質の and 表現。ここで、a、b 等は上で定義されている性質です。この性質は、性質 a、b、... を満たすオブジェクトを記述しています。AndProp は性質束には置かれません。
|
OrProp(a,b,...)
|
性質の or 表現。ここでオブジェクトは性質のいずれかを満たします。OrProp は性質束には置かれません。
|
property range
|
prop1 .. prop2。ここで、 prop1 と prop2 は共に性質で、prop1 は prop2 に含まれている必要があります。この性質は、オブジェクトが少なくとも prop2 を満たすけれども、prop1 をもはや満たさないということを意味します。たとえば、integers/2 は integer .. rational を満たします。property range は性質束には置かれません。
|
|
|
|
|
例
|
|
同じ仮定を使用して複数種類の計算を行う場合は assume を使用します。
| (1) |
| (2) |
| (3) |
| (4) |
| (5) |
Originally a, renamed a~:
is assumed to be: RealRange(Open(0),infinity)
| |
assuming コマンドも同様の機能を提供しますが、その場合、1 つの入力文の計算の間のみ仮定が有効であり、変数には何の仮定も置かれません。
式に仮定を置くことも可能です。
>
|
assume(a+b, 'real', c > 0);
|
| (6) |
| (7) |
| (8) |
>
|
a := 'a'; b := 'b'; c := 'c'; # clear assumptions made on a, b, and c
|
| (9) |
| (10) |
assume 関数を用いて数式 x に対する仮定を置くと、assume 関数で複数引数を使用しないかぎり x に対するそれ以前の仮定はすべて削除されます。
Originally x, renamed x~:
is assumed to be: RealRange(-infinity,Open(0))
| |
Originally x, renamed x~:
is assumed to be: RealRange(Open(-5),Open(0))
| |
additionally 関数は、以前の仮定を削除することなく、新しい仮定を追加します。
| (11) |
>
|
coulditbe(x::positive);
|
| (12) |
| (13) |
| (14) |
複数の仮定を同時に入力することもできます。
| (15) |
| (16) |
is コマンドは、性質を満たさない式の値がある場合に false を返します。次の例は、-1 のような 2*x が正でない値があり得るため false を返します。
| (17) |
仮定を行わなくても is は数学関数の性質を持っています。
z:
nothing known about this object
| |
| (18) |
is コマンドは Maple の type とともに指定する場合、予想しない結果を返します。x が name でないことを指定する仮定が x にありますが、is コマンドは true を返します。なぜなら、対応する type コマンドが true を返すからです。
Originally x, renamed x~:
is assumed to be: integer
| |
| (19) |
| (20) |
整数であるという仮定を置きます。
| (21) |
| (22) |
| (23) |
>
|
assume(i/2, 'integer');
|
| (24) |
>
|
coulditbe(i/3, 'integer');
|
| (25) |
実数であるという仮定を置きます。
| (26) |
| (27) |
| (28) |
| (29) |
仮定機能の他の応用
| (30) |
>
|
int(exp(-u*x)*x^(1/3),x=0..infinity);
|
| (31) |
| (32) |
>
|
int(exp(-u*x)*x^(1/3),x=0..infinity);
|
| (33) |
| (34) |
>
|
int(exp(-u*x)*x^(1/3),x=0..infinity);
|
| (35) |
assume 関数は範囲指定を受け入れます。
>
|
is(5,RealRange(5,infinity));
|
| (36) |
>
|
is(5,RealRange(Open(5),infinity));
|
| (37) |
assume 関数は行列を受け入れます。
>
|
assume(a,'SquareMatrix');
|
>
|
is(a^n,'SquareMatrix');
|
| (38) |
>
|
coulditbe(a^n,'tridiagonal');
|
| (39) |
SquareMatrix:
a known property having {matrix} as immediate parents
and {scalar, antisymmetric, idempotent, nilpotent, singular, symmetric, triangular, tridiagonal, ElementaryMatrix, PositiveSemidefinite, Non(singular), Non(symmetric)} as immediate children.
mutually exclusive with {RectangularMatrix}
| |
ベクトルに対して `orthonormal' という新しい性質を定義します。
>
|
addproperty('orthonormal',{'vector'},{});
|
これで新しい性質 `orthonormal' が指定されました。この性質を持つオブジェクトは、vector という性質を持つことも指定します。
>
|
assume(u,'orthonormal');
|
| (40) |
| (41) |
これで新しい性質 `orthogonal' が指定されました。この性質を持つオブジェクトは vector という性質を持ち、また orthonormal という性質を持つオブジェクトはこの性質も持つことを指定します。
>
|
addproperty('orthogonal', {'vector'}, {'orthonormal'});
|
>
|
assume(v,'orthogonal');
|
| (42) |
>
|
coulditbe(v,'orthonormal');
|
| (43) |
>
|
assume( a, 'integer' );
|
>
|
is( a in 'SetOf'('real') );
|
| (44) |
>
|
is( a in 'SetOf'('integer') );
|
| (45) |
>
|
coulditbe( a in 'SetOf'('integer') );
|
| (46) |
>
|
assume( a in 'SetOf'('prime') minus {2});
|
>
|
is( a in 'SetOf'('integer') );
|
| (47) |
|
|
参考文献
|
|
|
Maple の assume 機能は、以下の参考文献内に記述されているアルゴリズムに基づいています。
|
|
Weibel, Trudy, and Gonnet, Gaston."An Algebra of Properties."Proceedings of the ISSAC-91 Conference, pp. 352-359.Bonn, July 1991.
|
|
Weibel, Trudy and Gonnet, Gaston."An assume facility for CAS with a sample implementation for Maple."Conference Presentation at DISCO '92, Bath, England, April 14, 1992.
|
|
assume 機能の使用方法、その設計や制限事項に関する一般的な議論については、以下を参照してください。
|
|
Corless, Robert, and Monagan, Michael."Simplification and the Assume Facility."Maple Technical Newsletter, Vol. 1 No. 1.Birkhauser, 1994.
|
|
|