溶解 lambda 演算

Dissolve lambda calculus

我有以下 lambda 演算:

(λx. + (- x 1)) 9 3

正确的 beta reduce 是:

+ (- 9 1) 3

我弄错了,把 9 换成了 3:

+ (- 3 1) 9

我得到了相同的结果。

直到将它与解决方案进行比较,我才意识到这是错误的。

我是否必须采用最接近的替换,在本例中为 9?

是的,您始终需要将 lambda 应用于其 "first"(最左边的)参数。

理论上不存在多参数,只有单参数的应用。仍然,写是很常见的 f M N O 重复申请 (((f M) N) O)。请注意 f 如何将 M 作为其参数。

在一般情况下,如果您以不同的顺序进行申请,您将不会得到相同的结果。你的例子只是一个事件。

你在这个算术例子中得到相同的答案是算术的巧合,而不是 lambda 演算。

如果你写了更多的空格,使术语结构更清晰,就更容易看出是怎么回事了

(\x. + (- x 1)) 9 3

意味着,用无偿的额外括号显示解析树,

((\x. (+ (- x 1))) 9) 3

因为应用程序关联到左侧("rather as we all did in the sixties" - Roger Hindley)。

所以,用 3 代替 x 的位置是错误的。我们只有

( (\x. (+ (- x 1))) 9 ) 3
  =
(+ (- 9 1)) 3
  =
(+ 8) 3
  =
11