文蘭
所謂悖論,就是推出矛盾但原因不明的推理。([4])所謂解悖,就是找出悖論推出矛盾的原因。
反證法也是推出矛盾的推理,但它推出矛盾的原因很清楚:是由于一個假設(shè)。反證法總是先宣布一個假設(shè)(以下簡稱“頭”),然后推出矛盾,最后下結(jié)論該假設(shè)不成立(以下簡稱“尾”)。這個“頭”“尾”點(diǎn)明了該反證法的推理中使用的假設(shè)。悖論則看不出使用了什么特別的假設(shè),推出矛盾無法理解。
但實(shí)際上,悖論也有假設(shè),只不過是隱蔽的。隱蔽的假設(shè)當(dāng)然是推出矛盾原因不明的最重要的原因。因此,找出隱蔽的假設(shè),是對一個悖論的徹底解答。
讀者也許會覺得奇怪,一個推理中的假設(shè)怎么會是隱蔽的呢?作為例子我們將演示,如何只移去一個詞而使集合論創(chuàng)始人康托的一段推理中的假設(shè)當(dāng)場變得隱蔽,成為著名的理發(fā)師悖論。本文主要篇幅將揭示說謊者悖論中的一個隱蔽得多的假設(shè),從而解答這一最古老最有影響的悖論。人們將驚訝這一假設(shè)在說謊者悖論里的隱藏之深(第3.9 小節(jié))。
本文首先給出一個有助于尋找隱蔽假設(shè)的一般原理:如果一個悖論是一個反證法的掐頭去尾的翻譯,那么除了翻譯,這個悖論與這個反證法有相同的假設(shè),只不過對這個悖論來說,該假設(shè)是隱蔽的。然后,應(yīng)用這個原理去找出說謊者悖論中的隱蔽的假設(shè)。不難看出,說謊者悖論是一個極其簡單的布爾方程無解的反證法的掐頭去尾的翻譯。為確證這不是一個膚淺的觀察,作者選取了一個非平凡的三元布爾方程組無解的反證法,掐頭去尾之后,將其余的部分翻譯成日常語言,果然得到一個令人眼前一亮的說謊者型的“三卡悖論”。按照上述原理,除了翻譯,三卡悖論與該三元布爾方程組無解的反證法有相同的假設(shè),即“該方程組有解”的假設(shè),也即“存在變元的值滿足該方程組”的假設(shè)。只不過對三卡悖論來說,這個假設(shè)是隱蔽的。
這一發(fā)現(xiàn)具有重要的意義。我們知道,關(guān)于說謊者悖論,主流的理論著重于對“自我指涉”和“真謂詞”的分析。現(xiàn)在,三卡悖論所表現(xiàn)的“自我指涉”和“真謂詞”與說謊者悖論完全相同。這說明,自我指涉和真謂詞雖然是三卡悖論的明顯的外部特征,卻不是三卡悖論的要害,也就不是說謊者悖論的要害。問題的要害是隱蔽地假設(shè)了“該方程組有解”即“存在變元的值滿足該方程組”。只要搞清楚這一假設(shè)對三卡悖論來說是什么意思,即只要建立起諸如“句變元”以及句變元的“值”“句方程”“句解”等概念,就可以陳述三卡悖論的解答,也就可以陳述說謊者悖論的解答:
說謊者悖論的解答.說謊者悖論L:L為假是一個句變元問題,應(yīng)該寫成一個句方程X:X為假。說謊者悖論推出矛盾是因?yàn)殡[蔽地假設(shè)了該句方程有句解,即隱蔽地假設(shè)了存在X的一個值L使得L:L為假。說謊者悖論的矛盾證明,不存在X的值L使得L:L為假。
這一解答出自文獻(xiàn)[4]。這里的陳述更為細(xì)致。把L換成X,再換回成L,其哲學(xué)意味是微妙的。本文將對這一解答做一個透徹的解說。作為應(yīng)用,本文給出了雅布羅悖論的解答。1感謝陳龍博士建議作者考慮雅布羅悖論,導(dǎo)致了這個精彩的應(yīng)用。
反證法對邏輯學(xué)和數(shù)學(xué)來說具有基本的重要性。一個初等的例子如:
定理1.不是有理數(shù)。
對本文來說,特別要注意的是反證法結(jié)構(gòu)上的“頭”和“尾”。反證法的“頭”永遠(yuǎn)是宣布某個假設(shè),“尾”永遠(yuǎn)是下結(jié)論該假設(shè)不成立,這是反證法的例行格式。注意頭尾并不是推理,中段才是推理。該假設(shè)真正起作用不是在頭尾而是在中段,即使去掉頭尾,該假設(shè)也仍然在中段起著作用。
簡言之,對反證法掐頭去尾不改變其推理中的假設(shè)。
對反證法掐頭去尾雖然不改變其推理中的假設(shè),但在極少數(shù)情形卻可能使該假設(shè)變得隱蔽,這就引向了本文的主題——悖論。讓我們來看一個著名的悖論。
理發(fā)師悖論(1918).某村有一理發(fā)師,恰給本村那些不給自己理發(fā)的人理發(fā)。若他給自己理發(fā),則他屬于那種給自己理發(fā)的人。按照他的原則,他應(yīng)該不給自己理發(fā)。矛盾。若他不給自己理發(fā),則他屬于那種不給自己理發(fā)的人。按照他的原則,他應(yīng)該給自己理發(fā)。也矛盾。
按照前言的開頭所給出的悖論的定義,悖論是推出矛盾但原因不明的推理。理發(fā)師悖論就是這樣,它是一個推理,它推出了矛盾,但原因不明。
從以上兩個例子可以看出,反證法和悖論都是推出矛盾的推理,但二者有重大的區(qū)別。反證法有一個明確的假設(shè),而悖論卻似乎看不出有什么假設(shè)。從外觀上看,反證法有專門講述其假設(shè)的“頭”和“尾”,而悖論則無頭無尾。
由于對反證法掐頭去尾不改變推理中的假設(shè),立得下面這個有助于尋找隱蔽假設(shè)的一般原理:
隱蔽假設(shè)原理.如果一個悖論是一個反證法的掐頭去尾的翻譯,那么除了翻譯,這個悖論與這個反證法有相同的假設(shè),只不過對這個悖論來說,該假設(shè)是隱蔽的。
這是因?yàn)?,任何一個反證法,其假設(shè)總是陳述在“頭尾”,而使用在“中段”以導(dǎo)致矛盾。現(xiàn)在這個中段是一個悖論,因此它意識不到自己正在使用的導(dǎo)致矛盾的假設(shè)。對這個悖論來說,該假設(shè)是隱蔽的。
這也說明,一個悖論一旦被發(fā)現(xiàn)是某個反證法的掐頭去尾,其隱蔽的假設(shè)就被(該反證法的“頭尾”)揭露了,該悖論也就被解決了。
對這個原理的最好的詮釋是看看理發(fā)師悖論是哪個反證法的掐頭去尾。我們來看一下。首先把理發(fā)師悖論重述一遍:
理發(fā)師悖論重述.假設(shè)某村有一理發(fā)師,恰給本村那些不給自己理發(fā)的人理發(fā)。若他給自己理發(fā),則他屬于那種給自己理發(fā)的人。按照他的原則,他應(yīng)該不給自己理發(fā)。矛盾。若他不給自己理發(fā),則他屬于那種不給自己理發(fā)的人。按照他的原則,他應(yīng)該給自己理發(fā)。也矛盾。
注意這一次在開頭添加了兩個字“假設(shè)”。
“假設(shè)”二字一加,問題馬上清楚了,產(chǎn)生矛盾的原因就是這個假設(shè),所得矛盾無非說明該假設(shè)不成立,即該村不存在一個理發(fā)師“恰給本村那些不給自己理發(fā)的人理發(fā)”罷了。
但人們要問,理發(fā)師悖論的陳述里原來并沒有“假設(shè)”二字,如此重要的兩個字,為什么可以憑空加上去呢?
其實(shí),原來是有“假設(shè)”二字的,是在集合論創(chuàng)始人康托的一個定理里。我們來解釋一下。
先回顧一下集合論的幾個概念。設(shè)X和Y為兩個集。所謂一個從X到Y(jié)的映射f:X →Y是指一個法則,它對X中的每一元素x,唯一指定Y中的一個元素。這個為x指定的Y中的元素稱作x在f下的像,記為f(x)。如果Y中的每一個元素都是X中某個元素的像,就稱f是一個滿射。對任意一個集X,稱X的所有子集所成的集為X的冪集,記作P(X)。
康托定理(1895).對任何集X,不存在從X到冪集P(X)的滿射。
這是集合論最基本的定理之一,一般陳述為“不存在從X到冪集P(X)的一一對應(yīng)”。但不存在滿射當(dāng)然就更不存在一一對應(yīng)。
證明. 任取一個映射f:X →P(X),要證f不是滿射。為此令
我們來證明,不存在z ∈X使得f(z)C。為此用反證法。
假設(shè)存在z ∈X使得f(z)C。若z ∈f(z),則z?C。但Cf(z),故z?f(z),矛盾。若z?f(z),則z ∈C。但Cf(z),故z ∈f(z),也矛盾。這證明不存z ∈X使得f(z)C,故f不是滿射。
那么康托定理與理發(fā)師悖論有什么關(guān)系呢?
我們來給康托這段反證法一個“理發(fā)”的解釋。把X理解為該村村民的集,把f理解為“理發(fā)映射”,即對每一村民x,令f(x)為被x理發(fā)的那些村民的集,即x的“顧客集”。那么康托所考慮的集合
就是該村那些不給自己理發(fā)的人所成的集,而f(z)C的意思就是z恰給本村那些不給自己理發(fā)的人理發(fā),故z就是悖論所說的那位理發(fā)師。
現(xiàn)在來對照一下康托的證明和理發(fā)師悖論。
存在z ∈X使得f(z)C(某村有一理發(fā)師,恰給本村那些不給自己理發(fā)的人理發(fā))。若z ∈f(z),則z?C。但Cf(z),故z?f(z),矛盾(若他給自己理發(fā),則他屬于那種給自己理發(fā)的人。按照他的原則,他應(yīng)該不給自己理發(fā),矛盾)。若z?f(z),則z ∈C。但Cf(z),故z ∈f(z),也矛盾(若他不給自己理發(fā),則他屬于那種不給自己理發(fā)的人。按照他的原則,他應(yīng)該給自己理發(fā),也矛盾)。
顯然,理發(fā)師悖論就是用理發(fā)語言敘述的康托證明。
那么為什么一個是定理,一個是悖論呢?
康托(1895)是在作反證法,前面還有“假設(shè)”二字,后面還有結(jié)尾句“這證明不存z ∈X使得f(z)C”(請讀者檢查一下)。用理發(fā)的語言講,康托是假設(shè)本村有一理發(fā)師恰給本村那些不給自己理發(fā)的人理發(fā),推出矛盾后立刻下結(jié)論不存在這樣一個理發(fā)師。一切正常,一點(diǎn)也不“悖”。
而理發(fā)師悖論(1918)照搬了康托的反證法,卻移去了開頭的“假設(shè)”二字(以及最后的結(jié)尾句),致使人們把該理發(fā)師的存在當(dāng)成了事實(shí),推理似乎就沒有了假設(shè),推出矛盾也就原因不明,成了悖論。
于是我們看到,僅僅移去一個詞就可能使一個反證法的假設(shè)變得隱蔽。這詮釋了隱蔽假設(shè)原理,也給出了
理發(fā)師悖論的解答.村里那位“恰給本村那些不給自己理發(fā)的人理發(fā)”的理發(fā)師的存在只是個假設(shè)。理發(fā)師悖論的矛盾證明這一假設(shè)不成立,即村里不可能存在這樣一個理發(fā)師。
理發(fā)師悖論與康托反證法的掐頭去尾的關(guān)系見文獻(xiàn)[6]。關(guān)于這樣一個理發(fā)師為什么不存在,有一種說法是“理發(fā)師是女性不用刮胡子”。這是不對的。是邏輯的而不是性別的原因使得這樣一個理發(fā)師不可能存在。
讀者要問,還有哪些悖論是現(xiàn)成的反證法的掐頭去尾呢?
若強(qiáng)調(diào)“現(xiàn)成的”,則例子很少。除了理發(fā)師悖論,另一個重要的例子是說謊者悖論,我們將在下一節(jié)充分地分析。這里我們對悖論與反證法的一般的關(guān)系再做一些說明。這有兩個方面,一是反證法如何掐頭去尾成為悖論,二是悖論如何添上頭尾成為反證法,二者都需要一些說明。
(1)把反證法掐頭去尾很容易,但絕大多數(shù)反證法掐頭去尾都荒唐可笑,也就成不了悖論。要想成為悖論,其掐頭去尾必須出于某種原因未被察覺。
相反,隱去康托反證法開頭的“假設(shè)”二字,“假設(shè)某村有一理發(fā)師,恰給那些不給自己理發(fā)的人理發(fā)”就成了“某村有一理發(fā)師,恰給那些不給自己理發(fā)的人理發(fā)”,事實(shí)證明卻未被察覺,成了著名的理發(fā)師悖論。
請讀者想一想,這兩個例子都是隱去“假設(shè)”二字,為什么前者很容易察覺而后者不容易察覺呢?(這個問題雖不在本文的主線上,卻是一個有意義、有深度的問題,對認(rèn)識悖論的實(shí)質(zhì)很重要。)
(2) 把悖論添上頭尾成為反證法則不容易,需要先找出悖論推理里隱藏的假設(shè),而這相當(dāng)于解答悖論。
這是因?yàn)?,反證法的“頭尾”是專門講述“中段”所使用的假設(shè)的,“頭”是宣布該假設(shè),“尾”是下結(jié)論該假設(shè)不成立。所以,只有找出悖論推理里隱藏的假設(shè),才有可能補(bǔ)上“頭尾”寫成反證法。而一旦找出了隱藏的假設(shè),也就可以隨時(shí)補(bǔ)上“頭尾”寫成一個反證法。這個反證法一般就不是現(xiàn)成的了,而是“人為”的了。后面第3.8 小節(jié)將把雅布羅悖論補(bǔ)上“頭尾”寫成這樣一個反證法。
悖論中最有影響的是有2500 多年歷史的說謊者悖論。它有好幾種表述方式,一種比較直觀的是使用卡片:
說謊者悖論這張卡片上的句子為假
若這張卡片上的句子為真,則肯定其所述,故這張卡片上的句子為假,矛盾。若這張卡片上的句子為假,則否定其所述,故這張卡片上的句子為真,也矛盾。
注意,說謊者悖論的推理只是反復(fù)使用(推廣的)塔斯基的T-模式([3]):若x意指p,則x為真當(dāng)且僅當(dāng)p。
中世紀(jì)出現(xiàn)的一種變形是Jourdain 給出的
雙卡悖論第二張卡片上的句子為假
第一張卡片上的句子為真
以下把“第一張卡片上的句子”簡稱為“第一個句子”,等等。
若第一個句子為真,則肯定其所述,因而第二個句子為假。故否定第二個句子之所述,因而第一個句子為假,矛盾。
若第一個句子為假,則否定其所述,因而第二個句子為真。故肯定第二個句子之所述,因而第一個句子為真,也矛盾。
這兩則推理推出了矛盾,但原因不明,成為史上最著名的悖論。
關(guān)于說謊者悖論的文獻(xiàn)卷帙浩繁,最著名的是塔斯基(A.Tarski,[3])的“語言分層”理論和克里普克(S.Kripke,[1])的“真值空隙”理論。2001 年筆者在文獻(xiàn)[4]中給出了一個不同的解答,不采用語言分層,又堅(jiān)持傳統(tǒng)的二值邏輯。下面就來介紹這個解答。
先來看一個新發(fā)現(xiàn)的“三卡悖論”,它將揭示說謊者悖論的本質(zhì),直接導(dǎo)致說謊者悖論的解答。
三卡悖論第二張卡片的句子為真,且第三張卡片的句子為假
第一張卡片的句子為假,或第三張卡片的句子為真
第一張和第二張卡片的句子都為真
設(shè)第一個句子為真。由其所述,第二個句子為真,且第三個句子為假。這樣一來,第三個句子之所述就被肯定了,因而第三個句子為真,與已經(jīng)證明了的第三個句子為假的事實(shí)矛盾。
再設(shè)第一個句子為假。于是,第二個句子之所述就被肯定了,因而第二個句子為真。又,第三個句子之所述就被否定了,因而第三個句子為假。但這樣一來,第一個句子之所述就被肯定了,因而第一個句子為真,矛盾。至此已窮盡所有可能而處處遇到矛盾。
這個悖論出自文獻(xiàn)[4],其陳述和推理都和說謊者悖論類似,是又一個說謊者型的悖論。
但這個“三卡悖論”從何而來?它的推理含有“且”和“或”,邏輯意味甚濃,它是怎樣被發(fā)現(xiàn)的?后面第3.4 小節(jié)將揭示其秘密。現(xiàn)在讓我們先回到說謊者悖論。
說謊者悖論不是一個單一的對象,而是兩個對象之間的“意指”關(guān)系。通過把“這張卡片上的句子為假”寫在一張卡片上,說謊者悖論給出了一個意指關(guān)系,即“這張卡片上的句子”(8 個字)意指“這張卡片上的句子為假”(10 個字)。
塔斯基([3])使用了類似的設(shè)計(jì)。通過把“印在本頁正數(shù)第5 行的句子不真”印在某一頁的正數(shù)第5 行,塔斯基給出了一個意指關(guān)系,即“印在本頁正數(shù)第5行的句子”(12 個字)意指“印在本頁正數(shù)第5 行的句子不真”(14 個字)。注意塔斯基使用的術(shù)語是“不真”而不是“假”。但因本文使用經(jīng)典的二值邏輯,所以對本文來說“不真”等同于“假”。
說謊者悖論是兩個對象之間的意指關(guān)系,這一點(diǎn)已經(jīng)是文獻(xiàn)中的共識。比如現(xiàn)代文獻(xiàn)對說謊者悖論的表述形式:
就明確地表達(dá)了這一點(diǎn),其中L表示詞組“這個句子”,冒號表示“意指”(或“所述是”)。([8])
現(xiàn)在我們提出一個關(guān)鍵的看法:不妨把這個意指關(guān)系視為“尚未驗(yàn)證”的而不是“已經(jīng)驗(yàn)證”的,也就是說,不妨寫成一個“方程”:
由于不排除這個式子將來“被驗(yàn)證”的可能性,這樣寫并不失去什么。以后我們將看到,把L:L為假寫成X:X為假不僅是“不妨”,而且是“必須”。
以下我們有時(shí)會更簡練地用符號F表示“為假”,則說謊者悖論就完全符號化為:
把L寫成X,讀者可能有些不放心。不過,說到底,“這個句子”一定是指一個確定的、具體的句子嗎?
不一定。我們來看詞組“這個數(shù)”。在很多時(shí)候它的確是指一個確定的數(shù),比如一個人指著黑板上的一個“2”說:“瞧這個數(shù)!”這時(shí),“這個數(shù)”就是指這個具體的數(shù)“2”。但也有另一種情形,“這個數(shù)”被用來表示一個待定的數(shù),一個“未知數(shù)”,比如一位老師在課堂上給學(xué)生出題:“一個數(shù)等于這個數(shù)自己的2 倍減3,求這個數(shù)。”其中的代詞詞組“這個數(shù)”就表示一個未知數(shù)x,老師的題目也就是一個方程x2x-3。
換句話說,代詞詞組“這個數(shù)”(其他代詞詞組如“這個句子”“第一張卡片上的句子”“印在本頁正數(shù)第5 行的句子”也一樣)本來就有兩種可能的功能,一是代表一個確定的數(shù),二是代表一個待定的數(shù),即一個“變元”。后面第3.5 小節(jié)要定義的概念“句變元”,其語言學(xué)依據(jù)就是代詞詞組的這第二種功能。上面這位老師是在談?wù)摗斑@個數(shù)”:一個數(shù)等于這個數(shù)自己的2 倍減3,其中的代詞“這個數(shù)”是一個變元x,而整個問題是一個方程x2x-3?,F(xiàn)在說謊者悖論是在談?wù)摗斑@個句”:一個句意指這個句自己為假,其中的代詞“這個句”就是一個“句變元”X,而整個說謊者悖論就是一個“句方程”X:X為假。這是對說謊者悖論為什么是一個“句方程”的一個樸素的說明。嚴(yán)格的、理論的說明將在第3.9 小節(jié)的問題1 中給出。
上述x2x-3 是一個有解方程。與說謊者悖論關(guān)系更緊密的是一個無解布爾方程:
定理A.布爾方程x=無解。
證明. 假設(shè)該方程有解,即假設(shè)存在x的一個值使該方程兩端相等。為簡便,直接用x表示這個值。
若x1(若這個句子為真),則由方程,x0(則肯定其所述,故這個句子為假),矛盾。反之,若x0(若這個句子為假),則由方程,x1(則否定其所述,故這個句子為真),也矛盾。
此矛盾證明該布爾方程無解。
讀者一定注意到了,括弧里的譯文就是說謊者悖論的推理。
那么卡片呢?卡片則是布爾方程x=本身的翻譯。把x=翻譯為X:XF,用語言敘述就是,“這張卡片上的句子”意指“這張卡片上的句子為假”,再把“這張卡片上的句子為假”寫在一張卡片上,就得到說謊者卡片
這張卡片上的句子為假
可見,說謊者悖論是布爾方程x=無解的反證法的掐頭去尾的翻譯。
這正是隱蔽假設(shè)原理的框架。定理A 反證法的主體就是說謊者悖論的推理,“頭尾”則解釋了這個推理推出矛盾的原因,正是兩千多年來人們苦苦尋找的說謊者悖論的解答!
由于太久找不到說謊者悖論推理中的假設(shè),人們認(rèn)為說謊者悖論的矛盾一定是語言或邏輯的某種深層次缺陷所致(上世紀(jì)中葉以來由于悖論的驅(qū)動甚至出現(xiàn)了一種理論挑戰(zhàn)經(jīng)典邏輯的根本大法矛盾律,主張“不相容邏輯”)。而現(xiàn)在,定理A 反證法的“頭尾”明明白白寫著:說謊者悖論的推理假設(shè)了“該方程有解”。當(dāng)然什么是“方程”什么是“解”對說謊者悖論來說還不太清楚,但那只是個術(shù)語問題,重要的是,說謊者悖論推理里隱藏的假設(shè)被發(fā)現(xiàn)了!
不過,如此重大的發(fā)現(xiàn)得來似乎太容易了,只是把說謊者悖論與布爾方程x=作了一下對比。這會不會是膚淺的表面類比呢?
為確證這不是膚淺的表面類比而是一個洞見,筆者找了下面這個三元布爾方程組(容易看出“雙卡悖論”是布爾方程組x,yx無解的反證法的掐頭去尾,故考慮三元),把它的反證法掐頭去尾翻譯過來,果然得到一個令人眼前一亮的說謊者型的“三卡悖論”,見文獻(xiàn)[4]。我們來回顧這一制作過程。
定理B.布爾方程組
無解。
證明. 假設(shè)該方程組有解,即假設(shè)存在x,y,z的值使方程組成立。為簡便,直接用x,y,z表示這三個值。
假設(shè)x1。由方程(1),得y1,且z0。這樣一來,由方程(3),得z1,與已經(jīng)證明了的z0 矛盾。
再假設(shè)x0。于是,由方程(2),得y1。又由方程(3),得z0。但這樣一來,代入方程(1)就得x1,矛盾。
此矛盾證明該布爾方程組無解。
現(xiàn)在來制作三卡悖論。先看定理B 的陳述。我們從中去掉“布爾方程組”和“無解”幾個字,把三個布爾方程翻譯成三張卡片。具體做法是用X,Y,Z表示三個代詞詞組“第一個句子”“第二個句子”“第三個句子”。我們知道布爾代數(shù)乘法對應(yīng)于“且”,用∧表示,加法對應(yīng)于“或”,用∨表示。再用T表示“為真”,F(xiàn)表示“為假”,三個布爾方程就翻譯成三個“句方程”
我們來把它們寫成三張卡片。用自然語言敘述,第一個句方程X:Y T ∧ZF就成為“第一張卡片上的句子”意指“第二張卡片上的句子為真,且第三張卡片上的句子為假”。把“第二張卡片上的句子為真,且第三張卡片上的句子為假”寫在一張卡片上,并放在第一個位置,就得到第一張卡片
第二張卡片的句子為真,且第三張卡片的句子為假
這就是第一張卡片的由來。類似得到其他兩張卡片。
再看定理B 的證明。我們?nèi)サ舴醋C法的“頭尾”,只翻譯中段:
假設(shè)x1(設(shè)第一個句子為真)。由方程(1),得y1,且z0(由其所述,第二個句子為真,且第三個句子為假)。這樣一來,由方程(3),得z1,與已經(jīng)證明了的z0 矛盾(這樣一來,第三個句子之所述就被肯定了,因而第三個句子為真,與已經(jīng)證明了的第三個句子為假的事實(shí)矛盾)。
再假設(shè)x0(再設(shè)第一個句子為假)。于是,由方程(2),得y1(于是,第二個句子之所述就被肯定了,因而第二個句子為真)。又由方程(3),得z0(又,第三個句子之所述就被否定了,因而第三個句子為假)。但這樣一來,代入方程(1)就得x1,矛盾(但這樣一來,第一個句子之所述就被肯定了,因而第一個句子為真,矛盾)。
括弧中的譯文正是第3.1 小節(jié)的三卡悖論的推理??梢姡叭ㄣU摗笔嵌ɡ鞡 的反證法的掐頭去尾的翻譯。
三卡悖論是一個“大型的”說謊者悖論。它的發(fā)現(xiàn)證實(shí)了說謊者悖論與布爾方程的關(guān)系絕不是表面現(xiàn)象。類似地,可以構(gòu)造出四卡、五卡、......N 卡悖論,說謊者悖論只是這個家族的冰山一角。([4])這展示了說謊者悖論前所未見的寬廣而深刻的背景。
按照隱蔽假設(shè)原理,三卡悖論與定理B 的反證法有相同的假設(shè),即“該方程組有解”的假設(shè),也即“存在變元的值滿足該方程組”的假設(shè)。
這一發(fā)現(xiàn)具有重要的意義。我們知道,關(guān)于說謊者悖論,主流的理論著重于對“自我指涉”和“真謂詞”的分析。問題在于,三卡悖論所表現(xiàn)的“自我指涉”和“真謂詞”與說謊者悖論完全相同(三卡悖論表現(xiàn)為“互相指涉”但最終歸結(jié)為“自我指涉”)。這說明,自我指涉和真謂詞雖然是三卡悖論的明顯的外部特征,卻不是問題的要害。問題的要害是,三卡悖論的推理隱蔽地假設(shè)了“該方程組有解”也即“存在變元的值滿足該方程組”。那么說謊者悖論也是。
下一步要做什么就很明確了,就是搞清楚“該方程組有解”或“存在變元的值滿足該方程組”這一假設(shè)所說的“方程”“解”“變元”“值”對語言悖論來說是什么意思。我們在第3.2 小節(jié)曾通過一位教師在課堂上的問題非正式地描述了“句變元”和“句方程”,現(xiàn)在來正式定義這幾個概念。首先回顧一下代數(shù)學(xué)里的定義。
取定一個數(shù)域F,比如實(shí)數(shù)域,作為討論的論域。于是代數(shù)學(xué)里有如下4 個概念:
·F上的一個變元(又稱未知數(shù)),是一個符號,常用x,y,z等表示,用來代表F的任意一個元素,但一般尚未確定代表F的哪個元素。變元所代表的F的元素稱為這個變元的值。注意變元不是F的元素,變元的值才是。
· 方程是含有未知數(shù)的等式。
· 方程的解是使得該方程兩端相等的未知數(shù)的值。一個方程可以有解,也可以無解。
現(xiàn)在我們來建立語言學(xué)中的相應(yīng)概念。對照x與X:Y T ∧ZF可知,與“數(shù)”x,y,z相對應(yīng)的是“句”X,Y,Z,因此最自然的是把相應(yīng)的4 個概念命名為“句變元”“句變元的值”“句方程”“句解”。
回顧在經(jīng)典邏輯里,所謂命題是指可以判斷真假的陳述句。為討論說謊者悖論,我們?nèi)∪w命題所成的類P作為論域。以下常把命題叫做“句子”,或簡稱“句”,以便和說謊者悖論的用語一致。
現(xiàn)在來定義這4 個概念。
·P上的一個句變元是“這個句子”“第一張卡片上的句子”“印在本頁正數(shù)第5 行的句子”那樣的代詞詞組,常用X,Y,Z等符號表示,用來代表P的任意一個元素,但一般尚未確定代表P的哪個元素。句變元所代表的P的元素稱為這個句變元的值。注意句變元不是P的元素,句變元的值才是。(請讀者與上面代數(shù)學(xué)的“變元”定義相對照。)
· 句方程(或稱意指方程)是含有句變元的意指關(guān)系式,左端是單獨(dú)一個句變元,中間是“意指”符號“:”或“:=”,右端是左端所意指的內(nèi)容,比如X:Y T ∧ZF。句方程經(jīng)常用自然語言表達(dá),比如“甲句說乙句為假”就是一個典型的句方程,其中的“說”也就是“意指”。
· 句解是使得該句方程成立的句變元的值。一個句方程可以有句解,也可以無句解。
我們來看一下上面提到的句方程的例子:
例. 甲句說乙句為假,即X:Y為假,其中“:”表示“說”或“意思是”。
這是一個典型的句方程,即“雙卡悖論”中的第一張卡片。這個句方程有句解。比如令X為“一加一等于三是錯誤的”,Y為“一加一等于三”,這兩個句子都是P的元素,代入句方程立見是該句方程的一個句解,因?yàn)椤耙患右坏扔谌清e誤的意思是一加一等于三為假”顯然成立。注. 以上我們選取了經(jīng)典邏輯的“命題”的類P作為論域。實(shí)際上,討論說謊者悖論,論域的選取不是唯一的。從數(shù)理邏輯的觀點(diǎn)看,這一論域可以抽象地、公理化地定義,而且需要定義的不只是上述4 個概念,還有兩個概念“意指”和“為真”也需要定義。加上原始概念“句”,共有7 個概念——句、意指、為真、句變元、句變元的值、句方程、句解——需要定義,包括建立公理以約束它們之間的關(guān)系。為了自給自足地定義這些概念,作者在文獻(xiàn)[4]中采用了形式化的方式。文獻(xiàn)[4]還討論了“說真話者”。值得注意的是,“說真話者”依賴于對意指符號“:”的解釋,這一點(diǎn),與說謊者悖論不依賴于對意指符號“:”的解釋很不相同。
上一小節(jié)給出了句方程X:Y為假的一個句解。實(shí)際上這個句方程有無窮多個句解。任取P的一個元素A(比如取A為“一加一等于二”),令X為“A為假”,令Y為A,就構(gòu)成該句方程的一個句解,因?yàn)椤耙患右坏扔诙榧僖馑际且患右坏扔诙榧佟逼椒驳爻闪ⅰ_@樣看,句方程很容易有解,因而找一個無解句方程也許不太容易。幸運(yùn)的是,我們手里就握有一個無解句方程,那就是說謊者悖論X:X為假(當(dāng)然,通過構(gòu)造三卡悖論現(xiàn)在我們已經(jīng)知道有無窮多無解句方程組),它和句方程X:Y為假只差一個字母。證明它無句解就不能靠舉例了,而是用反證法。
定理A′.說謊者方程(即X:X為假)無句解。
證明. 假設(shè)該句方程有句解,即假設(shè)存在X的一個值L使得L:L為假。
若L為真,則肯定其所述,故L為假,矛盾。反之,若L為假,則否定其所述,故L為真,也矛盾。
此矛盾證明該句方程無句解。
這個反證法的“中段”就是說謊者悖論。添上“頭尾”之后,矛盾的原因就清楚了,悖論就不“?!绷?。這再一次詮釋了隱蔽假設(shè)原理。
看到這里,讀者可能要問,添上這個“頭尾”,形式上倒是像反證法了,但這個頭尾與中段真是融匯一體的嗎?這個“有句解”的假設(shè),也即“L是一個值”的假設(shè),真的用在了說謊者悖論的推理里嗎?用在了哪里?
問得好!這就是下面的基本問題2。讓我們往下看。
定理A′其實(shí)是定理A 的翻譯。第3.2 小節(jié)我們曾把定理A 的“中段”做了翻譯。當(dāng)時(shí)沒有翻譯“頭尾”,是因?yàn)椤邦^尾”里的“方程”“解”等術(shù)語無法翻譯?,F(xiàn)在有了“句方程”“句解”等新概念,就可以把定理A 完整地翻譯過來了。
定理A′的陳述對說謊者悖論沒有采用文獻(xiàn)中的通常寫法L:L為假,而是寫成了X:X為假,其證明則通過取值把X換回成了L。這是與定理A 的做法一致的,是與代數(shù)學(xué)的基本思想一致的。下面的解答總結(jié)了這個微妙的“換去又換回”的過程:
說謊者悖論的解答.說謊者悖論L:L為假是一個句變元問題,應(yīng)該寫成一個句方程X:X為假。說謊者悖論推出矛盾是因?yàn)殡[蔽地假設(shè)了該句方程有句解,即隱蔽地假設(shè)了存在X的一個值L使得L:L為假。說謊者悖論的矛盾證明,不存在X的值L使得L:L為假。
這說明,區(qū)分“變元”和它的“值”,是理解說謊者悖論的哲學(xué)關(guān)鍵。說謊者悖論是一個句變元問題,要用符號X來表述,但在推理時(shí),則要假設(shè)X是一個“值”,要用符號L來表述。說謊者悖論把二者混到一起了。
這個解答是受代數(shù)學(xué)的啟發(fā)得到的。當(dāng)然,不能說因?yàn)榇鷶?shù)學(xué)里有變元、方程的概念,說謊者悖論就也是一個“句變元”“句方程”問題。說謊者悖論究竟為什么是一個“句變元”“句方程”問題,必須有它自身的語言學(xué)和邏輯學(xué)的根據(jù),必須自己從根本上回答下面兩個基本問題:
基本問題1.為什么說謊者悖論L:L為假是一個句變元問題,應(yīng)該寫為X:X為假?
基本問題2.為什么在說謊者悖論的推理中必須把X換回為一個“值”L?推理中究竟哪里用到了L是一個“值”的假設(shè)?
這兩個基本問題將在第3.9 小節(jié)給以徹底的回答。這里對“L”和“X”再做幾點(diǎn)一般的說明。
布爾方程x和說謊者悖論L:LF都是“自我指涉”,推理相同,為什么x不是悖論而L:LF卻是呢?更一般地,在代數(shù)學(xué)里,等號兩端隨便寫兩個關(guān)于x的表達(dá)式都不會出“悖論”,為什么在語言學(xué)里,L:LF兩端稍稍不同就成了悖論呢?
顯然是因?yàn)?,代?shù)學(xué)是把x當(dāng)做一種尚未驗(yàn)證的式子處理的,因此有退路,出了矛盾大不了說一句“該方程無解”就行了。而語言學(xué)卻是把L:LF當(dāng)做已經(jīng)驗(yàn)證的式子處理的,因此沒有退路,出了矛盾就是死結(jié)。
語言學(xué)處理L:LF之所以缺乏彈性,原因就是缺少“句變元X”的概念。代數(shù)學(xué)的“變元x”的概念看似簡單,實(shí)際上在歷史上是劃時(shí)代的。代數(shù)課程給人印象最深的就是“變元x”的概念,正是這個概念抓住了“尚未驗(yàn)證”的微妙含義?,F(xiàn)在我們給語言學(xué)也建立了“句變元X”的概念,以后就也可以在符號“ :”兩端隨便寫兩個關(guān)于X的表達(dá)式而不會出悖論了,出了矛盾大不了說一句“該句方程無句解”就行了。我們對說謊者悖論的解答就是這樣做的。一句話,變元不怕自指,方程不怕自指。
“句方程”的概念可以厘清語言學(xué)的一些長期存在的疑難問題。比如主流理論把“一個句子說自己為假”當(dāng)做一個句子,稱作“說謊者句”。實(shí)際上,它是個句方程X:X為假,應(yīng)該稱作“說謊者方程”?!熬渥印笔荘的元素,是經(jīng)典邏輯中的可以判斷真假的陳述句,而“句變元”按定義不是P的元素,無所謂真假,從而“句方程”也不是P的元素,無所謂真假。這是一個嚴(yán)重的區(qū)別。又如常常見到,甚至在海報(bào)上見到這樣一個問題:“一個句子說自己為假,這句話是真是假?”實(shí)際上,這樣提問是錯誤的,正確的問題應(yīng)該是:“一個句子說自己為假,這個句方程有解無解?”這兩個問題都?xì)w結(jié)為“一個句子說自己為假”為什么是一個“句方程”,即基本問題1。徹底的回答將在第3.9 小節(jié)給出。
現(xiàn)在來把我們關(guān)于說謊者悖論的看法小結(jié)一下:
(1) 說謊者悖論是一個意指關(guān)系L:L 為假,其中L 表示“這個句子”。
(2) 為慎重起見最好先視L為句變元,寫成X,即把說謊者悖論寫成一個句方程X:X為假。如果這個句方程有句解,再把X寫成L不遲。
(3) 但實(shí)際上,這個句方程無句解。
(4) 證明用反證法:假設(shè)該句方程有句解,即假設(shè)存在X的一個值L使得L:L為假。那么,若L 為真,則肯定其所述,故L 為假,矛盾。若L 為假,則否定其所述,故L 為真,也矛盾。這一矛盾證明該句方程無句解。
在這樣的理解下,說謊者悖論完全消解,風(fēng)平浪靜了。
但這4 點(diǎn)中,只有黑體字部分是文獻(xiàn)中已有的,其余部分,特別是反證法的頭尾,一直缺失。這些缺失的部分處處需要“句變元”“句變元的值”“句方程”“句解”等概念才能表述,而這些概念一直沒有出現(xiàn)。缺失了這么多鏈條,說謊者悖論的矛盾就無法理解,成了千古之謎。
上一小節(jié)得到了說謊者悖論的解答。這個解答不像理發(fā)師悖論的解答那樣一經(jīng)對照康托反證法馬上就被理解了。這一次,雖經(jīng)對照布爾反證法,但說謊者悖論的解答理解起來困難得多。讀著說謊者悖論的解答,什么“句方程”“句解”,搞不好不知道它在說什么。人們會抱怨,說謊者悖論是一個純語言學(xué)問題,為什么一定要使用奇怪的“代數(shù)學(xué)術(shù)語”呢?
但實(shí)際上,說謊者悖論并不是一個純語言學(xué)問題。這只需看三卡悖論。三卡悖論是由布爾方程組翻譯而來,是代數(shù)問題的語言表述,那么三卡悖論是語言學(xué)問題還是代數(shù)學(xué)問題呢?只能說表面上是語言學(xué)問題而實(shí)際上是代數(shù)學(xué)問題,無論如何不是純語言學(xué)問題。那么說謊者悖論也如此。說謊者悖論不是一個純語言學(xué)問題,而是語言學(xué)中的代數(shù)學(xué)現(xiàn)象。它的解答需要使用一些“代數(shù)學(xué)術(shù)語”,是并不奇怪的。
三卡悖論是我們立論的基礎(chǔ)。如果關(guān)于說謊者悖論有什么疑難,最好的辦法是去看三卡悖論,在那里一切都清楚得多。
句變元的觀點(diǎn)不僅可以解答說謊者悖論,還可以解答科里(Curry,或稱L?b,[2])悖論和雅布羅悖論??评镢U摰慕獯鹨娢墨I(xiàn)[4],這里給出雅布羅悖論的解答。這幾個悖論(說謊者,科里,雅布羅)有一個共同的關(guān)鍵詞“意指”(或“說”,或“所述是”),可統(tǒng)稱為“意指悖論”。
雅布羅悖論([5]). 有一列句S1,S2,...,每一個都說自己后面的所有句為假。
若S1為真,則肯定其所述,即S2,S3,...,都為假。既然S2為假,就要否定其所述,故必有m >2 使得Sm為真,矛盾。
若S1為假,則否定其所述,故必有n >1 使得Sn為真。那么肯定其所述,即Sn+1,Sn+2,...,都為假。既然Sn+1為假,就要否定其所述,故必有k >n+1 使得Sk為真,也矛盾。
這就是雅布羅悖論,其中每個句僅指涉后面的句,因而永遠(yuǎn)不歸結(jié)為自我指涉。這說明“自我指涉”并非導(dǎo)致矛盾的必要條件。實(shí)際上,雅布羅悖論導(dǎo)致矛盾的原因和說謊者悖論相同,都是因?yàn)榛煜恕白冊焙退摹爸怠?,因此可以把雅布羅悖論添上與說謊者悖論同樣的“頭尾”寫成反證法:
雅布羅定理.雅布羅悖論是個句變元問題,應(yīng)該用Xi陳述成“有一列句X1,X2,...每一個都說自己后面的所有句為假”。這個問題無句解,即不存在X1,X2,...的值S1,S2,...使得每一個都說自己后面的所有句為假。
證明. 假設(shè)存在X1,X2,...的值S1,S2,...使得每一個都說自己后面的所有句為假。則
· 若S1為真,......矛盾。
· 若S1為假,......也矛盾。(這兩個省略號代表雅布羅原來的推理)
此矛盾證明不存在X1,X2,...的值S1,S2,...使得每一個都說自己后面的所有句為假。
這也給出了:
雅布羅悖論的解答.雅布羅悖論是一個句變元問題,應(yīng)該用變元符號Xi陳述成“有一列句X1,X2,...每一個都說自己后面的所有句為假”。雅布羅悖論推出矛盾是因?yàn)殡[蔽地假設(shè)了存在這些句變元的值S1,S2,...使得每一個都說自己后面的所有句為假。所得矛盾證明,不存在這些句變元的值S1,S2,...使得每一個都說自己后面的所有句為假。
這就是說,和說謊者悖論一樣,區(qū)分“變元”和它的“值”是理解雅布羅悖論的關(guān)鍵,而為了區(qū)分,需要在陳述中把Si換成Xi,再在推理中換回成Si,故雅布羅悖論的解答同樣歸結(jié)為第3.6 小節(jié)的兩個基本問題,詳見下一小節(jié)。
這一小節(jié)對第3.6 小節(jié)的兩個基本問題做一徹底的回答。我們就說謊者悖論做回答,但答案同樣適用于雅布羅悖論和科里悖論。注意在這兩個問題的陳述里“方程”和“解”的術(shù)語沒有出現(xiàn),是因?yàn)橐呀?jīng)歸結(jié)為“變元”和“值”:
基本問題1.為什么說謊者悖論L:L為假是一個句變元問題,應(yīng)該寫為X:X為假?
基本問題2.說謊者悖論的推理是:“若L為真,則肯定其所述,故L為假,矛盾。反之,若L為假,則否定其所述,故L為真,也矛盾”。為什么在這個推理中必須把X換回為一個“值”L?推理中究竟哪里用到了L是一個“值”的假設(shè)?
我們來回答問題2,在此過程中,問題1 的回答也將水到渠成。注意問題2的原型是在代數(shù)學(xué)里:
代數(shù)原型.定理A 的推理是:“若x1,則由方程,x0,矛盾。反之,若x0,則由方程,x1,也矛盾”。為什么在這個推理中必須假設(shè)x是一個“值”?推理中究竟哪里用到了x是一個“值”的假設(shè)?
我發(fā)現(xiàn)自己不會回答這個代數(shù)原型問題。定理A 的證明一開始就假設(shè)了x是一個“值”(請讀者查看定理A 的證明,在第3.2 小節(jié)),這是我們習(xí)慣了的代數(shù)課程里的標(biāo)準(zhǔn)格式。我們確信這個關(guān)于“值”的假設(shè)一定用在了證明的某個地方,但就是找不到!我意識到為什么說謊者悖論如此困難了。
最后終于找到了。我們知道“變元”和變元的“值”的區(qū)別就在于,“變元”尚未確定代表哪個數(shù),而變元的“值”則是一個確定的數(shù)。比如第一句推理是:“若x1,則由方程,x0,矛盾?!睆膞1 到x0,在這個推理過程中,x必須始終代表同一個確定的數(shù),它既等于1 又等于0 才是矛盾。如果x在這個推理過程中可以變,那它既等于1 又等于0 就不是矛盾。換句話說,當(dāng)我們斷言“矛盾”時(shí),就不自覺地用到了x是一個“值”的假設(shè)。
翻譯過來就知道說謊者悖論的推理為什么必須假設(shè)L是一個“值”。我們知道“句變元”和句變元的“值”的區(qū)別就在于,“句變元”尚未確定代表論域P的哪個元素,而句變元的“值”則是P的確定的元素。比如第一句推理是:“若L為真,則肯定其所述,故L為假,矛盾?!睆腖為真到L為假,在這個推理過程中,L必須始終代表同一個確定的句,它既為真又為假才是矛盾。如果L在這個推理過程中可以變,那它既為真又為假就不是矛盾。換句話說,當(dāng)我們斷言“矛盾”時(shí),就不自覺地用到了L是一個“值”的假設(shè)。
原來,如果不假設(shè)L是一個“值”,而是可以變,那么它既為真又為假就不是矛盾。問題2 的答案多么簡單自然?。?/p>
但人們會說,在“若L為真,則肯定其所述,故L為假,矛盾”的推理過程中,L當(dāng)然不可以變啦,這還用說嗎?這也算假設(shè)嗎?
問題就出在這里。實(shí)際上,L沒有理由“當(dāng)然不可以變”。在本文中,L代表說謊者悖論中的代詞詞組“這個句子”。第3.2 小節(jié)說過,代詞詞組本來就有兩種可能的功能,一是代表一個確定的對象,這時(shí)就不可以變;二是代表一個尚未確定的對象,這時(shí)就具有“變元”的功能,就可以變。說謊者悖論只說“這個句子”,卻沒有說明究竟是哪個具體的句子(P的哪個元素),無法肯定是第一種功能。另一方面,三卡悖論的“第一個句子”“第二個句子”“第三個句子”是由代數(shù)學(xué)的x,y,z翻譯而來,卻肯定具有變元的功能。那么與三卡悖論類比,說謊者悖論的“這個句子”L至少應(yīng)該說很有可能具有變元的功能,實(shí)際上下一自然段馬上就要證明L確實(shí)具有變元的功能。無論如何,L沒有理由“當(dāng)然不可以變”。
問題1 的答案至此也清楚了。如果L是一個“值”,不可以變,說謊者推理就將順利通過而得到矛盾。因此,根據(jù)反證法原理,L一定不是一個“值”,而是一個句變元X。簡言之,是說謊者悖論的矛盾本身證明了說謊者悖論是一個句變元問題。這就是期待已久的問題1 的答案。這個答案很短,但含義很深。
回過頭看,問題1 相當(dāng)于問,為什么L是一個“值”則說謊者推理就推出矛盾。而問題2 是問,為什么L不是一個“值”則說謊者推理就推不出矛盾。二者合起來就是問,為什么“L是一個值”是說謊者悖論推出矛盾的充分必要條件。
所謂“L是一個值”,說白了就是“L在推理中途不可以變”。這也確實(shí)太平淡了。莫非就是因?yàn)樘降?,這個假設(shè)在說謊者悖論中隱藏了2500 年?若不是代數(shù)學(xué)在歷史上發(fā)現(xiàn)了“x是一個值”是一個實(shí)質(zhì)性假設(shè),我們是否至今也不會意識到“L是一個值”是一個實(shí)質(zhì)性假設(shè)呢?
悖論的要害是隱蔽的假設(shè)。若論隱蔽之深,說謊者悖論可謂登峰造極。代數(shù)學(xué)專門建立了“值”的概念,無數(shù)次明確宣示“假設(shè)x是一個值”,人們尚且找不到該假設(shè)用在了哪里,何況說謊者悖論連“值”的概念都沒有??梢韵胍姡瑢?shí)際存在的“L是一個值”的假設(shè)在說謊者悖論中隱藏有多深。
相傳古希臘詩人、學(xué)者菲勒塔斯(Philitas)為說謊者悖論殫精竭慮,身心交瘁而死。這樣的人多么純潔。要知道他生活在遙遠(yuǎn)的古代,不要說“句變元”,就是代數(shù)學(xué)的“變元”,也要等到他身后1000 多年才會出現(xiàn)。有過這樣純潔的人,是古希臘文明的光榮,也是人類理性的光榮。
謹(jǐn)以此文紀(jì)念這位用生命追求邏輯純潔性的思想先驅(qū)。