Lambda演算归约/求值表达式

Lambda演算归约/求值表达式,lambda,lambda-calculus,Lambda,Lambda Calculus,我正在读这些关于lambda演算的书,我在一开始减少/计算其中一个表达式时遇到了一些问题 特别是功能 (λf.λx.f(f(x))(λy.y^2)(5) 我该怎么开始呢?他说答案是625。我的数学直觉告诉我们这样做: (λf.λx.f(f(x)))(5^2)他之前说过f(x)是地图 x |->x^2 所以f(f(x))是f的组成,它是f=f=(f)^2=x^4 所以进一步减少我们得到的lambda表达式 (λf.λx.x^4)(5^2) 然后我们将25插入x^4,得到25*25*25*25=39

我正在读这些关于lambda演算的书,我在一开始减少/计算其中一个表达式时遇到了一些问题

特别是功能 (λf.λx.f(f(x))(λy.y^2)(5)

我该怎么开始呢?他说答案是625。我的数学直觉告诉我们这样做: (λf.λx.f(f(x)))(5^2)他之前说过f(x)是地图

x |->x^2

所以f(f(x))是f的组成,它是f=f=(f)^2=x^4

所以进一步减少我们得到的lambda表达式

(λf.λx.x^4)(5^2)

然后我们将25插入x^4,得到25*25*25*25=390625

(λf.(390625))

当我们到达这里时,我完全不知道这个表达式代表什么


我误解了Lambda演算的哪一部分?我减少表达式的方法正确吗?

我对lambda演算一无所知,所以如果我错了,请随意投票让我忘记:)另外,我的术语将被取消,希望有经验的人能回答这个问题。这可能应该被张贴到任何地方

前面给出的是一个示例,并不是为了继续解决后续问题

首先,看起来您没有正确复制表达式。根据PDF文件,它是:

现在,操作顺序很重要(括号第一!)

我们从以下几点开始:

我们在左边提供了lambda项和参数。这意味着f被平方函数代替

现在我们有:

编辑:

给出的理由是,我们可以将整个表达式写成:

如果我们看第一部分,更容易看出这适用于第一个论点:

将正常顺序(最左边的第一个)β还原为正常形式:

   (λ f. (λ x. f (f x))) (λ y. y ^ 2) 5
=  (λ x. (λ y. y ^ 2) ((λ y. y ^ 2) x)) 5
=  (λ x. ((λ y. y ^ 2) x) ^ 2) 5
=  (λ x. (x ^ 2) ^ 2) 5
=  (5 ^ 2) ^ 2
=  25 ^ 2
=  625

但是,像
2
5
^
这样的数字原语并不是语法的一部分。直观的传统代数约简规则(如指数乘法)不适用;只有beta-可能还有eta减少。

我们如何知道我们提供的参数是最左边的lambda项?您能更明确地编写该操作吗?同样地,你说参数(λy.y^2)是最左边的项(λf.λx.f(f(x)),你会怎么完整地写呢?据我所知,lambda演算的符号省去了额外的括号,以便于阅读。每个具有多个参数的函数可以分解为具有单个参数的较小函数,然后在一个称为currying的过程中进行计算。这里有这样一句话:“Currying是一种处理多个参数的能力。基本上,如果lambda函数有多个绑定变量,我们可以通过以左关联的方式逐个应用参数来简化它。”。