陳凱
“我是誰(shuí)?”——這個(gè)問(wèn)題被稱為世界三大終極哲學(xué)問(wèn)題之一,至今都不存在一個(gè)被普遍認(rèn)同的答案。“我是誰(shuí)?”——從這個(gè)問(wèn)題可以引申出另一個(gè)詭異的問(wèn)題:當(dāng)人們自問(wèn)“我是誰(shuí)?”的時(shí)候,究竟是誰(shuí)在問(wèn)這個(gè)問(wèn)題?又是誰(shuí)在回答這個(gè)問(wèn)題?雖然回答者總是可以回答“是我”,但提問(wèn)者卻可以繼續(xù)追問(wèn),先前答案中的“我”是誰(shuí),以至于最終回答者不得不承認(rèn),其實(shí)自己是無(wú)法真正認(rèn)清究竟是誰(shuí)在問(wèn)、或者究竟是誰(shuí)在回答這個(gè)問(wèn)題,因?yàn)椤罢J(rèn)清我是誰(shuí)”的過(guò)程被包含在形成自我的過(guò)程之中了,一旦“是誰(shuí)”的答案形成,那個(gè)做出回答的“我”就已經(jīng)不是答案中的“我”了。當(dāng)某個(gè)解決問(wèn)題的過(guò)程中包含有過(guò)程本身的時(shí)候,就出現(xiàn)了稱為“自我指涉”的現(xiàn)象,學(xué)習(xí)程序設(shè)計(jì)的朋友們大概很快能認(rèn)出,這其實(shí)就是遞歸?!拔沂钦l(shuí)?”或“誰(shuí)在問(wèn)”這類問(wèn)題之所以難解,其實(shí)是因?yàn)橹灰獔?jiān)信“自我”的存在,這個(gè)遞歸就沒(méi)有出口——就像俄羅斯套娃,當(dāng)前的娃娃外面(或里面)還有娃娃,那個(gè)最大的娃娃——調(diào)用所有層級(jí)思考程序的主程序究竟在哪里?看來(lái)即便耗盡腦力(耗盡內(nèi)存)也無(wú)法想透徹。若要從遞歸中退出,除非設(shè)定所謂“自我”其實(shí)是“非我”精心編織出來(lái)的幻象,然而這樣雖然能從無(wú)窮無(wú)盡的套用中退出,但問(wèn)題是,人們從心底里十萬(wàn)分地不認(rèn)同這一點(diǎn)。能否既維持“自我”的存在感,同時(shí)又避開無(wú)法自圓其說(shuō)的悖論?本篇文章將利用“計(jì)算思維”來(lái)試著對(duì)以上問(wèn)題給出一個(gè)解答,雖然方法很奇怪,但筆者會(huì)在嚴(yán)謹(jǐn)?shù)淖C明和天馬行空的想象之間劃出一條明顯的標(biāo)志線。
計(jì)算是什么
“計(jì)算思維”是個(gè)熱門詞語(yǔ),“如何在教學(xué)中培養(yǎng)學(xué)生的計(jì)算思維能力”是個(gè)問(wèn)題,然而,討論以上問(wèn)題的前提是要明白什么是“計(jì)算思維”,而討論“計(jì)算思維”的前提是要明白什么是“計(jì)算”,這是個(gè)被許多人忽視的大問(wèn)題。更糟糕的是,大部分人只是自認(rèn)為明白這個(gè)問(wèn)題的答案。那么先來(lái)看一個(gè)小問(wèn)題,8加9等于多少?為什么會(huì)得出答案是17呢?其一,對(duì)大部分成人來(lái)說(shuō),8加9得17是被深深刻在頭腦中的知識(shí),與其說(shuō)是算出答案,不如說(shuō)是記得答案,其實(shí)是根據(jù)索引從存儲(chǔ)區(qū)域中提取了信息,雖然說(shuō)需要存儲(chǔ)的信息包含了所有一位數(shù)相加的值;其二,對(duì)于幼兒來(lái)說(shuō),他(她)可能會(huì)拿出8塊積木,然后再拿出9塊積木,然后數(shù)一下,嗯,總共17塊積木,有一些所謂“最強(qiáng)大腦”使用到類似的方法,754933加578043是多少,他們可以直觀地看到答案,而不是算出答案;其三,也可以這樣來(lái)算,先把8換成8塊積木,然后,把9換成9塊積木,連續(xù)排在一起后,將10塊積木換成1,把剩下的7塊積木換成7,最后合并得到17,這個(gè)方法既用到了數(shù)字符號(hào)的變換、替代,也用到了存儲(chǔ)中的規(guī)則,并且,存儲(chǔ)規(guī)則的數(shù)量少于第一種計(jì)算方法。
如果人們要制造一臺(tái)機(jī)器來(lái)進(jìn)行計(jì)算,那么前面所說(shuō)的三種方法,哪一種是可行的?第一種方法,要求機(jī)器擁有無(wú)窮無(wú)盡的存儲(chǔ)空間來(lái)存儲(chǔ)尚不知道的應(yīng)對(duì)規(guī)則,這讓人想起了博爾赫斯小說(shuō)中,為了最詳盡畫出帝國(guó)地圖乃至宣稱制作出和帝國(guó)疆域一般大小的地圖的繪圖員;第二種方法,因?yàn)殡y以描述具體工作過(guò)程而無(wú)法制造;于是只剩下第三種方法,換成比較嚴(yán)謹(jǐn)?shù)拿枋鼍褪牵帽M可能少的規(guī)則,將一些符號(hào)替換成另一些符號(hào)。
如果想要造一臺(tái)機(jī)器來(lái)進(jìn)行計(jì)算,其實(shí)需要解決這樣一系列的問(wèn)題,首先,是如何將現(xiàn)實(shí)世界中的對(duì)象抽象成符號(hào);第二,如何設(shè)計(jì)一套可行的規(guī)則,將一些符號(hào)替換成另一些符號(hào);第三,在沒(méi)有人干預(yù)的情況下,將替換過(guò)程持續(xù)下去。為簡(jiǎn)便起見(jiàn),下面將借用一個(gè)具體的例子來(lái)說(shuō)明問(wèn)題:怎樣把數(shù)量轉(zhuǎn)換成二進(jìn)制符號(hào)。
(1)將現(xiàn)實(shí)世界中的對(duì)象抽象成符號(hào)
假設(shè)有一堆櫻桃,現(xiàn)在需要設(shè)計(jì)一臺(tái)機(jī)器,輸入的是這堆櫻桃,輸出的是代表櫻桃數(shù)量的二進(jìn)制符號(hào),人們可以用“o”符號(hào)代表櫻桃,“ooo”是三個(gè)櫻桃,“ooooo”是五個(gè)櫻桃,大家知道,二進(jìn)制需要兩種符號(hào),所以“o”這一個(gè)符號(hào)看來(lái)不夠,但其實(shí)并不需要引入第二種符號(hào),因?yàn)榭梢园选皁”看成二進(jìn)制符號(hào)1,把空看成二進(jìn)制符號(hào)0,比如“oo o”就是“1101”,“ooo”就是“111”。
但若這樣,“o o”中究竟空了多少,就很難看出,所以需要引入其他符號(hào)“|”來(lái)代表二進(jìn)制中的“位”,人工運(yùn)算時(shí),“|”可以用櫻桃?;蚱渌麞|西來(lái)代替?!皘”右側(cè)有“o”代表“1”,“|”右側(cè)無(wú)“o”代表“0”,于是“|o|o|”就是“110”,而“|o||o”就是“101”。
(2)設(shè)計(jì)一套可行的規(guī)則,將一些符號(hào)替換成另一些符號(hào)
為了設(shè)計(jì)一套規(guī)則,計(jì)算出櫻桃數(shù)量的二進(jìn)制值,只需要將代表櫻桃的“o”放在許多“|”符號(hào)右側(cè)(究竟有多少“|”是無(wú)所謂的,稍微多一些就可以),比如“||||||||oooooo”表示有6個(gè)櫻桃,“||||||||oooooooooo”表示有10個(gè)櫻桃,至于替換規(guī)則也十分簡(jiǎn)單,只要將“|oo”符號(hào)串替換成“o|”符號(hào)串就可以了。這個(gè)規(guī)則的意義是:1加上1等于10。比如,對(duì)于符號(hào)串“||||||||oooooo”按“|oo-->o|”規(guī)則進(jìn)行替換,則原來(lái)的符號(hào)串就變成了“|||||||o|oooo”。
(3)設(shè)法將替換過(guò)程自動(dòng)持續(xù)下去
以上替換規(guī)則只能將兩個(gè)櫻桃變成“10”,對(duì)于6個(gè)櫻桃的轉(zhuǎn)換,就需要將以上過(guò)程不停地持續(xù)下去。這就需要使用到遞歸。請(qǐng)看以下偽代碼(當(dāng)然也可以換成任何程序語(yǔ)言代碼):
Proc1:
|oo-->o|
Proc1
以上偽代碼過(guò)程中,第一步是按替換規(guī)則將“|oo”替換成“o|”,第二步是,執(zhí)行該過(guò)程自身。當(dāng)然這個(gè)過(guò)程會(huì)永遠(yuǎn)執(zhí)行下去,但沒(méi)關(guān)系,符號(hào)串“||||||||oooooo”不停替換后會(huì)停留在唯一的狀態(tài),就是“||||||o|o|”,這串符號(hào)就代表著“110”。如果初始的時(shí)候有10個(gè)櫻桃,就是“||||||||oooooooooo”,那么替換到最后,符號(hào)串會(huì)保持在“|||||o||o|”,就表示“1010”,這正是10個(gè)櫻桃所對(duì)應(yīng)的數(shù)量的二進(jìn)制值。而所謂代碼,就只需要寥寥幾行就可以了。
混沌與通用計(jì)算
以上案例,說(shuō)明了可以用符號(hào)的替換與遞歸一起來(lái)實(shí)現(xiàn)某種運(yùn)算。實(shí)際上,除了遞歸,若將遞歸換成迭代,也可以產(chǎn)生同樣的效果,限于篇幅,本文只講遞歸。下面將要深入解釋一個(gè)問(wèn)題,何以簡(jiǎn)單的符號(hào)替換就能具有某種計(jì)算能力。
針對(duì)符號(hào)串“*#oooooooooooooooooooooooooooooooooooooooooooooooooooooooo|ooo@”構(gòu)造如下符號(hào)串替換過(guò)程(有多少個(gè)“o”取決于任務(wù)復(fù)雜度):
Proc1:
#ooo-->o#oo
#oo|-->|#o|
#o|o-->|#|o
#o||-->|#||
#|oo-->o#oo
#|o|-->|#o|
#||o-->|#|o
#|||-->o#||
#ooo@-->*oo@
o*-->*o
|*-->*|
**-->*o#
Proc1
以上過(guò)程包含了12個(gè)替換規(guī)則以及一個(gè)遞歸,對(duì)于初始符號(hào)串,若每隔120左右次的替換后,把符號(hào)串的狀態(tài)打印出來(lái),就能得到如下圖樣:
圖樣的發(fā)展有以下奇妙特點(diǎn),其一, 圖樣的發(fā)展對(duì)于符號(hào)串的初始值極其敏感;其二,對(duì)于某些特定的初始符號(hào)串,只要發(fā)展空間足夠(左側(cè)的o夠多),符號(hào)串變化永遠(yuǎn)不會(huì)出現(xiàn)重復(fù)模式;其三,雖然說(shuō)每一步的變化都是確定的,但無(wú)人能提前n步預(yù)測(cè)到未來(lái)圖樣可能變化成什么模樣。這種系統(tǒng)中的不可重復(fù)和不可預(yù)測(cè)性,被稱為混沌。雖然不能立即嚴(yán)格證明所謂的計(jì)算過(guò)程其實(shí)等同于一個(gè)混沌的演化過(guò)程,但可以發(fā)現(xiàn),任何計(jì)算過(guò)程,都具有混沌系統(tǒng)演化的特征,首先,任何計(jì)算過(guò)程都對(duì)初始條件敏感;其次,對(duì)于某些初始值的計(jì)算過(guò)程,計(jì)算結(jié)果將永遠(yuǎn)進(jìn)行下去且無(wú)法找出變化模式(如圓周率的計(jì)算);其四,雖然計(jì)算過(guò)程的每一步都是確定的,但人們無(wú)從預(yù)先n步獲知計(jì)算的結(jié)果——否則又為什么需要計(jì)算呢;其五,混沌和計(jì)算系統(tǒng)都可由某個(gè)巧妙設(shè)計(jì)的遞歸過(guò)程獲得。
然而,更強(qiáng)大的是,可以將符號(hào)的替換與遞歸一起使用,來(lái)實(shí)現(xiàn)通用計(jì)算(通俗來(lái)說(shuō),能代替一臺(tái)運(yùn)行其他程序語(yǔ)言代碼的智能計(jì)算機(jī))。上述案例中,符號(hào)串的替換其實(shí)模擬了110號(hào)元胞自動(dòng)機(jī)的演化過(guò)程,而數(shù)學(xué)界已經(jīng)證明,可以110號(hào)元胞自動(dòng)機(jī)來(lái)模擬通用圖靈機(jī)的運(yùn)算過(guò)程。換而言之,以上12條替換規(guī)則和1次遞歸調(diào)用,實(shí)際上就創(chuàng)造出了一臺(tái)功能完備的智能通用計(jì)算機(jī)。通俗來(lái)說(shuō),如果人們需要分支、循環(huán)語(yǔ)句,用剛才這個(gè)系統(tǒng)就能模擬出來(lái);若需要變量、數(shù)組,用剛才這個(gè)系統(tǒng)也能模擬出來(lái);需要一個(gè)下圍棋的程序,它當(dāng)然也能模擬。當(dāng)然,人們一般不這么做(也暫時(shí)沒(méi)有能力這么做),而是一層層往上模擬,比方說(shuō),會(huì)先用這個(gè)系統(tǒng)來(lái)模擬出一個(gè)馬爾科夫重寫系統(tǒng),然后用馬爾科夫重寫系統(tǒng)逐漸模擬出一個(gè)機(jī)器語(yǔ)言運(yùn)行環(huán)境,然后逐漸模擬出一個(gè)高級(jí)語(yǔ)言的編譯器(其中跳過(guò)很多層)……然而不管上層系統(tǒng)規(guī)則多么復(fù)雜,其最底層的規(guī)則卻是異常簡(jiǎn)潔的。
遞歸與自我認(rèn)知
圖靈認(rèn)為,無(wú)論人腦的構(gòu)成是怎樣的,在計(jì)算的層面,它所做的就是操作抽象符號(hào),本質(zhì)上和機(jī)器所做的沒(méi)有區(qū)別。如果借用計(jì)算思維來(lái)說(shuō)明,為什么諸如“我是誰(shuí)”這樣的問(wèn)題難以解答,那是因?yàn)榻獯稹拔沂钦l(shuí)”的過(guò)程被包含到形成“我”的過(guò)程之中,從而造成了一個(gè)沒(méi)有出口的遞歸。假如人腦的運(yùn)行模式真的如遞歸函數(shù)那樣,那也就意味著,每一個(gè)我所認(rèn)識(shí)到的“我”都不是真實(shí)的我,每個(gè)我所認(rèn)識(shí)到的“我”,其實(shí)是一個(gè)屬于過(guò)去的計(jì)算結(jié)果。然而另一方面,那個(gè)“我”也恰恰因?yàn)檫@種遞歸而不斷變化著,對(duì)于“我”來(lái)說(shuō),過(guò)去的一切都是歷史,未來(lái)的一切難以預(yù)料(因?yàn)轭A(yù)料本身產(chǎn)生混沌從而改變了“我”),當(dāng)下的一切(不僅是自我反思也包含外界環(huán)境的變化對(duì)自我的觸動(dòng))都會(huì)改變“我”的狀態(tài),樂(lè)觀地說(shuō),就是我會(huì)成為我所希望的那個(gè)我。
然而,若將以上合理的科學(xué)推論向更遠(yuǎn)處延伸,可能會(huì)導(dǎo)出讓人難以接受,貌似科學(xué)幻想般的可能性,其中一個(gè)方向,是懷疑整個(gè)宇宙的物理法則是不是有可能源自于幾個(gè)簡(jiǎn)單規(guī)則的不斷遞歸,著名科學(xué)家、數(shù)學(xué)家斯蒂芬·沃爾夫勒姆(Stephen Wolfram)試圖在《新科學(xué)》一書中證明,宇宙的本質(zhì)就是計(jì)算,當(dāng)前的復(fù)雜世界,可能只是許多層次反復(fù)套用下遞歸的模擬;另一個(gè)方向,是全面懷疑人的頭腦活動(dòng)完全是一種計(jì)算行為,無(wú)論是理性邏輯思考,還是原以為是生物所特有的情感、直覺(jué)、洞察力、領(lǐng)悟力,其本質(zhì)上都是一種計(jì)算。這種假設(shè)將徹底顛覆人類原先的自我認(rèn)知,牛津大學(xué)哲學(xué)教授盧西亞諾·弗洛里迪稱其為三次人類革命后的第四次革命。前三次革命分別是:哥白尼革命——發(fā)現(xiàn)人類并不處于宇宙中心;達(dá)爾文革命——發(fā)現(xiàn)人類只是進(jìn)化長(zhǎng)河中的一部分;弗洛伊德革命——發(fā)現(xiàn)每個(gè)個(gè)人都不是其自我意識(shí)的絕對(duì)主人,第四次革命的核心是,人類的智能并不是獨(dú)特而無(wú)法復(fù)制的。然而,如果人類能夠不執(zhí)著于短暫歷史對(duì)于“人類”一詞所賦予的獨(dú)一無(wú)二的幻覺(jué),那么,未來(lái)的某一天,人類或許可借助計(jì)算中的新世界涅槃重生。