【Programming Languages And Lambda calculi】4.2 Lambda演算的语法与约化

4.2 Lambda演算的语法与约化

Lambda演算中表达式的一般语法由M(或别名N和L)定义:

下述为 M 成员的例子:
在这里插入图片描述
第一个例子,x,没有特别的直观意义,因为x是未定义的。类似, (x y) 表示“x应用到y”,但是我们没法得知更多,因为x和y也都是未定义的。作为对比,(λx.x)表示恒等函数。前两个例子和后一个例子的区别为在前两个例子中,在表达式中的 x 是 自由 的,在后一个例子中 x 是被约束的。

在关系 FV 中,将表达式中的 自由变量 集合映射到一个表达式中。直观上, 如果x在任何 (λx.x) 之外,则它是一个自由变量。更加正式地说,我们将 FV 关系定义如下:
在这里插入图片描述

FV 的例子如下:
在这里插入图片描述

在定义一个Lambda演算表达式的约化关系之前,我们还需要一个辅助关系来处理可变替换。关系 _[_ ← _] 映射了一个原表达式,一个变量一句一个参数表达式到一个目标表达式。目标表达式和原表达式一致,除了表达式的自由实例被参数所替代了:
在这里插入图片描述

_[_ ← _] 的例子:
在这里插入图片描述

最终,定义Lambda演算的一般性约化关系 n ,我们首先定义三个简单约化关系,α, β, 和 η:
在这里插入图片描述

  • α 关系重命名一个形参。它将类似 (λx.x) (λy.y)这种实际上相同的函数编码,并用不同的名字表示形参。
  • β 关系是主约化关系,为函数应用编码。
  • η 关系将,“如果一个函数 f 接收它的参数并立即应用这个参数到 g 上,则使用 f 函数和使用 g 函数是一致的”这一特性编码。

一般性约化关系 n 是上述三个关系的并集:
n   =   α ∪ β ∪ η n \ =\ \alpha\cup\beta\cup\eta n = αβη
一如往常,我们定义 →n 为 n 的兼容闭合,→→n 为 →n 的自反-传递闭合,而 =n 为 →→n 的对称闭合。我们同时定义 →nαnβnη 作为 α, β, η 的兼容闭合关系。

注:通常兼容闭合关系被写作→α 但是我们为了强调并集关系,用→nα表示。

下例为一种 ((λx.((λz.z) x)) (λx.x)) 的约化方式,下划线部分为 redex (表示被 n 关系约化的部分):
在这里插入图片描述

下面是另一种约化方式:
在这里插入图片描述

表达式中的括号通常是多余的,并且它们会使长表达式难以阅读。因此,我们采用了一些删除括号的约定:

  • 应用关联左侧: M1 M2 M3 表示 ((M1 M2) M3)
  • 应用比抽象优先级高: λX.M1 M2 表示 (λX.(M1 M2))
  • 连续的Lambda表达式可以被折叠: λXY Z.M 表示 (λX.(λY.(λZ.M)))

利用这些约定,((λx.((λz.z) x)) (λx.x)) 可以被缩写为 (λx.(λz.z) x) λx.x, 并且,上述的第一种约化可以简化表示为:
在这里插入图片描述

练习 4.1

将下述表达式用 →n 约化,直到没有任何 →nb 可以约化。

  • (λx.x)
  • (λx.(λy.y x)) (λy.y) (λx.x x)
  • (λx.(λy.y x)) (λx.x x) (λx.x x))
题解
  • (λx.x) →n (λx.x)

  • (λx.(λy.y x)) (λy.y) (λx.x x)

    n (λy.y (λy.y)) (λx.x x)

    n (λy.y) (λx.x x)

    n (λy.y) (λy.y)

    n (λy.y)

  • (λx.(λy.y x)) (λx.x x) (λx.x x))

    n (λy.y ((λx.x x) (λx.x x)))

    n … (no more →nβ is possible)

练习 4.2

证明下述等式成立

  • (λx.x) = (λy.y)
  • (λx.(λy.(λz.z z) y) x) (λx.x x) = (λa.a ((λg.g) a)) (λb.b b)
  • λy.(λx.λy.x) (y y) = λa.λb.(a a)
  • (λf.λg.λx.f x (g x)) (λx.λy.x)(λx.λy.x) = λx.x
题解
  • (λx.x) →nα (λy.y)

  • (λx.(λy.(λz.z z) y) x) (λx.x x)

    nη (λy.(λz.z z) y) (λx.x x)

    nβ (λy.y y) (λx.x x)

    (λa.a ((λg.g) a)) (λb.b b)

    nβ (λa.a a) (λb.b b)

    nα (λy.y y) (λb.b b)

    nα (λy.y y) (λx.x x)

    左右相等

  • λy.(λx.λy.x) (y y)

    nα λa.(λx.λy.x) (a a)

    nβ (λa.λy).(a a)

    nβ (λa.λb).(a a)

  • (λf.λg.λx.f x (g x)) (λx.λy.x)(λx.λy.x)

    nβ (λg.λx.(λx.λy x) x (g x)) (λx.y.x)

    nβ (λg.λx.(λy x) x (g x)) (λx.y.x)

    nβ (λg.λx.x) (λx.y.x)

    nβ λx.x

猜你喜欢

转载自blog.csdn.net/qq_35714301/article/details/113811502