Math Lambda演算的Beta约化

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,并在过

我有以下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
,并在过程中删除了
λ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减少。