さらに別の答えを追加するかどうかしばらく考えました。他の答えは、彼の質問の真ん中に焦点を当てています(「チューリング完全」、「トートロジー」など)。最初と最後の部分、つまり大きくてわずかに哲学的な図をつかんでみましょう。
しかし、それはどういう意味ですか?
チューリング完了とはどういう意味ですか?
「別のチューリングマシンをシミュレートできる」と言うだけでチューリングマシンの機能を定義する方法はありますか?
非公式にあなたのメカニズムが実行できることを完全手段チューリングされ、話すどんなことがある(コードの面で)長い、あなたが考えることができ、アルゴリズム、複雑どのように複雑な、深い、再帰、関係なく、ストレージや時間は次のようになりどんなにそれを評価する必要がありました。これは、問題が計算可能であればそれだけで成功することは言うまでもないが、それは場合で計算、それがされます(停止)成功します。
(注:これが「非公式」である理由を調べるには、これらの行に沿って、より精巧な言葉遣いで教会-チューリングの論文を調べてください。論文であるため、正しいかもしれませんし、そうでないかもしれません。この小さな省略をコメントで指摘しています。)
「アルゴリズム」とは、今日のコンピューターアルゴリズムとして一般に理解されているものを意味します。つまり、ストレージを操作する一連の個別のステップで、いくつかの制御ロジックが混在しています。ただし、Oracleマシンとは異なります。つまり、「推測」することはできません。
実用的な非tc言語の例
自分でプログラムを作成している場合は、おそらく文字列を何らかのパターンに一致させるために使用される正規表現を知っているでしょう。
これは、チューリング完全ではない構造の一例です。特定のフレーズに一致する正規表現を作成することが不可能な演習を簡単に見つけることができます。
たとえば(実際の実際のアプリケーションでは多くのプログラマーを悩ませています)、プログラミング言語またはXMLドキュメントに一致する正規表現を作成することは理論上および実際上不可能です:正規表現がブロック構造を見つけることは不可能です(do ... end
または{ ... }
言語の場合、XMLドキュメントの開始タグと終了タグ)が任意に深くできる場合。そこに制限がある場合、たとえば、「再帰」のレベルは3つしか持てない場合、正規表現を見つけることができます。しかし、それが制限されていない場合、それはノーゴーです。
ソースコードを解析するために(Cなどの)チューリング完全言語でプログラムを作成することは明らかに可能であるため(すべてのコンパイラーが行う)、正規表現はそのプログラムをシミュレートできません。したがって、定義によりチューリング完全ではありません。
動機
チューリングマシン自体のアイデアは実用的ではありません。つまり、Turingは確かに、たとえばCharles Babbageやvon Neumannとは対照的に、実際のコンピューターなどを作成するために発明したわけではありません。チューリングマシンの概念を持つことのポイントは、非常に単純であることです。ほとんど何もありません。可能な(そして実際の)コンピューターを想像できる限り最小限に減らします。
この単純化のポイントは、これにより、理論的な質問(問題の停止、複雑さのクラス、および理論的なコンピュータサイエンスが気にするものなど)について簡単に熟考できるようになることです。特に1つの特徴は、通常、その言語で前述のチューリングマシン(非常に簡単です!)をプログラミングするだけで、特定の言語またはコンピューターがチューリングマシンをシミュレートできるかどうかを非常に簡単に確認できることです。
無限に
無限の時間やストレージは必要ないことに注意してください。しかし、時間とストレージの両方に制限はありません。それらは、計算可能な実行ごとに最大値を持ちますが、その値になりうる大きさに制限はありません。実際のコンピューターが最終的にRAMを使い果たすという事実は、ここで説明されています。もちろんこれは物理的なコンピュータの制限ですが、それは明らかであり、マシンの理論的な「計算能力」にとっても関心の対象ではありません。また、実際にかかる時間についてはまったく興味がありません。したがって、私たちの小さなマシンは、任意の量の時間とスペースを使用することができ、それは絶対に実用的ではありません。
... 以降
一つの驚異的な最後の点は、それから、このような単純なは、単純なことを行うことができるということですすべてのものの任意の考えられる実際のコンピュータができ、これまで我々が今日知っている限り、少なくとも- 、宇宙全体では、(単に非常に遅い)を達成します。