計算可能性とは、効果的な手順によって問題を解決する能力のことです。これは、数理論理学における計算可能性理論、および計算機科学における計算理論の分野における重要なテーマです。問題の計算可能性は、その問題を解決するためのアルゴリズムの存在と密接に関連しています。
最も広く研究されている計算可能性モデルは、チューリング計算可能関数、μ再帰関数、そしてラムダ計算であり、いずれも計算能力は同等である。他の計算可能性モデルも研究されており、チューリングマシンよりも弱い計算可能性の概念はオートマトン理論で、チューリングマシンよりも強い計算可能性の概念はハイパーコンピューティングの分野で研究されている。
計算可能性における中心的な考え方は、(計算)問題、つまりその計算可能性を調査できるタスクという考え方です。
問題には主に 2 つの種類があります。
計算可能性理論の目標の 1 つは、各計算モデルでどの問題または問題のクラスを解決できるかを決定することです。
計算モデルとは、特定の種類の計算プロセスを形式的に記述したものです。この記述は、多くの場合、対象となるタスクを実行することを意図した抽象機械の形をとります。チューリングマシン(チャーチ=チューリングのテーゼを参照) に相当する一般的な計算モデルには、以下のものがあります。
一般的な計算モデルに加えて、より単純な計算モデルは、特殊な限定的な用途に役立ちます。 例えば、正規表現は、オフィス生産性ソフトウェアからプログラミング言語まで、様々な文脈で文字列パターンを指定します。正規表現と数学的に同等な別の形式である有限オートマトンは、回路設計やある種の問題解決に使用されます。文脈自由文法は、 プログラミング言語の構文を指定します。非決定性プッシュダウンオートマトンも、文脈自由文法と同等の別の形式です。
計算モデルはそれぞれ異なるタスクを実行する能力を持っています。計算モデルの能力を測定する一つの方法は、そのモデルが生成できる形式言語のクラスを研究することです。こうしてチョムスキー階層が得られます。
その他の制限された計算モデルには次のものがあります:
これらの計算モデルが手元にあれば、その限界が何であるかを判断できます。つまり、どのような言語のクラスを受け入れることができるかということです。
コンピュータ科学者は、有限状態機械が受け入れ可能な言語を正規言語と呼びます。有限状態機械における可能な状態の数は有限であるという制約のため、正規言語ではない言語を見つけるには、無限の状態数を必要とする言語を構築する必要があることがわかります。
そのような言語の例として、文字「a」と「b」からなる文字列全体(文字「a」と「b」が同数含まれる)の集合が挙げられます。この言語が有限状態機械によって正しく認識されない理由を理解するために、まずそのような機械Mが存在すると仮定します。M は状態数nを持つ必要があります。次に、 「a」と「b」 が続く文字列xを考えます。
M がxを読み込むとき、最初の一連の 'a' を読み込むときに繰り返される何らかの状態がマシン内に存在しなければなりません。なぜなら、鳩の巣原理により、 'a' が存在し、状態はn個しかないからです。この状態をSと呼び、さらにd を、 'a' シーケンス中のSの最初の出現からそれ以降の出現までの間にマシンが読み込む 'a' の数とします。すると、 Sの 2 回目の出現で、さらにd 個(ただし) の 'a'を追加でき、再び状態Sに戻ることがわかります。これは、 'a' の文字列は'a'の文字列と同じ状態になる必要があることを意味します。これは、マシンがx を受け入れる場合、 'a' の後に 'b' が続く文字列も受け入れる必要があることを意味しますが、これは 'a' と 'b' の数が等しい文字列の言語には存在しません。つまり、M は、同じ数の 'a' と 'b' の文字列と、'a' と'b' を含む文字列を正しく区別できません。
したがって、この言語はいかなる有限状態機械にも正しく受理されず、したがって正規言語ではないことがわかります。この結果のより一般的な形は正規言語のポンピング補題と呼ばれ、これは広範な言語クラスが有限状態機械によって認識できないことを示すために使用できます。
コンピュータ科学者は、プッシュダウン・オートマトンが受理できる言語を文脈自由言語と定義し、文脈自由文法として規定することができます。「a」と「b」の数が等しい文字列からなる言語は正規言語ではないことが示されましたが、プッシュダウン・オートマトンによって決定することができます。また、一般にプッシュダウン・オートマトンは有限状態機械のように動作するため、正規言語であればどのような言語でも決定することができます。したがって、この計算モデルは有限状態機械よりも強力です。
しかし、プッシュダウンオートマトンでも決定できない言語が存在することが判明しました。その結果は正規表現の場合と同様なので、ここでは詳しく説明しません。文脈自由言語にはポンピング補題が存在します。そのような言語の例として、素数の集合が挙げられます。
チューリングマシンは、プッシュダウンオートマトンでは決定できない言語(例えば素数からなる言語)に加え、あらゆる文脈自由言語を決定できます。したがって、チューリングマシンはより強力な計算モデルと言えます。
チューリングマシンは入力テープを「バックアップ」する機能を持つため、これまで説明した他の計算モデルでは不可能な方法で、長時間実行することが可能となります。ある入力に対しては実行を終了しない(停止しない)チューリングマシンを構築することも可能となります。チューリングマシンが最終的にすべての入力に対して停止し、答えを返す場合、その言語を決定できると言います。このように決定できる言語は、再帰言語と呼ばれます。さらに、ある言語の任意の入力に対しては最終的に停止し、答えを返すものの、その言語に含まれない入力文字列に対しては永遠に実行される可能性があるチューリングマシンについて説明できます。このようなチューリングマシンは、与えられた文字列がその言語に含まれると判断できますが、その動作に基づいて、与えられた文字列が言語に含まれないかどうかは決して確信できません。なぜなら、そのような場合、文字列は永遠に実行される可能性があるからです。このようなチューリングマシンが受け入れる言語は、再帰的に列挙可能な言語と呼ばれます。
チューリングマシンは、実のところ、極めて強力なオートマトンモデルです。チューリングマシンの定義を修正してより強力なマシンを作ろうとする試みは、驚くべきことに失敗に終わりました。例えば、チューリングマシンにテープを追加し、2次元(あるいは3次元、あるいは任意の次元)の無限面を扱えるようにすることは、基本的な1次元テープを持つチューリングマシンですべてシミュレートできます。したがって、これらのモデルはより強力ではありません。実際、チャーチ=チューリングのテーゼの帰結として、チューリングマシンが決定できない言語を決定できる合理的な計算モデルは存在しないことが挙げられます。
では、問うべき疑問はこうだ。再帰的に列挙可能だが、再帰的ではない言語は存在するのか?さらに、再帰的に列挙可能でもない言語は存在するのか?
停止問題は、計算可能性理論と日常業務におけるコンピュータの利用方法に深い影響を与えるため、コンピュータサイエンスにおいて最も有名な問題の一つです。この問題は次のように表現できます。
ここで問うているのは、素数や回文に関する単純な質問ではなく、立場を逆転させ、あるチューリングマシンに別のチューリングマシンに関する質問に答えさせるというものです。この質問にあらゆる場合に答えられるチューリングマシンを構築することは不可能であることが 示されます(主要記事「停止問題」を参照)。
つまり、あるプログラムが特定の入力に対して常に停止するかどうかを確実に知る唯一の一般的な方法は、単にプログラムを実行して停止するかどうかを確認することです。停止すれば停止したと分かります。しかし、停止しない場合は、最終的に停止するかどうかは決して分かりません。すべてのチューリングマシン記述と、それらのチューリングマシンが最終的に停止する可能性のあるすべての入力ストリームを組み合わせた言語は、再帰的ではありません。したがって、停止問題は計算不可能または決定不能と呼ばれます。
停止問題の拡張はライスの定理と呼ばれ、与えられた言語が特定の非自明な特性を持つかどうかは(一般に)決定不可能であると述べられています。
しかし、停止問題は、それを決定するチューリングマシンが、それ自体は停止しないチューリングマシンの表現である入力を与えられた場合に、永遠に実行し続ける可能性があると仮定すれば、簡単に解決できます。したがって、停止言語は再帰的に列挙可能です。しかし、再帰的に列挙不可能な言語を構築することも可能です。
そのような言語の簡単な例として、停止言語の補集合が挙げられます。これは、入力文字列と対になっているすべてのチューリングマシンから成り、入力に対してチューリングマシンが停止しない言語です。この言語が再帰的に列挙可能でないことを確認するために、すべてのそのようなチューリングマシンに対して明確な答えを返すことができるが、最終的に停止するチューリングマシン上では永遠に実行できるチューリングマシン M を構築することを想像してください。次に、このマシンの動作をシミュレートする別のチューリングマシンを構築できます。このマシンは、2 つのプログラムの実行をインターリーブすることで、入力で与えられたマシンの実行を直接シミュレートします。直接シミュレーションは、シミュレートしているプログラムが停止すれば最終的に停止します。また、仮定により、入力プログラムが決して停止しない場合にはMのシミュレーションも最終的に停止するため、最終的には並列バージョンの 1 つが停止することがわかります。 したがって、は停止問題の決定子です。しかしながら、停止問題は決定不可能であることを既に示しました。矛盾が生じ、Mが存在するという仮定が誤りであることが示されました。したがって、停止言語の補集合は再帰的に列挙可能ではありません。
並列ランダムアクセスマシンやペトリネットなど、並行性に基づく多くの計算モデルが開発されてきました。これらの並行計算モデルは、チューリングマシンで実装できない数学関数をまだ実装していません。
チャーチ=チューリングのテーゼは、チューリングマシンよりも多くの数学関数を計算できる効果的な計算モデルは存在しないと推測しています。コンピュータ科学者は、チューリング計算可能性を超える計算モデルである ハイパーコンピュータの様々な種類を構想してきました。
計算の各ステップが前のステップの半分の時間(そしてできればエネルギーも半分)で済むようなマシンを想像してみてください。最初のステップに必要な時間を1/2の時間単位(そして最初のステップに必要なエネルギーを1/2のエネルギー単位)に正規化すると、実行には
実行に単位時間(および1エネルギー単位)かかります。この無限級数は1に収束するため、このゼノマシンは1単位時間(1エネルギー単位)で可算無限ステップを実行できます。このマシンは、問題のマシンの実行を直接シミュレートすることで、停止問題を判定できます。拡張すると、任意の収束する無限級数(証明可能無限でなければならない)は機能します。無限級数が値nに収束すると仮定すると、ゼノマシンはn単位時間で可算無限の実行を完了します。
いわゆるオラクルマシンは、特定の決定不能問題に対する解を提供する様々な「オラクル」にアクセスできます。例えば、チューリングマシンは「停止オラクル」と呼ばれる機能を備えており、与えられた入力に対してチューリングマシンが停止するかどうかを即座に返します。これらのマシンは、再帰理論における中心的な研究テーマです。
私たちが想像できるオートマトンの最限界を体現しているように見えるこれらのマシンでさえ、それぞれに限界があります。それぞれのマシンはチューリングマシンの停止問題を解くことができますが、それぞれのマシン自身の停止問題を解くことはできません。例えば、Oracleマシンは、あるOracleマシンが停止するかどうかという問いに答えることができません。