理論計算機科学および数学において、計算理論は、アルゴリズムを使用して計算モデル上でどのような問題を解決できるか、それらをどの程度効率的に解決できるか、どの程度の精度で解決できるか(例えば、近似解と精密解)を扱う分野です。この分野は、オートマタ理論と形式言語、計算可能性理論、計算複雑性理論の3つの主要な分野に分かれており、これらは「コンピュータの基本的な能力と限界とは何か?」という問いによって結びついています。 [ 1 ]
計算を厳密に研究するために、コンピュータ科学者は計算モデルと呼ばれるコンピュータの数学的抽象化に取り組みます。この目的のために、チューリングマシンなど、いくつかのモデルが存在します。[ 2 ]コンピュータ科学者がチューリングマシンを研究するのは、定式化が簡単で、分析して結果を証明するために使用でき、多くの人が可能な限り最も強力な「合理的」な計算モデルであると考えているもの(チャーチ・チューリングのテーゼを参照)を表しているからです。[ 3 ]潜在的に無限のメモリ容量は実現不可能な属性のように思えるかもしれませんが、チューリングマシンによって解決される決定可能な問題[ 4 ]は常に有限量のメモリしか必要としません。したがって、原理的には、チューリングマシンによって解決(決定)できる問題はすべて、有限量のメモリを持つコンピュータによって解決できます。
計算理論は、コンピュータ科学の分野におけるあらゆる種類のモデルの構築とみなすことができる。そのため、数学と論理学が用いられる。20世紀には、数学から分離し、独立した学問分野となり、1960年のFOCSや1969年のSTOCといった独自の学会や、 IMUそろばんメダル(1981年にロルフ・ネヴァンリンナ賞として設立)、 1993年に設立されたゲーデル賞、1996年に設立されたクヌース賞といった独自の賞を持つようになった。
計算理論の先駆者には、ラモン・リュル、アロンゾ・チャーチ、クルト・ゲーデル、アラン・チューリング、スティーブン・クリーネ、ローザ・ペーター、ジョン・フォン・ノイマン、クロード・シャノンなどがいる。
オートマトン理論は、抽象機械(より正確には、抽象的な「数学的」機械またはシステム)と、これらの機械を使用して解決できる計算問題を研究する学問です。これらの抽象機械はオートマトンと呼ばれます。オートマトンという言葉は、ギリシャ語のΑυτόματαに由来し、何かがそれ自体で何かをしていることを意味します。オートマトン理論は形式言語理論とも密接に関連しており[ 5 ] 、オートマトンが認識できる形式言語のクラスによって分類されることがよくあります。オートマトンとは、無限集合である可能性のある形式言語の有限表現です。オートマトンは、計算機の理論モデルとして使用され、計算可能性の証明に使用されます。

形式言語理論は、言語をアルファベット上の演算の集合として記述することを扱う数学の一分野です。オートマトンが形式言語の生成と認識に使用されるため、オートマトン理論と密接に関連しています。形式言語にはいくつかのクラスがあり、それぞれが前のクラスよりも複雑な言語仕様を許容します(チョムスキー階層など)[ 6 ]。また、それぞれがそれを認識するオートマトンクラスに対応しています。オートマトンが計算のモデルとして使用されるため、形式言語は計算する必要のあるあらゆる問題の仕様記述の好ましい形式です。
計算可能性理論は、主に問題がコンピュータ上でどの程度解決可能かという問題を扱います。停止問題はチューリングマシンでは解決できないという主張[ 7 ]は、計算可能性理論における最も重要な結果の1つです。これは、定式化が容易であると同時にチューリングマシンでは解決不可能な具体的な問題の例だからです。計算可能性理論の多くは、この停止問題の結果に基づいています。
計算可能性理論におけるもう一つの重要なステップは、ライスの定理である。これは、部分関数のすべての非自明な性質について、チューリングマシンがその性質を持つ部分関数を計算するかどうかは決定不可能であると述べている。[ 8 ]
計算可能性理論は、チューリングモデルに還元可能な計算モデルのみを研究するという制約を取り除く再帰理論と呼ばれる数学論理学の一分野と密接に関連しています。 [ 9 ] 再帰理論を研究する多くの数学者や計算理論家は、それを計算可能性理論と呼びます。

計算複雑性理論は、問題がコンピュータ上でそもそも解決できるかどうかだけでなく、その問題をどれだけ効率的に解決できるかも考慮します。考慮される主な側面は、時間計算量と空間計算量の2つです。これらはそれぞれ、計算を実行するのに必要なステップ数と、その計算を実行するために必要なメモリ量を表します。
特定のアルゴリズムがどれだけの時間と空間を必要とするかを分析するために、コンピュータ科学者は、問題解決に必要な時間または空間を、入力問題のサイズの関数として表現します。たとえば、長い数値リストから特定の数値を見つけるのは、数値リストが大きくなるにつれて難しくなります。リストにn個の数値があるとすると、リストがソートまたはインデックス付けされていない場合、目的の数値を見つけるためにすべての数値を調べなければならない可能性があります。したがって、この問題を解決するには、コンピュータは問題のサイズに比例して増加する数のステップを実行する必要があると言えます。
この問題を単純化するために、コンピュータ科学者はビッグオー記法を採用しました。これにより、機械の構造の特定の側面を考慮する必要がなく、問題が大きくなるにつれて漸近的な挙動だけを考慮すれば済むような方法で関数を比較できます。したがって、前の例では、この問題は次のように表現できます。解決手順。
コンピュータ科学における最も重要な未解決問題の一つは、 NPと呼ばれる特定の広範な問題群を効率的に解けるかどうかという問題である。これについては、 「複雑性クラスPとNP」でさらに詳しく議論されており、P対NP問題は、2000年にクレイ数学研究所によって提示された7つのミレニアム懸賞問題の1つである。公式の問題記述は、チューリング賞受賞者のスティーブン・クックによって与えられた。
チューリングマシン以外にも、同等の(チャーチ=チューリングのテーゼを参照)計算モデルがいくつか用いられている。
一般的な計算モデルに加えて、より単純な計算モデルは、特定の限定されたアプリケーションに役立ちます。たとえば、正規表現は、オフィス生産性ソフトウェアからプログラミング言語まで、多くのコンテキストで文字列パターンを指定します。正規表現と数学的に等価な別の形式である有限オートマトンは、回路設計や一部の問題解決に使用されます。文脈自由文法は、 プログラミング言語の構文を指定します。非決定性プッシュダウンオートマトンも、文脈自由文法と等価な形式です。原始再帰関数は、再帰関数の定義済みサブクラスです。
計算モデルによって、実行できるタスクは異なります。計算モデルの能力を測る一つの方法は、そのモデルが生成できる形式言語のクラスを調べることです。そうすることで、チョムスキーの言語階層が得られます。
「計算理論の中心分野:オートマトン、計算可能性、および複雑性。」
(この分野には多くの教科書があり、このリストは必然的に不完全なものです。)