Lambda微积分减少

时间:2010-07-28 23:11:46

标签: lambda lambda-calculus reduction

所有

以下是我发现很难减少的lambda表达式,即我无法理解如何解决这个问题。

(λmλnλaλb.m(n a b)b)(λfx.x)(λfx。f x)

这是我试过的,但我被困住了:

将上述表达式视为:(λm.E)M等于
E =(λnλaλb.m(n a b)b)
M =(λfx.x)(λfx。f x)

=> (λnλaλb。(λfx.x)(λfx。f x)(n a b)b)

将上述表达式视为(λn.E)M等于
E =(λaλb。(λfx.x)(λfx。f x)(n a b)b)
M = ??

..我迷路了!!

任何人都可以帮助我理解,对于任何lambda演算表达式,执行缩减的步骤应该是什么?

3 个答案:

答案 0 :(得分:19)

您可以按照以下步骤减少lambda表达式:

  1. 完全括起表达式以避免错误,并使函数应用程序发生的地方更加明显。
  2. 查找函数应用程序,即查找模式(λX. e1) e2的出现,其中X可以是任何有效标识符,e1e2可以是任何有效的表达式。< / LI>
  3. 通过将(λx. e1) e2替换为e1'来应用此功能,其中e1'是用x替换e1e2的每一次自由出现的结果((λm. (λn. (λa. (λb. (m ((n a) b)) b)))) (λf. (λx. x))) (λf. (λx. (f x))) }。
  4. 重复2和3,直到模式不再出现。请注意,这可能导致非规范化表达式的无限循环,因此您应该在1000次迭代后停止; - )
  5. 因此,对于您的示例,我们从表达式

    开始
    (λm. (λn. (λa. (λb. (m ((n a) b)) b)))) (λf. (λx. x))

    此处子表达式X = m符合我们的模式e1 = (λn. (λa. (λb. (m ((n a) b)) b))))e2 = (λf. (λx. x))(λn. (λa. (λb. ((λf. (λx. x)) ((n a) b)) b)))。所以在替换之后我们得到(λn. (λa. (λb. ((λf. (λx. x)) ((n a) b)) b))) (λf. (λx. (f x))) ,这使我们的整个表达式成为:

    X = n

    现在,我们可以使用e1 = (λa. (λb. ((λf. (λx. x)) ((n a) b)) b))e2 = (λf. (λx. (f x)))(λa. (λb. ((λf. (λx. x)) (((λf. (λx. (f x))) a) b)) b)) 将模式应用于整个表达式。所以在替换之后我们得到:

    ((λf. (λx. (f x))) a)

    现在(λx. (a x))符合我们的模式并变为(λa. (λb. ((λf. (λx. x)) ((λx. (a x)) b)) b)) ,从而导致:

    ((λx. (a x)) b)

    这一次,我们可以将模式应用到(a b),缩小为(λa. (λb. ((λf. (λx. x)) (a b)) b)) ,从而导致:

    ((λf. (λx. x)) (a b))

    现在将模式应用于(λx. x),其缩小为(λa. (λb. b)) 并获取:

    {{1}}

    现在我们已经完成了。

答案 1 :(得分:4)

你出错的地方是,在第一步,你不能有

M = (λf x. x)(λ f x. f x)   

因为原始表达式不包含该应用程序表达式。为了清楚说明,你可以在应用程序是左关联的规则之后放入隐式括号(使用[和]表示新的parens并输入一些缺失的“。”):

[ (λm . λn . λa . λb . m (n a b) b) (λ f x. x) ] (λ f x. f x)

从此处,在(λv.E) M内找到v形式的表达式,并将M替换为E中的N (λv.E) M来减少它。小心它真的是M的功能应用:如果你有类似的东西就不是 ( (λm . λn . λa . [λb . m (n a b) b]) (λ f x. x) ) (λ f x. f x) ,从那时起N被应用于函数,M被应用为两个参数。

如果你仍然卡住,请尝试为每个lambda加入parens - 基本上是一个新的“(每个”之后“。”和匹配的“)”尽可能地向右移动,同时仍然匹配新的“(”。作为一个例子,我在这里做了一个(用[和]使它们脱颖而出):

{{1}}

答案 2 :(得分:0)

只需用一个事物替换它对应的事物:

m λn λa λb . m          (n            a b) b) (λ f x. x) (λ f x. f x)
= ~            ^________                        ~~~~~~~~~~
   (λn λa λb . (λ f x. x) (n            a b) b)            (λ f x. f x)
=    ~                     ^__________                     ~~~~~~~~~~~~
      (λa λb . (λ f x. x) ((λ f x. f x) a b) b)
=                 ~       ~~~~~~~~~~~~~~~~~~
      (λa λb .   (λ x. x)                    b)
=                   ~  ^                     ~
      (λa λb .         b                      )

仅此而已。