完全に処理されない計算モデルの「計算可能」の明確な定義はありますか?


9

これは、ここでの別の質問のフォローアップであり、あまりにも哲学的ではないことを願っています。ラファエルが私の前の質問のコメントで指摘したように、私は本当に「計算可能」の定義を取得していませんが、私が読んだいくつかの論文によると、定義は、チューリングよりも弱い計算のモデルになると本当に明確ではありません入力と出力のエンコーディングのためにマシン。

計算可能チューリングの一般的な定義は次のとおりです。

定義1:関数は、自然数の適切なエンコードを文字列として使用してfを計算するチューリングマシンMがある場合に、チューリング計算可能と呼ばれます。f:NkNMf

定義は、適切なエンコーディングとは正確に何であるかで異なりますが、ほとんどの場合、バイナリエンコーディング単項エンコーディング、または10進数エンコーディングを、1つの固定された適切なエンコーディングと呼びます。チューリング計算可能性の定義には、1つのエンコーディングを修正する必要があることを示すこともできます。しかし、自然数のバイナリエンコーディングを特別にして、適切なエンコーディングとして公理化できるようにするにはどうすればよいでしょうか。たぶん、それが偶然に計算可能性が何を意味するかという直感的な概念に適合しているからでしょう。

次に、チューリングマシンよりも弱い計算モデルを検討するとどうなるでしょうか。たとえば、のは、設定され考えてみましょうアルファベットで「不自由」チューリングマシンのを{ 0 Mcだけ右に移動することができる、との定義不自由が計算チューリングチューリング計算可能のものと一致しています。{0,1}

定義2:関数呼び出される計算チューリング不自由またはで計算MのC不自由チューリングマシンがときに限り、Mはf:NkNMcMた計算する列として自然数の適切なエンコーディングを使用しては。f

我々は次に、機能、「バイナリエンコーディング」と「適切なエンコーディングを」定義する場合ないで計算のM C。「適切なエンコーディング」を「単項エンコーディング」として公理化すると、fM cで計算可能になります。誰もが無限に多くの直感的なエンコーディングの1つを思いのままに修正できるという事実を考えると、これは厄介なようです。計算モデルがfを計算できるかどうかは明確でなければなりませんf:NN,nn+1Mcf Mcf 特定のエンコーディングを参照せずに-少なくとも「ループプログラムはチューリングマシンよりも弱い」と述べたときに、どのエンコーディングが使用されているかについて誰かが言及したことはありません。


この紹介の後、私はようやく私の質問を述べることができます:計算の直観的な概念と一致しない計算の任意のモデルの「適切なエンコーディング」と「計算可能性」をどのように定義しますか?これは、計算可能性を調整する枠組みの中で可能ですか?

編集:私は紹介を短くしました、それは質問に追加しませんでした。

回答:


6

ここで欠落しているいくつかの基本的な事実は、あなたが言及するすべてのエンコーディングは計算可能性の観点から同等であることです:数値のバイナリエンコーディングを単項エンコーディングに、またはその逆にマッピングする計算可能な関数があります。したがって、計算可能性を定義するために、これらのエンコーディングのどれを数値に選択するかは重要ではありません。お気に入りのエンコーディングを修正するだけです。

計算可能性は、その中心に文字列関数fのプロパティですΣ Σ f:ΣΣです。他のドメインで計算可能性を定義するときは、エンコーディングを修正する必要があります。実際には、「合理的な」エンコーディングはすべて前の段落の意味で同等であるため、正確なエンコーディングは重要ではありません。

ただし、エンコードは制限された計算モデルでは重要です。極端な例として、時間制限のあるチューリングマシンを検討するとします。あるcについて、マシンを時間で終了させたいとします。ここで、nは(文字列としての)入力の長さです。バイナリエンコーディングの方がはるかにコンパクトであるため、バイナリエンコーディングと単項エンコーディングを切り替えることができなくなりました。整数の多項式時間計算可能関数について説明する場合、整数がバイナリでエンコードされることを指定します。10進符号化は多項式時間の計算可能性の同じ概念につながるため、これでも多少恣意的な選択です。O(nc)cn

だからあなたの質問に答えるために-エンコーディングは制限されたモデルの定義の一部として指定されています。


「ここで欠落しているいくつかの基本的な事実は、あなたが言及するすべてのエンコーディングは計算可能性の観点から同等であることです:数値のバイナリエンコーディングを単項エンコーディングに、またはその逆にマッピングする計算可能な関数があります」-そう、私は私の質問の元のバージョンではそれがありましたが、それが弱いモデルに関する質問にどのように関連しているかはわかりません。エンコーディングをモデル定義の一部として指定する必要があることも明らかですが、問題は、そのような合理的な定義に到達する方法です。
Stefan Lutz

1
人はこの定義を帽子から引き出します。異なる定義は同等である傾向があるため、正確な定義は重要ではありません。その場合、いくつかの異なる複雑さの概念があります。たとえば、一部のグラフアルゴリズムでは、隣接行列またはエッジのリストが与えられると違いが生じます。
Yuval Filmus

要約すると:a)各単一の計算モデルの定義には、構文、セマンティクス、および適切なエンコーディングを含める必要があります。b)「適切なエンコーディング」の定義は、モデルの構文およびセマンティクスから完全に独立しています。c)すべての計算モデルに有効な「適切なエンコーディング」を定義する方法はありません。あれは正しいですか?
Stefan Lutz

私はa)とb)に同意しますが、c)には部分的にのみ同意します。「標準エンコーディング」として機能する適切なエンコーディングを定義できます。事実について明示的に言及しない限り、これを使用します。数値の場合、そのような標準的なエンコーディングが存在します–バイナリエンコーディング。
Yuval Filmus

M

4

まず、「適切なエンコーディング」をバイナリ文字列やその他のエンコーディングに修正することはできません。これは、計算のモデルが多すぎると、入力と出力のモデルが大きく異なる可能性があるため、計算のモデルが多すぎるためです。つまり、文字列を「話す」ことはできません。

たとえば、型付けされていないラムダ計算の項は、変数か、ある用語の別の項への適用か、ラムダ用語の抽象化です。入力と出力は用語、任意の文字列です。それでも、型なしラムダ計算はチューリング完全です。これは、自然数を特定の形式のラムダ項として符号化する「適切な符号化」が存在し、計算可能な各関数のこの符号化の下で、それを計算するラムダ項が存在するためです。

チューリングマシンを計算の参照モデルとして修正し、バイナリ文字列との間のエンコードとデコードを常に停止するチューリングマシンで実行する必要がある場合は、「適切なエンコーディング」を形式化できます。たとえば、チューリングマシンは、自然数をバイナリ文字列としてこの数値を表すラムダ項に変換し、ラムダ計算の減少をシミュレートして、結果をバイナリ文字列に変換できます。

より単純な計算モデルの場合は、同じアプローチを期待します。計算の参照モデルを取り、自然数のエンコードを修正してから、その単純なモデルのインスタンスによってエンコードとデコードが行われるようにします。お気づきのように、不自由なチューリングマシンでは、単項およびバイナリのエンコードされた数値を使用しても、同等の計算モデルは得られません。


最後の段落で状況が変わった可能性はありますか?エンコーディングは参照モデルではなく単純なモデルによって行われると書いています-前の段落では、他のモデル(ラムダ計算)ではなく参照モデルによってエンコーディングを行いたいと考えています。
Stefan Lutz

計算の弱いモデルを研究している場合は、エンコード/デコードフェーズでさえも、チューリングマシンをどこでも使用したくありません。次に、エンコーディングフェーズですべての計算を実行するだけで、どのような計算モデルでもチューリング完全になります。したがって、エンコード/デコードには、より単純な参照モデルを使用する必要があります。
フーピエ2015年

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