式の標準形への還元
組込み関数によりその機能や動作の詳細は違う.しかし,多くの数学関数では1つの共通で重要なアプローチが使われている.つまり,それらはすべて数学の式を標準形に還元するという目的で機能している.
例えば,関数Plusに関する組込み定義は,標準形に従った項を丸カッコでくくらない形式で加法の項を書くように設定されている.加法の結合則によると,
と
と
は等しい.しかし,多くの用途では,これらの項すべてが単一標準形
に還元された方が便利である.Plusの組込み定義はこの変形操作を行うように設定されている.
| In[1]:= |
| Out[1]= |
ある関数が結合則に適合するものと判明するとき,「平坦化」,つまり,不必要な丸カッコ(または,ネストしている関数頭部)の除去が行われて標準形への変換が図られる.
足し算のような関数には結合則の他に交換則も成り立つため,
と
のように項の順序を入れ替えても値は等しいまま保持される.しかし,Mathematica では,このような式はすべて一律な「標準形」にされる.ここで,使われる標準形とは,すべての項を,アルファベット順に近い並び順に対応した一定の順序に置く形を言う.
| In[2]:= |
| Out[2]= |
式を標準形に変換するのには,いくつかの理由がある.第1の理由は,標準形になっていれば,評価する際に2つの式が同じものかどうか簡単に判別できる.
| In[3]:= |
| Out[3]= |
上の例で,項を可能な限りの並び順に変え,2つの構成を見比べることで
と
が等しいかどうかを判断するのは可能である.しかし,そうするよりは,両方の式を標準形にしてから判定した方が処理能率はよくなる.
それならば,加法以外の数式もすべて自動的に一律な標準形に変換すれば,さらに能率が上がるのでは,と考えるかもしれない.しかし,式が非常に簡単なものでなければ,必ずしも同じ標準形には直したくないだろう.
例えば,多項式には2つの標準形が考えられるが,それぞれ違った目的に適する.その1つは,Expandを作用させることで得られる展開された項の単純和である.この標準形は多項式の加減法を行うのに最適な形である.
多項式の標準形はもうひとつある.Factorを適用することで,多項式を,それ以上は還元できない因数で作られた積として書くことができる.この標準形は除法等の演算に適している.
展開形と因数分解形はどちらも同等に重要な多項式の標準形である.どちらを使うかは,何にそれを適用させるかによる.このため,Mathematica では,多項式は,自動的にこれらの形のいずれかに変換されるということはない.その代りに,ExpandとFactor等の関数が提供されているので,それらを使うことで,ユーザ自身が多項式の形を明示的に選択することができるようになっている.
| In[4]:= |
| Out[4]= |
| In[5]:= |
| Out[5]= |
| In[6]:= |
| Out[6]= |
式によっては,必ずしも一律な標準形に直したくはないことが上の例からも明白である.それならば,可能性として,すべての式は何等かの標準形に還元できるのだろうか.
この疑問に関する基本結果は数学の計算理論からすでに判明している.それによると,標準形に還元することは式によっては不可能である.2つの任意の式があるとき,限られた変換操作でこれらを標準形に整理できるという保証はない.
このことは,ある意味では,あまり驚くようなものでもない.どんな式でも標準形に直せるなら,式が等しいかどうかは簡単に判明させることができてしまう.しかし,数学の難解問題には,いわゆる式の同値性に関するものが数多くある.この事実からも,変換操作がいかに難しいものかが分かる.
