我正在尝试使用beta缩减来减少以下内容:
(λx.x x) (λx. λy.x x)
我在第一次替换后陷入困境,因为它似乎给了(λx. λy.x x)(λx. λy.x x)
,这将以一种循环结束。我做错了什么?
答案 0 :(得分:1)
以下是评估的说明
beta reduction 1
(λx.x x) (λx.λy.x x) →β x [x := (λx.λy.x x)]
(λx.(λx.λy.x x) (λx.λy.x x))
beta reduction 2
(λx.λy.x x) (λx.λy.x x) →β x [x := (λx.λy.x x)]
(λx.λy.(λx.λy.x x) (λx.λy.x x))
result
λy.(λx.λy.x x) (λx.λy.x x)
现在我们已达到弱头范式 - 即,我们有一个lambda λy
,没有任何参数可以应用它。
要获得Head Normal Form,我们可以尝试减少 lambda ...
reduction 1
λy.(λx.λy.x x) (λx.λy.x x) →β x [x := (λx.λy.x x)]
λy.(λx.λy.(λx.λy.x x) (λx.λy.x x))
reduction 2 ...
λy.λy.(λx.λy.x x) (λx.λy.x x)
好的,我们可以立即看到这种模式会重演。每当我们尝试在lambda下进行缩减时,结果都会被另一个λy
包裹起来。
因此,这个特殊的lambda表达式没有Head Normal Form - 即,这个表达式的求值(当应用于参数时)永远不会终止;它永远不会达到普通形式。