Maxima 5.46.0 Manual: Functions and Variables for Predicates

Previous: Functions and Variables for Facts, Up: Maximas Database [Contents][Index]

### 11.4 Functions and Variables for Predicates

関数: charfun (p)

  述語論理pが`false`に評価される時、0を返します; 述語論理pが`true`に評価される時、1を返します。 述語論理が`true`も`false`でもない何かに評価される時(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]

  Mathematical functions ·

関数: compare (x, y)

  `is (x op y)`が `true`に評価されるような比較演算子op (`<`,`<=`,`>`,`>=`,`=`,`#`)を返します; xかyが `%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)`の実領域は空です。

  Declarations and inferences ·

特殊演算子: constant

  `declare (a, constant)`は、aを定数に宣言します。 `declare`を参照してください。

  Declarations and inferences ·Constants ·

関数: 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)

  Predicate functions ·Constants ·

関数: equal (a, b)

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

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

  `is`が`equal`を`true`もしくは`false`への換算に失敗した時、 結果は、グローバルフラグ`prederror`に依ります。 `prederror`が`true`の時、`is`はエラーメッセージを出力します。 そうでなければ、`is`は`unknown`を返します。

  `is`に加えて、 いくつかの他の演算子、`if`, `and`, `or`, `not`は `equal`と`notequal`を`true`もしくは`false`に評価します。

  `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)

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

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

  `is`が、`equal`を`true`もしくは`false`への換算に失敗したとき、 結果は、グローバルフラグ`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

  いくつかの演算子が`equal`や`notequal`を `true`もしくは`false`に評価します。

      (%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 expr`は、exprの評価を伴うので、 `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

  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

  Operators ·

関数: unknown (expr)]

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

  Predicate functions ·Simplification functions ·

関数: zeroequiv (expr, v)

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

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

  1. Maximaが微分や評価する方法を知らない関数を使わない。
  2. もし式が実線上で極を持つなら、 結果としてエラーになります。（しかしこれは起こりにくいことです。）
  3. もし式が１階微分方程式の解ではない関数（例えばベッセル関数）を含むなら、 正しくない結果になるかもしれません。
  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`を返します。

  Predicate functions ·

Previous: Functions and Variables for Facts, Up: Maximas Database [Contents][Index]