回答:
これが最も簡単な説明です:
チューリングコンプリートシステムとは、答えを見つけるプログラムを作成できるシステムを意味します(ただし、ランタイムやメモリは保証されません)。
したがって、誰かが「私の新しいことは完全なチューリングである」と言った場合、それは原則として(実際には多くの場合ではありませんが)計算の問題を解決するために使用できることを意味します。
時々それは冗談です...男はviでTuring Machineシミュレーターを書いたので、viは世界で必要とされる唯一の計算エンジンであると言えるでしょう。
これが最も簡単な説明です
Alan Turingは、プログラムを取得してそのプログラムを実行し、結果を表示できるマシンを作成しました。しかし、その後、プログラムごとに異なるマシンを作成する必要がありました。そこで彼は、あらゆるプログラムを実行できる「Universal Turing Machine」を作成しました。
プログラミング言語はそれらのマシンに似ています(仮想ですが)。彼らはプログラムを取得して実行します。現在、プログラミング言語は、チューリングマシンが十分な時間とメモリを与えられて実行できる任意のプログラム(言語に関係なく)を実行できる場合、「チューリング完了」と呼ばれています。
例:10個の数値を受け取り、それらを加算するプログラムがあるとします。チューリングマシンはこのプログラムを簡単に実行できます。しかし、何らかの理由でプログラミング言語が同じ追加を実行できないと想像してください。これにより、「いわば不完全なチューリング」になります。一方、ユニバーサルチューリングマシンで実行できるプログラムを実行できれば、チューリングは完成です。
最近のほとんどのプログラミング言語(Java、JavaScript、Perlなど)は、加算、乗算、if-else条件、returnステートメント、格納/取得/消去の方法など、プログラムの実行に必要なすべての機能を実装しているため、すべてチューリング完全ですデータなど。
更新:詳細は私のブログ投稿「JavaScriptはチューリング完了」で説明されています—説明
ウィキペディアから:
アランチューリングにちなんで名付けられたチューリングの完全性は、これまでに進歩したコンピューティングデバイスのすべてのもっともらしい設計が、普遍的なチューリングマシン(Church-Turing論文として知られるようになった観察)によってエミュレートできるという点で重要です。したがって、普遍的なチューリングマシンとして機能できるマシンは、原則として、他のプログラム可能なコンピューターで可能な計算を実行できます。ただし、これは、マシンのプログラムを作成するために必要な労力、マシンが計算を実行するのにかかる時間、またはマシンが持つ可能性のある、計算に関係のない能力とは関係ありません。
本当にチューリング完全なマシンは無制限のストレージを必要とするため、物理的に不可能である可能性が非常に高いですが、チューリングの完全性は、多くの場合、無制限のストレージがあれば普遍的である物理マシンまたはプログラミング言語によるものです。この意味で、すべての最新のコンピューターはチューリング完全です。
「完全なチューリングとは、「十分な時間とスペースがあれば計算可能な問題に答えることができる」ということを除いて、あなたがそれよりも非技術的であることができる方法がわかりません。
チューリング完全言語は、あらゆる計算を実行できる言語です。チャーチ=チューリングのテーゼの任意の実行可能計算がチューリングマシンによって行うことができると述べています。A チューリングマシン、それが読むべきおもむくまま、書き込み、およびそのメモリを越えて移動、それは一定の結果で終了しなければならない、とそれが次に何をすべきという無限のランダム・アクセス・メモリと有限「プログラム」が機械です。チューリングマシンへの入力は、開始する前にそのメモリに入れられます。
Aチューリングマシンは、それがメモリに見ているものに基づいて決定を下すことができます -のみサポートされていることを「言語」+
、-
、*
、そして/
それはその入力に基づいて選択が、チューリングマシン缶を作ることができないので、整数にはチューリング完全ではありません。
Turingマシンは永久に実行できます-Java、Javascript、またはPythonを使用して、あらゆる種類のループ、GOTO、または関数呼び出しを実行する機能を削除した場合、任意の計算を実行できないため、Turingは完全ではありません終わらない。Coqは、終了しないプログラムを表現できない定理証明であるため、チューリング完全ではありません。
チューリングマシンは無限メモリを使用できます - チューリングマシンは無限メモリを使用できるため、Javaとまったく同じでしたが、4ギガバイトを超えるメモリを使用すると終了する言語は、チューリングを完了できません。これが実際にTuringマシンを構築できない理由ですが、Java 言語には無限メモリの使用を妨げる制限がないため、Javaは依然としてTuring完全言語です。これが、正規表現が完全なチューリングではない理由の1つです。
Aチューリングマシンは、ランダム・アクセス・メモリを持っている -あなただけは介してメモリで動作することができますことを言語push
とpop
スタックへの操作がチューリング完全ではないことでしょう。文字列を1回読み取り、スタックからのプッシュとポップによってのみメモリを使用できる「言語」がある場合(
、文字列内のすべてが独自のものを持っているかどうかを、それが表示)
されたときにプッシュし、表示されたときに(
ポップすることでわかり)
ます。すべてのは、しかし、それは私に言うことができない(
、独自のを持って)
後にし、すべてのは[
、自身の持っている]
(ノートの後に([)]
、この基準を満たしているが([]]
ないが)。チューリングマシンは、ランダムアクセスメモリを使用して()
、[]
は別々ですが、スタックのみのこの言語はできません。
チューリングマシンは、他のチューリングマシンをシミュレートできます。チューリングマシンは、適切な「プログラム」が与えられると、別のチューリングマシンの「プログラム」を受け取り、任意の入力でそれをシミュレートできます。Pythonインタープリターの実装が禁止されている言語がある場合、それは完全なチューリングではありません。
言語に無限のランダムアクセスメモリ、条件付き実行、および何らかの形の繰り返し実行がある場合、それはおそらくチューリング完全です。チューリングマシンで可能なすべてのことを実現できる、よりエキゾチックなシステムがあります。
cyclic tag system
ではなく、理解していたためuniversal cyclic tag system
です。したがって、記事はSQLが完全であることを証明していません。(または私は何かを誤解しました)
基本的に、チューリング完全性は簡潔な要件の1つであり、無限の再帰です。
記憶に縛られることすらありません。
私はこれを独立して考えましたが、これは主張についての議論です。LSPの私の定義は、より多くのコンテキストを提供します。
ここでの他の答えは、チューリング完全性の基本的な本質を直接定義するものではありません。
Turing Completeは、少なくともTuring Machineと同じくらい強力であることを意味します。つまり、チューリングマシンで計算できるものはすべて、チューリングコンプリートシステムで計算できます。
チューリングマシンよりも強力なシステムを見つけた人はいません。したがって、当面のところ、システムがTuring Completeであると言うことは、そのシステムが既知のコンピューティングシステムと同じくらい強力であると言うことと同じです(Church-Turing論文を参照)。
簡単に言えば、チューリング完全システムは、起こり得るあらゆる計算問題を解決できます。
重要な要件の1つは、スクラッチパッドのサイズに制限がないことであり、スクラッチパッドへの以前の書き込みにアクセスするために巻き戻すことができます。
したがって、実際にはチューリング完全なシステムはありません。
むしろ、いくつかのシステムは、制限のないメモリをモデル化し、システムのメモリ内に収まる可能性のあるあらゆる計算を実行することにより、チューリング完全性を概算します。
「Turing Complete」という概念の重要性は、プロセスを「単純な」命令に分解できる、単純で単純な計算機(必ずしも機械的/電気的な「コンピュータ」ではない)を特定できることだと思いますUniversalマシンが解釈して実行できることを示す命令。
私はアノテーション付きチューリングを強くお勧めします
@Mark私が説明しているのは、ユニバーサルチューリングマシンとチューリングコンプリートの説明の混合だと思います。
チューリングコンプリートとは、実用的には、ユニバーサルマシン(デスクトップコンピューター)で実行されるプログラムとして記述およびプログラムできるマシン/プロセス/計算です。他の人が述べたように、それは時間やストレージを考慮していませんが。
簡単な言葉で理解できること:
完全なチューリング:計算を実行できるプログラミング言語/プログラムは完全なチューリングです。
例えば :
Just HTMLを使用して2つの数値を追加できますか。(Ansは「いいえ」です。追加を実行するにはJavaScriptを使用する必要があります。)したがって、HTMLは完全なチューリングではありません。
Java、C ++、Python、Javascript、EthereumのSolidityなどの言語は、この言語を使用して2つの数値を加算するような計算を実行できるため、完全なチューリングです。
お役に立てれば。
テストして分岐できる場合は完全です( 'if'がある場合)
Turing Completeは、少なくともTuring Machineと同じくらい強力であることを意味します。
これは間違っていると思います。チューリングマシンと同じくらい強力なシステムであれば、チューリングは完全です。つまり、マシンによって実行されるすべての計算はシステムによって実行できますが、システムによって実行されるすべての計算はチューリングマシンによって実行できます。
ほとんどのプログラマーに馴染みのある実用的な言語用語では、チューリング完全性を検出する通常の方法は、言語がネストされた無制限のwhileステートメントのシミュレーションを許可または許可するかどうかです(Pascalスタイルのforステートメントとは対照的に、上限は固定されています)。
リレーショナルデータベースは、場所と道路の緯度と経度を入力して、それらの間の最短経路を計算できますか。これは、SQLが完全なチューリングではないことを示す1つの問題です。
しかし、C ++はそれを実行でき、あらゆる問題を実行できます。したがってそうです。