Lambda 微积分的 Beta 归约

Beta reduction of Lambda Calculus

我有以下 lambda 演算:

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

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

3) λy 。 λx。喜欢(x,y)(米娅)

如何使用 Beta 缩减来减少它们?

我的解决方案:

1) katze (加菲猫)

2) 茶

3) 喜欢(米娅)

执行 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)