ehitoさんのブログ
maximaのロジックシステム(6) - ATPとCASのこと
で「分母≠0の付帯」を考慮した処理の仕方をMaxima上で実現する方法が示されました。シンタックスシュガーが工夫されていて面白いです。今、ratsimpx2.mac及びqepmax.macに取り込んで、動作するようにしてみました。
まず、普通にQ.E.する場合です。(%i1)のように入力しても(%o1)の様に簡約化されてしまい、それをQ.E.してもy#0という条件は出てきません。
(%i1) f=1/(x/(y/z));
$$ \tag{%o1} f=\frac{y}{x\,z} $$
(%i2) qe([ ],f=1/(x/(y/z)));
$$ \tag{%o2} \left(x\neq 0\right) \wedge \left(z\neq 0\right) \wedge \left(f\,x\,z-y=0\right) $$
そこでStrict()$を付けてみます。これはsimp:falseを実行して簡約化を抑制するためです。
(%i3) Strict()$f=1/(x/(y/z));
$$ \tag{%o4} f=\frac{1}{\frac{x}{\frac{y}{z}}} $$
この簡約化抑制を行って入力した式でQ.E.するとy#0という条件もしっかり出てきます。
(%i5) Strict()$qe([ ],f=1/(x/(y/z)));
$$ \tag{%o6} \left(x\neq 0\right) \wedge \left(y\neq 0\right) \wedge \left(z\neq 0\right) \wedge \left(f\,x\,z-y=0\right) $$
SF()はStrict()に名前を変更しました。またnzdenqe()の機能を直接qe()に取り込みました。qe()はsimpの値を見てオリジナル動作をするか、nzdenqe()と同じように動作するかを変えています。