两道λ演算作业

由于作业需要,开始学习λ演算,顺便开始写博客,也记录一下学习历程。

下面简单介绍λ演算的三个规则(红色部分非原创,参考wxb_nudt的博客《Lambda演算学习笔记》)

λ-项是左结合的,λx.xx=(λx.x)x

α-变换

α变换表达了λ演算中约束变量的名称是不重要的,例如λx.x和λy.y是相同的函数。因此,将某个函数中的所有约束变量全部换名是可以的。

首先是一个说明:如果M,N是λ-项,x在M中有自由出现,若以N置换M中所有x的自由出现(M中可能含有x的约束出现),我们得到另一个λ-项,记为M[x/N]。

α-变换规则如下:

λx.M=λy.M[x/y]  如果y没有在M中自由出现,并且只要y替换M中的x,都不会被M中的一个λ绑定。

例子:λx.( λx.x)x = λy(λx.x)y

α-变换主要用来表达函数中的变量换名规则,需要注意的是被换名的只能是M(函数体)中变量的自由出现。

β-归约

β-归约表达的是函数应用或者函数代入的概念。前面提到MN是合法的λ-项,那么MN的含义是将M应用到N,通俗的说是将N作为实参代替M中的约束变量,也就是形参。β-归约的规则如下:

(λx.M)N-->M[x/N] 如果N中所有变量的自由出现都在M[x/N]中保持自由出现

β-归约是λ演算中最重要的概念和规则,它是函数代入这个概念的形式化表示。

一些例子如下:

(lx.ly.y x)(lz.u)®ly.y(lz.u)
(lx. x x)(lz.u)®(lz.u) (lz.u)
(ly.y a)((lx. x)(lz.(lu.u) z))®(ly.y a)(lz.(lu.u) z)
(ly.y a)((lx. x)(lz.(lu.u) z))→(ly.y a)((lx. x)(lz. z))
(ly.y a)((lx. x)(lz.(lu.u) z))→((lx. x)(lz.(lu.u) z)) a

η-变换(η-conversion)

η-变换表达了“外延性”(extensionality)的概念,在这种上下文中,两个函数被认为是相等的“当且仅当”对于所有的参数,它们都给出同样的结果。我理解为,对于所有的实参,通过β-归约都能得到同样的λ-项,或者使用α-变换进行换名后得到同样的λ-项。

例如λx.fx与f相等,如果x没有在f中自由出现。

由β-归约,对所有的 y 有 (λ x . f xy = f y,可得 λ x . f x = f,故η-变换成立。


两道作业题目及解答如下(如有错误,欢迎指正):

1.有函数:Y = λg. (λf.g(f f))(λf .g(ff)),试证 YF = F(YF)[F是任意函数].

证明:YF=λg.(λf.g(ff))(λf.g(ff))F

=(λf.F(ff))(λf.F(ff))        (1)α变换,[g/F]

=ww                             (2)令w=(λf.F(ff))

=(λf.F(ff))w

=F(ww)                        (3)β规约,将w代入f

=F(YF)                         由(2)知ww==YF

证毕。

2.  利用λ规约法则将(λp.λq.λr.p q r)(λp.λq.p q r)化到最简

解:(λp.λq.λr.p q r)(λp.λq.p q r)

=(λp.λq.λr.p qr)(λq.r q)             β规约,将r代入p

=(λp.λq.λr.p qr)r                       η变换

=(λp.λq.λw.p q w)r                   α变换,[r/w]

=λq.λw.r q w                             β规约,将r代入p

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章