リッシュのアルゴリズム

数学におけるリッシュのアルゴリズム（Risch Algorithm、リッシュの算法）とは不定積分を行う（すなわち、ある式の原始関数を求める）アルゴリズムであり、数学者ロバート・H・リッシュに因む。その鍵は不定積分の問題を微分代数の問題へと変換することである。代数学の一分野である微分代数においては、抽象的な微分操作の下での関数の振る舞いが考察される。このことは、不定積分を困難にしている指数関数、対数関数およびべき乗をブラックボックスとして扱う上で都合が良い。
リッシュは1968年にこのアルゴリズムを開発したが、それを決定手順と呼んでいた。このアルゴリズムは与えられた関数がその不定積分を初等関数の範囲に持つかどうかを決定するものだからである。そうして存在するのであれば、それを具体的に与える。
1976年には高速だが一般性の低いリッシュ＝ノーマンのアルゴリズムが開発されている。
概説.
リッシュのアルゴリズムが不定積分を実行できる対象は初等関数すなわち、四則演算 (+, −, ×, ÷)、指数関数、そしてこれらの逆関数の組み合わせで得られる関数である。特に指数関数の逆関数として得られる対数関数や、複数回の乗算の逆関数として得られる有理数による冪も初等関数に含まれる。複素数の範囲で考えることで、三角関数も指数関数として扱うことができる。
ピエール＝シモン・ラプラスは、被積分関数が有理関数である場合の不定積分を行うアルゴリズムを得ていた。すなわち有理関数の不定積分は、有理関数と、有理関数の対数関数の有限個の和で書けることを示した。このアルゴリズムは解析学の教科書にもしばしば載っているが、コンピュータ上に実装されたのは1960年代に入ってからである。
ジョゼフ・リウヴィルは、後にリッシュのアルゴリズムによって解決された問題を初めて厳密に定式化した。リウヴィルは解析学の手法により以下の定理を証明した。方程式 "g"′ = "f" に初等関数の解 "g" が存在すれば、"n" 個（有限個）の定数 "α""i" と "n" + 1 個の初等関数 "ui" および "v" が存在し、"f" を
の形に書き直せる。そうしてリッシュのアルゴリズムによれば、"ui" および "v" の候補として考慮すべき初等関数の数は有限個となる。
リッシュのアルゴリズムを直感的に理解するために、指数関数および対数関数が微分演算に対しどのように振舞うかを見てみよう。例えば関数 "fe""g" （ここで "f" および "g" は微分可能な関数）について
であるから、不定積分をした結果の式中に "e""g" が含まれているとすれば、それは被積分関数の中にも含まれていなければならない。
さらに
であるから、不定積分の結果の式に (ln "g")"n" が含まれているとすれば、被積分関数の中にも (ln "g")"m" （"m" は "n" 以下）が含まれていなければならない。
なおこのアルゴリズムから、ガウス関数 exp(−"x"2) の原始関数（ガウスの誤差関数 erf の定数倍）は初等関数の範囲では表せないという事実が従う。
実装例.
リッシュのアルゴリズムをプログラミング言語によりコンピュータで実行できる形に書き下すことは困難であり、ヒューリスティクスの利用を含めた多数の改変を施す必要がある。実際、2008年5月現在ではこれを完全に実装したソフトウェアは未だ存在しない。ただし、いくつかの計算機代数システムはこれを部分的に実装している。
以下に、（2008年5月現在で）既存のいかなるソフトウェアも不定積分を計算できないような例を示す：
しかしこの式には短い不定積分が存在する：
なお「リッシュのアルゴリズム」は厳密な意味での「アルゴリズム」ではない。これはリッシュのアルゴリズムの中では（通常の数学の場合と同様に）与えられた数式が零であるかを必ず判定できると仮定しているが，実際には一般の数式に対してはそのような「零判定」処理を行うアルゴリズムは構成できないためである。数式の範囲を通常の「初等関数」（多項式、有理関数、代数関数、三角関数、指数関数、対数関数の組合わせ）に限定しても、数式の零判定（あるいは等式判定）を行えるアルゴリズムは知られていない（これが計算機代数システムが実装においてヒューリスティクスにも依存せざるを得ない理由である）。さらに初等関数に絶対値関数 |"x"| を追加すると、その範囲の数式の零判定を行うアルゴリズムは存在しないことが既に示されている（これはリッシュのアルゴリズムに限らず、初等関数を含む数式を処理するアルゴリズムの構築全般に関わる根本的な困難である）。