陳凱

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