Lambda Calculusがいくつかのコンビネータを表さないのはなぜですか?


18

この論文は、ラムダ計算では表現できないコンビネータ(シンボリック計算を表す)があることを示唆しています(もし正しく理解できれば):

回答:


20

実際にはやりたいことがあり、ラムダ計算で直接表現できないことがいくつかあります。

SF計算は一例です。その表現力はニュースではありません。論文の興味深い部分(スライドには表示されていません)は、その背後にあるカテゴリー理論です。あなたはのようなものを書くことができるように- SFの計算では、関数がその引数の表現を検査することができLispの実装に似て(print (lambda (x) (+ x 2)))"(lambda (x) (+ x 2))"

もう1つの重要な例は、Plotkinの並列またはです。直観的に言えば、ラムダ計算がシーケンシャルであるという一般的な結果があります。2つの引数を取る関数は、最初に評価するために1つを選択する必要があります。oror⊤⊥)⟹ 、(or⊥⊤)⟹⊤およびor⊥⊥⟹⊥(whereは非終了語、termは終了語)のようなラムダ語を書くことは不可能です。これは「並列OR」と呼ばれます。これは、並列実装が各縮約の1ステップを実行し、引数の1つが終了するたびに停止する可能性があるためです。

ラムダ計算ではできないもう1つのことは、入力/出力です。追加のプリミティブを追加する必要があります。

もちろん、これらのすべての例は、1レベルの間接参照を追加することでラムダ計算で表現でき、本質的にラムダ用語をデータとして表します。しかし、その場合、モデルはあまり面白くなくなります。モデル化された言語の関数とラムダ抽象化の関係が失われます。


11

あなたの質問に対する答えは、「計算」と「表現」の定義方法によって異なります。一方、sclvが言及したLtUスレッドは、さまざまな用語の定義が不整合であるために、お互いに過去の話をしている人がほとんどです。

この区別は確かに計算能力の1つではありません。検討中のシステムはすべてチューリングと同等です。問題は、単なるチューリング等価性が式の構造やセマンティクスについて実際には何も言っていないことです。さらに言えば、複雑なエンコーディングまたは非自明な初期状態を必要とする計算の極めてミニマリストなモデルで、システム普遍的な計算可能であるかどうか、あるいはシステムの誰かの解釈によって普遍性の錯覚が作成されているかどうかさえ不明な場合があります。たとえば、2ステート、3シンボルチューリングマシン、特にヴォーンプラットが提起した懸念に関するこのメーリングリストの議論を参照してください。

とにかく、描かれる区別は次のようなものの間です。

  • 操作が必然的にセマンティクスを保持するような方法でプリミティブ操作にセマンティクスを割り当てることにより、システムで直接表現できるもの
  • システムの外部で実行される解釈手順を指定することにより、「間接的に」表現できるもの。解釈は、ある意味でシステムよりも「単純」であると想定されます。
  • 直接表現を提供する別のシステムのインタープリターを構築するなど、完全な間接層によってシステムでシミュレートできるもの。

チューリング等価性は、システムが計算可能な関数の3番目の基準を満たしていることを意味するだけですが、ほとんどの場合、論理の正式なシステムまたはプログラミング言語(実際にそれらが異なる範囲)のいずれかで、私たちが気にする最初の基準です。

これは非常に非公式の説明ですが、本質的なアイデアはより正確に打ち抜くことができます。前述のLtUスレッドには、同様のラインに沿った既存の作業への参照いくつかあり ます


シェーンフィンケルの組み合わせ論理と教会のλ計算の両方は、論理的推論の抽出された抽象化として当初考案されたため、その構造は論理的推論に非常にきちんとマッピングされ、その逆も同様です。彼らはまたの仮定運ぶextensionalityイータ削減ルールで記述などを、: λx. f x、どこxで発生していないf、ちょうどと等価であるfのみ。

実際には、拡張性の非常に厳密な概念はあまりにも制限的である可能性がありますが、抑制されない意図性は部分式についてのローカルな推論を困難または不可能にします。

SF計算は、プリミティブ操作として、限定的な形式の内包的分析を提供する修正されたコンビネーター計算です。プリミティブ値または正規化されていない式ではなく、部分的に適用された式を分解します。これは、MLスタイルのプログラミング言語やLispに見られるマクロに見られるパターンマッチングなどのアイデアにうまくマッピングされますが、「意図的な」用語を評価するためのインタープリターを効果的に実装しないと、SK計算またはλ計算に記述できません。

要約すると、SF計算は、可能な限り最高の表現がSF計算インタープリターの実装を含む可能性が高いという意味で、λ計算で直接表現することはできず、その理由は根本的な意味の違いです:構造、または純粋に外部の動作によって定義されていますか?


チューリングマシンで計算をどのように表現できるかについて、さまざまな見解があるということですか?
ホーキー

5

バリージェイのSF計算では、適用される用語の構造を調べることができますが、これは機能しません。ラムダ計算と従来の組み合わせロジックは純粋に機能するため、これを行うことはできません。

純度に違反することを行うラムダ計算の多くの拡張機能があり、そのほとんどは、状態、コントロール(たとえば、継続を介して)、または論理変数を追加するなど、書き換え戦略をある程度修正する必要があります。


2
Lambda the Ultimateでの詳細な議論/議論も参照してください:lambda-the-ultimate.org/node/3993
sclv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.