Math Lambda演算的Beta约化
我有以下lambda演算: 1) λx。卡茨(x)(加菲尔德) 2) λp。λx。P(x)(茶) 3) λy。λx。喜欢(x,y)(Mia) 我如何通过Beta减少来减少它们 我的解决方案: 1) 卡茨(加菲猫) 2) 茶Math Lambda演算的Beta约化,math,lambda,lambda-calculus,Math,Lambda,Lambda Calculus,我有以下lambda演算: 1) λx。卡茨(x)(加菲尔德) 2) λp。λx。P(x)(茶) 3) λy。λx。喜欢(x,y)(Mia) 我如何通过Beta减少来减少它们 我的解决方案: 1) 卡茨(加菲猫) 2) 茶 3) likes(Mia)执行beta缩减时,用提供的值替换lambda函数的绑定变量。它的表示法是[param:=value],然后选择给定的第一个变量 在这种情况下 λx。卡兹(x)(加菲猫)->katze(加菲猫)降价是正确的。我们将x变量替换为Garfield,并在过
3) likes(Mia)执行beta缩减时,用提供的值替换lambda函数的绑定变量。它的表示法是
[param:=value]
,然后选择给定的第一个变量
在这种情况下
λx。卡兹(x)(加菲猫)
->katze(加菲猫)
降价是正确的。我们将x
变量替换为Garfield
,并在过程中删除了λx
,只保留了内部的表达式。以下是将采取的步骤:
λx。卡泽(x)(加菲猫)
=katze(x)[x:=Garfield]
=katze(加菲猫)
然而,另外两个是不正确的。您忘记了有一个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。茶(x)
或不带括号:
λp。λx。P(x)(tea)
=λx。P(x)[P:=tea]
=λx。茶(x)
至于最后一个函数,它仍然存在相同的问题,即当只给出一个输入时,您要删除两个函数。正确的还原步骤是:
λy。λx。喜欢(x,y)(Mia)
=λx。喜欢(x,y)[y:=Mia]
=
λx。喜欢(x,Mia)
执行beta缩减时,用提供的值替换绑定变量到lambda函数。它的表示法是[param:=value]
,然后选择给定的第一个变量
在这种情况下
λx。卡兹(x)(加菲猫)
->katze(加菲猫)
降价是正确的。我们将x
变量替换为Garfield
,并在过程中删除了λx
,只保留了内部的表达式。以下是将采取的步骤:
λx。卡泽(x)(加菲猫)
=katze(x)[x:=Garfield]
=katze(加菲猫)
然而,另外两个是不正确的。您忘记了有一个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。茶(x)
或不带括号:
λp。λx。P(x)(tea)
=λx。P(x)[P:=tea]
=λx。茶(x)
至于最后一个函数,它仍然存在相同的问题,即当只给出一个输入时,您要删除两个函数。正确的还原步骤是:
λy。λx。喜欢(x,y)(Mia)
=λx。喜欢(x,y)[y:=Mia]
=
λx。喜欢(x,Mia)
谢谢。现在我可以为自己进行Beta降低。谢谢。现在我可以为自己执行Beta减少。