多次提到彭羅斯將哥德爾不完備性定理(G?del's incompleteness theorems)作為核心論點之一,下面談一下全本(筆者)理解的這個定理及其意義。全本未必能用最嚴格的數(shù)學(xué)/邏輯定義來說明,同時全本也對一些問題存有疑問,但這里不影響對該定理框架的描述。證明和論述的來源:http://plato./entries/goedel-incompleteness/。 首先長話短說,這個定理的基礎(chǔ)是面向一組可數(shù)(通常是無限的,原因下面會簡述)的命題和推演的羅列(本來是集合,但因為有限/可數(shù),所以就可以編序,這也是哥德爾定理的必需的基礎(chǔ))。最能夠想象的也是這個定理本身所依靠的最小系統(tǒng)即皮亞諾算術(shù)公理系統(tǒng)(Peano axioms)。不清楚的話,只要想想可以不斷加一往上長的自然數(shù)和數(shù)學(xué)歸納法就是這個系統(tǒng)的最重要組成部分。對于命題和推演的集合在邏輯學(xué)上有一個比較牛逼的名稱叫形式系統(tǒng)(Formal System)。 在形式系統(tǒng)中大致可能會有以下這些內(nèi)容條目,
需要注意的是,我們這里的系統(tǒng),通常是無限的。原因是我們考慮系統(tǒng)的完備性,所以各種符號組合的可能性都需要考慮。所以任何一個能夠給出的合法的符號組合,尤其是命題,它必須必然需要被包括在內(nèi)。同理含參命題也一樣。 這個有點像什么?打個比方,我們在學(xué)校里學(xué)數(shù)學(xué),做證明題,有的證明題那個難啊,還有什么奧數(shù)什么的。但在這里,我們可以設(shè)想有一部機器不斷依照一定順序地制造基本符號組合,從短的到長的,按照字典序什么的(以下的細化討論用了這個方案),這樣對于任意固定長度的符號序列,它總能被觸及到,只是早晚問題,而我們這里是邏輯/理論數(shù)學(xué)上討論的,這是理想機器,只要序列有限,都是“秒完成”(只有可行/不可行的問題,不存在什么運算復(fù)雜性之類的問題)。當然有一個“算法”可以檢查并確保生成的是合法的序列。然后這么一條條地生成,那么很顯然任何一個證明,無論多艱深,只要是有限的(廢話,證明當然是有限的),都無一例外能最終被羅列到?。ǖ?,這個系統(tǒng)本身不一定能確認之,有的能,有的不能,這是后面要說明的中心問題) 所以,雖然條目可以是無限的,但是可數(shù)的。所以我們能將這些條目編號。這個編號很有講究,編法當然不是唯一的,就像證明“自然數(shù)和有理數(shù)一樣多”,編法不對是出不了結(jié)果的。一個合法的編號就是能夠羅列出所有合法的符號組合。比方講,如果我們知道有一個東西是可數(shù)但無限的,比如自然數(shù)(雖然自然數(shù)作為簡單符號不編也沒關(guān)系),你就不能盯著它編,這樣你就編不了別的東西了。至少要夾花編。 其實我們會發(fā)現(xiàn),無論從邏輯討論還是對于哥德爾定理的討論,很多條目邏輯上不必關(guān)心,當然真要編進去,只要編號合理也無傷大雅。我們比較關(guān)心的包括以下這些:
其中一元含參命題A(x)需要講一下。它不同于返回真假值的邏輯函數(shù),它只是一個對參數(shù)的斷言,比如A(x):=x如何如何。當參數(shù)代入后,它退化為無參命題,則是有一個真假,這個由系統(tǒng)(論證鏈)來決定。它和邏輯函數(shù)的關(guān)系是:
既然有了編號,我們對這個系統(tǒng)中任意一個條目m, 我們有它的一個編號[m](別處用上方括號,這里簡便起見用一般方括號),我中文里稱它為m門,當然這是一個自然數(shù)。這里定義如果自然數(shù)[m] = n,則 接下來我們來看幾個比較有趣的函數(shù)和命題。注意這里的函數(shù)未必編號在系統(tǒng)中,只是對命題起到一個輔助(例如4和5)。
但是,我們會發(fā)現(xiàn),如果對編號系統(tǒng)及其作用不進行比較嚴格的限定,這個問題的一致性討論是會成問題的。于是我們再對編號和編集進行如下細化, 我們假設(shè)系統(tǒng)的符號有限。于是我們可以將系統(tǒng)的條目進行字典排序,于是依此的羅列產(chǎn)生的可數(shù)集完成對所有可能的條目的羅列。在未經(jīng)說明之前,這個“可數(shù)集”就是“系統(tǒng)”的代名詞,可互換使用。 至此,我們需要的基礎(chǔ)設(shè)施有了。接下來要導(dǎo)出哥德爾定理,主要靠對角線引理。這個方法就是康托(Georg Cantor)在論證無理數(shù)多于有理數(shù)中使用的著名的方法。只是在這里不是那么直觀而已。 這個引理結(jié)論很簡單: 【對角線引理】 對任意上述“自稱完備”的系統(tǒng)(有一定的基本限定條件,例如納入編號函數(shù)相關(guān)條目;不自稱完備則不用證明,因為已經(jīng)不完備),對于任意合法編號,對其中任意一個一元命題A(x)(簡稱A邏輯),都存在一個(依賴于編號函數(shù)的)D條款,使得D<=>A([D])。 根據(jù)這個引理,那么如果將A設(shè)為證明不存在函數(shù)NoProv(),就會出現(xiàn)D<=>NoProv([D]),即:
這顯然是一個矛盾,也是哥德爾定理揭示的問題。 要分析理解這個現(xiàn)象,我們先看這個引理是怎么來的。以下是這個對角線引理的證明。 【對角線引理證明】 首先我們看跳代檢查聲明S([a],b,c),所有參數(shù)顯然都是自然數(shù),雖然第一個參數(shù)的含義是對函數(shù)的引用,故而這里一開始用[a]標出作為提示。所以跳代檢查函數(shù)本身實際是S(x,y,z)。我們可以設(shè)想其一個特殊的實例S(x,x,y),即對每一個一元函數(shù)(編號為x),跳代檢查聲明這個函數(shù)編號代入函數(shù)本身產(chǎn)生的無參命題的編號是y。這里實際做的是subst(x,x),這稱作自跳代。 然后我們構(gòu)造一個一元命題B(x):=存在y使得A(y)^S(x,x,y),簡稱B邏輯。容易看出,這個命題含義是對一個一元函數(shù)(編號為x)進行聲明,其自跳代(編號)代入一元邏輯函數(shù)A()得到的不含參命題為真。 由于B(x)本身也是一個一元函數(shù),我們考慮將其代入B(x)自身(參數(shù)x設(shè)為B(x)本身的編號),即自跳代subst([B(x)],[B(x)]),亦即B([B(x)])。自然這是一個不含參命題,可將其記作D。從B(x)的定義看,這個自跳代D=B([B(x)])考察了(等價于)B(x)的B邏輯值,亦即B(x)的自跳代(編號)(亦即[D])代入A()得到的命題。從而有D<=>A([D])。證畢。 接下來我們看為什么它是對角線,從而能看出這個引理的“幾何特征”。 首先我們列一個表,每一行的行號和每一列的列號對應(yīng)于相應(yīng)的哥德爾編號,均向著無限伸展。對于m行n列元素,假設(shè)m是一元邏輯命題M(x)的哥德爾編號(即[M(x)]=m),則這個元素為M(n)(對于不是一元命題的行,我們忽略,或標記一個負數(shù)之類即可)。于是上述(將NoProv()作為A()代入后的)B(x)就在[B(x)]=b行。然后我們再來看對角線,它實際上都是上述的自跳代 。最后我們看b行b列的元素。這個元素值,作為對角線上元素,它代表B(x)的自跳代命題;作為b行的元素,它代表(作為NoProv()的參數(shù)的)“B(x)的自跳代命題”不可證明這一命題。所以說這兩者是同一個條目。(即D==A([D]),這和上面的D<=>A([D])表述并不矛盾,實際上是一致的。“D<=>A([D])”本身是基于邏輯推演的真命題) 接下來我們再用更通俗的語言來看看B([B(x)])是怎么回事。B(x)是聲明:自己(x)對自己關(guān)于某件事是真的是不可證明的(和其他一元命題一樣,對每個具體的x,其真假與否由系統(tǒng)決定)。問題就是,B(x)自己說自己呢?(這個直接導(dǎo)致矛盾,系統(tǒng)也愛莫能助) 具體來看: : 存在y,!Prov(y)^S(x,x,y) (即以!Prov為A的的B(x)一元含參公式) 其實我們可以用這個方法構(gòu)造一個更簡單的矛盾: : 存在y, ! 這里通俗地說:一個人(它對各人會有個聲稱)對它自己的聲稱,總是假的(關(guān)于自己的話都是假的)。而 注意這里的討論幾乎語義上對這個矛盾賦予了新的意義,從而幾乎脫離了編號系統(tǒng)。這個其實是有點像“我在撒謊”或羅素悖論,而的確哥德爾定理的確和羅素悖論結(jié)構(gòu)上有相通之處(對角線引理)。所以,一種觀點可以認為,哥德爾定理只不過是一個邏輯笑話。 上述需要注意的是,B(x)本身,對于不同x的實例,既有可能是真(可證明),也有可能假(可否證)。比如,在一個編號系統(tǒng)中,如果第2條是含參命題:x是偶數(shù);而第四條是含參命題:x是奇數(shù)。那么B(2)就是假的,B(4)就是真的。 那么B([B(x)])到底是真是假呢?我傾向于認為: 它是真的(因為出了系統(tǒng)我們知道系統(tǒng)給不出它的證明,因為如果系統(tǒng)給出它的證明,系統(tǒng)就不一致了)。但是系統(tǒng)不能給出證明(或者等價地,否證)(但是系統(tǒng)連這個結(jié)論也無法作出),也就是在系統(tǒng)的觀點上無法知道其真假。 系統(tǒng)本身要是一致的,那么它至少其中會有一條如是的命題,它是真的,但是系統(tǒng)本身無法證明。而系統(tǒng)要一致,又必須去除這條矛盾的命題。所以系統(tǒng)是不完備的。 哥德爾定理給出的這種真的,但系統(tǒng)無法證明的命題,是利用了“證明”斷言構(gòu)筑的命題。但這構(gòu)筑是合法的。 但這不是系統(tǒng)中唯一的這類命題(真卻無法證明)。其他的這類命題(也是關(guān)于皮亞諾算術(shù)系統(tǒng)的)著名的如古德斯坦定理(Goodstein's Theorem)。 但是問題還沒完。正如某邏輯學(xué)家(名字忘了)說的,哥德爾定理有一難,一容易。一難是很難理解,一容易是很容易,其實極其容易誤解。就上面這段論證和說明的思路,不同的邏輯學(xué)家和相關(guān)學(xué)者都有不同的解釋。最關(guān)鍵的一點是關(guān)于這個證明存在含參命題Prov()的意義和存在方式,以及由此引申的關(guān)于彭羅斯的“數(shù)學(xué)洞察力”的問題。 筆者的一個想法/思路/對上述問題的看法是(不嚴格但不完全離譜):重申這里Prov()的存在必須從邏輯學(xué)角度來理解,但是它具有深刻而微妙的“計算”牽連。從邏輯一致性上講,很顯然Prov()本身作為一個邏輯聲明其為真的充要條件是系統(tǒng)中存在證明鏈(語句)。而從機械(計算)“實現(xiàn)”的角度,它要求一個遍歷。這對于一個(在有限位置)真存在證明鏈(或證偽鏈也一樣)問題不算太大,但對于系統(tǒng)本身無法給出的證明呢?這從遍歷是無法實現(xiàn)的。于是我們必須假設(shè)系統(tǒng)的Prov()具有超出這種機械方法的能力,即如果一個證明存在,Prov()當然要反應(yīng)出來;而證明不存在,Prov()也反應(yīng)出來(即為非)(即使如果用“計算”無法發(fā)現(xiàn)這一點)。但這么一來,這個系統(tǒng)就真有無法證明的命題了(不管是真的還是偽的),而由此,由于偽命題的反命題就是真命題,于是系統(tǒng)就肯定無法證明的真命題,從而系統(tǒng)不完備。那我們只能假設(shè)這個系統(tǒng)能夠證明所有問題,也就是說Prov()對真命題返回真,對偽命題返回假,而不存在不能證明的命題。至于這個假設(shè)有沒有問題——其實這應(yīng)該是很有問題的,如果能導(dǎo)致矛盾(反證法),那我們會及早發(fā)現(xiàn)這個問題從而得出“系統(tǒng)總存在無法證明的真命題”——我們暫時不去管他(等于我們將對這個系統(tǒng)的要求放松很多/將這個系統(tǒng)的機能提高了很多)。但哥德爾定理這時候就基于Prov()構(gòu)造出了一個會使得這個系統(tǒng)形成矛盾的命題。在邏輯上這時候唯一的一個嘗試的是通過將上述D(一般文獻中稱為GF。其中F是系統(tǒng)的代號,G代表哥德爾,即這個GF是系統(tǒng)F的哥德爾命題)直接列為公理,但如此,很顯然,Prov()如果要有效,就會認定D可證明(公理本身是“0級證明鏈”),但D可證明直接導(dǎo)致D為否。筆者這里認為,邏輯上說,這說明Prov()是無效的或者說邏輯一致的Prov()是不存在的。總之筆者認為這足以說明一個機械系統(tǒng)(非但)總存在無法證明的(真)命題,其實根本不存在一個它自己能可靠掌握的(一致的)證明聲明Prov(),(從而引申到)更別提它能理解證明是怎么回事了。而這正是彭羅斯需要的。 在進一步細究之前,我們來看更詭異的哥德爾第二定理。 第二定理根據(jù)上述第一定理其過程看似很簡單。第一定理實際產(chǎn)生了一個真聲明(定理):如果一個系統(tǒng)是一致的,則F不能包含GF(即上述D)。這個定理在系統(tǒng)F中有一個證明鏈(當然這個證明鏈是難以想象的復(fù)雜的)。于是在這個系統(tǒng)中一個不一致的聲明X比如算式0=1,其不可證的聲明為!Prov(X),另記作Cons(F)。Cons(F)要求系統(tǒng)一致,從而Cons(F)導(dǎo)出GF,但這與第一定律矛盾,從而Cons(F)也不成立。 (未完待續(xù)) 補充閱讀 [1] 圖靈機的局限性的討論 (A Brief Review on a Limiatation of Turing Machine) |
|