這個(gè)主題依然來自愛德華·Lee?的《柏拉圖和技術(shù)呆子》。
Lee這本書的前半部分和后半部分幾乎沒什么關(guān)系。前半部分講計(jì)算機(jī)工程師的智慧,后半部分則是從理論上探討計(jì)算機(jī)這種東西的局限性。但是這本書的內(nèi)容非常重要,作者擁有一線的見識(shí),而且下了很大的調(diào)研功夫,特別是這個(gè)后半部分。
它講一個(gè)特別大的大道理,足以影響你的世界觀和人生觀。這個(gè)道理來自深刻的數(shù)學(xué),但是距離我們每個(gè)人又都很近。
作者用由淺入深的方法說明,我們不需要多少數(shù)學(xué)知識(shí),但是我們需要思考。
工程師做的都是模型,計(jì)算機(jī)也是一種模型。但是對(duì)一個(gè)模型琢磨的久了,難免就會(huì)覺得它不僅僅是一個(gè)模型。
比如你可能會(huì)問,人腦……也是一臺(tái)計(jì)算機(jī)嗎?
這種問題跟工程師怎么報(bào)效祖國(guó)沒啥關(guān)系??墒亲鳛橐环N智識(shí)上的興趣,每個(gè)人都會(huì)忍不住關(guān)注這些問題。這個(gè)問題涉及到“圖靈機(jī)”、信息論和“哥德爾不完備性定理”,這里會(huì)給你一個(gè)統(tǒng)一的解釋。
我們將通過計(jì)算機(jī)科學(xué)的眼光,理解這個(gè)世界。
在回答人腦是不是計(jì)算機(jī)之前,我們要先問一個(gè)更大的問題。
——?這個(gè)宇宙是計(jì)算機(jī)嗎?
有一種猜想認(rèn)為我們以為的這個(gè)“現(xiàn)實(shí)世界”,其實(shí)是某個(gè)更高智能的計(jì)算機(jī)模擬?——?我們其實(shí)是生活在一個(gè)網(wǎng)絡(luò)游戲里。如果你覺得這個(gè)猜想太過離奇,我還可以換個(gè)說法:請(qǐng)問我們生活的這個(gè)現(xiàn)實(shí)世界,在理論上,可以用一臺(tái)要多強(qiáng)大就有多強(qiáng)大的計(jì)算機(jī)來完全模擬嗎?
這個(gè)問題可不僅僅是個(gè)好玩的思想實(shí)驗(yàn)。我們需要理解計(jì)算機(jī)的本性,并且跟真實(shí)世界的本性做一個(gè)對(duì)比。使用計(jì)算機(jī)視角,你會(huì)重新認(rèn)識(shí)這個(gè)世界。
而你可能想不到,這一切要先從“實(shí)數(shù)”開始講起。
1? “實(shí)數(shù)”的不可思議
每個(gè)中學(xué)生都學(xué)過各種“數(shù)”?——
“自然數(shù)”是?0,1,2,3,……
“整數(shù)”是自然數(shù)加上負(fù)的自然數(shù):……-3,-2,-1,0,1,2,3……
“有理數(shù)”則包括了分?jǐn)?shù)和小數(shù),但要求必須是有限的、或者是無限但是必須循環(huán)的小數(shù)?——?本質(zhì)上,所有有理數(shù)都可以寫成分?jǐn)?shù),也就是兩個(gè)整數(shù)相除:1/2,1/3,4/3?……
在說實(shí)數(shù)之前,我先問你一個(gè)問題。你說到底是自然數(shù)多呢?還是自然數(shù)里的“偶數(shù)”多呢?
人的直覺反應(yīng)肯定是自然數(shù)比偶數(shù)多。偶數(shù)?——?0,2,4,6,8,……——?只是自然數(shù)的一部分,自然數(shù)里還有1,3,5,7這些奇數(shù),整體肯定比部分多啊。但是請(qǐng)注意,自然數(shù)和偶數(shù)都有*無限多*個(gè)。無限多的兩種東西,怎么比較多少?——?無限大和無限大到底哪個(gè)大,這是一個(gè)問題。
德國(guó)哲學(xué)家格奧爾格·康托(Georg?Cantor)曾經(jīng)為此思考了整整12年。大概是1874年,康托提出,自然數(shù)、自然數(shù)中的偶數(shù)、甚至一切有理數(shù),都是一樣多的。
康托的洞見在于兩個(gè)集合的元素如果能一一對(duì)應(yīng),那這兩個(gè)集合的元素個(gè)數(shù)就一樣多。
每個(gè)偶數(shù)除以2就是一個(gè)自然數(shù),偶數(shù)和自然數(shù)可以一一對(duì)應(yīng)?——
0——0,
2——1,
4——2,
6——3,
……
同樣道理,全體整數(shù)的個(gè)數(shù)也和自然數(shù)的個(gè)數(shù)是一樣多的,因?yàn)槲覀兛梢园颜麛?shù)按照一定的規(guī)律“數(shù)出來”,也就建立了跟自然數(shù)的一一對(duì)應(yīng)?——
0——0,
-1——1,
1——2,
-2——3,
2——4,
-3——5,
3——6,
……
數(shù)學(xué)上這叫“可數(shù)”。一個(gè)包含無限個(gè)元素的集合只要是“可數(shù)”的,它就能跟自然數(shù)一一對(duì)應(yīng),它的元素個(gè)數(shù)就跟自然數(shù)一樣多。
事實(shí)上,有理數(shù)的集合也是可數(shù)的。比如我們可以按照下面這張表格,把全體有理數(shù)列舉出來?——

無非就是把每個(gè)有理數(shù)都寫成分?jǐn)?shù)的形式,然后根據(jù)分子、分母的數(shù)字決定它在表格上的位置。只要按照?qǐng)D中箭頭的方式,我們就可以把全體有理數(shù)數(shù)一遍。你一邊數(shù)著有理數(shù),一邊數(shù)著自然數(shù),這就建立了一一對(duì)應(yīng)的關(guān)系:所以有理數(shù)也和自然數(shù)一樣多。
現(xiàn)在輪到“實(shí)數(shù)”了。所有有理數(shù)都是實(shí)數(shù),而實(shí)數(shù)還包括“無理數(shù)”,也就是小學(xué)老師所謂的“無限不循環(huán)小數(shù)”。無理數(shù)的特點(diǎn)是不能寫成分?jǐn)?shù)的形式,也就是不能用兩個(gè)整數(shù)相除得到。比如根號(hào)2和圓周率π就都是無理數(shù)。
具體怎么證明我就不說了,但是數(shù)學(xué)上有個(gè)結(jié)論:無理數(shù),是“不可數(shù)”的。
也就是說,實(shí)數(shù)不能跟自然數(shù)做一一對(duì)應(yīng)。雖然自然數(shù)和實(shí)數(shù)都有無限多個(gè),但是這兩個(gè)無限不是一個(gè)級(jí)別?——?實(shí)數(shù)比自然數(shù)要多得多。如果你說自然數(shù)是“無窮多”,那實(shí)數(shù)就是“不可思議的多”。
好,今天的數(shù)學(xué)就這么多。你可能會(huì)說,這些都是一百多年前的人就知道的數(shù)學(xué),現(xiàn)在對(duì)很多人來說都是常識(shí),那說這些有啥意義呢?
意義就在于,實(shí)數(shù)是不可數(shù)的,而計(jì)算機(jī)的一切,都是可數(shù)的。
2? 計(jì)算機(jī)的本質(zhì)
咱們先約定一下。這個(gè)系列里凡是說“計(jì)算機(jī)”,就都特指我們現(xiàn)在都在用的、基于圖靈機(jī)的這種尋常的計(jì)算機(jī)。如果我想說另一種會(huì)做計(jì)算的機(jī)器,那就叫“機(jī)器”。
理論上講,只要有足夠多的內(nèi)存、給足夠多的時(shí)間,一臺(tái)計(jì)算機(jī)就可以完成任何“算法”。但是計(jì)算機(jī)對(duì)算法有三個(gè)要求。這些要求就決定了,計(jì)算機(jī)和真實(shí)世界似乎是有區(qū)別的。
第一個(gè)要求是算法必須是“數(shù)字化”的。計(jì)算機(jī)所有的輸入和輸出,中間計(jì)算過程中涉及到的所有數(shù),都必須是能用有限多個(gè)數(shù)字描寫。也就是說要么是整數(shù)要么是有限位的小數(shù)。換句話說計(jì)算機(jī)只能處理有理數(shù)。
比如說圓周率π。計(jì)算機(jī)里沒有真正的圓周率。你要輸入圓周率,只能輸入一個(gè)有限位的近似的小數(shù),3.141592653……到一定長(zhǎng)度你必須停下。你可以用計(jì)算機(jī)把圓周率算到任意精度,但是總要在算到某一位的時(shí)候停下來。只要你停下了,你算的那個(gè)數(shù)就是一個(gè)有理數(shù),而不是真正的π。
第二點(diǎn)要求是,算法是一步一步的。計(jì)算機(jī)不能算*連續(xù)*。所有計(jì)算機(jī)程序都按照“步”運(yùn)行,這一步干什么、下一步干什么。你要模擬一個(gè)足球的運(yùn)動(dòng),必須先把時(shí)間和空間分成若干“小步”,讓足球每次走一步。當(dāng)然你可以把步分得很細(xì)?——?但是一旦確定了步,一步就是一步,沒有“半步”的中間狀態(tài)。
這是因?yàn)橛?jì)算機(jī)的底層是一個(gè)開關(guān)網(wǎng)絡(luò)。晶體管要么是開要么就是關(guān),沒有半開半關(guān)的狀態(tài)。
真實(shí)世界好像不是這樣的。你揮一揮手,讓手從A點(diǎn)到達(dá)B點(diǎn),這應(yīng)該是一個(gè)連續(xù)的運(yùn)動(dòng)?——?你的手似乎應(yīng)該經(jīng)歷了從A點(diǎn)到B點(diǎn)之間每一個(gè)距離數(shù)字?——?其中既有有理數(shù)也有無理數(shù)。而計(jì)算機(jī)模擬的你的手,只能經(jīng)歷有理數(shù)。
第三點(diǎn)要求是,圖靈機(jī)必須停機(jī)。給一個(gè)算法,它一定要算出一個(gè)結(jié)果來。從這個(gè)意義上講現(xiàn)在的計(jì)算機(jī)都不是嚴(yán)格的圖靈機(jī)。比如我們用的個(gè)人電腦的操作系統(tǒng),在理論上都可以永遠(yuǎn)不停機(jī)。你還可以跟電腦做交互式的操作,這就更不是圖靈機(jī)了。而真實(shí)世界,當(dāng)然也是交互的。當(dāng)然電腦里運(yùn)行的每一段代碼,都符合圖靈機(jī)的要求。關(guān)于圖靈機(jī)的停機(jī)問題我們先不細(xì)說。
那么根據(jù)這些要求,計(jì)算機(jī)程序就一定是有限長(zhǎng)的、而且是數(shù)字化的操作。事實(shí)上,所有計(jì)算機(jī)程序都可以翻譯寫成由0和1組成的代碼,硬件層面就是這么操作的。
所以計(jì)算機(jī)程序必定是可數(shù)的。比如我們可以按照下面這個(gè)方法列舉所有的計(jì)算機(jī)程序?——
0
1
01
10
00
11
000
001
……
規(guī)則是按照長(zhǎng)度,在每個(gè)長(zhǎng)度下列舉0和1的所有排列組合。當(dāng)然其中很多代碼根本就不是正確的計(jì)算機(jī)程序,但這我們不在乎,我們只要確保這個(gè)數(shù)法已經(jīng)包含了所有可能的計(jì)算機(jī)程序就行。
所以說,計(jì)算機(jī)程序的集合,是個(gè)可數(shù)的集合。那計(jì)算機(jī)能做的事情,就是可數(shù)的。
那請(qǐng)問,真實(shí)世界里的事情也是可數(shù)的嗎?真實(shí)世界里有沒有實(shí)數(shù)呢?
如果真實(shí)世界里有些不可數(shù)的事情,如果真實(shí)世界里有些數(shù)必須是實(shí)數(shù),那計(jì)算機(jī)怎么可能完全模擬真實(shí)世界呢?
3? 再論信息論
什么是信息呢?信息就是意外,信息就是你克服了多少不確定性。可供選擇的范圍越廣,這個(gè)選擇的信息量就越大。這里就不糾纏于香農(nóng)信息熵的數(shù)學(xué)細(xì)節(jié)了,但是這個(gè)思想需要強(qiáng)調(diào)一遍。
每個(gè)人都知道寫在紙上的字是信息,但是這個(gè)信息的本質(zhì)是做選擇。比如你用英文給我寫一封信,你無非就是在26個(gè)字母、10個(gè)阿拉伯?dāng)?shù)字再加上一些標(biāo)點(diǎn)符號(hào)中做選擇。你寫的每個(gè)字都是從這幾十個(gè)字符中選取了一個(gè)?——?你是在幾十個(gè)選項(xiàng)之中選擇了一項(xiàng),你克服了這么大的不確定性。
再比如說,我知道有五個(gè)候選人在競(jìng)爭(zhēng)一個(gè)位置,但是我不知道是誰當(dāng)選了。你告訴我當(dāng)選者的名字,這個(gè)名字的信息,就比幾十個(gè)字符之中給我一個(gè)字符要少得多?——?因?yàn)槟憧朔牟淮_定性只有1/5。我胡亂猜,也有1/5的可能性猜對(duì)。
所以信息量的大小、給信息量編碼需要用到多少個(gè)“比特”,都取決于背后選項(xiàng)的多少。正所謂你“說了”什么不重要,重要的是你“能說”什么。
現(xiàn)在假設(shè)有一條一公里長(zhǎng)的鐵路線,咱倆負(fù)責(zé)維護(hù)。有一天,鐵路線上出了線路故障。你去探測(cè)了,告訴我故障發(fā)生在第702米的地方。請(qǐng)問這個(gè)信息量有多大?一公里一共有一千米,你給我的是千里挑一的信息,這個(gè)信息量比五個(gè)人中選一個(gè)人要大得多。
要給這樣的信息編碼,我們就要把鐵路線分為一千段,給每一段一個(gè)編碼。下次不管哪里出事,我們都可以報(bào)一個(gè)編碼。
好,現(xiàn)在上級(jí)要求提高精度,說必須得精確到厘米,比如說你得報(bào)告故障發(fā)生在第702.32米的地方。要給這么高精度的信息編碼,我們就必須把鐵路線分成10萬段,這個(gè)編碼量就大大增加了。
那我們知道,從0到1000米的這條線段上不但有整數(shù)有小數(shù),還有更多的、不可思議地多的無理數(shù)?——?那如果故障發(fā)生地點(diǎn)是一個(gè)無理數(shù),請(qǐng)問你怎么編碼呢?
答案是無法編碼。描寫一個(gè)無理數(shù),比如104.298730472840382048……(永不停止、永不循環(huán))需要無限的精度!
有些無理數(shù),像根號(hào)2和圓周率,可以用文字說明,我們可以報(bào)告上級(jí)故障發(fā)生在“π”米處,上級(jí)一聽也能明白。但絕大多數(shù)無理數(shù)根本無法用文字描寫!對(duì)于一個(gè)無法用文字描寫的、出現(xiàn)在0和1000之間的任意的無理數(shù),你怎么給它編碼呢?從理論上講,在連續(xù)實(shí)數(shù)集上的精確信息是不可編碼的,“信息熵”的概念也不再適用了。
說到這里你可能要抗議了。你說我們根本就不需要用無理數(shù)標(biāo)記位置,我們有限的精度就已經(jīng)夠用了??!的確是這樣。日常生活中的任何測(cè)量都有誤差。不管你是702米,還是精確到702.0567287米,只要你停止了,就留有一定的誤差。精確到小數(shù)點(diǎn)后第七位,就表示有0.0000001米的誤差。
早在1948年那篇提出信息論的論文里,香農(nóng)就已經(jīng)注意到無限精度的測(cè)量信息不可編碼,但是有噪音的、有誤差的測(cè)量信息可以編碼?——?現(xiàn)在我們把這個(gè)理論稱為?“信道容量定理(channel?capacity?theorem)”。
所以我們的生活應(yīng)該不受影響,畢竟凡是人為取用的信息都有誤差,那就都可以數(shù)字化和信息化。
但是從理論上來說,如果真實(shí)世界是一個(gè)連續(xù)的實(shí)數(shù)系統(tǒng),它就不可能用一個(gè)數(shù)字化的信息系統(tǒng)完全描寫。
但是現(xiàn)在有很多人相信,真實(shí)世界根本就不是建立在實(shí)數(shù)上的!
4? 數(shù)字宇宙假說
如果空間和時(shí)間都是連續(xù)的東西,無限可分,那真實(shí)世界就必須有無理數(shù)。但如果空間和時(shí)間本來就是不連續(xù)的呢?比如說,也許空間上存在一個(gè)最小的距離尺度,比這更小就沒意義了。也許這個(gè)宇宙的空間就好像電腦屏幕一樣,有一個(gè)分辨率?——?當(dāng)然它的分辨率非常非常高,但是是有限的。
這就是所謂“數(shù)字宇宙假設(shè)”。我們專欄一直說宇宙必定是“數(shù)學(xué)”的,但我們可沒說宇宙必定是“數(shù)字”的?!皵?shù)學(xué)宇宙”允許無理數(shù),如果有無理數(shù)就不可編碼?——?而“數(shù)字宇宙”是建立在有理數(shù)上的,它在本質(zhì)上就可以用計(jì)算機(jī)編碼。
在數(shù)字宇宙里,空間是一格一格的,時(shí)間是一步一步的,都是不連續(xù)的。而我們現(xiàn)在所有的物理定律都假定時(shí)空是連續(xù)的、里面有微分方程,假設(shè)時(shí)空無限可分?——?所以這些物理定律都是柏拉圖世界的想象,必須改寫。
學(xué)者們對(duì)數(shù)字宇宙有不同的信仰,Lee?把這些信仰按照從弱到強(qiáng)的順序,分為五級(jí)?——
第一級(jí)認(rèn)為這個(gè)世界可以用有限多的數(shù)字信息來進(jìn)行完整的編碼。
第二級(jí)認(rèn)為這個(gè)世界里的一切都是信息。
第三級(jí)認(rèn)為這個(gè)世界里的一切物理過程都是計(jì)算。
第四級(jí)認(rèn)為這個(gè)世界就是一臺(tái)計(jì)算機(jī)。
第五級(jí)認(rèn)為這個(gè)世界不但是一臺(tái)計(jì)算機(jī),而且就是某個(gè)高級(jí)智能的一個(gè)計(jì)算機(jī)模擬?——?我們都生活在網(wǎng)絡(luò)游戲里。
這些級(jí)別的細(xì)微差異代表嚴(yán)格的數(shù)學(xué)和哲學(xué)思辨,咱們就不仔細(xì)追究了。那這個(gè)聽起來很玄乎的假設(shè),到底有沒有可能是真的呢?答案是,有可能證明,但不可能證偽。
如果你能證明,空間的確有一個(gè)不能再分的、最小的尺度,那你就證明了數(shù)字宇宙假設(shè)?,F(xiàn)在費(fèi)米實(shí)驗(yàn)室有個(gè)裝置叫“Holometer”,就打算做這件事。它使用和探測(cè)引力波的?LIGO?裝置類似的原理,通過激光干涉來測(cè)量距離的變化,它的目標(biāo)是發(fā)現(xiàn)空間的最小尺度。
也許有一天早上起來,你就會(huì)聽說費(fèi)米實(shí)驗(yàn)室發(fā)現(xiàn)我們這個(gè)宇宙的空間有個(gè)極限尺度!那將是一個(gè)無比重大的新聞,說明空間不是連續(xù)變化的?——?說明這個(gè)世界完全是由有理數(shù)組成的!……也說明我們很可能是生活在計(jì)算機(jī)模擬之中。
考慮到微觀世界的物理學(xué),把基本粒子再做細(xì)分并沒有多大實(shí)際的意義,基本粒子的尺度是有限的。但是空間本身可不可以無限細(xì)分,這個(gè)問題還沒有答案。如果人類的實(shí)驗(yàn)精度永遠(yuǎn)都發(fā)現(xiàn)不了空間的最小尺度,那你能說空間*沒有*最小尺度嗎?你不能。所以說數(shù)字宇宙是個(gè)不可證偽的理論。如果你信仰數(shù)字宇宙,你可以永遠(yuǎn)堅(jiān)持這個(gè)信仰。
而你猜怎么著?在認(rèn)真思考過數(shù)字宇宙假設(shè)的學(xué)者之中,相信的人是主流,不信的人是少數(shù)。
為什么這些學(xué)者非得相信宇宙是數(shù)字的?也許因?yàn)閿?shù)字化的世界更容易接受。計(jì)算機(jī)世界是數(shù)字化的,而計(jì)算機(jī)是人能造的東西,我們完全接受數(shù)字化的世界。但是?Lee?可不信。當(dāng)然?Lee?也沒有足夠的證據(jù),他只是覺得真實(shí)世界應(yīng)該比一個(gè)由有理數(shù)組成世界更豐富一些。
你相信數(shù)字宇宙嗎?我沒有特別強(qiáng)烈的信仰,但我的確更喜歡存在無理數(shù)的世界。
不過我們仔細(xì)想想,無理數(shù)這種東西,的確是很難跟真實(shí)世界聯(lián)系起來。我覺得也有可能無理數(shù)是來自柏拉圖世界的一種想象的東西。
比如說根號(hào)2吧。我現(xiàn)在還記得,第一次學(xué)到根號(hào)2這個(gè)無理數(shù)的時(shí)候,感到了世界觀的危機(jī)。我就想,你畫一個(gè)等腰直角三角形,兩個(gè)直角邊的邊長(zhǎng)是1米,斜邊長(zhǎng)度就是根號(hào)2米,對(duì)吧?那我就拿一個(gè)尺子去量斜邊的長(zhǎng)度,我肯定能量出一個(gè)普通的數(shù)來?。扛?hào)2怎么可能就是一個(gè)怪異的數(shù)呢?
現(xiàn)實(shí)生活中尺子的精度總是有限的,所以你只能測(cè)量出一個(gè)尋常的數(shù)字??墒抢硐胫械母?hào)2,卻是個(gè)永遠(yuǎn)都不會(huì)終止的數(shù)!
難道我們這個(gè)世界真的需要這樣的數(shù)嗎?這個(gè)問題可不僅僅涉及到世界觀,而且還能影響你的人生觀。但只有在一個(gè)實(shí)數(shù)的世界里,人生才有無窮多豐富的意義?——?詩(shī)人,需要無理數(shù)。