Lambda微积分中的“应用顺序”和“正常顺序”


14

应用顺序:在评估函数本身之前,请始终充分评估函数的参数,例如-

(λx.x2(λx.(x+1)  2)))(λx.x2(2+1)) (λx.x2(3)) 32  9

正常顺序:表达式将从外部减少,如-

(λx.x2(λx.(x+1) 2)) (λx.(x+1)   2)2 (2+1)2 32  9

M=(λx.y (λx.(x  x) λx.(x  x)))

为什么在应用顺序 无限循环, 而在正常顺序M y下M
My


1
您是否尝试过评估它们?不清楚是第一种还是第二种情况?
KarolisJuodelė13年

@KarolisJuodelė:1日
URL87 2013年

1
Lambda表达式不应该用括号标记,以标记第一个Lambda表达式的结尾和参数的开头,例如:Let M = (λx.y) ((λx.(x x)) λx.(x x))
mattgately,

Answers:


7

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

λx.(x  x) λx.(x  x)λx.(x  x) λx.(x  x)
λx.(x  x)

16

(KyΩ)Kyλx.yyΩ=(λx.(xx)λx.(xx))ΩΩΩ

ΩMMΩMΩ

KyKy(KyΩ)yKyNyN

这种情况说明了一个更普遍的现象:如果该术语严格归一化,那么应用阶约简只会找到一种范式,而如果存在一则正规阶约简总是找到该范式。之所以会发生这种情况,是因为应用顺序始终总是首先对完全参数进行求值,因此错过了参数未使用的机会。而正常顺序会尽可能晚地计算参数,因此,如果参数未使用,则总是赢。

(另一面是,应用顺序在实践中趋于更快,因为很少有不使用参数的情况;而多次使用一个参数是很常见的,而在应用顺序下,该参数仅被评估一次。正常order会根据其使用频率(0、1或多次)对参数进行计算。)


KyNNy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.