|
2.6.2 式の標準形への還元
組込み関数によりその機能や動作の詳細は違う.しかし,多くの数学関数では1つの共通で重要なアプローチが使われている.つまり,それらはすべて数学の式を標準形に還元するという目的で機能して いる.
例えば,関数Plusに関する組込み定義は,標準形に従った項を丸カッコでくくらない形式で加法の項を書くように設定されている.加法の結合則によると,(a + b) + cとa + (b + c)とa + b + cは等しい.しかし,多くの用途では,これらの項すべてが単一標準形a + b + cに還元された方が便利である.Plusの組込み定義はこの変形操作を行うように設定されている.
Plusに関する組込み定義を介すことで,この式は丸カッコなしの標準形に還元される.
In[1]:= (a + b) + c
Out[1]= 
ある関数が結合則に適合するものと判明するとき,「平坦化」,つまり,不必要な丸カッコ(または,ネストしている関数頭部)の除去が行われて標準形への変換が図られる.
足し算のような関数には結合則の他に交換則も成り立つため,a + c + bとa + b + cのように項の順序を入れ替えても値は等しいまま保持される.しかし,Mathematicaでは,このような式はすべて一律な「標準形」におかれる.ここで,使われる標準形とは,すべての項を,アルファベット順に近い並び順に対応した一定の順序におく形を言う.
足し算の項が標準的な順序に並び替えられる.
In[2]:= c + a + b
Out[2]= 

特定の関数を標準形に還元するときに使われる2つの重要な性質
式を標準形に変換するのには,いくつかの理由がある.第1の理由は,標準形になっていれば,評価する際に2つの式が同じものかどうか簡単に判別できる.
標準形に再構成されると,直ちに2項が同じものであることが判明する.約すことができるため結果は0になる.
In[3]:= f[a + c + b] - f[c + a + b]
Out[3]= 
上の例で,項を可能な限りの並び順に変え,2つの構成を見比べることでa + c + bとc + a + bが等しいかどうかをみるのは可能である.しかし,そうするよりは,両方の式を標準形にしてから判定した方が処理能率はよくなる.
それならば,加法以外の数式もすべて自動的に一律な標準形に変換すれば,さらに能率が上がるのでは,と考えるかもしれない.しかし,式が非常に簡単なものでなければ,必ずしも同じ標準形には直したくないだろう.
例えば,多項式には2つの標準形が考えられるが,それぞれ違った目的に適する.その1つは,Expandを作用させることで得られる展開された項の単純和である.この標準形は多項式の加減法を行うのに最適な形である.
多項式の標準形はもう1つある.Factorを適用することで,多項式を,それ以上は還元できない因数で作られた積として書くことができる.この標準形は除法等の演算に適している.
展開形と因数分解形はどちらも同等に重要な多項式の標準形である.どちらを使うかは,何にそれを適用させるかによる.このため,Mathematicaでは,多項式は,自動的にこれらの形のいずれかにおかれるということはない.その代りに,ExpandとFactor等の関数が提供されているので,それらを使うことで,ユーザ自身により多項式をおくための形を明示的に選択することができるようになっている.
数学的に等しい2つの多項式をリスト形式で入力する.
In[4]:= t = {x^2 - 1, (x + 1)(x - 1)}
Out[4]= 
単にExpandを作用させるだけで展開形に変形させることができる.2つの式が等しいことが明白になる.
In[5]:= Expand[t]
Out[5]= 
因数分解形に書き換えることでも,両方の多項式が等しいことが分かる.
In[6]:= Factor[t]
Out[6]= 
式によっては,必ずしも一律な標準形に直したくはないことが上の例からも明白である.それならば,可能性として,すべての式は一律な形に還元できるのだろうか.
この疑問に関する基本結果は数学の計算理論からすでに判明している.それによると,標準形に還元することは式によっては不可能である.2つの任意の式があるとき,限られた変換操作でこれらを標準形に整理できるという保証はない.
このことは,ある意味では,あまり驚くようなものでもない.どんな式でも標準形に直せるなら,式が等しいかどうかは簡単に判明させることができてしまう.しかし,数学の難解問題には,いわゆる式の同値性に関するものが数多くある.この事実からも,変換操作がいかに難しいものかが分かる.
|