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)
我有以下 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)