教会の数字:どのようにラムダ計算にゼロをエンコードするには?

StackOverflow https://stackoverflow.com/questions/1481950

  •  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 に減らします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top