次の手順に従って、ラムダ式を削減できます。
- 間違いを避け、関数の適用がどこで行われるかをより明確にするために、式を完全に括弧で囲みます。
- 関数の適用を見つけます。つまり、任意の有効な識別子であり、任意の有効な式である可能性の
(λX. e1) e2
あるパターンの出現を見つけます。X
e1
e2
(λx. e1) e2
で置き換えて関数を適用します。は、 inの自由出現を で置き換えた結果e1'
です。e1'
x
e1
e2
- パターンが発生しなくなるまで、2 と 3 を繰り返します。これにより、正規化されていない式の無限ループが発生する可能性があるため、1000回程度の反復後に停止する必要があることに注意してください;-)
あなたの例では、式から始めます
((λm. (λn. (λa. (λb. (m ((n a) b)) b)))) (λf. (λx. x))) (λf. (λx. (f x)))
ここで、部分式は、 、(λm. (λn. (λa. (λb. (m ((n a) b)) b)))) (λf. (λx. x))
のパターンに適合します。したがって、置換後に が得られ、式全体が次のようになります。X = m
e1 = (λn. (λa. (λb. (m ((n a) b)) b))))
e2 = (λf. (λx. x))
(λn. (λa. (λb. ((λf. (λx. x)) ((n a) b)) b)))
(λn. (λa. (λb. ((λf. (λx. x)) ((n a) b)) b))) (λf. (λx. (f x)))
X = n
これで、 、 、e1 = (λa. (λb. ((λf. (λx. x)) ((n a) b)) b))
を使用して式全体にパターンを適用できますe2 = (λf. (λx. (f x)))
。したがって、置換後、次のようになります。
(λa. (λb. ((λf. (λx. x)) (((λf. (λx. (f x))) a) b)) b))
((λf. (λx. (f x))) a)
これでパターンに適合し、 になり(λx. (a x))
、次のようになります。
(λa. (λb. ((λf. (λx. x)) ((λx. (a x)) b)) b))
今回は、パターンを に適用できます((λx. (a x)) b)
。これは に減少し(a b)
、次のようになります。
(λa. (λb. ((λf. (λx. x)) (a b)) b))
にパターンを適用すると((λf. (λx. x)) (a b))
、 に還元されて次のように(λx. x)
なります。
(λa. (λb. b))
これで完了です。