Beta减少Lambda微积分

时间:2020-01-21 11:52:44

标签: math lambda lambda-calculus

我有以下lambda演算:

1)λx。 katze(x)(加菲猫)

2)λP。 λx P(x)(茶)

3)λy。 λx喜欢(x,y)(Mia)

如何通过Beta减少来减少它们?

我的解决方案:

1)katze(加菲猫)

2)茶

3)喜欢(Mia)

1 个答案:

答案 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)