教会の数字を含むラムダ計算の評価


10

教会の数字 がλs のように見えることを理解しています。λ Z 。s(... n回...)。何よりも「機能よりも、この手段適用されたファンクション回」。cnλs.λz.ss n zszsnz

関数の可能な定義は次のとおりです:。身体を見ると、その機能の背後にある論理がわかります。しかし、評価を開始すると、行き詰まります。例を挙げて説明します。TはiがmはE 、S = λ M 。λ nは。λ sの。メートルtimestimes=λm.λn.λs.m(ns)

(λメートル。λん。λs。メートル(んs))(λs。λz。ssz)(λs。λz。sssz)→∗λs。(λs。λz。ssz)((λs。λz。sssz)s))→∗λs。(λs。λz。ssz)(λz。sssz)→∗λs。λz。(λz。sssz)(λz。sssz)z

この状況で、最初にを適用すると、目的の結果が得られます。ただし、最初に適用すると、アプリケーションが左から関連付けられているため、間違った結果:(λ Z 。S(λz。sssz)z(λz。sssz)(λz。sssz)

λs。λz。(λz。sssz)(λz。sssz)z→λs。λz。(sss(λz。sssz))z

これを減らすことはできません。何が悪いのですか?結果はλs。λz。ssssssz


あなたの最初の用語の教会の数字は正しくありません。図2に示すように表されますではなくλ S 。λ Z 。s s z。λs。λz。s(sz)λs。λz。ssz
— Uday Reddy

回答:


7

私はあなたの削減は正しいと思います(私はそれを目撃しただけです)。終わりに、あなたは適用することはできませんに、Z、この用語には表示されません。λ Z 。F F zはあるλ Z 。(F 、F )Zではなくλ Z 。f (f z )。ラムダ計算の関数は単一の引数を取ります。彼らは効果的にカレーされています(λz。sssz)zλz。ffzλz。(ff)zλz。f(fz):2つの引数を持つ関数は、最初の引数を取り、2番目の引数を取り、結果を返す新しい1つの引数を持つ関数を返す1つの引数を持つ関数として実装されます。

教会の数字を定義するときにも同じ間違いをしました。のチャーチ数は、関数をn回構成することに基づいています。「関数の適用されたn個の関数倍Z」λ S 。λ Z 。s (s (… sんんsんz。あなたが書いたのは、関数 sに n − 1回適用された関数 sであり、最後に zに適用されたものです。λs。λz。s(s(…sz)…))sん−1sz

ことである(λ M N S 。M (N S ))(λ S 、Z 。S (S2×3。私はあなたがそれが軽減していることを確認してもらおう λ sのZ 。s (s (s (s (s (s(λメートルんs。メートル(んs))(λsz。s(sz))(λsz。s(s(sz)))。λsz。s(s(s(s(s(sz)))))


あなたの段落に関する限り、あなたは正しいですし、私はこれを知っていました。連想を正しく適用することで正しい結果が得られたことに、私はただ驚いた。2番目の段落まで:あなたは正しいです。中括弧を使用しなかったのは、アプリケーションの左結合性のため、やはり誤りでした。ここでもう一度全体を減らし、中括弧がないためにエラーが発生したかどうかを確認します。
— codd

ありました。あなたは私の記法が間違ったアプリケーションの順番を示唆していたことを指摘しました!あなたの答えを受け入れる。
— codd
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.