回答:
ラムダ項はβ縮約規則によって簡略化されます:
あなたは部分項を持っている場合、それはのように見えることを意味し、(と呼ばれる可約式は)あなたがでそれを置き換えることができますで、との代わりに。交換しばしば呼ばれるコント。(やような大文字は用語を示すために使用されます。)
あなたの場合、最初の削減は次のようになります:
いくつかのメモ:
ラムダの抽象化と削減を表現する別の方法。入力の順序に基づいて、文字による用語の代わりにインデックスが使用されます。抽象化は[]で囲まれています
(λmn.(λsz.ms(nsz)))(λsz.sz)(λsz.sz)
m -> 1, n -> 2, s -> 3, z -> 4
(λmn.(λsz.ms(nsz))) = [1 3 (2 3 4)]
(λsz.sz) = [1 2]
[1 3 (2 3 4)][1 2][1 2]
[[1 2] 2 (1 2 3)][1 2] ;1 was replaced with [1 2], remaining terms decremented
[[1 2] 1 ([1 2] 1 2)] ;1 was replaced with [1 2], remaining terms decremented
[1 ([1 2] 1 2)] ;1 2 was replaced by 1 ([1 2] 1 2)]
[1 (1 2)] ;1 2 was replaced by 1 2
(λmn.m(mn))
上記の表記は、ラムダ抽象化を表現するための、よりコンパクトで明確な方法です。複合抽象化は自動的に単一の正規形に変換され、アルファ変換は必要ありません。
バインドされた用語には単一の正のインデックスが使用されます。負のインデックスはキルタームに使用されます。負のインデックスは、大きさが小さい順に最後に配置されます。
I = λx.x = [1]
K = λxy.x = [1 -2]
KI = λyx.x = [2 -1]
S = λxyz.xz(yz) = [1 3 (2 3)]
SをKに適用:
[1 3 (2 3)][1 -2]
[[1 -2] 2 (1 2)] ;1 was replaced with [1 -2], remaining terms decremented
[[.2 -1] (1 2)] ;reducing: 1 replaced by .2*, -2 decremented (in magnitude)
[2 -2 -1] ;(1 2) bound terms become kill terms due to -1.
[2 -1] = KI ;-2 kill term is void due to surviving 2 term
* the . notation signifies the bound term is from the outer abstraction
and must be used to prevent decrementing and double replacement of the
term until the substitution of all terms in the abstraction is complete.
[2 -1][anything] ;applying KI to anything
[1] = I ;yeilds I, therefor SK[anything] = [1] = I
KをKに適用:
[1 -2][1 -2]
[[1 -2] -1] ;kill terms are absorbed and also increase the magnitude of bound terms
[2 -3 -1] ;applying this result to anything yields K.
[2 -3 -1][anything]
[2 -1]