実現可能性理論:ラムダ計算とチューリングマシンのパワーの差


48

関連する3つのサブ質問があり、それらは下の箇条書きで強調されています(いいえ、疑問に思っている場合は分割できません)。Andrej Bauerは、ここで、いくつかの関数はチューリングマシンで実現できるが、ラムダ計算では実現できないと書いています。彼の推論の重要なステップは次のとおりです。

ただし、ラムダ計算を使用する場合、[プログラム] cは、関数fを表すラムダ項からチューリングマシンを表す数値を計算することになっています。これを行うことはできません(別の質問として質問した場合、その理由を説明できます)。

  • 説明/非公式の証拠を見たいです。

ここでライスの定理を適用する方法がわかりません。この述語を同等の用語に適用すると同じ結果が得られるため、「このチューリングマシンTとこのラムダ項Lは同等ですか?」という問題に適用されます。ただし、必要な関数は、異なるが同等のラムダ項に対して異なるが同等のTMを計算する場合があります。

  • さらに、問題がラムダ項のイントロスペクションにある場合、ラムダ項のGödelエンコーディングを渡すことも受け入れられると思いますか?

一方では、彼の例がラムダ計算で、特定のタスクを完了するためにチューリングマシンが必要とするステップ数を計算することを考えれば、私はあまり驚かない。

  • しかし、ここではラムダ計算ではチューリングマシン関連の問題を解決できないため、ラムダ計算で同様の問題を定義し、チューリングマシンでは解決できないことを証明できるのか、それとも実際には力の差があるのか​​疑問に思いますチューリングマシン(これには驚かされます)。

回答:


56

ジョン・ロングリーには、関連する問題について議論する非常に広範な調査記事「高等型での計算可能性の概念」があります。

NN(NN)N

より高い型の計算のモデルを完全に定義するには、ある関数が引数として受け取る別の関数を呼び出せるように、関数の呼び出し規約を指定する必要があります。ラムダ計算では、関数をラムダ項で表すという標準的な呼び出し規約があり、ラムダ計算でラムダを使用してできることはそれを適用することだけです。チューリングマシンを使用した一般的なエンコーディングでは、特定のGodelエンコーディングを修正することで関数を引数として渡し、次に引数として渡したいマシンのインデックスを表す文字列を渡します。

NNn

注目に値することの1つは、高い型では、言語が1つの順序で表現力が低い場合、関数は反変なので、1つの順序で表現力が高くなることです。同様に、TMスタイルのエンコーディングではできないLCで記述できる関数があります(関数の引数を渡すことができ、レシーバが指定した関数の内部を見ることができないという事実に依存しているため) 。

編集:PCFで定義できるが、TM + Goedelエンコーディングでは定義できない関数の例を次に示します。isAlwaysTrue関数を宣言します

 isAlwaysTrue : ((unit → bool) → bool) → bool

引数が引数を無視し、常にtrueを返す場合はtrueを返し、入力で引数がfalseを返す場合はfalseを返し、引数が入力でループに入る場合はループに入ります。次のように、この関数を非常に簡単に定義できます。

isAlwaysTrue p = p (λ(). true) ∧ p (λ(). false) ∧ p (λ(). ⊥)

where はループ計算で、booleanのand演算子です。これが機能するのはunit → bool、PCFには3人の住民しかいないため、それらを徹底的に列挙できるからです。ただし、TM + Goedelエンコードスタイルモデルでpは、引数が回答を返すのにかかる時間をテストし、それに基づいて異なる回答を返すことができます。したがって、isAlwaysTrueTM の実装は仕様を満たせません。


1
これは素晴らしい調査です。リンクをありがとう!
スレシュヴェンカト

私はあなたの答えを受け入れるつもりでしたが、答えを受け入れるのを忘れていたことに気付きました。ごめんなさい!
ブレイザーブレード

「エンコーディングの違いは、TMスタイルのエンコーディングでは引数の構文を分析でき、標準のラムダ計算では表現できないことを意味します。」:ただし、関数構成の表現がある場合はどうでしょうか。また、あなたが言うことは、HOLが型付きラムダ計算の理論以上のものであることを示唆しているように思われます。
Hibou57

また、このことについてどのような:cs.virginia.edu/~evans/cs150/classes/class39/lecture39.pdf。これは何らかの形で間違っていますか?
Hibou57

親愛なるニール、ラムダ計算モデルでは実現できるがチューリングモデルでは実現できない関数の例はありますか?
Ingo Blechschmidt

29

ニールが言ったこと、また以下。

NNλλλ

λNN


λNNλ

NNλappn¯f:NNf(k)appn¯k¯n¯nappλ

Xf:X×NNλtf~:X(NN)λsXNNλff~NNλλNNλ

XNNλXX


2
まだその優れた例を待っている...
ジャック・Carette

1
λ

カレーがどうして計算不能になるかわかりません。その証明は1次データ(自然)上の関数を構築するため、smn定理を再利用できるはずです。Church-Turingの論文では、この自然の振る舞いをラムダ用語として実装できます(これは内部でネイティブ関数を使用しますが、それが禁止されている方法はわかりません)。同様にutm定理を証明できますので、あなたの投稿によると私たちはやらなければなりません。私は何が欠けていますか?
ブレイザーブレード

1
カリー化が計算不可能になること、つまり、提案されたオブジェクトは表現されたセットのカテゴリの指数関数ではないことを意味することを答えで説明しました。
アンドレイバウアー

説明ありがとう!残念ながら、再度投票することはできません。ほとんどの技術的な詳細をフォローできます。私はトポロジーモデルに精通していませんが、とにかく「関数型プログラミング/λ計算では関数を検査することはできません」に精通しています。最後の段落では、なぜsmnを使用できないのかについても説明します。これは、smnによって提供されるカリー化により、必要な標準関数ではなく、Gödelコードが再び生成されるためです。その段落について瞑想します。
ブレイザーブレード
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.