実装が存在しない可能性のあるプログラミング言語を指定することは理論的に可能ですか?プログラミング言語は、関数を定義する方法です。実装とは、特定の入力でプログラムに対応する関数の出力への特定の入力で、その言語で特定のプログラムを実行するメソッドを意味します。
そのような言語の最小要件は何ですか?
実装が存在しない可能性のあるプログラミング言語を指定することは理論的に可能ですか?プログラミング言語は、関数を定義する方法です。実装とは、特定の入力でプログラムに対応する関数の出力への特定の入力で、その言語で特定のプログラムを実行するメソッドを意味します。
そのような言語の最小要件は何ですか?
回答:
通常、プログラミング言語の実装は、少なくともチューリング完全な言語のインタープリター(または言語のコンパイラー)を提供します。
この「定義」を使用して、次のようなプログラミング言語を指定できます。
可能なプログラムは1つだけですHALT
。
仕様HALT
:停止問題を解決する機能です。
このプログラミング言語を実装するには、実装に関する停止問題を解決する必要があります。(私たちの実装はチューリングマシンよりも強力であってはならないので、これは不可能です)。
仕様はロジックを処理するため、さらに多くのことを要求できます。実装できない別の仕様は「false」です。(または仕様の矛盾する文)しかし、これは仕様のようには感じられないため、停止問題の例を使用しました。
奇妙なことに注意してください:C ++テンプレートエンジンはチューリング完全です
定理1: インスタンス化の境界がない場合、C ++テンプレートはチューリング完全です。
結果1: インスタンス化の制限がない場合、特定のプログラムのコンパイル時にC ++コンパイラーが停止するかどうかは決定できません。
...したがって、C ++自体は、「実装」が存在しないプログラミング言語と考えることができます... :-D
「プログラミング言語」と「言語の実装」が何を意味するのかは不明です。答えを得るためには、これら2つの厳密な定義を提供する必要があります。
しかし、これは「プログラミング言語」という言葉を使うときに人々が意味するような仕様言語ではありません。プログラミング言語は、典型的には計算機能を発現させる(プロセス、...)と、機械に命令を通信し、従って、これらのプログラム及び出力それらの結果をシミュレートすることができるTMが存在する言語であることを意味します。したがって、実装できないプログラミング言語があるという意味では意味がありません。
(おそらく、プログラミング言語を仕様言語または正式言語と混同していると思います。いずれにせよ、計算できない言語を定義することができます。)