我有以下lambda演算:
1)λx。 katze(x)(加菲猫)
2)λP。 λx P(x)(tea)
3)λy。 λx点赞(x,y)(Mia)
我如何通过减少Beta来减少它们?
我的解决方案:
1)喀兹(加菲猫)
2)茶
3)个赞(Mia)
执行beta减少时,请使用提供的值将绑定变量替换为lambda函数。表示法为[param := value]
,然后选择给出的第一个变量。
λx . katze(x)(Garfield)
-> katze (Garfield)
减小是正确的。我们用x
变量代替了Garfield
,并在过程中删除了λx
,只保留了表达式。这是将要采取的步骤:
λx . katze(x)(Garfield)
= katze(x)[x := Garfield]
= katze(Garfield)
但是,其他两个都不正确。您会忘记自己拥有一个lambda函数,其中的表达式是另一个lambda函数。由于您有一个[[single输入,因此您只需要减少one函数-第一个函数,剩下的另一个。您可以将其剥离掉外层而露出内层。
在λP . λx . P(x)(tea)
的情况下,可以更好地表示为(λP . (λx . P(x)))(tea)
,其中现在每个lambda函数都用方括号括起来。由于我们仅提供一个输入tea
,因此我们仅使用参数P
来解析外部函数(为清楚起见,保留了方括号):(λP . (λx . P(x)))(tea)
= (λx . P(x))[P := tea]
= (λx . P(x))
= λx . tea(x)
或不带括号:
λP . λx . P(x)(tea)
= λx . P(x)[P := tea]
= λx . tea(x)
至于最后一个功能,当仅给出一个输入时,仍然具有删除两个功能的相同问题。正确的减少步骤是:
λy . λx . likes(x, y)(Mia)
= λx . likes(x, y)[y := Mia]
= λx . likes(x, Mia)