λ計算についての哲学的質問と呼ぶものがあります。
λ-calculusを探索すると、そこでできるすべてのことを見て驚くでしょう。整数、算術演算、ブール値、if-then-elseステートメント、ループ、再帰関数などを定義できます。計算的に完全であることが証明されていると思います。
しかし、反対に、λ-calculusの関数で何ができるかを考えると、できることは関数を渡すだけで別の関数が返されることです。そして、そのプロセスは決して終わりません。
では、どのようにして計算から結果を抽出できますか?
式の結果がfunctionであると仮定しますf
。あなたf
が期待したものであるかどうかを確認したい。あなたはそれをテストし、あなたが知っている機能を取り、それに適用f
して受け取ることができg
ます。しかし、チェックg
が正しいためには、何をするかを検証する必要がありますg
。そして、最初からやり直します。では、どうすれば何を伝えることができますf
か?
λ計算のすべての関数を単一の関数である恒等関数I = λx.x
に置き換えることができ、すべてがλ計算で説明されているように機能するように思えます。教会の数字3
が与えられf
てx
戻ってきますf(f(f(x)))
。しかし、f
とx
しかできないのでI
、戻りますI
。 I
に適用されI
、I
を返しますI
。だから、I
満たすの定義3
。「ブール」(λxy.x)
と(λxy.y)
なりますが必要2つの引数、I
およびI
その両方のブール値が返されますI
。それぞれが定義どおりに動作する場合でも、それぞれがIDと同等です。
それでは、どのように違いを生みますか?λ計算が単一の関数以上のものを扱うことをどのように示しますか?
アイデンティティの概念はありますか?評価せずにすぐに関数を識別できますか?2つの関数が等しいかどうかをテストする方法がないことが証明されたと思います。
または、λ計算は関数ではなく、関数の正式な記述についてですか?つまり、λ式は関数が行うことを定義するだけでなく、関数が操作するデータでもあることを意味します。したがって、を記述する場合A B
、には適用さA
れませんB
が、文字列で記述されA
た関数を、B
別の形式定義を返すことに含まれる関数の形式定義に適用します。
λ計算では実際に何が起こっているのですか?それが扱う数学的オブジェクトは何ですか?
ファローアップ:
OK、以下の回答から、λ計算は数学的な意味での関数ではなく、λ式として表現できる関数のサブセットに関するものであるようです。または、λ表現の操作についてさらに詳しく説明します。