Next: , Previous: Logical operators, Up: Operators   [Contents][Index]

7.5 Operators for Equations

演算子: #

構文的等号=の否定を表します。

述語論理式の評価のルールのため (特に not exprexprの評価を伴うので)、 not a = bは、 a # bではなく、 is(a # b)と同値です。

例:

(%i1) a = b;
(%o1)                         a = b
(%i2) is (a = b);
(%o2)                         false
(%i3) a # b;
(%o3)                         a # b
(%i4) not a = b;
(%o4)                         true
(%i5) is (a # b);
(%o5)                         true
(%i6) is (not a = b);
(%o6)                         true
演算子: =

等式演算子。

a = bは、それ自身、未評価の等式を表します。 等式は成り立つかもしれませんし、成り立たないかもしれません。 未評価の等式は、solvealgsysや他の関数の引数として用いられます。

関数isは、=をブーリアン値に評価します。 is(a = b)は、abが同一のとき、 a = btrueに評価します。 すなわち、abが同一のアトムであるか、もしくは、それらはアトムではなく、 それらの演算子が同一で、演算子の引数が同一です。 そうでなければ、is(a = b)falseに評価されます; 決して、unknownには評価されません。 is(a = b)trueの時、 abは、同値の式と対照的に、構文法的に等しいと言われます。 同値の式は、is(equal(a, b))trueの式です。 式は、同値だが構文法的に等しくないことが起こりえます。

=の否定は、#で表されます。 =と同様、式a # bは、それ自身、評価されません。 is(a # b)は、a # btrueもしくはfalseに評価します。

isに加えて、他のいくつかの演算子が=#trueもしくはfalseに評価します。if, and, or, notという演算子です。

述語論理式の評価規則のため (特に、not exprexprの評価を起こすため)、 not a = bは、a # bではなく、 is(a # b)と同値になります。

rhslhsは、それぞれ、等式、不等式の右辺と左辺を返します。

equalnotequalも参照してください。

例:

a = bは、それ自身、未評価の等式であり、成り立つことも成り立たないこともあります。

(%i1) eq_1 : a * x - 5 * y = 17;
(%o1)                    a x - 5 y = 17
(%i2) eq_2 : b * x + 3 * y = 29;
(%o2)                    3 y + b x = 29
(%i3) solve ([eq_1, eq_2], [x, y]);
                        196         29 a - 17 b
(%o3)          [[x = ---------, y = -----------]]
                     5 b + 3 a       5 b + 3 a
(%i4) subst (%, [eq_1, eq_2]);
         196 a     5 (29 a - 17 b)
(%o4) [--------- - --------------- = 17, 
       5 b + 3 a      5 b + 3 a
                                  196 b     3 (29 a - 17 b)
                                --------- + --------------- = 29]
                                5 b + 3 a      5 b + 3 a
(%i5) ratsimp (%);
(%o5)                  [17 = 17, 29 = 29]

is(a = b)は、 abが構文法的に等しい(すなわち、同一の)時 式は、同値だが構文法的に等しくないことがありえます。

(%i1) a : (x + 1) * (x - 1);
(%o1)                    (x - 1) (x + 1)
(%i2) b : x^2 - 1;
                              2
(%o2)                        x  - 1
(%i3) [is (a = b), is (a # b)];
(%o3)                     [false, true]
(%i4) [is (equal (a, b)), is (notequal (a, b))];
(%o4)                     [true, false]

いくつかの演算子は、=#trueもしくはfalseに評価します。

(%i1) if expand ((x + y)^2) = x^2 + 2 * x * y + y^2 then FOO else
      BAR;
(%o1)                          FOO
(%i2) eq_3 : 2 * x = 3 * x;
(%o2)                       2 x = 3 x
(%i3) eq_4 : exp (2) = %e^2;
                              2     2
(%o3)                       %e  = %e
(%i4) [eq_3 and eq_4, eq_3 or eq_4, not eq_3];
(%o4)                  [false, true, true]

not exprexprの評価をするので、 not a = bは、is(a # b)と同値です。

(%i1) [2 * x # 3 * x, not (2 * x = 3 * x)];
(%o1)                   [2 x # 3 x, true]
(%i2) is (2 * x # 3 * x);
(%o2)                         true

Next: , Previous: Logical operators, Up: Operators   [Contents][Index]