本質的にλ計算とは何ですか?


11

λ計算についての哲学的質問と呼ぶものがあります。

λ-calculusを探索すると、そこでできるすべてのことを見て驚くでしょう。整数、算術演算、ブール値、if-then-elseステートメント、ループ、再帰関数などを定義できます。計算的に完全であることが証明されていると思います。

しかし、反対に、λ-calculusの関数で何ができるかを考えると、できることは関数を渡すだけで別の関数が返されることです。そして、そのプロセスは決して終わりません。

では、どのようにして計算から結果を抽出できますか?

式の結果がfunctionであると仮定しますf。あなたfが期待したものであるかどうかを確認したい。あなたはそれをテストし、あなたが知っている機能を取り、それに適用fして受け取ることができgます。しかし、チェックgが正しいためには、何をするかを検証する必要がありますg。そして、最初からやり直します。では、どうすれば何を伝えることができますfか?

λ計算のすべての関数を単一の関数である恒等関数I = λx.xに置き換えることができ、すべてがλ計算で説明されているように機能するように思えます。教会の数字3が与えられfx戻ってきますf(f(f(x)))。しかし、fxしかできないのでI、戻りますIIに適用されIIを返しますI。だから、I満たすの定義3。「ブール」(λxy.x)(λxy.y)なりますが必要2つの引数、IおよびIその両方のブール値が返されますI。それぞれが定義どおりに動作する場合でも、それぞれがIDと同等です。

それでは、どのように違いを生みますか?λ計算が単一の関数以上のものを扱うことをどのように示しますか?

アイデンティティの概念はありますか?評価せずにすぐに関数を識別できますか?2つの関数が等しいかどうかをテストする方法がないことが証明されたと思います。

または、λ計算は関数ではなく、関数の正式な記述についてですか?つまり、λ式は関数が行うことを定義するだけでなく、関数が操作するデータでもあることを意味します。したがって、を記述する場合A B、には適用さAれませんBが、文字列で記述されAた関数を、B別の形式定義を返すことに含まれる関数の形式定義に適用します。

λ計算では実際に何が起こっているのですか?それが扱う数学的オブジェクトは何ですか?


ファローアップ:

OK、以下の回答から、λ計算は数学的な意味での関数ではなく、λ式として表現できる関数のサブセットに関するものであるようです。または、λ表現の操作についてさらに詳しく説明します。


2
最後の質問を、少し意見が少ないものに言い換えてもらえますか?これについては、意見のない堅実な回答が必要です。
テラスティン14

私の教育から、λ計算は私の脳を傷つけるためだけに存在します。どうやってそのクラスをそのまま通したかはまだわかりません。

回答:


9

ラムダ計算用語の意味的等価性を決定することは実際に不可能です。これはライスの定理の1つの応用です。ただし、用語を構文的に比較するのは簡単です。つまり、まったく同じ構造を持っているかどうかをテストします(「文字列表現」が同じかどうかをテストします)。結果を得るために必要なのはそれだけです。

たとえばn = f(i)、自然から自然への関数を計算するには、iラムダ計算関数のパラメーターとして教会エンコードを提供し、停止するまで縮小規則を適用し、結果の用語を調べます。教会の数字の構造と一致する場合、nエンコードする数字を抽出します。それがあなたの結果です。結果の用語が教会の数字のように見えない場合、またはリダクションが停止しない場合、関数はで未定義iです。

用語は事実上、「コード」と「データ」として二重の義務を果たします。それは特別なことではありません:チューリングマシンのテープ(アルファベット上の文字列)は---そして頻繁に---チューリングマシンまたはその一部のエンコーディングとして解釈されます。同様に、フォンノイマンマシンのメインメモリのビットは、プログラムのエンコードまたは他の何かのエンコードのいずれかです。または両方を一度に。異なるのは「デフォルトのパースペクティブ」だけです。


教会の数字を含む計算の結果の表現は、常に(λfx.f(f(fx)))のような標準形式に解決されますか?または、同じ数字の異なる同等の式を取得できますか?
フロリアンF 14

@FlorianFこのような非正規(アルファ等価まで)の用語があることはほぼ確実ですが、もしそうであれば、プログラムを注意深く構築することでそれらを避けることができます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.