我有以下lambda演算:
1)λx。 katze(x)(加菲猫)
2)λP。 λx P(x)(茶)
3)λy。 λx喜欢(x,y)(Mia)
如何通过Beta减少来减少它们?
我的解决方案:
1)katze(加菲猫)
2)茶
3)喜欢(Mia)
答案 0 :(得分:0)
执行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函数。由于您有一个单个输入,因此您只需要减少一个函数-第一个函数,剩下的一个。您可以想到剥掉外层而露出内层。
在λ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)