教会の数字:どのようにラムダ計算にゼロをエンコードするには?
-
18-09-2019 - |
質問
私はラムダ計算を学んでいますが、私は数0のエンコードを理解しているようだカントます。
どのように「の引数の上のゼロ回の関数と第二の値を取り込んで、関数を適用機能」ゼロ?ゼロをエンコードする他の方法はありますか?ここでは誰も私には0を符号化する助けてもらえますか?
解決
A「の引数にゼロ回関数と第二の値を取り込んで、関数を適用機能」、もちろん、ゼロでありません。これは、ゼロののエンコーディングのです。あなたはプレーンなラムダ計算に対処するときには、何らかの方法で数字(だけでなく、他のプリミティブ型)をエンコードする必要があり、これらのタイプごとに規定されるいくつかの要件があります。例えば、自然数のための1つの要件は、与えられた数に1を追加できるようにすることであり、もう一つは、(あなたが詳細をお知りになりたい場合は、「ペアノ算術」を探してください)大きな数字からゼロを区別できるようにすることです。ダリオが引用された人気のエンコードはあなたにこれら二つのことを与え、それはまた何か(f
引数としてエンコード)N回行う関数による整数N表している - 。ナチュラルを使用する自然な方法の一種です
可能であり、他のエンコーディングがあります - たとえば、あなたがリストを表すことができたら、あなたはN項目のリストとしてNを表すことができます。これらのエンコーディングは、彼らの長所と短所を持っているが、上記の一つは、これまでで最も人気の一つです。
他のヒント
を参照してください。ウィキペディアするます:
0 ≡ λf.λx. x
1 ≡ λf.λx. f x
2 ≡ λf.λx. f (f x)
3 ≡ λf.λx. f (f (f x))
...
n ≡ λf.λx. fn x
、あなたはおそらくすでにの引数1 の* arg2の* xは何によって置き換えられているので、のarg2ののに減らし、かつますそのλxy.yを知っています残り(λy.y)は恒等関数である。
あなたは他の多くの方法(すなわち、異なる規則を考え出す)でゼロを書くことができますが、λxy.y.を使用するための十分な理由がありますたとえば、あなたは(あなたがそれに後継機能を適用した場合、あなたは関数λabc.b(ABC)で1、2、3などを取得することを、あなたはλxy.x得るので、ゼロは、最初の自然数になるようにyとしたいです)、λxy.x(X(Y))、λxy.x(X(X(Y)))等、他の言葉では、整数系を得る。
さらに、あなたはゼロが追加に関して中立的要素になりたいです。私たちの後継関数Sの場合:=λabc.b(ABC)、我々は、すなわち、のN の+ * M *としてのN のS M を定義することができます N 回 M の後継機能のアプリケーション。我々のゼロλxy.y満たすこの、両方0 S M と M S 0 M に減らします。