プログラミング言語とチューリングマシンの正確な関係は何ですか?


7

yacc、bison、flex、lexについてよく知らないので、間違っている場合は修正してください。ただし、プログラミング言語もTuringマシンであり、Turingマシンはタプル where、、、 as input、は遷移関数として、 =左へのステップ数、 =右へのステップ数、 = "スタンバイ"、は初期状態、(Q,Γ,b,Σ,δ,q0,F)QΓbΓΣΓ{b}δ:Q×ΓQ×Γ×{L,R,N}LRNq0QFQ 終了状態のセットです。

プログラミング言語の実装は、チューリングマシンの実装とどの程度似ていますか?上記のようなチューリングマシンが定義されたことでプログラミング言語が実装されたときに何が行われると言えるのでしょうか?もしそうなら、プログラミング言語が定義されているときに、チューリングマシンの定義のように見えるモデルを使用できないのはなぜですか?代わりに、BNFのような何かが標準のようです。


4
正確な関係は次のとおりです。チューリングマシンは特定のプログラミング言語です。
Andrej Bauer

1
BNF、バッカスナウル形式は、CFL表現システムと考えることができます。ほとんどのプログラミング言語はCFLです。コンパイラは、[一般に]入力プログラムとCFL仕様をオブジェクトコードに変換します。(アセンブリ言語は、CFLに似ていない言語の一例です)。したがって、ここには複数の質問があるかもしれません。
vzn 2013年

1
@vzn:あなたの発言が質問にどのように関係しているかはわかりませんが、いずれにせよ間違っています
ラファエル

1
なにが問題ですか?繰り返しますが、ほとんどのプログラミング言語は、さまざまな技術的資格を持つCFL(またはコアCFLのようなパーサー)です。
vzn 2013年

2
間違っているのは、プログラミング言語を文法の観点から考え、それらを計算モデルとして考える方がよい場合です。
Andrej Bauer

回答:


9

質問を誤解しているかもしれませんが、チューリングマシンとプログラミング言語の比較に混乱があるようです。

チューリングマシンの定義と定義方法は、プログラミング言語を構成します。チューリングマシンは、その言語でプログラムを表します。

言語構文とセマンティクス(BNFなど)はプログラミング言語を構成でき、それらの構文的および意味的制約を満たすアーティファクトはその言語のプログラムです。

したがって、それは実際には正確ではありません(IMHO。もちろん、TMがさまざまな方法で何を行うかについて考えることができます。TMを見るこれらの方法のいくつかでは、個々のTMをプログラミング言語を定義するものと考えることができます。 machineは、プログラミング言語の実装とTuringマシンの実装を比較するために、非常に明確なプログラミング言語、つまり文字列としてのTuringマシンの表現を定義します。プログラミング言語の実装には、ゲームのルールの定義が含まれます。チューリングがゲームのルールを定義したとき(またはそれが誰であれ、何であれ)、彼が何かがチューリングマシンであることの意味を定義したときと同じです。

プログラミング言語の「実装」とチューリングマシンの定義は、非常に難しい作業です。言語でプログラムを作成し、特定のチューリングマシンを定義することも、難しい作業です。しかし、それらはまったく異なるアクティビティです(インタープリタとして機能するTuringマシンを作成している例外的な場合を除いて、その場合、TMを書くことによるプログラミング言語の設計について話すことは理にかなっています...しかし、私はmこれはあなたが何を求めていたかわかりません)。


5

チューリング機械モデルは、「コンピューティング」が何であるかについての理論的なモデルです。理論的なモデルとして、操作が簡単であり、それについて証明すること、具体的には何が計算できるか、何が計算できないかを調べることが簡単になるように設計されました。また、計算を行うために必要な時間、または必要なスペース(メモリ)について話し合う(そしてそれについて証明する)単純なモデルとしても機能します。重点は単純さです(特に、基本的な数学的概念のみを使用する場合)。

対照的に、プログラミング言語は、人間が簡単に書き込み(および読み取り)できるように設計されており、そのアプリケーション領域の概念が直接処理されることもよくあります。たとえば、Perlのような言語は、パターンの検索などの複雑なものでさえ、文字列の操作を直接処理します。SQLは、リレーショナルデータベースでの操作、特定の制約のあるデータの検索、およびデータベースの操作を行うクエリに合わせて調整されています。等々。

チャーチ=チューリングのテーゼは、チューリングマシンで計算できる用語の意味のある意味で計算することができる何かを主張します。これは、計算モデルにたどり着くまでの10年にわたる狂乱の最終結果であり、すべて同等であることが判明しました。したがって、理論的には、はい、それらは同等です(言語とその実装の定義、およびそれが実行されるマシンが正しい限り)。しかし、ことわざにあるように、理論的には、理論と実践は同じものです。実際には、それらは非常に異なります。簡単なタスクを実行するためにチューリングマシンを書き留めるのは、多くの骨の折れる作業であり、それは、お気に入りのプログラミング言語の1行にすぎない場合があります。


1
実際のコンピュータは、I / Oなど、TMモデルでカバーされないものを実行することに注意してください。
ラファエル

4

確かに、すべての(汎用)プログラミング言語は、チューリングマシンと同等であると考えられています。(Church-Turingの論文によると、それらはそれ以上の計算は行わず、通常は好きな言語でTMをシミュレートする方法は明らかです)。これは、チューリングマシンのプログラミングが実用的であることを意味するものではありません。それから遠い。実際のプログラミングを行うために、より優れた言語が開発されています。実際、これらの言語は時間とともに進化します。プログラミング言語をより使いやすくしたり、エラーを起こしにくくしたりする機能を学ぶと、

それでも、チューリングマシンは周りにあります。これは、複雑さと計算可能性を定義する基準として機能します。

(追加されました。)コメントに記載されているように、すべてのプログラミング言語がチューリングパワー用に設計されているわけではなく、一部は正規表現などの特定のタスクを処理します。一方、プログラミングを事実上不可能にするような方法で作られた強力なエキゾチックな言語があります。楽しみに。


@DaveClarke確かに。それが私が述べようとしていたことですが、あなたは正しいです。言葉を変えます。ありがとう。
Hendrik Jan

2
「確かに、すべてのプログラミング言語はチューリングマシンと同等であると考えられています。Church-Turingの論文を参照してください。」-プログラミング言語とTMの同等性は証明可能であり(実際に証明されていますが、それほど強力ではない言語があります!)、それはチャーチチューリングの論文ではありません
ラファエル

1
また、私たちは本当のコンピュータは、物事ないことを心に留めておく必要はありません TMモデル、例えばI / Oでカバー。
ラファエル

@ラファエル。Church-Turingビットを言い換えてみます。ありがとう。TMは実際のコンピュータではないことに同意しますが、I / O(読み取りと書き込み)はTMで実行できる処理の1つです。
Hendrik Jan

良い答えですが、すべての(エキゾチックではなく)有用なプログラミング言語はすべてチューリングマシンと同等であると言うのは少し強すぎます。つまり、バニラSQL(派手なアドオンなし)と正規表現(理論的な種類だけでなく)は、チューリングと同等ではない便利な「プログラミング言語」の2つの例ですが、非常に便利です。
Patrick87 2013年

1

プログラミング言語は、注意深く構築されたUniversal Turing Machineに相当するものです。


-1

いい質問ですが、これは考えすぎです。シンボルで迷子になる。すべてをシンプルで基本的な方法で見てみましょう。プログラミング言語はASCIIであるか、文字の場合は0/1ビットだけです。TMがそれを簡略化するために0/1ビットを持っていると想像してください、または入力文字としてASCIIと言います。

重要な実現と類似点は、TMステートテーブルが入力文字セットの読み取りを兼ねており、プログラミング言語/プログラムエンコーディングが含まれていることです。

これは、単純なTMとその状態テーブルを作成または検査して、合計などの基本的な計算を計算することで実現できます。別の非常に便利なアプローチは、TMシミュレーターで遊ぶことです。[3]

これは、一部のクラスで、任意のプログラム(ソースコード)を取得してTMステートテーブルにコンパイルする実際のTMコンパイラを使用してCSを教えた場合(オブジェクトコードと同様)に明らかです。残念ながら、今のところそれが役立つとは誰も信じていません。[1] (同意しない場合は、再度投票して投票してください!=)

しかし、TMシミュレーターを使用すると、この基本的な直感を構築するのに役立ちます。[2]は、おそらく現在、世界で最も洗練されたものです。

[1] /cs/2916/is-there-a-compiler-from-high-level-language-to-turing-machine

[2] ソース/オブジェクトコードと出力を備えたルビーのTMコンパイラ(非停止用)a+b=b+a 可換加算法検証者)

[3] /cs/10379/top-turing-machine-simulators-on-the-web


2
あなたの他の質問についてのコメントは不必要であるだけでなく、間違っています(そして仮定しています)。
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.