兩道λ演算作業

由於作業需要,開始學習λ演算,順便開始寫博客,也記錄一下學習歷程。

下面簡單介紹λ演算的三個規則(紅色部分非原創,參考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

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