独自のコンパイラをチューリング完全に表現できる言語はありますか?


12

tex.SEについてのコメントは不思議に思いました。ステートメントは基本的に次のとおりです。

言語Xで言語Xのコンパイラを作成できる場合、Xはチューリング完全です。

計算可能性と形式言語の用語では、これは次のとおりです。

場合決定した及び、次いで。L L T MM L F L = R EMLLTMMLFL=RE

ここで、はすべてのチューリングマシンエンコーディングの言語を示し、はマシンによって計算された関数のセットを示します。 F L LLTMFLL

これは本当ですか?


近くに、考えて/同意して、それに近い本当のthmがなければならないことに同意してください。独自のシミュレータを表現できる「非自明」または「十分に複雑な」言語はTM完全です。コンパイラは通常、シミュレータの一部です。実際、多くのTM完全性証明に見られる「設計パターン」ですが、おそらく一般化/形式化されていません。コンピュータサイエンスチャットでのさらなる分析/議論のためのトピックかもしれません。疑わしい/推測「ややこしい/十分に複雑な再帰的および再帰的に列挙可能な言語はすべて他のすべてにマップ/縮小できる」というような興味深いものがいくつかあります。
vzn

1
InterpretMeと呼ばれる難解な言語を作成しましたが、これは独自のインタープリターを表現する以外に何もできないため、Turing完全ではありません。
非コンテキストスペル

2番目のステートメントを説明できますか?とは何ですか?この声明は最初のものとどのように関係していますか?M
reinierpost

@reinierpostは通常、何らかの(許容される)エンコーディングが与えられた場合のの数を示します。したがって、。により、チューリング機械の言語によって計算された関数のセットを示します。M L Tは、M = { M | Mは、 チューリングマシンである} F L LMMLTM={MM is a Turing machine}FLL
ラファエル

クレームを述べるためのより良い方法は次のようになります「TMがあればと且つ、次に。M L L M = L F L = R EMMLLM=LFL=RE
ラファエル

回答:


13

次のプログラミング言語で示されているように、非公式のステートメントは真実ではありません。ASCII文字の文字列はすべて有効なプログラムであり、すべてのプログラムの意味は「入力のコピーを出力するだけのプログラムを出力する」です。したがって、この言語のすべてのプログラムは言語のコンパイラですが、言語はチューリング完全ではありません。

あなたの「計算可能性理論バージョン」が同等であるかどうかはわかりませんが、それは真実でもありません。クリーネの第二の再帰定理、任意のチューリングマシンのコーディングのために、独自のコーディングを受け入れ、他のすべてを拒否TMがあります。1このマシンは命題の反例です。より具体的には、コーディングを選択することで結果を達成できます。たとえば、すべての奇数番号が「入力が奇数の場合は受け入れ、それ以外の場合は拒否」で定義されたマシン  使用し、チューリングマシンの好みのコーディングスキームででコード化されたマシンを  数値 コーディングします。  はが受け入れる  言語 が、MX 2バツバツL M F LMLMFL  はチューリング完全ではありません。


1 Kleeneの2番目の再帰定理は、部分再帰関数の列挙(つまり、プログラムを整数としてコーディングする場合)および部分再帰関数 、  がをマッピングする関数であるような整数 があります。したがって、特に場合に受け入れ、そうでない場合に拒否する関数とします。定理により、プログラムをコードする整数 があります。つまり、は独自のコーディング受け入れます  Q X Y P φ P Y Q P Y Q X = Y P φ PY = Q P Y φ P Pϕ0QバツypϕpyQpyQバツ=ypϕpy=Qpyϕpp 他のすべての入力を拒否します。


1
その言語のすべてのプログラムは、どのような意味でその言語のコンパイラですか?すべてのプログラムは、その言語でプログラムを入力し、その言語で別のプログラムを出力するプログラムです(はい)。しかし、通常、クインはコンパイラーとは見なされません。
user253751

1
@immibisにはポイントがあると思います:コンパイラはですが、言語のすべてのプログラムはなので、は明らかにそうではありません言語で。何か不足していますか?ccP={バツretあなたはrn P}Pバツ=Pc
ラファエル

1
@immibis私は(遅ればせながら)あなたが正しいと思います。私が書いたつもりは、すべてのプログラムのセマンティクスが「入力を出力する」だけだったようです。それは私が書いたものに十分近いと思われ、そもそもそれはおそらく私が意図したことだったでしょう。あるいは、間違った答えから正しい答えへの編集距離が非常に小さかったので、非常に幸運でした。:-)
デビッドリチャービー

1
答えは「入力を無視して入力のコピーを出力する」と言うようになりました-両方を行うことはできません。
user253751

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.