MDA之路

          MDA,UML,XML,Eclipse及Java相關(guān)的Blog
          posts - 53, comments - 494, trackbacks - 0, articles - 2
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Lambda演算學(xué)習(xí)筆記

          Posted on 2005-05-15 20:53 wxb_nudt 閱讀(20017) 評(píng)論(42)  編輯  收藏 所屬分類: 技術(shù)雜談

          前言

          blog好久沒有更新了,上次更新還是428號(hào)。這段時(shí)間實(shí)在是很忙,4月的最后一周為了趕一篇論文,累死累活,最后在tom的幫助下總算在430號(hào)截稿之前完成了。429號(hào)的晚上一直改到了第二天凌晨3點(diǎn)才睡。

          430號(hào)下午回家,可是沒有料到長(zhǎng)沙的八一路修路,路上堵車。打的從學(xué)校到火車站花了40分鐘,平時(shí)只要15分鐘的。于是在最后10分鐘一路狂奔,終于在開車前1分鐘上車了。

          五一長(zhǎng)假的第一天去了雙峰山,云霧繚繞之中真的頗有幾分氣勢(shì),可惜數(shù)碼照片全部都拍得很模糊,早知道我就自己動(dòng)手好了。五一歸來馬上開始整理軟件工程相關(guān)資料,一共花了3天時(shí)間,還剩軟件標(biāo)準(zhǔn)化的部分沒有整理完畢。

          接下來的三天,一直在學(xué)習(xí)lambda演算的相關(guān)內(nèi)容,由于資料不全,學(xué)習(xí)的過程很是痛苦。國(guó)內(nèi)的大學(xué)好像基本上不開設(shè)Functional Programming課程,因此FP的基礎(chǔ)知識(shí)lambda演算也講得很少。不過好歹在網(wǎng)上找到了一些資料,加上數(shù)理邏輯中的少量介紹,明白了一個(gè)大致。相關(guān)資料網(wǎng)址會(huì)列在最后。

          Lamda演算簡(jiǎn)介

          Wikipedia(維基百科全書)中關(guān)于lambda演算的解釋如下:

          The lambda calculus is a formal system designed to investigate function definition, function application, and recursion. It was introduced by Alonzo Church and Stephen Cole Kleene in the 1930s; Church used the lambda calculus in 1936 to give a negative answer to the Entscheidungsproblem. The calculus can be used to cleanly define what a computable function is. The question of whether two lambda calculus expressions are equivalent cannot be solved by a general algorithm, and this was the first question, even before the halting problem, for which undecidability could be proved. Lambda calculus has greatly influenced functional programming languages, especially Lisp.

          Lambda演算是一個(gè)形式系統(tǒng),它被設(shè)計(jì)出來用來研究函數(shù)定義,函數(shù)應(yīng)用和遞歸。它是在二十世紀(jì)三十年代由Alonzo Church Stephen Cole Kleene發(fā)明的。Church1936年使用lambda演算來證明了判定問題是沒有答案的。Lambda演算可以用來清晰的定義什么是一個(gè)可計(jì)算的函數(shù)。兩個(gè)lambda演算表達(dá)式是否相等的問題不能夠被一個(gè)通用的算法解決,這是第一個(gè)問題,它甚至排在停機(jī)問題之前。為了證明停機(jī)問題是沒有答案的,不可判定性能夠被證明。Lambda演算對(duì)于函數(shù)式編程語(yǔ)言(例如lisp)有重大的影響。

          同時(shí),數(shù)理邏輯中對(duì)于lambda演算的介紹就簡(jiǎn)單得多:

          λ-演算可以說是最簡(jiǎn)單、最小的一個(gè)形式系統(tǒng)。它是在二十世紀(jì)三十年代由Alonzo Church Stephen Cole Kleene發(fā)明的。至今,在歐洲得到了廣泛的發(fā)展。可以說,歐洲的計(jì)算機(jī)科學(xué)是從λ-演算開始的,而現(xiàn)在仍然是歐洲計(jì)算機(jī)科學(xué)的基礎(chǔ),首先它是函數(shù)式程序理論的基礎(chǔ),而后,在λ-演算的基礎(chǔ)上,發(fā)展起來的π-演算、χ-演算,成為近年來的并發(fā)程序的理論工具之一,許多經(jīng)典的并發(fā)程序模型就是以π-演算為框架的。

          這里不由得想起一位我尊敬的老師的博士畢業(yè)論文就是關(guān)于π-演算的,可惜這位老師已經(jīng)去別的學(xué)校了。

          Lambda演算表達(dá)了兩個(gè)計(jì)算機(jī)計(jì)算中最基本的概念“代入”和“置換”。“代入”我們一般理解為函數(shù)調(diào)用,或者是用實(shí)參代替函數(shù)中的形參;“置換”我們一般理解為變量換名規(guī)則。后面會(huì)講到,“代入”就是用lambda演算中的β-歸約概念。而“替換”就是lambda演算中的α-變換。

          Lambda演算系統(tǒng)的形式化定義

          維基百科全書上面的對(duì)于lambda演算的定義不是很正規(guī),但是說明性的文字較多。而數(shù)理邏輯中的定義很嚴(yán)密,不過沒有說明不容易理解。我盡可能把所有資料結(jié)合起來說明lambda演算系統(tǒng)的定義。

          字母表

          lambda演算系統(tǒng)中合法的字符如下:

          1.         x1x2x3變?cè)ㄗ冊(cè)臄?shù)量是無窮的,不能在有限步驟內(nèi)窮舉,這個(gè)很重要,后面有定理是根據(jù)這一點(diǎn)證明的)

          2.         à 歸約

          3.         等價(jià)

          4.         λ,(,)  (輔助工具符號(hào),一共有三個(gè),λ和左括號(hào)右括號(hào))

          所有能夠在lambda演算系統(tǒng)中出現(xiàn)的合法符號(hào)只有以上四種,其他符號(hào)都是非法的。例如λx.x+2,如果沒有其他對(duì)于+符號(hào)的說明,那么這就是一個(gè)非法的λ演算表達(dá)式。

          λ-項(xiàng)

          λ-項(xiàng)在一些文章中也稱為λ表達(dá)式(lambda expression),它是由上面字母表中的合法字符組成的表達(dá)式,合法的表達(dá)式組成規(guī)則如下:

          1.         任一個(gè)變?cè)且粋€(gè)項(xiàng)

          2.         MN是項(xiàng),則(MN)也是一個(gè)項(xiàng)  function application,函數(shù)應(yīng)用)

          3.         M是一個(gè)項(xiàng),而x是一個(gè)變?cè)瑒t(λx.M)也是一個(gè)項(xiàng)  function abstraction,函數(shù)抽象)

          4.         僅僅由以上規(guī)則歸納定義得到的符號(hào)串是項(xiàng)

          說明1λ-項(xiàng)是左結(jié)合的,意思就是若f x y都是λ-項(xiàng),那么f x y(f x) y

          說明2(λx.M)這樣的λ-項(xiàng)被稱為函數(shù)抽象,原因是它常常就是一個(gè)函數(shù)的定義,函數(shù)的參數(shù)就是變量x,函數(shù)體就是M,而函數(shù)名稱則是匿名的。用一個(gè)不恰當(dāng)?shù)谋扔鱽碚f,我們通常認(rèn)為的函數(shù)f(x)=x+2,可以被表達(dá)為λx.x+2。因?yàn)椋俏炊x的,所以這個(gè)比喻只是為了方便理解而已。

          說明3MN這樣的λ-項(xiàng)被稱為函數(shù)應(yīng)用,原因是它表達(dá)了將M這個(gè)函數(shù)應(yīng)用到N這個(gè)概念。沿用上面的例子f(x)=x+2,那么f(2)=2+2;同樣的λx.x+2表達(dá)了f(x)的概念,那么(λx.x+22表達(dá)了f(2)的概念。其中Mλx.x+2N2,所以MN=(λx.x+22

          說明4:注意說明3只是為了方便理解,但是還存在很多與直觀理解不符合的地方。例如xy也是一個(gè)合法的λ-項(xiàng),它們也是MN形式的,不過xy都僅僅是一個(gè)變量而已,談不上函數(shù)代入。

              上面是λ-項(xiàng)的形式化定義,有一些是可以與函數(shù)理論直觀聯(lián)系的,而另一些只是說明這個(gè)λ-項(xiàng)是合法的,不一定有直觀的字面意義。

          公式

              MNλ-項(xiàng),則MàNM=N是公式。

          λ-項(xiàng)中的變量自由出現(xiàn)法則

          在一個(gè)λ-項(xiàng)中,變量要么是自由出現(xiàn)的,要么是被一個(gè)λ符號(hào)綁定的。還是以函數(shù)的方式來理解變量的自由出現(xiàn)和綁定。例如f(x)=xy這個(gè)函數(shù),我們知道x是和函數(shù)f相關(guān)的,因?yàn)樗?/SPAN>f的形參,而y則是和f無關(guān)的。那么在λx.xy這個(gè)λ-項(xiàng)中,x就是被λ綁定的,而y則是自由出現(xiàn)的變量。

          直觀的理解,被綁定的變量就是作為某個(gè)函數(shù)形參的變量,而自由變量則是不作為任何函數(shù)形參的變量。

          Lambda變量綁定規(guī)則:

          1.         在表達(dá)式x中,如果x本身就是一個(gè)變量,那么x就是一個(gè)單獨(dú)的自由出現(xiàn)。

          2.         在表達(dá)式λ x. E中,自由出現(xiàn)就是E中所有的除了x的自由出現(xiàn)。這種情況下在E中所有x的出現(xiàn)都稱為被表達(dá)式中x前面的那個(gè)λ所綁定。

          3.         在表達(dá)式(MN )中,變量的自由出現(xiàn)就是MN中所有變量的自由出現(xiàn)。

          另一種關(guān)于變量的自由出現(xiàn)的規(guī)則也許更直接:

          1.         free(x) = x

          2.         free(MN) = free(M) è free(N)

          3.         free(lx ? M) = free(M) {x}

          為什么要花大力氣來給出變量自由出現(xiàn)的規(guī)則,是因?yàn)楹竺娴暮芏嗟胤揭玫阶兞康淖杂沙霈F(xiàn)的概念。例如α-變換和β-歸約。

          例子:分析λf.λx.fx中變量的自由出現(xiàn)和綁定狀況。

          λf.λx.fx =λf.E, E=λx.fx

          E=λx.A, A=A1A2, A1=f, A2=x

          所以在Afx都是自由出現(xiàn)的,

          所以Ex是綁定λ x

          所以整個(gè)公式中f是綁定第一個(gè)λ f的。

          λ x的控制域

          來看兩個(gè)λ-項(xiàng),λx.xxλx.(xx)有何不同?根據(jù)左結(jié)合的法則,λx.xx(λx.x)x,其中第一個(gè)x是被λ綁定的,而第二個(gè)x則是自由出現(xiàn)的。而λx.(xx)中兩個(gè)x都是被λ綁定的。這表明了兩個(gè)λ-項(xiàng)中λx的控制域是不同的。

          我們知道謂詞演算中量詞也是有控制域的,λx的控制域與它們類似,這里就不給出詳細(xì)的定義了。其實(shí)也很直觀。

          α-變換(α-conversion

          α-變換規(guī)則試圖解釋這樣一個(gè)概念,λ演算中約束變量的名稱是不重要的,例如λx.xλy.y是相同的函數(shù)。因此,將某個(gè)函數(shù)中的所有約束變量全部換名是可以的。但是,換名需要遵循一些約束。

          首先是一個(gè)說明:如果MNλ-項(xiàng),xM中有自由出現(xiàn),若以N置換M中所有x的自由出現(xiàn)(M中可能含有x的約束出現(xiàn)),我們得到另一個(gè)λ-項(xiàng),記為M[x/N]

          α-變換規(guī)則如下:

          λx.M=λy.M[x/y]  如果y沒有在M中自由出現(xiàn),并且只要y替換M中的x,都不會(huì)被M中的一個(gè)λ綁定。

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

          α-變換主要用來表達(dá)函數(shù)中的變量換名規(guī)則,需要注意的是被換名的只能是M(函數(shù)體)中變量的自由出現(xiàn)。

          β-歸約

          β-歸約表達(dá)的是函數(shù)應(yīng)用或者函數(shù)代入的概念。前面提到MN是合法的λ-項(xiàng),那么MN的含義是將M應(yīng)用到N,通俗的說是將N作為實(shí)參代替M中的約束變量,也就是形參。β-歸約的規(guī)則如下:

          (λx.M)N à M[x/N] 如果N中所有變量的自由出現(xiàn)都在M[x/N]中保持自由出現(xiàn)

          β-歸約是λ演算中最重要的概念和規(guī)則,它是函數(shù)代入這個(gè)概念的形式化表示。

          一些例子如下:

          (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

          需要多加練習(xí)才能習(xí)慣這種歸約。

          η-變換(η-conversion

          η-變換表達(dá)了“外延性”(extensionality)的概念,在這種上下文中,兩個(gè)函數(shù)被認(rèn)為是相等的“當(dāng)且僅當(dāng)”對(duì)于所有的參數(shù),它們都給出同樣的結(jié)果。我理解為,對(duì)于所有的實(shí)參,通過β-歸約都能得到同樣的λ-項(xiàng),或者使用α-變換進(jìn)行換名后得到同樣的λ-項(xiàng)。

          例如λx.fxf相等,如果x沒有在f中自由出現(xiàn)。

          λ演算的公理和規(guī)則組成

          這一段來自《數(shù)理邏輯與集合論》(第二版 清華大學(xué)出版社)。還修正了其中的一個(gè)錯(cuò)誤。

          1.         (λx.M)N à M[x/N] 如果N中所有變量的自由出現(xiàn)都在M[x/N]中保持自由出現(xiàn)

          2.         MàM

          3.         MàN, NàL => MàL  (原書中此處錯(cuò)誤)

          4.         MàM’=>ZMàZM’

          5.         MàM’=>MZàM’Z

          6.         MàM’=>λx. M àλx. M’

          7.         MàM’=>M=M’

          8.         M=M’=>M’=M

          9.         M=N,N=L=>M=L

          10.     M=M’ => ZM = ZM’

          11.     M=M’ => MZ = M’Z

          12.     M=M’ =>λx. M =λx. M’

          如果某一公式MàN或者M=N可以用以上的公理推出,則記為λ├MàNλ├MN

          范式

          如果一個(gè)λ-項(xiàng)M中不含有任何形為((λx.N1)N2)的子項(xiàng),則稱M是一個(gè)范式,簡(jiǎn)記為n.f.。如果一個(gè)λ-項(xiàng)M通過有窮步β-歸約后,得到一個(gè)范式,則稱Mn.f.,沒有n.f.λ-項(xiàng)稱為n.n.f.

              通俗的說法是,將一個(gè)λ-項(xiàng)進(jìn)行β-歸約,也就是進(jìn)行實(shí)參代入形參的過程,如果通過有窮步代入,可以得到一個(gè)不能夠再進(jìn)行代入的λ-項(xiàng),那么這就是它的范式。如果無論怎樣代入,總存在可以繼續(xù)代入的子項(xiàng),那么它就沒有范式。

          例子

          M = λx.(x((λy.y)x))y,則Mà y((λy.y)y) à yyM有一個(gè)n.f.

          例子

          M =λx.(xx) λx.(xx),則Màλx.(xx) λx.(xx)=M。注意到M的歸約只有唯一的一個(gè)可能路徑,所以M不可能歸約到n.f.。所以Mn.n.f.

          注意這個(gè)λx.(xx) λx.(xx)λ演算的協(xié)調(diào)性研究中是一個(gè)比較經(jīng)典的項(xiàng)。((λ x. x x) (λ x. x x))被稱為Ω, ((λ x. x x x) (λ x. x x x))被稱為 Ω2

          不動(dòng)點(diǎn)理論

          Λ表示所有的λ-項(xiàng)組成的集合。

          定理:對(duì)于每一個(gè)F∈Λ,存在M∈Λ,使得λ├FM=M

          證明:定義wλx.F(xx),又令Mww,則有λ├Mww(λx.F(xx))wF(ww)=FM

          證明是非常巧妙的,對(duì)于每個(gè)F,構(gòu)造出的這個(gè)ww剛好是可以通過一次β-歸約得到F(ww)FM,如果再歸約一次就得到F(FM),這樣可以無限次的歸約下去得到F(F(F(F…(FM)…)))

          Church-Rosser定理及其等價(jià)定理

          這兩個(gè)定理告訴我們這樣一個(gè)事實(shí):如果M有一個(gè)n.f.,則這個(gè)n.f.是唯一的,任何β-歸約的路徑都將終止,并且終止到這個(gè)n.f.

          Church-Rosser定理:如果λ├M=N,則對(duì)某一個(gè)Zλ├MàZ并且λ├NàZ

          與之等價(jià)的定理如下,

          Diamond Property定理:如果MàN1,MàN2,則存在某一Z,使得N1àZN2àZ

          后記

          最后兩個(gè)定理的證明沒有怎么看懂,所以沒有在筆記中記下。另外,前天在網(wǎng)上訂購(gòu)的《程序設(shè)計(jì)語(yǔ)言:概念和結(jié)構(gòu)》第二版剛剛拿到手,其中有關(guān)于λ演算的一章。應(yīng)該也對(duì)我大有幫助,待看完再說。

          學(xué)習(xí)λ演算的初衷是了解一些程序設(shè)計(jì)的最基本原理,沒想到最后還是繞到形式系統(tǒng)和數(shù)理邏輯這兒來了。不過,形式化表達(dá)的λ演算更清晰。

          國(guó)內(nèi)大學(xué)雖然也開程序設(shè)計(jì)的課程,不過好像都是pascalc/c++之類,關(guān)于程序設(shè)計(jì)的本質(zhì)基礎(chǔ)的程序好像并不多。隨著大學(xué)擴(kuò)招,中國(guó)有望在很短的時(shí)間內(nèi)成為世界上程序員最多的國(guó)家,如果僅僅只學(xué)命令式和面向?qū)ο蟮某绦蛟O(shè)計(jì),一定是不夠的。函數(shù)式和邏輯式程序設(shè)計(jì)語(yǔ)言也是要學(xué)學(xué)的啊。

          文中肯定有很多錯(cuò)漏,希望看出來的人給我留言。

          參考文獻(xiàn)

          School of Computer Science and Software Engineering, Faculty of Information Technology, Monash University, Australia 3800

          這個(gè)大學(xué)的FP課程中的Lambda演算相關(guān)部分

          http://www.csse.monash.edu.au/~lloyd/tildeFP/Lambda/Ch/

          wikipedialambda演算相關(guān)介紹

          http://en.wikipedia.org/wiki/Lambda_calculus

          《數(shù)理邏輯與集合論》第二版 清華大學(xué)出版社

           


          評(píng)論

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2005-05-16 07:34 by 月光亂亂
          小同志 辛苦了!

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2005-06-01 18:41 by oneday
          blog對(duì)lamda的解釋很不錯(cuò)。比一般教科書上的要清楚的多。對(duì)我的幫助很大,你是老師么? :)
          國(guó)內(nèi)有一本南大出版的巴倫德萊赫特的<lamda演算的語(yǔ)法和語(yǔ)義>,也可以作為相應(yīng)的參考書。
          我們開了程序語(yǔ)義學(xué)的課,但我認(rèn)為這種類型的課目前在國(guó)內(nèi)很難上好。

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2005-06-02 11:14 by wxb_nudt
          我不是老師,只是學(xué)生。
          Lambda演算其實(shí)和我的研究方向不沾邊,只不過一次和別人討論時(shí)提起。有感于教材和網(wǎng)上素材不完善,因此整理了一下而已。

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2005-11-12 21:45 by xephang
          哪位同志有進(jìn)程代數(shù),派演算方面的書和資料?

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2005-12-05 21:03 by Pesky
          贊,我覺得比我們老師講的好多了

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2006-01-17 14:42 by 冰島
          我們也要學(xué),倒來倒去,不知道有啥用處!

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2006-02-03 01:55 by 李奇
          我在劍橋大學(xué)學(xué)計(jì)算機(jī),我們這里就開了functional Language Programming,感覺你說得不錯(cuò),謝謝你,呵呵,感覺很有收獲~~

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2007-01-26 05:26 by JGG
          我在法國(guó)學(xué)計(jì)算機(jī),本學(xué)期也開了個(gè)這個(gè)課
          你寫的東西很有用
          謝謝

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2007-03-16 10:11 by 逸宇行空
          最近又收集了點(diǎn)資料,基本上是結(jié)合樓主的這篇文章,Wiki中的介紹,再就是<<類型和程序設(shè)計(jì)語(yǔ)言>>,,歡迎來討論并指正
          http://blog.sina.com.cn/templarwzy

          樓主你是長(zhǎng)沙的? 科大的吧? 你說的老師是李舟軍教授嗎?

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2007-03-16 16:46 by wxb_nudt
          @逸宇行空
          對(duì),你都說對(duì)了。現(xiàn)在我已經(jīng)畢業(yè)到北京了。

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2007-03-18 02:02 by skAzurina
          我手頭上有一本書,叫做《計(jì)算機(jī)語(yǔ)言的形式語(yǔ)義》,科學(xué)出版社出版的,作者陸汝鈐(音同錢),ISBN為7030030222。
          這本書在第一章第一節(jié)就講了λ運(yùn)算,很清楚,比blog主的內(nèi)容還多一點(diǎn)。感興趣的可以去看看。

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2007-07-14 19:24 by yujian
          寫得不錯(cuò),以前沒有看懂,今天看了你的文章,感覺非常直白,恍然大悟。

          #  'β.x"  回復(fù)  更多評(píng)論   

          2007-08-02 22:04 by 江順
          以后

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2007-10-18 21:17 by llin_zou
          大張見識(shí)~

          # re: Lambda演算學(xué)習(xí)筆記[未登錄]  回復(fù)  更多評(píng)論   

          2007-11-11 19:14 by liu
          很喜歡看你blog,寫的東西都很不錯(cuò)!

          # re: Lambda演算學(xué)習(xí)筆記[未登錄]  回復(fù)  更多評(píng)論   

          2008-01-18 16:11 by cy
          寫得不錯(cuò),辛苦你了.

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2008-11-02 18:08 by miles
          有個(gè)地方不是很明白:
          β-歸約:“通俗的說是將N作為實(shí)參代替M中的約束變量”

          (lx. x x)(lz.u) ® (lz.u) (lz.u)
          這里面是將兩個(gè)x都代替了,但由前文的“λ x的控制域”理解:第一個(gè)x是在λ的控制之下,但第二個(gè)x不是;而“β-歸約”是說“以實(shí)參代替約束變量”,也就是說我不太明白為什么將第二個(gè)x,也就是自由變量也給代替掉了?
          或許我還有一些沒能理解透徹的地方,請(qǐng)指教。

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2008-11-04 11:58 by miles
          @miles
          我自己想明白了,謝謝

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2008-11-21 08:11 by 微笑的撒旦
          很不錯(cuò),謝謝!
          但是,能不能用幾句話概括一下到底什么Lambda演算?
          比如:基于字母表中,通過什么方法,最后解決什么問題。有個(gè)總結(jié)性的說明,理解起來應(yīng)該更容易。

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2009-03-07 21:15 by Winston
          博主對(duì)lambda calculus的理解有至關(guān)重要的錯(cuò)誤。關(guān)于lambda作用域的見解是很明顯的錯(cuò)誤。lambda calculus不符合左結(jié)合的特征,即,lambda x.x x不等價(jià)于(lambda x.x) x而是等價(jià)于lambda x. (x x)。在您論述beta reduction的時(shí)候已經(jīng)能清楚的看到和這一錯(cuò)誤觀點(diǎn)的矛盾之處了。請(qǐng)嚴(yán)謹(jǐn)對(duì)待之。以上。

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2009-03-07 21:17 by Winston
          當(dāng)然,博主對(duì)lambda calculus的分析還是淺顯易懂的,初學(xué)者應(yīng)該可以受益匪淺。
          無意冒犯,但請(qǐng)嚴(yán)謹(jǐn)求證,不要誤人子弟。

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2009-03-10 20:13 by wxb_nudt
          @Winston
          謝謝指教,不過這篇blog是幾年前寫的,都忘記了。大家看的時(shí)候注意點(diǎn)吧。最近忙,估計(jì)沒時(shí)間更新了。

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2009-06-13 12:39 by lightest
          其實(shí)Lambda演算的好處是甚麼? 比起圖靈機(jī)

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2009-09-14 00:07 by 陳星
          lamda演算其實(shí)有很多奇怪的性質(zhì),尤其是對(duì)于遞歸函數(shù)的研究,應(yīng)該是一種十分有利的工具,我是聽人說的,自己并不明白,希望博主再努力講講。

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2009-11-15 14:16 by sigma
          比維基百科上說得好。但并不是通俗易懂。不過鑒于是作者的學(xué)習(xí)筆記,沒有過多可講,還是感謝你!

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2010-07-16 17:58 by 王勃
          @Winston
          博主寫的是對(duì)的,你理解錯(cuò)了

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2010-07-16 21:46 by 王勃
          @王勃
          我錯(cuò)了,忽略我的評(píng)論吧

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2010-10-26 10:24 by 饒高琦
          樓主的幫助太大了,最近在做數(shù)理邏輯的大作業(yè),實(shí)在感謝,如獲至寶!

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2011-01-19 12:14 by 長(zhǎng)風(fēng)(@wildAir)
          請(qǐng)問“λ x的控制域”部分是不是講錯(cuò)了?

          在wiki中l(wèi)ambda calculus的Formal definition一節(jié)中,有這樣的描述:“The body of an abstraction extends as far right as possible”,也就是說λx.ab 等價(jià)于 λx.(ab),而不是λ(x.a) b。
          所謂的“左結(jié)合”法則,指的是應(yīng)用(application),而非抽象(abstraction): M N P 等價(jià)于 (M N) P。

          請(qǐng)核實(shí)一下,我是初學(xué)者,也不能肯定是這邊出錯(cuò)了。
          謝謝!

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2011-05-10 22:42 by 游客
          南京大學(xué)計(jì)算機(jī)研究生課程--計(jì)算入門。開有λ-演算

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2012-07-22 14:49 by 墨燃
          @長(zhǎng)風(fēng)(@wildAir) 嗯 同感 我最近剛開始學(xué)習(xí)的課程與這個(gè)有關(guān) application binds to the left,abstraction binds to the right lambda x. x y = lambda x. (x y) 不等于 (lambda x. x) y 請(qǐng)核實(shí)一下 剛學(xué) 迷糊中

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2012-08-28 04:04 by koven
          λ-項(xiàng)中的變量自由出現(xiàn)法則 倒數(shù)第三行,我猜應(yīng)該是:
          “所以在A中f和x都(不)是自由出現(xiàn)的”

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2012-08-28 04:09 by koven
          α-變換(α-conversion)倒數(shù)第二行例子是否應(yīng)該是:

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

          # re: Lambda演算學(xué)習(xí)筆記[未登錄]  回復(fù)  更多評(píng)論   

          2013-10-22 00:42 by young
          @Winston
          我也有這個(gè)疑問,過幾天去問教授看看到底哪個(gè)是對(duì)的。

          # re: Lambda演算學(xué)習(xí)筆記[未登錄]  回復(fù)  更多評(píng)論   

          2013-10-22 00:47 by young
          @xephang
          不知道你說的進(jìn)程代數(shù)指的什么意思,我們學(xué)過一門課是關(guān)于進(jìn)程模擬的,教授的教學(xué)計(jì)劃中設(shè)計(jì)到PI演算,不過后來沒講這部分內(nèi)容,在給出的參考資料中有一本是:D.Sangiorgi, D.Walker, The Pi-Calculus -- A Theory of Mobile Processes, Cambridge University Press, 2001不知道對(duì)你有沒有用。

          # re: Lambda演算學(xué)習(xí)筆記[未登錄]  回復(fù)  更多評(píng)論   

          2013-10-23 05:29 by young
          @skAzurina
          這本書現(xiàn)在絕版了吧。

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2014-06-19 16:15 by Rogerlee
          深入淺出,很好。請(qǐng)問一點(diǎn)地方:
          范式一節(jié)中M = λx.(x((λy.y)x))y,則Mà y((λy.y)y) à yy。
          為什么M進(jìn)行規(guī)約運(yùn)算之后,只有兩個(gè)y。
          M里面的兩個(gè)x都是綁定形式的吧,那么不應(yīng)該是
          Mà y((λy.y)y)y à y((y)y)y à yyyy

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2014-06-19 16:22 by Rogerlee
          @Rogerlee
          問完問題,就是容易靈光乍現(xiàn)。我明白了。謝謝你的博客。

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2014-06-26 20:58 by 藍(lán)鯨雞腿
          感謝樓主 對(duì)課程有所幫助

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2015-04-02 03:06 by qilin
          感謝博主。

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2016-06-01 18:38 by 慕容淵
          The question of whether two lambda calculus expressions are equivalent cannot be solved by a general algorithm, and this was the first question, even before the halting problem, for which undecidability could be proved.

          博主這段翻譯是有問題的,后面那個(gè) for which 是修飾停機(jī)問題的。
          正確的涵義應(yīng)該是這樣:
          沒有一個(gè)通用的算法可以解決判定兩個(gè) lambda 計(jì)算表達(dá)式是否相等的問題。這是 lambda 計(jì)算的的頭號(hào)問題,甚至排在停機(jī)問題之前。(for which)停機(jī)問題的不可決定性(也就是說元圖靈機(jī)無法判定給定的程序是否在給定的輸入上一定停止)是可以被證明的。

          而博主翻譯的
          “為了證明停機(jī)問題是沒有答案的,不可判定性能夠被證明。”
          是有問題的。

          當(dāng)然博主的這篇文章仍然很棒,基本上正確表達(dá)了維基百科 lambda calculus 詞條的前面部分。對(duì)于學(xué)習(xí) LISP 系語(yǔ)言(個(gè)人認(rèn)為,尤其scheme)的同學(xué)來說,博主的這篇文章是有助益的。我在搜索某個(gè)問題的時(shí)候來到了這個(gè)鏈接,原來是幾年前的。
          挖坑有理,博主勿怪^_^

          # re: Lambda演算學(xué)習(xí)筆記  回復(fù)  更多評(píng)論   

          2016-06-01 19:01 by 慕容淵
          暈。再看了下文章發(fā)表在 05 年,居然是11年前,博主是前輩了,失敬失敬...
          主站蜘蛛池模板: 霍林郭勒市| 淮滨县| 花莲县| 思南县| 哈巴河县| 石棉县| 屏边| 榕江县| 仙桃市| 乌恰县| 丹东市| 临朐县| 德州市| 牡丹江市| 陆河县| 胶南市| 旅游| 工布江达县| 台前县| 乌拉特前旗| 宝坻区| 绥江县| 五华县| 泽普县| 凉城县| 海南省| 喜德县| 汾阳市| 马公市| 庆城县| 科尔| 河西区| 许昌县| 广安市| 斗六市| 霸州市| 青浦区| 高清| 巩留县| 荆门市| 鄄城县|