web-dev-qa-db-ja.com

チューリング完全な言語は何ですか?

チューリング完全にする言語機能/構造の最小セットは何ですか?

83
Curious Cat

A Turing tarpit は、使用する要素をできるだけ少なくしながら、チューリング完全であるように努力する一種の難解なプログラミング言語です。 Brainfuck はおそらく最もよく知られているターピットですが、たくさんあります。

一般に、命令型言語がチューリング完全であるためには、以下が必要です。

  1. 条件付き反復または条件付きジャンプの形式(例:whileif + goto

  2. ある形式のストレージ(変数、テープなど)を読み書きする方法

lambda-calculus –ベースの関数型言語をTCにするには、以下が必要です。

  1. 引数に対して関数を抽象化する機能(ラムダ抽象化、引用など)

  2. 引数に関数を適用する機能(例:リダクション)

もちろん他の計算方法もありますが、これらはチューリングターピットの一般的なモデルです。実際のコンピューターはではないユニバーサルチューリングマシン であることに注意してください。厳密に言えば、それらは「境界付きストレージマシン」です。それらにメモリを追加し続けると、チューリングマシンに漸近的に近づきます。ただし、境界のあるストレージマシンや 有限状態マシン も計算に役立ちます。それらは単にuniversalではありません。

厳密に言うと、チューリング完全性のためにI/Oは必要ありません。 TCは、言語が必要な関数をcomputeできるshow結果。実際には、すべての有用な言語には、なんとかして世界と対話する方法があります。

74
Jon Purdy

より実用的な観点から:もしチューリング完全な言語のすべてのプログラムをあなたの言語に翻訳できるなら、そのとき(私の知る限り)、あなたの言語はチューリング完全でなければなりません。したがって、設計した言語がチューリング完全であるかどうかを確認したい場合は、Brainf ***をYourLanguageコンパイラーに書き込み、すべての正当なBFプログラムをコンパイルできることを証明/実証できます。

明確に言うと、YourLanguageのインタープリターに加えて、任意のBFプログラムをYourLanguageにコンパイルできるコンパイラー(任意の言語で)を作成します(もちろん、同じセマンティクスを維持します)。

15
Anton Golov

システムは、万能のチューリングマシンで実行できることをすべて実行できる場合にのみ、チューリング完了であると見なされます。ユニバーサルチューリングマシンは、与えられた時間で計算可能な関数を解くことができると言われているので、チューリングコンプリートシステムは、ひいてはそうすることができます。

チューリングが完了しているかどうかを確認するには、その中にチューリングマシンを実装できるかどうかを確認します。つまり、以下をシミュレートできるかどうかを確認します。

  1. 「変数」(または任意のデータ)を読み書きする機能:かなり自明です。
  2. 読み取り/書き込みヘッドの移動をシミュレートする機能:変数を取得して保存するだけでは不十分です。他の変数を参照するために、テープのヘッドを移動する機能をシミュレートすることも可能でなければなりません。これは、多くの場合、配列データ構造(または同等のもの)を使用してプログラミング言語内でシミュレートできます。また、マシンコードなどの特定の言語の場合、「ポインター」(または同等のもの)を使用して他の変数を参照する機能もシミュレートできます。
  3. 有限状態機械をシミュレートする機能:あまり言及されていませんが、チューリングマシンは実際には、AI開発でよく使用される有限状態マシンのバリエーションです。アラン・チューリングは州の目的は人の「問題解決のさまざまなモード」をシミュレートすることであると言いました。
  4. 「停止」状態:チューリング完了であると見なすには、一連のルールを繰り返し実行できる必要があるとよく言われますが、正式な定義はアルゴリズムは状態アルゴリズムであり、最終的には常に最終的に結論付けなければなりません。彼らが何らかの方法で結論を下すことができない場合、それはチューリング完全ではないか、または上記のアルゴリズムは計算可能な関数ではありません。動作方法が原因で技術的に完了できない完全なシステム(ゲームコンソールなど)をチューリングすると、何らかの方法で停止状態を "シミュレート"できるようになるため、この制限を回避できます。 「停止の問題」と混同しないでください。特定の入力によって別のシステムが結論を出さない場合、100%の信頼性で検出できるシステムを構築することが不可能であることを証明する決定不可能な関数です。

これらは、チューリング完了と見なされるシステムの真の最小要件です。それ以上でもそれ以下でもありません。これらを何らかの方法でシミュレートできない場合、チューリングは完全ではありません。他の人々が提案した方法は、それらの機能を持たないいくつかのチューリング完全なシステムがあるので、最後まで手段にすぎません。

真のチューリング完全なシステムを実際に構築する方法は知られていないことに注意してください。これは、物理的な空間内でチューリングマシンのテープの無限を真にシミュレートする既知の方法がないためです。

8
user3067516

必要な条件の1つは、反復の前に決定されない最大反復カウントのループ、または最大再帰の深さが前もって決定されない再帰です。例として、多くの新しい言語で見つけたfor ... in ...ループはnotで言語を完全なものにするのに十分です(ただし、他の方法があります)。これは、反復回数や再帰深度が制限されていることを意味するのではなく、最大反復回数と再帰深度を事前に計算する必要があることに注意してください。

たとえば、アッカーマン関数は、これらの機能がない言語では計算できません。一方で、これらの機能を必要とせずに、非常に複雑で非常に有用なソフトウェアをたくさん書くことができます。

一方、すべての反復回数とすべての再帰の深さが先に計算されると、プログラムが停止するかどうかを決定できるだけでなく、will停止することもできます。

4
gnasher729

プログラミング言語を使って計算を行うことができれば、プログラミング言語は完全に整っています。言語を完全なものにする機能のセットが1つだけではないため、ループが必要か、変数が必要であると答えると、- どちらもない であるが完全に成熟している言語があるため、答えは間違っています。

Alan Turingがユニバーサルチューリングマシンを作成しました。ユニバーサルマシンで動作するように設計されたプログラムを翻訳して言語で実行できるようになれば、チューリングも完成します。これは間接的にも機能するので、すべての汎用チューリングマシンプログラムをYプログラムに変換できるため、完全な言語YをチューリングするためのすべてのプログラムをXに翻訳できる場合、言語Xは完全にチューリングしています。

時間の複雑さ、スペースの複雑さ、入出力形式の簡単さ、プログラムの作成のしやすさは方程式に含まれていません。したがって、そのようなマシンは、計算が電力損失や太陽に飲み込まれた地球によって停止されない限り、理論的にすべての計算を実行できます。

通常、完全なチューリングを証明するために、完全な言語をチューリングしていることが証明されたもののインタープリターを作成しますが、それが機能するためには、言語が完全にチューリングするために実際には必要とされない、入力と出力の手段が必要です。プログラムが起動時の状態を変更でき、プログラムが停止した後でメモリを検査できるので十分です。

言語を成功させるには、完全性を調整する以上のことが必要ですが、これはターピットを調整する場合にも当てはまります。 BrainFuck,.がなければ人気があったとは思いません。

4
Sylwester

無限にループするか停止するかはわかりません。

-------------

説明:何らかの入力が与えられた場合、それが実行されることによって以外は無限ループするか、または最終的に停止するかどうかを(別のTuringマシンを使用して)すべての場合に判断することは不可能ですループする場合!).

これは、潜在的に無制限の量のデータを何らかの方法で保存できる必要があることを意味します-どんなに複雑であっても、無限テープと同等のものでなければなりません! (そうでない場合、状態の数は有限であり、その状態を以前に経験したことがあるかどうかを確認して、最終的に停止することができます)。一般に、チューリングマシンは、いくつかの制御可能な手段によって状態のサイズを拡大または縮小できます。

チューリングのオリジナルのユニバーサルチューリングマシンには解決できない停止問題があるため、独自のチューリングコンプリートマシンにも解決できない停止問題がなければなりません。

チューリングコンプリートシステムは他のチューリングコンプリートシステムをエミュレートできるため、システム内でよく知られたチューリングコンプリートシステムのエミュレータを構築できれば、システムもチューリングコンプリートであることを証明できます。

たとえば、無限に繰り返されるグリッドパターン(上と左側に異なるバージョンがある)のボードが与えられた場合、Snakes&Laddersがチューリング完全であることを証明したいとします。 2カウンターのミンスキーマシンがチューリング完全であること(2つの無制限カウンターと有限数のうち1つの状態)がわかっているので、グリッド上のXとYの位置が2つのカウンターの現在の値である同等のボードを構築できます。現在のパスは現在の状態です。バン!ヘビとはしごが完全なチューリングであることを証明しました。

4