用教会数字

时间:2018-02-19 21:28:31

标签: lambda-calculus church-encoding

我试图了解在正常订单减少之后执行以下减少的正确步骤。我不明白哪个是我应该执行减少的正确顺序,以及为什么,在这个表达式中:

(λn.λs.λz.n s (sz)) (λs.λz.s z)
你能帮帮我吗?

注意:这种减少也可以被视为功能继承者

(λn.λs.λz.n s (sz))

适用于教会数字1

(λs.λz.s z)

知道数字零表示为:

(λs.λz.z)

1 个答案:

答案 0 :(得分:1)

正常,AKA最左边的减少顺序首先尝试减少最左边的最外面的子项。

由于您正在寻找最外层的术语,因此您需要确定术语的主要构建块,记住每个术语都是变量,术语的抽象或术语的应用:

(λn.λs.λz.n s (s z)) (λs.λz.s z)
---------LHS-------- ----RHS----
----------APPLICATION-----------

主要术语的左侧(LHS)是最左侧的最左侧,因此它是缩减的起点。它的最外层抽象是λn,并且在该术语中有一个绑定变量n,所以它将被替换为右手术语:

λn.λs.λz.n s (s z)
--       -

但是,由于LHSRHS都包含sz个变量,因此您需要先在其中一个变量中重命名它们;我选择重命名RHS中的那些:

λs.λz.s z -> λa.λb.a b

现在,您可以删除λn抽象,并将n变量替换为λa.λb.a b

λn.λs.λz.n s (s z) -> λs.λz.(λa.λb.a b) s (s z)
--       -                  -----n-----

现在是时候寻找下一个减少点了:

λs.λz.(λa.λb.a b) s (s z)

由于lambda演算是左关联的,所以它与:

相同
λs.λz.(((λa.λb.a b) s) (s z))

下一个最左边的可缩减项是(λa.λb.a b) s,减少到(λb.s b)

λs.λz.(((λa.λb.a b) s) (s z)) -> λs.λz.((λb.s b) (s z))
         --    -    -                       -

最后一个可缩减的字词为(λb.s b) (s z),其中b替换为(s z)

λs.λz.((λb.s b) (s z)) -> λs.λz.(s (s z))
        --   -  -----              -----

以正常形式导致最终状态:

λs.λz.s (s z)