質問

私はそれを理解しています 教会の数 $ c_n $は$ lambda sのように見えます。 Lambda Z。 s $(... n times ...)$ s ; z $。これは、「関数$ s $が$ n $ $ n $ function $ z $」にすぎないことを意味します。

$ mathtt {times} $関数の可能な定義は次のとおりです。$ mathtt {times} = lambda m。 lambda n。 lambda s。 m ; (n ; s)$。身体を見ると、機能の背後にあるロジックがわかります。しかし、私が評価を始めたとき、私は立ち往生します。例で説明します:

$$ begin {align*}( lambda m。 lambda n。 lambdas。m;(n ; s))( lambda s 。 lambda zs ; s ; s ; z) mspace {-4em} to^*& lambda s。 ( lambda s。 lambda zs ; s ; z); (( lambda s。 lambda zs ; s ; s ; z); s) to^*& lambda s。 ( lambda s。 lambda zs ; s ; z); ( lambda zs ; s ; s ; z) to^*& lambda s。 lambda z。( lambda zs ; s ; s ; z);( lambda zs ; s ; s ; z)

この状況で、最初に$( lambda zs ; s ; s ; z); z $を適用した場合、目的の結果になります。ただし、$( lambda zs ; s ; s ; z)私は間違った結果を得る:

$ lambda s。 lambda z。( lambda zs ; s ; s ; z);( lambda zs ; s ; s ; z); z to lambda lambda z。(s ; s ; s ;( lambda zs ; s ; s ; z); ; z $

私はもはやこれを減らすことができません。私は何が間違っているのですか?結果は$ lambda sになります。 lambda zs ; s ; s ; s ; s ; z $

役に立ちましたか?

解決

あなたの削減は正しいと思います(しかし、私はそれを目で覚めただけです)。最後に、$( lambdaz。SSSZ)$を$ z $に適用することはできません。これは用語には決して表示されません。 $ lambda z。 ffz $は$ lambda zです。 (ff)z $、$ lambda zではなく。 f(fz)$。 Lambda-Calculusの関数は、単一の引数を取ります。それらは効果的です カレー: :2 argument関数は、最初の引数を取り、2番目の引数を取り、結果を返す新しい1つのargument関数を返す1つのargument関数として実装されます。

教会の数字を定義するとき、あなたは同じ間違いを犯しました。 $ n $の教会数字は、関数$ n $時間を作成することに基づいています。 「関数$ s $は、$ n $をfunction $ z $ z $ lambda sに適用しました。 Lambda Z。 s(s(…s :z)…))$。あなたが書いたのは、関数$ s $ applied $ n-1 $ function $ s $に、そして最後に$ z $までです。

$ 2 times 3 $は$( lambda mns。m(ns))( lambda sz。s(s :z))( lambda sz。s(s :z)))です。 $。 $ lambda s zに削減されることを確認させます。 s(s(s(s(s :z)))))$。

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