Beta减少Lambda演算

时间:2017-02-23 17:27:48

标签: lambda-calculus

我正在尝试使用beta缩减来减少以下内容:

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

我在第一次替换后陷入困境,因为它似乎给了(λx. λy.x x)(λx. λy.x x),这将以一种循环结束。我做错了什么?

1 个答案:

答案 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 - 即,这个表达式的求值(当应用于参数时)永远不会终止;它永远不会达到普通形式。