圖靈機與計算問題 算法
http://www.swarmagents.cn/vm/articles/turing.pdf pdf網站地址編程
自從 20 世紀 30 年代以來,圖靈機、計算這些重要的概念在科學的天空中就一直閃爍着函數
無限的光彩。尤爲是近年來量子計算機、生物計算機、DNA 計算等領域的創新工做引發了學習
世人的普遍關注。咱們不由問這樣的問題,國外究竟爲何能發明出這些各式各樣的計算機網站
呢?這些意味着什麼呢?其實這一切的源頭都來源於計算理論。國內在介紹計算理論方面的編碼
教材雖然有很多,但通常都比較深奧難懂。因此我以爲頗有必要對這些內容進行科普。因而人工智能
嘗試寫下這麼一篇文章,但願個人文章可以讓你更加清楚、透徹的理解圖靈機、計算等等一翻譯
些基本而重要的概念,並洞悉到這些概念的本質和深遠涵義。 設計
本篇文章大致上能夠分紅四部分:首先給你們講一講關於圖靈、哥德爾等科學家的故事;遊戲
而後正式引入圖靈機的概念,爲了對這個概念有比較直觀的理解,我採用了一我的工生命:
「小蟲」的比喻來敘述。接下來,文章介紹了跟圖靈機有關的概念:什麼是模擬,什麼是「萬
能計算機」等等;最後是關於圖靈停機問題的探討,我我的認爲頗有可能將來對科學的重大
突破都來源於對圖靈停機問題的深刻理解。在行文過程當中,我除了用本身的方式介紹一些現
有的基本概念以外(爲了儘可能表達得清楚明白,我不得不放棄理論論證的嚴格性),還探討
了不少我認爲別人沒有探討的問題,這些問題可能是我本身的思考結果,而它們沒有通過科學
的驗證。在這部份內容上我都標上了*號,但願你能有選擇的看待這些問題和觀點。
1、故事
任何科學思想、科學概念的誕生都有它的背景,在背景中每每有不少迷人的故事。關於
計算理論能夠追溯到 1900 年,當時著名的大數學家希爾伯特在世紀之交的數學家大會上給
國際數學界提出了著名的 23 個數學問題。其中第十問題是這樣的:存在不存在一種有限的、
機械的步驟可以判斷「丟番圖方程」是否存在解?這裏就提出來了有限的、機械的證實步驟
的問題,用今天的話說就是算法。但在當時,人們還不知道「算法」是什麼。實際上,當時
數學領域中已經有不少問題都是跟「算法」密切相關的,於是,科學的 「算法」 定義呼之
欲出。以後到了 30 年代的時候,終於有兩我的分別提出了精肯定義算法的方法,一我的是
圖靈,一我的是丘奇。而其中圖靈提出來的圖靈機模型直觀形象,因而很快獲得了你們的普
遍接受。
不知道你是否據說過圖靈這個名字。可能有些人知道牛頓,知道愛因斯坦,甚至知道馮
諾依曼,但不知道圖靈。然而圖靈的貢獻絕對不亞於這些科學大師。圖靈最大的貢獻就是把
算法這樣一個基本的、深入的概念用他的圖靈機模型講清楚了。正是由於圖靈奠基的理論基
礎,人們纔有可能發明 20 世紀以來甚至是人類有史以來最偉大的發明:計算機。所以人們
稱圖靈爲:計算機理論之父。
圖靈生活的年代經歷了第二次世界大戰。在二戰期間他曾經爲英國政府效力成功破譯了
德國的密碼,於是爲英國作出了突出貢獻。其實也正是由於二戰,英國政府才肯掏錢讓圖靈
製造最原始的計算機,固然這種計算機是專門用來破譯密碼用的,而不是咱們如今用的通用
計算機。(有一部片子叫《密碼迷情》英文名是《enigma》就是根據圖靈當時破譯德國密碼
的故事改編的,你們有興趣能夠去找一找。)
圖靈這我的很古怪,只喜歡本身一我的悶頭研究,不喜歡與別人交流。而且聽說他仍是
一個同性戀者。要知道在當時的英國,同性戀行爲但是大逆不道的。最後,在他事業剛剛達
到頂風的時候,他自殺了。爲了記念這個偉大的學者,計算機界設立了最高榮譽獎:ACM
圖靈獎。 圖靈機的產生一方面奠基了現代數字計算機的基礎(要知道後來馮諾依曼就是根據圖靈
的設想才設計出第一臺計算機的)。另外一方面,根據圖靈機這一基本簡潔的概念,咱們還可
以看到可計算的極限是什麼。也就是說實際上計算機的本領從原則上講是有限制的。請注意,
這裏說到計算機的極限並非說它不能吃飯、掃地等硬件方面的極限,而是僅僅就從信息處
理這個角度,計算機也仍然存在着極限。這就是圖靈機的停機問題。這個問題在圖靈看來更
加劇要,在他當年的論文中,其實他是爲了論證圖靈停機問題才「捎帶手」提出了圖靈機模
型的。
提到了圖靈停機問題,我不由又要提一提哥德爾定理、羅素悖論、康托爾的集合論等
等一系列大事兒。早在 19 世紀末的時候,康托爾爲集合論作了奠定性的研究。要知道,數
學雖然五花八門,可是人們發現,運用集合這個概念能夠歸納全部的數學,也就是說集合是
一切數學的基礎。於是若是爲集合論奠基了公理化的基礎,也就等於爲數學奠基了基礎。康
托爾就是作了這方面的貢獻。另外,他爲了證實實數的個數比天然數多這個結論,發明了一
種被稱爲「對角線刪除」的證實方法。沒想到的是,這個方法影響很是深廣,直到後來的圖
靈停機問題、哥德爾定理其實都是該方法的不一樣延伸。
19 世紀末的人們忙於爲基於集合論的數學創建公理體系大廈。然而就當這座大廈即將
完工的時候,一件可怕的事情發生了,羅素提出來的羅素悖論粉碎了數學家的夢想。關於羅
素悖論的一個通俗化版本是:「村子裏有一個理髮師,他給本身定了一條規矩:‘不給那些所
有給本身理髮的人理髮’。如今就要問,這個理髮師該不應給本身理髮?」。若是你嘗試回答
這個問題就會發現奇怪的事情:這個問題自己彷佛是不可能的!正是由於這種奇怪的邏輯,
哲學家羅素才顛覆了整個數學大廈的基礎!
由於集合論中存在着矛盾,因此整個數學體系存在着根本性的矛盾,然而具備諷刺意
味的是,數學一直以嚴格著稱!這種感受就好像正當你得意洋洋的時候有人忽然閃了你一個
耳光!人們在一陣慌亂以後開始逐漸穩下陣角尋找避免羅素悖論產生的方法,並總但願經過
細心的選擇數學公理可以將相似羅素悖論這樣的怪物一勞永逸的排除精確數學體系以外。這
就是後來希爾伯特提出來一套數學綱領的緣由,他但願找到一套公理體系可以排除悖論,並
挽救純粹而美麗無暇的數學。雖然希爾伯特沒能完成他的夢想,但他堅信夢想是對的。
然而,沒過多少年,一個名不見經傳的年輕邏輯學家哥德爾提出來的定理卻完全粉碎
了希爾伯特的夢。這就是後來著名的哥德爾定理!該定理大體上說:任何一個數學的公理化
體系都不是「完美的」。換個角度說,任何數學公理化系統都是死的,它總須要人爲地從外
界注入新的公理進去才能讓它日趨完善,而它本身並不能徹底自動避免矛盾產生。哥德爾定
理能夠說整個扭轉了人們的世界觀。由於被認爲最「完美」最「純粹」的數學都是不徹底的,
那麼純粹完美的世界也應該不存在。哥德爾定理還指出了「理性」和「分析」方法的極限。
這纔是後來人們步入到了「綜合」時代的部分緣由。更有趣的是,哥德爾用來證實他定理的
方法正和康托爾證實實數比天然數多、圖靈停機問題以及羅素悖論的方法是一脈相承的。
全部這些都是 20 世紀上半個世紀發生的大事,後來發生了什麼?計算機出現了、信息
時代來臨了,彷佛科學技術是萬能的,它們總會改善咱們的生活,知足咱們的慾望。漸漸的,
人們彷佛淡忘了圖靈、歌德爾、康托爾等等大師們的思想了。然而近年來隨着複雜性科學的
研究,人們卻又有了重拾這些相對古老而根本問題的跡象了!
2、圖靈機
下面言歸正傳,咱們開始講圖靈機的概念。我先把圖靈機的模型給你,雖然有些無趣,
不過請堅持看下去,我會在下面運用你們比較好理解的形式從新解釋的。在這裏你僅僅須要
認識它的輪廓。一個圖靈機是形以下面的一個裝置:
<img src=http://metafysica.nl/tmrucker9.jpg alt=http://metafysica.nl/tmrucker9.jpg>
這個裝置由下面幾個部分組成:一個無限長的紙帶,一個讀寫頭。(中間那個大盒子),
內部狀態(盒子上的方塊,好比 A,B,E,H),另外,還有一個程序對這個盒子進行控制。這
個裝置就是根據程序的命令以及它的內部狀態進行磁帶的讀寫、移動。
它工做的時候是這樣的:從讀寫頭在紙帶上讀出一個方格的信息,而且根據它當前的內
部狀態開始對程序進行查表,而後得出一個輸出動做,也就是是否往紙帶上寫信息,仍是移
動讀寫頭到下一個方格。程序也會告訴它下一時刻內部狀態轉移到哪個。
具體的程序就是一個列表,也叫作規則表,是這樣的:
當前內部狀態 s 輸入數值 i 輸出動做 o 下一時刻的內部狀態 s'
B 1 前移 C
A 0 往紙帶上寫 1 B
C 0 後移 A
… … … …
所以,圖靈機只要根據每一時刻讀寫頭讀到的信息和當前的內部狀態進行查表就能夠確
定它下一時刻的內部狀態和輸出動做了。
圖靈機就是這麼簡單!難以想象吧?而只要你變化它的程序(也就是上面的規則表),
那麼它就可能爲你作任何計算機可以完成的工做。所以能夠說,圖靈機就是一個最簡單的計
算機模型!
也許,你會以爲圖靈機模型太簡單,怎麼可能完成計算機的複雜任務呢?問題的關鍵是
如何理解這個模型。
3、如何理解圖靈機?
一、小蟲的比喻
咱們不妨考慮這樣一個問題。假設一個小蟲在地上爬,那麼咱們應該怎樣從小蟲信息
處理的角度來創建它的模型?
首先,咱們須要對小蟲所在的環境進行建模。咱們不妨就假設小蟲所處的世界是一個無
限長的紙帶,這個紙帶上被分紅了若干小的方格,而每一個方格都僅僅只有黑和白兩種顏色。
很顯然,這個小蟲要有眼睛或者鼻子或者耳朵等等感受器官來得到世界的信息,咱們不妨把
模型簡化,假設它僅僅具備一個感受器官:眼睛,並且它的視力短得可憐,也就是說它僅僅
可以感覺到它所處的方格的顏色。於是這個方格所在的位置的黑色或者白色的信息就是小蟲
的輸入信息。
另外,咱們固然還須要爲小蟲創建輸出裝置,也就是說它可以動起來。咱們仍然考慮最
簡單的狀況:小蟲的輸出動做就是往紙帶上前爬一個方格或者後退一個方格。
僅僅有了輸入裝置以及輸出裝置,小蟲還不能動起來,緣由很簡單,它並不知道該怎樣
在各類狀況下選擇它的輸出動做。因而咱們就須要給它指定行動的規則,這就是程序!假設
咱們記小蟲的輸入信息集合爲 I={黑色,白色},它的輸出可能行動的集合就是:O={前移,
後移},那麼程序就是要告訴它在給定了輸入好比黑色狀況下,它應該選擇什麼輸出。於是,
一個程序就是一個從 I 集合到 O 集合的映射。咱們也能夠用列表的方式來表示程序,好比:
程序 1:
輸入 輸出
黑色 前移
白色 後移
這個程序很是簡單,它告訴小蟲當讀到一個黑色方格的時候就往前走一個方格,當讀到
一個白色方格的時候就後退一個格。
咱們不妨假設,小蟲所處的世界的一個片段是:黑黑黑白白黑白……,小蟲從左端開
始。
那麼小蟲讀到這個片段會怎樣行動呢?它先讀到黑色,而後根據程序前移一個方格,
因而就會獲得另一個黑色信息,這個時候它會根據程序再次前移一個方格,仍然是黑色,
再前移,這個時候就讀到白色方格了,根據程序它應該後退一個格,這個時候輸入就是黑色
了,前移,白色,後移……,能夠預見小蟲會無限的循環下去。
然而,現實世界中的小蟲確定不會這樣傻的在那裏無限循環下去。咱們還須要改進這個
最簡單的模型。首先,咱們知道小蟲除了能夠機械地在世界上移動之外,還會對世界自己造
成影響,於是改變這個世界。好比蟲子看到旁邊有食物,它就會把那個東西吃掉了。在咱們
這個模型中,也就至關於咱們必須假設小蟲能夠改寫紙帶上的信息。於是,小蟲可能的輸出
動做集合就變成了:O={前移,後移,塗黑,塗白}。這個時候,咱們能夠把程序 1 改成比
如:
……
開始 程序 2:
輸入 輸出
黑 前移
白 塗黑
紙帶是黑黑白白黑……,小蟲會怎樣行動呢?下面的圖表示出了這個例子中每一步小蟲
的位置(標有圓點的方格就是小蟲的當前位置),以及紙帶的情況。
開始:小蟲在最左邊的方格,根據程序的第一行,讀入黑色應該前移。
第二步:仍然讀入黑,根據程序的第一行,前移。
第三步:這個時候讀入的是白色,根據程序的第二行,應該把這個方格塗黑,而沒有其餘的
動做。假設這張圖上方格仍然沒有塗黑,而在下一時刻才把它表示出來。
第四步:當前方格已是黑色的,所以小蟲讀入黑色方格,前移。
第五步:讀入白色,塗黑方格,原地不動。
第六步:當前的方格已經被塗黑,繼續前移。
第七步:讀入黑色,前移
小蟲的動做還會持續下去……。咱們看到,小蟲將會不停的重複上面的動做不斷往前走,
並會把全部的紙帶塗黑。
顯然,你還能夠設計出其餘的程序來,然而不管你的程序怎麼複雜,也不管紙帶子的情
況如何,小蟲的行爲都會要麼停留在一個方格上,要麼朝一個方向永遠運動下去,或者就是
在幾個方格上來回打轉。然而,不管怎樣,小蟲比起真實世界中的蟲子來講,還有一個致命
的弱點:那就是若是你給它固定的輸入信息,它都會給你固定的輸出信息!由於咱們知道程
序是固死的,所以,每當黑色信息輸入的時候,不管如何它都僅僅前移一個方格,而不會作
……
……
……
……
……
……
…… 出其餘的反應。它彷佛真的是機械的!
若是咱們進一步更改小蟲模型,那麼它就會有所改進,至少在給定相同輸入的狀況下,
小蟲會有不一樣的輸出狀況。這就是加入小蟲的內部狀態!咱們能夠做這樣的一個比喻:假設
黑色方格是食物,蟲子能夠吃掉它,而當吃到一個食物後,小蟲子就會感受到飽了。當讀入
的信息是白色方格的時候,雖然沒有食物但它仍然吃飽了,只有當再次讀入黑色時候它纔會
感受到本身飢餓了。於是,咱們說小蟲具備兩個內部狀態,並把它內部狀態的集合記爲:
S={飢餓,吃飽}。這樣小蟲行爲的時候就會不只根據它的輸入信息,並且也會根據它當前
的內部狀態來決定它的輸出動做,而且還要更改它的內部狀態。而它的這一行動仍然要用程
序控制,只不過跟上面的程序比起來,如今的程序就更復雜一些了,好比:
程序 3:
輸入 當前內部狀態 輸出 下時刻的內部狀態
黑 飢餓 塗白 吃飽
黑 吃飽 後移 飢餓
白 飢餓 塗黑 飢餓
白 吃飽 前移 吃飽
這個程序複雜多了,有四行,緣由是你不只須要指定每一種輸入狀況下小蟲應該採起
的動做,並且還要指定在每種輸入和內部狀態的組合狀況下小蟲應該怎樣行動。看看咱們的
蟲子在讀入黑白白黑白……這樣的紙帶的時候,會怎樣?仍然用下面的一系列圖來表示,灰
色的圓點表示飢餓的小蟲,白色的圓點表示它吃飽了。爲了清晰,咱們把小蟲將要變成的狀
態寫到了圖的下一行。
假定它仍然從左端開始,並且開始的時候小蟲處於飢餓狀態。這樣讀入黑色,當前飢
餓狀態,根據程序第一行,把方格塗白,並變成吃飽(這至關於把那個食物吃了,注意吃完
後,小蟲並沒動)。
第二步:當前的方格變成了白色,於是讀入白色,而當前的狀態是吃飽狀態,那麼根
據程序中的第四條前移,仍然是吃飽狀態;
第三步:讀入白色,當前狀態是吃飽,於是會重複第二步的動做。
第四步:仍然重複上次的動做。
……
塗白方格,變成吃飽
……
前移,仍然吃飽
……
前移,保持吃飽
……
前移,保持吃飽
第五步:讀入黑色,當前狀態是吃飽,這時候根據程序的第二行應該後移方格,並轉
入飢餓狀態;
第六步:讀入白色,當前飢餓狀態,根據程序第三行應該塗黑,並保持飢餓狀態(各
位注意,這位小蟲彷佛本身吐出了食物!);
第七步,讀入黑色,當前飢餓,因而把方格塗白,並轉入吃飽狀態(呵呵,小蟲把剛
剛本身吐出來的東西又吃掉了!)。
第八步,讀入白色,當前吃飽,因而前移,保持吃保狀態。
這時候跟第四步的狀況徹底同樣了,於是小蟲會徹底重複 五、六、七、8 步的動做,並永
遠循環下去。彷佛最後的黑色方格是一個門檻,小蟲不管如何也跨越不過去了。
小蟲的行爲比之前的程序複雜了一些。儘管從長期來看,它最後仍然會落入機械的循
環或者無休止的重複。然而這從本質上已經與前面的程序徹底不一樣了,由於當你輸入給小蟲
白色信息的時候,它的反應是你不能預測的!它有可能塗黑方格也有可能前移一個。固然前
提是你不能打開小蟲看到它的內部結構,也不能知道它的程序,那麼你所看到的就是一個不
能預測的滿地亂爬的小蟲。若是小蟲的內部狀態數再增多呢,那麼它的行爲會更加的不可預
測!
說到這裏,你可能對於「小蟲的行爲不可預測」這句話持反對意見。由於全部可能的
輸入狀態是固定的,全部的內部狀態不管多少也是固定的,那麼小蟲全部可能的行爲就應該
是有限的!然而,不要忘記紙帶的長度是無限的,於是雖然每一個具體的輸入可能就有 0 和 1
兩種狀態,然而這些 0 和 1 的輸入組合倒是無限的。另外退一步說,輸入紙帶的狀況是有限
的(你能夠理解爲 01 組合通過若干長度就會出現循環,好比 011011011…),那麼咱們的小
蟲會不會必然最終陷入到無休止的循環中呢?答案是確定的,由於這個時候輸入的組合數乘
之內部狀態總數是一個有限的數值,於是小蟲必然會遍歷全部的可能狀況。不管哪一種狀況下,
你有可能都會認爲小蟲是能夠預測的,也就是彷佛你能夠經過某種聰明的「數學」判斷小蟲
是否會循環,以及在何時循環。也就是說,經過你的聰明的數學,你只要看看小蟲的程
序,而不用執行它就可以預言小蟲在多少多少步以後必然會「傻傻地」重複之前的動做了。
這樣一來,它可真是名副其實的「雕蟲小技」了。然而真的是這樣麼?這種斷定小蟲傻循環
的通常定理或程序存在麼?這個問題留待咱們後面進行討論。
……
後移,變成飢餓
……
塗黑,保持飢餓
……
……
塗白,轉入吃飽
前移,保持吃飽 好了,若是你已經完全搞懂了咱們的小蟲是怎麼工做的,那麼你已經明白了圖靈機的工
做原理了!由於從本質上講,最後的小蟲模型就是一個圖靈機!
二、如何理解圖靈機模型*
剛纔用小蟲說明了圖靈機的工做原理,相信你的第一個反映就是,這樣的模型太簡單了!
他根本說明不了現實世界中的任何問題!下面,我就要試圖說服你,圖靈機這個模型是偉大
的!
首先,我想說的是,其實咱們每個會決策、會思考的人就能夠被抽象的當作一個圖靈
機。
爲何能夠作這種抽象呢?首先咱們能夠考慮擴展剛纔說的小蟲模型。由於小蟲模型是
以一切都簡化的前提開始的,因此它的確是太太簡單了。然而,咱們能夠把小蟲的輸入集合、
輸出行動集合、內部狀態集合進行擴大,這個模型就一會兒實用多了。首先,小蟲徹底能夠
處於一個三維的空間中而不是簡簡單單的紙帶。而且小蟲的視力很好,它一會兒能讀到方圓
500 米的信息,固然,小蟲也能夠擁有其餘的感受器官,好比嗅覺、聽覺等等,而這些改變
都僅僅是擴大了輸入集合的維數和範圍,並無其餘更本質的改變。一樣道理,小蟲可能的
輸出集合也是異常的豐富,它不只僅能移動本身,還能夠盡情的改造它所在的天然界。進一
步的,小蟲的內部狀態可能很是的多,並且控制它行爲的程序可能異常複雜,那麼小蟲會有
什麼本事呢?這就很難說了,由於隨着小蟲內部的狀態數的增長,隨着它所處環境的複雜度
的增長,咱們正在逐漸失去對小蟲行爲的預測能力。可是全部這些改變仍然沒有逃出圖靈機
的模型:輸入集合、輸出集合、內部狀態、固定的程序!就是這四樣東西抓住了小蟲信息處
理的根本。
咱們人能不能也被這樣的抽象呢?顯然,輸入狀態集合就是你所處的環境中可以看到、
聽到、聞到、感受到的全部一塊兒,可能的輸出集合就是你的每一言每一行,以及你可以表達
出來的全部表情動做。內部狀態集合則要複雜得多。由於咱們能夠把任意一個神經細胞的狀
態組合看做是一個內部狀態,那麼全部可能的神經細胞的狀態組合將是天文數字!
彷佛你會說,這個模型根本不對,還有不少思惟本質的東西沒有歸納進去。好比記憶
問題,人有記憶,圖靈機有麼?其實,只要圖靈機具備了內部狀態,它就相應的具備了記憶。
好比上面講到的具備飢餓和吃飽兩種狀態的小蟲就會記住它所經歷過的世界:若是吃到食物
就用吃飽狀態來「記住」吃過的食物。什麼是記憶呢?假如你經歷了一件事情並記住了它,
那麼只要你下一次的行動在相同條件下和你記住這件事情以前的行動不同了,就說明該事
情對你形成了影響,也就說明你確實記住了它。
學習的問題反映在模型中了麼?學習是怎麼回事兒呢?彷佛圖靈機模型中不包括學
習,由於學習就意味着對程序的改變,而圖靈機是不能在運行過程當中改變它的程序的。然而,
咱們不難假設,你實際上並不能打開一我的的腦殼來看,因此它的實際程序規則你是不知道
的。頗有可能一個圖靈機的規則沒有改變,只不過激活了它的某些內部狀態,於是它的行爲
發生了本質上的變化,儘管給它相同的輸入,它給出了徹底不一樣的輸出,於是在咱們看來,
它彷佛會學習了!而實際上,這個圖靈機的程序一點都沒變。
還有不少不少現象彷佛都能被圖靈機包括,什麼是人類的情緒、情感?你徹底能夠把
它看做是某種內部狀態,於是處於心情好的情緒下,你的輸入輸出是一套規則,而心情很差
的時候則徹底是另外一套。這仍然沒有逃出圖靈機的模型範圍。
接下來的問題就是咱們人的思惟到底是不是和圖靈機同樣遵循固定的程序呢?這個問
題彷佛初看是不可能的,由於人的行爲太不固定了!你不可預言它!然而我會爭辯道,不管
如何神經元傳遞信息、變化狀態的規律都是固定的,能夠被程序化的,那麼做爲神經元的整
體:腦的運做必然也要遵循固定的規則也就是程序了。那麼,若是是這樣,正如圖靈相信的,人腦也不會超越圖靈機這個模型,因此,人工智能也必然是可能的!然而,我認爲針對這個
問題的答案頗有可能沒有這麼簡單,咱們將在最後詳細討論這個問題。
不管如何,我相信你已經可以體會到了,圖靈機模型其實是很是強有力的!
3、計算
一、什麼是計算
說了這麼多,雖然也許你已經瞭解到了圖靈機的威力,也許還將信將疑,然而,你確定
仍然看不出來圖靈機和計算有什麼關係。而實際上,圖靈機是一個理論計算機模型,它最主
要的能耐仍是在於計算上!因此,下面咱們就來看看什麼是計算!
我能夠先給出一個很摩登的對計算概念的理解:廣義上講,一個函數變化如把 x 變成了
f(x)就是一個計算!若是咱們把一切都看做是信息,那麼更精確的講,計算就是對信息的變
換!若是採用這種觀點,你會發現,其實天然界充滿了計算!若是咱們把一個小球扔到地上,
小球又彈起來了,那麼大地就完成了一次對小球的計算。由於你徹底能夠把小球的運動都抽
象成信息,它無非是一些好比位置、速度、形狀等等能用信息描述的東西嘛,而大地把小球
彈起來就無非是對小球的這些信息進行了某種變換,於是大地就完成了一次計算!你能夠把
整個大地看做是一個系統,而扔下去的小球是對這個系統的輸入,那麼彈回來的小球就是該
系統的輸出,於是也能夠說,計算就是某個系統完成了一次從輸入到輸出的變換!
這樣理解沒關係,你會發現,現實世界處處都是計算了!由於咱們徹底能夠把全部的自
然界存在的過程都抽象成這樣的輸入輸出系統,全部的大天然存在的變量都看做是信息,因
而計算無處不在!也的確,正是採起了這樣的觀點,國外才有可能發明什麼 DNA 計算機、
生物計算機、量子計算機這些新鮮玩藝!由於人家把 DNA 的化學反應、量子世界的波函數
變換都看做是計算了,天然就會人爲地把這些計算組合起來構成計算機了。然而,彷佛咱們
的理論家們還在力圖證實關於圖靈機的某個定理呢,卻徹底沒有意識到計算其實就是這樣簡
單!
下面回到圖靈機!爲何說圖靈機是一個計算的裝置呢?很簡單,圖靈機也是一個會對
輸入信息進行變換給出輸出信息的系統。好比前面說的小蟲,紙帶上的一個方格一個方格的
顏色信息就是對小蟲的輸入,而小蟲所採起的行動就是它的輸出。不過這麼看,你會發現,
彷佛小蟲的輸出太簡單了。由於它僅僅就有那麼幾種簡單的輸出動做。然而,不要忘了,復
雜性來源於組合!雖然每一次小蟲的輸出動做很簡單,然而當把全部這些輸出動做組合在一
起,就有可能很是複雜!好比咱們能夠把初始時刻的紙帶看做是輸入信息,那麼通過任意長
的時間好比說 100 年後,小蟲經過不斷的塗抹紙帶最後留下的信息就是輸出信息了。那麼小
蟲完成的過程就是一次計算。事實上,在圖靈機的正規定義中,存在一個所謂的停機狀態,
當圖靈機一到停機狀態,咱們就認爲它計算完畢了,於是不用費勁的等上 100 年。
二、計算的組合
更有意思的是,咱們能夠把若干個計算系統進行合併構成更大的計算系統。好比仍是那
個小球吧,若是往地上放了一個蹺蹺板,這樣小球掉到地上會彈起這個蹺蹺板的另外一端,而
蹺蹺板的另外一邊可能仍是一個小球,因而這個彈起的小球又會砸向另外一個蹺蹺板……。
咱們天然能夠經過組合若干圖靈機完成更大更多的計算,若是把一個圖靈機對紙帶信息
變換的結果又輸入給另外一臺圖靈機,而後再輸入給別的圖靈機……,這就是把計算進行了組
合!也許你還在爲前面說的無限多的內部狀態,無限複雜的程序而苦惱,那麼到如今,你不
難明白,實際上咱們並不須要寫出無限複雜的程序列表,而僅僅將這些圖靈機組合到一塊兒就
能夠產生複雜的行爲了。 有了圖靈機的組合,咱們就可以從最簡單的圖靈機開始構造複雜的圖靈機。那麼最簡單
的圖靈機是什麼呢?咱們知道最簡單的信息就是 0 和 1,而最簡單的計算就是對 0 或 1 進行
布爾運算。而布爾運算本質上其實就三種:與、或、非。從最簡單的邏輯運算操做最簡單的
二進制信息出發咱們其實能夠構造任意的圖靈機!這點不難理解:任何圖靈機均可以把輸入、
輸出信息進行 01 的編碼,而任何一個變換也能夠最終分解爲對 01 編碼的變換,而對 01 編
碼的全部計算均可分解成前面說的三種運算。也許,如今你明白了爲何研究計算機的人都
要去研究基本的布爾電路。奧祕就在於,用布爾電路能夠組合出任意的圖靈機!
三、征服無限的方法!
回憶你小時候是如何學會加法運算的。剛開始的時候,你僅僅會死記硬背。好比你記住
了 1+1=2,記住了 2+4=6,……。然而不管你記住多少固定數字的運算,你都不叫學會了加
法。緣由很簡單,假如你記住了 n 對數的加法,那麼我總會拿出第 n+1 對數是你沒有記住
的,所以你仍是不會計算。原則上。天然數的個數是無窮的,因此任何兩個數的加法可能結
果也是無窮的,而若是採用死記硬背的方法,咱們頭腦怎麼可能記住無窮數字的計算法則
呢?可是隨着年齡的增加,你畢竟仍是最終學會了加法運算!說來奇怪,你確定明白其實加
法運算並不須要記住全部數字的運算結果,而僅僅須要記住 10 之內的任意兩個數的和,並
且懂得了進位法則就能夠了。
你是怎麼作到的呢?假設要計算 32+69 的加法結果,你會把 32 寫到一行,把 69 寫到
下一行,而後把他們對齊。因而你開始計算 2+9=11,進一位,而後計算 3+6=9,再計算 9+1=10
再進一位,最後,再把計算的這些每一位的結果都拼起來就是最終的答案 101。這個簡單例
子給咱們的啓發就是:做加法的過程就是一個機械的計算過程,這裏輸入就是 32 和 69 這兩
個數字,輸出就是 101。而你的程序規則就是具體的把任意兩個 10 之內的數求和。這樣,
根據固定的加法運算程序你能夠計算任兩個數的加法了。
不知你發現了沒有,這個計算加法的方法可以讓你找到運用有限的規則應對無限可能情
況的方法!咱們剛纔說了,實際上天然數是無限的,這樣,全部可能的加法結果也是無限的。
然而運用剛纔說的運算方法,不管輸入的數字是多少,只要你把要計算的數字寫下來了,就
必定可以計算出最終的結果,而無需死記硬背全部的加法!
於是,能夠說計算這個簡單的概念,是一種用有限來應對無限的方法!咱們再看一個
例子:假如給你一組數對:1,2 3,6 5,10 18,36,就這 4 對,這時問你 102 對應的數是多
少?很顯然,若是僅僅根據你掌握的已知數對的知識,是不可能知道答案的,由於你的知識
庫裏面沒有存放着 102 對應數字的知識。然而,若是你掌握了產生這組數對的程序法則,也
就是看到若是第一個數是 x,那麼第二個數就是 2x 的話,你確定一會兒就算出 102 對應的
是 204 了。也就是說,你實際上運用 2x 這兩個字符就記住了無限的諸如 1,2 3,6 102,204
全部這樣的數對。
這看起來彷佛很奇怪。我怎麼可能運用有限的字符來應對無限種可能呢?實際上,當
沒有人問你問題的時候,你存儲的 2x 什麼也沒有,而當我問你 102 對應的是多少?我就相
當於給你輸入了信息:102,而你僅僅是根據這個輸入信息 102 進行一系列的加工變換獲得
了輸出信息 204。於是輸入信息就比如是原材料,而你的程序規則就是加工的方法,只有在
原材料上進行加工,你才能輸出最終產品。
這讓我不由想起了專家系統方法。其實專家系統就是一個大的規則庫。也就至關於存
儲了不少不少的 1,2 3,6 5,10 這樣特殊的規則對。而不管它存儲的東西再多,總歸會是有限
的,你只要找到一個它沒有存儲到的問題,它就無能爲力了。於是專家系統就會在你問到
102 對應是多少的時候失敗!如何解決問題?人們想出了不少方法,就好比元規則的方法,
其實元規則就至關於剛纔所說的計算加法的程序,或者 2x 這樣的東西。運用元規則的確能夠應對無限種狀況了。因此,這就是爲何你問計算機任何兩個數相加是多少,它總能給出
你正確的答案的緣由,雖然它沒必要記住全部這些加法對的信息。
然而僅僅是元規則就能解決全部問題麼?
假如給你三組數對,排列成一個表:
1,2 3,6 4,8 100,200
3,9 2,6 8,24 100,300
1,4 2,8 3,12 100,400
那麼問你在第 6 行上,3 這個數字對應的是多少?咱們先要找出第一行的規律是 2x 沒
有疑問,第二行呢?是 3x,第三行是 4x,那麼第 6 行就應該是 7x 了,於是在第 6 行上 3
應該對應的是 21 了!這裏跟前面不太同樣的是,雖然咱們獲得了每一行的規則好比第一行
的 2x,可是隨着行數的增長,這個規則自己也變化了,於是第 2 行是 3x,第 3 行是 4x 等等,
於是咱們又獲得了一個規則自己的規則,即若是行數是 n 的話,那麼這一行的規則就是
(n+1)x。咱們顯然可以根據輸入的 n 和 x 計算出數值。把這個道理放到專家系統裏面,這種
原理就是元規則的規則,元規則的元規則……,應該是無窮的!然而專家系統自己並不會自
動的概括這些規則,人必須事先把這些元規則寫到程序裏,這也就是專家系統最大的弊端。
而咱們人彷佛總能在一些個別的事件中概括出規則。進一步問,機器能夠概括麼?這就至關
於說:能夠爲概括方法編出程序麼?這也是一個頗有趣的問題,下面將要詳細討論!能夠設
想,假如咱們找到了真正概括的方法,那麼編寫出這樣的程序,它就會一勞永逸的本身進行
學習概括了。咱們徹底不再用給他編制程序和規則了。這正是人工智能的終極目標!
四、概括*
記得金大俠在他的一本武俠小說:《倚天屠龍記》中曾講述了這樣一段故事:武林泰斗
張三丰在情急之下要把他新創的武功「太極拳」傳授給新起之秀張無忌。張無忌除了有一身
精湛的「內功修爲」之外還對武學具備極高的悟性。於是當張三丰給他打過一趟太極拳之後,
他就把全部的招式所有記下來了而且當場把所學的太極拳從新再打給張三丰看。在張無忌練
拳的過程當中,張三丰反覆問他一個問題:「你已經忘掉幾招了?」。他的回答令其餘人異常不
解,由於他越在那裏揣摩太極拳的奧祕,忘記的招數也愈來愈多。旁邊的人不明白,這樣的
學法忘的這麼快,怎麼可能學會武功呢?然而,沒過多長時間,張無忌說已經忘掉了全部的
招式。張三丰笑着說:「不錯,你終於學會了‘太極拳’」。
從這個例子中,咱們看到了什麼?張無忌之因此能學會太極拳,正是由於他已經可以從
具體的一招一式之中抽象出了更高一層次的武學規律,於是,當他把全部的有形的武功招數
都忘記的時候,已經掌握了太極拳的精髓。而太極武功講究的就是借力打力,以柔克剛。說
白了就是事先並無固定招式存在,而等到敵人向我進攻的時候我再動態的生成破解的招
術。
用到圖靈機模型中,咱們不難發現,若是把具體的武功招術比喻成一些輸入,而應對招
術比喻成圖靈機的輸出,那麼太極所講究的借力打力、以柔克剛的方法其實就是相似上節講
過的 2x 這樣的圖靈程序!於是張無忌學太極拳的過程就是從特殊的輸入輸出提高到了通常
的算法的過程。也能夠說,張無忌運用了概括學習法!
然而,仔細觀察上一節的敘述,咱們會發現。雖然圖靈機可以將 2x 這樣的法則計算得
出結果,可是抽象出 2x 自己並非機器自動產生的,而是須要咱們外在的人編程進去。那
麼,面對這樣的問題,究竟圖靈機能不能像張無忌同樣進行概括思惟呢?
能夠設想,若是計算機真有了張無忌那兩下子,咱們人類可要省事兒多了!咱們甚至不
須要爲計算機編程序,它就會自動的從若干個具體事例中概括出通常的通用規律來。然而,
究竟計算機能不能具備真正的概括能力呢?讓咱們來仔細考慮一下這個問題。 咱們說若是計算機能自動概括,也就意味着咱們能夠爲概括方法來編寫一段程序 P。這
個程序能夠理解爲輸入的是一些特殊的數對,輸出的是可以生成這些數對的程序。也就是說
輸入具體的「招術」,輸出的是這些「招術」的通常規律。若是說程序 P 真正能夠本身概括,
那麼 P 就必然能夠概括出全部的規律。咱們已經討論過了,其實任何一個程序都可以被看
做是對輸入的一個變換而獲得輸出。那麼程序 P 天然也是。假設這些對子(a,b),(c,d),(e,f),……
都是程序 P 的輸入輸出對,那麼咱們挑選出前 1000 個(總而言之是足夠多的對子)。把這
1000 個特殊狀況輸入到 P 中,那麼 P 就應該可以產生這些對子的共性,也就是 P 本身這個
程序了!換句話說,程序 P 產生了它本身,P 本身把本身給概括出來了!這彷佛陷入了怪圈
之中!另外,咱們人類設計出來 P,若是 P 能夠概括全部的規律,那麼 P 可否也能概括出「人
概括 P」自己這個規律呢?仍然是怪圈問題!這樣的問題彷佛還有不少。反過來說,若是假
設概括出全部規律的程序 P 不存在,那麼爲何咱們人類總能概括出規律呢?什麼樣的具
體問題是可概括的,什麼問題是不可概括的?然而這些看起來很是重要的問題在目前尚未
統一的答案!
咱們還將會看到不少問題都涉及到邏輯中的怪圈,而因爲計算理論已經觸及了邏輯、信
息的根本,因此把一些問題引向邏輯怪圈並不奇怪。
4、模擬
一、什麼是模擬?
什麼是模擬?又是一個基本的問題,愛因斯坦說過,越是基本的概念就越是難以刻畫
清楚。模擬這個概念就是一個很難說清的問題。
若是你站在一個朋友面前,衝着他作了一些鬼臉。那麼他也會學着你的動做衝你作鬼
臉,那麼他就對你進行了模擬。
很明顯,在你和你朋友之間存在着一系列的對應關係:你的手對應他的手,你的眼睛
對應它的眼睛,你的嘴巴對應他的嘴巴……。並且你的手、眼睛、嘴巴作出來的動做也會對
應他的手、眼睛、嘴巴作出來的動做。於是,模擬的關鍵是對應!若是集合 A 中的元素可
以徹底對應 B 中的元素,那麼 A 就能夠模擬 B。
仍然用你衝你的朋友作鬼臉的例子,假如此次你作出的鬼臉以及動做沒有被他當即模
仿而是被他用某種符號語言記錄到了日記本上了。好比:「X 年 X 月 X 日,瘋子 XX 衝我作
了一個鬼臉:他伸出了左手食指放到了右眼下面往下拉他臉上的肉,而且吐出了他長長的舌
頭!」。過了 N 多天後,你的這位朋友掏出了日記本,按照上面的描述衝着你們作了這個鬼
臉。很顯然他仍然模擬了你當時的動做。那麼,你朋友日記本上的那段對話描述是否是對你
鬼臉動做的模擬呢?彷佛答案是否,由於這段文字跟你沒有半點相像。然而你的朋友正是根
據這段描述才作出了對鬼臉動做的模擬。也就是說,他把那段文字翻譯成了他的動做,而他
這個動做就是對你的模擬。這個翻譯的過程很顯然就是某種信息的變換,咱們徹底能夠把它
理解爲一個計算的過程,也就是能夠用圖靈機來實現的算法過程。因此,咱們說日記本上的
那段指令也構成了對你鬼臉動做的模擬,緣由是這些信息也與你的鬼臉動做構成了對應。具
體的,咱們能夠用下面的圖表示:
A 模擬 B C
變換
模擬 這裏 A 是你的鬼臉動做,B 是你朋友作出來的鬼臉動做,C 是日記本上的描述。你朋
友的動做 B 模擬了你的動做 A,而 B 的動做信息是經過執行 C 上的描述獲得的,也就是說
存在着一個從 C 到 B 上信息的變換。這樣咱們認爲 C 也對 A 進行了模擬。
二、圖靈機之間的模擬
下面來考慮圖靈機之間的模擬。按照前面的定義,一臺圖靈機包括:輸入集合 I,輸出
集合 O,內部狀態集合 S,程序規則表 T 四個要素。那麼若是兩個圖靈機之間的這些元素都
存在剛纔說的對應關係,就認爲兩個圖靈機能夠相互模擬了。然而圖靈機的功能是完成對輸
入信息進行變換獲得輸出信息的計算。咱們關心的也僅僅是輸入輸出之間的對應關係。於是
一臺圖靈機 A 若是要模擬 B 並不必定要模擬 B 中的全部輸入、輸出、內部狀態、程序規則
表這些元素,而只要在給定輸入信息的時候,可以模擬 B 的輸出信息就能夠了。
所以,咱們能夠用下面的圖來表示圖靈機之間的模擬:
也就是說在給定相同輸入信息的狀況下,只要輸出信息 o’可以模擬信息 o 就能夠,也
就認爲 B 模擬了 A。而信息 o’對信息 o 的模擬又符合咱們上面對通常集合之間模擬的定義。
也就是說若是存在另一臺圖靈機可以把信息 o’計算並映射成信息 o,就認爲 o’模擬了 o。
說白了也就是 o’能夠與 o 不同,可是隻要你能用一個圖靈機把 o’通過一系列運算變換到
相同的 o,就認爲 o’模擬了 o。於是也就是圖靈機 B 模擬了圖靈機 A。
進一步,咱們能夠假設 A 和 B 輸入的信息也不同,一個 i,另外一個是 i’,那麼若是 i
和 i’之間也存在着模擬對應關係的話,咱們仍然認爲 B 能夠模擬 A。也就是下面的圖:
有一點須要注意,若是 A 圖靈機模擬了 B 圖靈機,那麼並不必定 B 圖靈機能夠模擬 A
圖靈機。由於有可能 A 圖靈機比 B 圖靈機處理的信息更多。也就是說假如 B 能處理的信息
就是 1,2,3,4,而 A 處理的信息除了這四個數以外,還有 5,6,7,8,那麼顯然當輸入 1234
的時候 A 可以模擬 B,而當輸入 5678 的時候 B 沒定義了,不能完成任何操做。在這個時候
B 顯然不能模擬 A 了。
三、計算等價性
講了這麼多關於模擬的知識有什麼用呢?模擬的一個關鍵做用就是闡明什麼是等價
輸入信息 i
圖靈機 A
圖靈機 B
輸出信息 o
輸出信息 o’
模擬 模擬
輸入信息 i 圖靈機 A
圖靈機 B
輸出信息 o
輸出信息 o’
模擬 模擬
輸入信息 i’
模擬 的。好比爲了完成加法運算,你寫了一段程序,而我也寫了另外一段程序,雖然咱們兩個的程
序可能徹底不同,然而只要咱們兩個程序之間可以相互模擬,也就是說只要給定兩個數,
咱們都能正確的如出一轍的算出它們的和,那麼咱們兩個程序就是等價的!
具體地說,若是 A 可以模擬 B,而且 B 也能模擬 A,那麼 A 和 B 就是計算等價的。計
算等價性是很是強有力的,由於它揭示了在咱們這個宇宙中某種很是廣泛的規律。咱們仍然
用剛纔說的加法算法爲例子來講明。雖然計算兩個數的加法的方法可能有無窮多種,也有可
能用各類各樣的計算機語言,什麼 C,Basic,JAVA 等等來實現,更有可能奔跑在不一樣的計算
機上,然而全部這些程序,這些計算的結果意義都是相同的。也就是說全部與加法運算算法
計算等價的計算機程序都是一回事兒,於是加法算法這個東西是某種永恆而獨立的!
看!咱們在宇宙中找到了某種永恆性了,這種永恆性反映了宇宙規律中某種本質上的
美!計算等價性就和能量守恆定律同樣具備這種高級的對稱性,我甚至以爲計算等價性要比
能量守恆定律更加深入!由於不管如何能量守恆定律仍然是刻畫了物理系統的某種屬性,而
計算等價性則刻畫的是很是普遍的信息系統之間的某種守恆和對稱性,而一切系統均可以被
抽象爲信息系統,甚至是物質世界,因此,計算等價性是跨越全部系統之間的某種高級對稱
的、永恆的、美的東西。
爲了進一步理解計算等價性的威力所在,咱們不妨科幻一下。假設咱們可以用計算機
模擬某我的,好比說張三的思惟過程了(也就是假設真正的人工智能能夠實現了)。那也就
是說咱們能夠用一個計算機軟件 X 來完成對張三思惟的模擬。這樣,這個軟件就會在一切
與它具備計算等價性的程序甚至系統上實現張三這我的的思惟過程!好比咱們徹底有可能讓
一大堆分子的碰撞來實現 X 這個軟件,那麼就會在這大堆分子碰撞的過程當中完成對張三思
維的模擬,也就是說張三這我的的意志蹦到了這一大堆分子系統中去了!更進一步,咱們還
能夠找來足夠多的人好比這個星球上全部的人來模擬那大堆分子的碰撞,從而完成軟件 X
的計算。這意味着什麼?意味着張三這我的的思惟或者說意識在那羣人的總體上突現了!很
有可能,這些構成軟件 X 的人都並無意識到在他們上層的張三的意識的出現。更有趣的
是,張三本身頗有可能就在那一羣人之中呢!
相信你已經可以參悟到了什麼是計算等價性的威力了,那麼我也相信你可以理解爲什
麼說任何一臺咱們使用的計算機都不過是圖靈機的翻版了。
四、意義*
考慮下面三句話:「請把窗戶關上!」,「Please close the window!」,「01001110111」。這
三句話分別說給不一樣房間中的三我的。第一句話告訴給一箇中國人,因而他關上了窗戶;第
二句話告訴了一個英國人,他也關上了窗戶;第三句話告訴的是一個機器人,他也關上了窗
戶。這三句話從表面看顯然是徹底不同的,然而當它們讓不一樣的人來聽的時候,卻達到了
相同的最終結果:窗戶被關上了。那麼,咱們天然會想,這三句話有何相同呢?顯然,答案
是他們的意義相同。然而什麼又是意義呢?
真正回答意義的本質是一個很困難的問題,如今人們正在努力理解語義是什麼。雖然
咱們仍沒有徹底回答這個問題,可是,不妨從圖靈機、計算以及計算等價性的觀點來考慮該
問題。若是把中國人、英國人、機器人都看做是圖靈機,而那三句話看做是對他們的輸入信
息,那麼最終的結果就是圖靈機計算的輸出。這個時候咱們看到三種結果是相同的。也就是
說這些圖靈機之間是能夠相互模擬的。
考慮這三句話,顯然它們都具備相同的意義。而根據前面的敘述,可以相互模擬的圖
靈機是具備相同的計算等價性的。於是描述聽到關窗指令後並按照指令行事的圖靈機具備相
同的計算等價性。而這種計算等價性就好像是前面說到的加法規則同樣是獨立於計算系統、
執行機構的。於是,咱們能獲得下面的圖:
經過這個對比圖,咱們不可貴出結論:所謂語言的意義,就是執行這個語言系統的計
算等價性!
咱們如何知道不一樣的語言表達了相同的意義呢?顯然,咱們只要有了翻譯就能夠明白
「請把窗戶關上」與「Please close the window」具備相贊成義,而翻譯所做的工做無非就是
輸入中文信息輸出英文信息這樣的信息轉換工做,於是,也就是一個計算過程!
然而當不存在從一個語言到另一個語言的翻譯的時候,咱們也並不能判定某一個符號
序列對於固定的圖靈機是否有意義。這就是說,咱們雖然不能明白鳥叫是什麼含義,但並不
可否認它們的叫聲可能有意義,由於只有鳥本身才能明白叫聲的含義。
5、萬能圖靈機
一、編碼
其實我說的這個「萬能圖靈機」就是計算機術語中的「通用圖靈機」,英文是 Universal
Turing Machine。而我之因此稱之爲「萬能圖靈機」徹底是由於這個名字彷佛聽起來更加直
觀。
前面已經講述了模擬的概念,那麼天然會產生這樣一個問題:存在不存在一臺圖靈機
可以模擬全部其餘的圖靈機呢?答案是存在的。這種可以模擬其餘全部圖靈機的圖靈機就叫
作通用圖靈機,也就是咱們所說的「萬能圖靈機」。這種機器在圖靈計算這個範疇內,是萬
能的!
「萬能圖靈機」會怎樣工做呢?假如我把信息 x 輸入到了圖靈機 M 中,M 就能計算出
一個結果 o。那麼若是我把 x 和 M 的信息都輸入給萬能圖靈機,那麼萬能圖靈機也會輸出 o,
也就是萬能圖靈機能夠模擬任何一臺特殊的圖靈機。這樣的話咱們就可僅僅經過改變輸入 x
和 M 的值就能「改變」萬能圖靈機的程序規則了。於是也能夠認爲萬能圖靈機就是能夠任
意編程的。這裏的改變兩個字加上了引號,是由於事實上任何圖靈機在誕生以後規則就不能
改變了,於是咱們可以改變「萬能圖靈機」的規則,僅僅是由於看上去是這樣的,其實根本
沒有改變。
要說明爲何「萬能圖靈機」是存在的,以及它是怎樣模擬其餘任何圖靈機的動做的,
咱們必須先要理解究竟怎樣把任何一臺圖靈機輸入到「萬能圖靈機中」,這就須要理解編碼
的概念。什麼是編碼呢?你能夠理解爲對某一堆事物進行編號就是編碼。
其實咱們每人天天都在跟編碼打交道。每一個人都有一個身份證,而這個身份證都有一
語言 執行者
請把窗戶關上! 中國人
Please close the window! 英國人
01001110111 機器人
贊成義
贊成義
計算等價
計算等價
相同處: 意義 計算等價性
輸入指令
輸入指令
輸入指令 個 ID 號碼吧?那麼這個號碼就是你的編號。上學的時候老師給咱們每一個人都分配一個學號
也是編碼。
26 個字母可以被編碼,好比 a 對應 1,b 對應 2,……,這是顯而易見的。然而任意一
個英文單詞都是能夠被編碼的則不那麼容易一眼看出來。事實上,咱們能夠按照字典順序把
全部的單詞都列出來。也就是說字母順序越靠前,字符長度越短的單詞排在前面,其次長單
詞,字母順序靠後的單詞就排在後面。好比一種可能的字典順序:
a, about, an…, bad, be, behave…..
只要這樣一排好序,咱們就能給每一個單詞賦予一個數字,最簡單的方法是,給第一個
字母分配 1,第二個分配 2,……,於是咱們就給全部的單詞都編碼了。
下面討論任意一個圖靈機能不能被編碼。咱們假設討論的全部圖靈機的輸入集合都是
僅有 0,1 兩種,而它的輸出也僅僅有 0,1,2,3 四個動做分別表示前移,後移,塗寫 0,塗寫 1。
而內部狀態數最多爲 10000 個(總之足夠多就能夠了)。下面考慮程序。
假設圖靈機的程序表爲:
當前內部狀態 s 輸入數值 i 輸出動做 o 下一時刻的內部狀態 s'
2 1 0 3
1 0 3 2
3 0 1 1
… … … …
那麼咱們能夠把它寫到一行中,這就是 2,1,0,3; 1,0,4,2; 3,0,1,1,注意用「,」分開了內
部狀態,輸入數值,輸出動做和下一時刻的狀態,而用「;」分開了一行一行具體的程序。
這樣不管這個表有多大,咱們均可以把它寫成這樣的一個字符串。這個字符串就至關於一個
英文單詞,這就是對該圖靈機程序的一個描述。同理,其餘的圖靈機也可以獲得這樣的一個
單詞描述,那麼咱們再用字典序的方法對這些描述進行編碼,也就獲得了對全部圖靈機的編
碼。
若是一臺圖靈機的編碼是 M,它讀入的信息是 x,這樣只要把 M 和 x 用「.」號隔開的
方法分開做爲數據輸入到「萬能圖靈機」中,運用特殊的算法,這個萬能的機器就能得出對
M 計算 x 的模擬結果了。事實上能夠由定理證實萬能圖靈機對於任意的編碼都是存在的,
在這裏咱們就不敘述證實過程了。
二、自食其尾
既然「萬能圖靈機」可以模擬任何一臺圖靈機的動做,那麼它能不能模擬它本身的動
做呢?答案是確定的。咱們首先看到「萬能圖靈機」也是圖靈機,也有固定的輸入、輸出、
狀態的集合、固定的程序,於是它也能被編碼。因而咱們就能夠把它本身的編碼信息輸入給
它本身了。這就好像一條蛇咬到了本身的尾巴。會發生什麼呢?自食其尾就會產生怪圈,雖
然咱們如今尚未看到任何很差的徵兆,然而在下一節裏面,咱們將看到這種怪圈會誕生什
麼樣的結論。並且咱們也會看到,其實這個怪圈是和康托爾對角線法則、哥德爾定理有關的。
圖靈機一旦可以把程序做爲數據來讀寫,就會誕生不少有趣的狀況。首先,存在某種
圖靈機能夠完成自我複製!事實上,計算機病毒就是這樣乾的!咱們簡單說明一下,這個特
殊的圖靈機是如何構造的。咱們假定,若是一臺圖靈機是 X,那麼它的編碼就記爲<X>,這
樣可以自我複製的圖靈機 T 的功能是,把 T 的編碼<T>寫到紙帶上輸入到「萬能圖靈機」,那麼「萬能圖靈機」就能根據讀入的<T>,在紙帶上再次輸出<T>的一份拷貝<T>’,而且
<T>=<T>’。下面就來大概解釋如何構造這樣的 T。首先 T 由兩部分構成 AB。第一部分 A
的功能是指導「萬能圖靈機」把 B 的編碼<B>原封不動的打印到紙帶上,這個時候紙帶上就
有了<B>,若是這個時候你想用一樣的方法打印<A>到紙帶上是不行的,由於會出現循環定
義。然而 B 能夠這樣作,讀入紙帶上的信息 X,生成可以打印 X 的圖靈機:p(X)的編碼<p(X)>
打印到紙帶上,並把 X 和<p(X)>的內容先後調換,有定理保證這樣的圖靈機是存在的。這
樣當 B 讀到紙帶上的信息<B>以後就會打印出可以打印<B>的圖靈機的編碼也就是<A>了,
而後把<A>和<B>位置對換就構成了<AB>也就是<P>,因此 P 把本身進行了一次拷貝。初看
起來,這種自我複製的程序是不可能的,由於這包含了無窮無盡的怪圈。P 要能產生它本身
<P>就意味着 P 中至少包含了一個<P>,而這個<P>中又包含了至少一個<P>……,最後 P 必
然是一個無限大的程序,然而咱們卻可以證實 P 是可能的。
有了「萬能圖靈機」還能獲得不少有趣的結論,好比假設有一大羣圖靈機,讓它們彼
此之間隨機的相互碰撞,當碰到一塊的時候,一個圖靈機能夠讀入另外一個圖靈機的編碼,並
且修改這臺圖靈機的編碼。那麼這樣一個圖靈機「湯」中會產生什麼呢?聖塔菲研究所的芳
塔娜已經研究了這個實驗,並得出了驚人的結論:在這樣的系統中會誕生自我繁殖的、自我
維護的相似生命的複雜組織,並且這些組織能進一步聯合起來構成更大的組織!
6、停機問題
一、死循環
在進行正式討論以前,咱們先來看看一個很是簡單的猜硬幣遊戲。
假如個人兩個拳頭中一個攥着一枚硬幣,另外一個沒有,而後讓你猜是哪個?因而你
告訴我左手中有。這時候我不會把手張開,而是背過身去作一番手腳,而後把拳頭伸過來,
張開手!哈,你錯了吧,硬幣在右手中!大概傻子都能看出來個人伎倆之所在!不用說,採
用這種方法我保證百戰百勝。由於我老是等你說出來哪一個手有硬幣以後再動態的改變個人策
略。因此,這改變以後的狀態就已經不是你猜的了。
大概你會以爲難以想象:其實圖靈停機問題就是一個相似該遊戲的原理!
下面咱們來看看圖靈停機問題是怎麼回事兒。還記得咱們前面提到的可憐的「小蟲模
型」麼?當時咱們就提出來一個問題:會不會存在某種聰明的數學,只要檢查一下小蟲的程
序,而不用執行該程序就可以讓咱們預言小蟲何時會陷入「傻循環」,而無休止的重複
前面的動做?咱們不妨假設這樣的「聰明的數學」就是一個程序,它能夠讀入小蟲的程序規
則,而後吐出一個答案說明小蟲會死循環,而且在多少多少步以後。那麼這樣的「聰明程序」
存在麼?
由於前面已經說了,小蟲模型就是一個圖靈機,那麼「聰明程序」的問題就變成了正
規的描述:存在不存在一個程序好比說 P,可以判斷出任意一個程序 X 是否會在輸入 Y 的
狀況下陷入死循環?咱們不妨設 P(X,Y)表示 P 判斷程序是 X,數據是 Y 的結果。若是存在
死循環,那麼 P(X,Y)就輸出一個 yes。若是不存在死循環,那麼 P(X,Y)就輸出一個 no。我
們的問題就是這樣的 P(X,Y)存在麼?這就是停機問題。所謂的某個程序 X 在輸入 Y 上停機
就是說 X 不存在着死循環,反過來若是不停機就是存在着死循環,於是這裏停機和死循環
是一回事兒。那麼,這種判斷停機問題的程序 P 存在麼?
答案是不存在的。下面我能夠證實個人這個結論。
咱們不妨假設程序 P 存在。那麼咱們能夠根據 P 設計一個新的程序 Q 以下:
X 是任何一段程序的編碼:
Program Q(X){ m=P(X,X)
do while (m=no)
…
…
end do
if m=yes then return
}
這段程序通俗來說就是:輸入任何一段程序 X,調用函數 P(X,X)並獲得返回值 m,如
果 m=no,也就是說根據 P 的定義,P 判斷出程序 X 做用到它本身身上 X 不存在死循環。那
麼 Q 就不停的作 do while 和 end do 之間的語句。若是 m=yes,咱們知道這表示 P 判斷出程
序 X 在 X 上存在死循環。就返回,結束該函數。
咱們能夠看到,這樣定義的函數 Q(X)是沒有問題的。下面就進入關鍵時刻了:咱們問
Q 這個程序做用到 Q 自身的編碼上也就是 Q(Q)會不會死循環呢?固然咱們能夠運用強有力
的函數 P(Q,Q)來計算這個問題。
假設 Q(Q)會發生死循環,那麼 P(Q,Q)就會返回 yes。然而根據 Q 函數的定義,把 X=Q
代入其中會發現因爲 P(Q,Q)返回的是 yes,也就是 m=yes,所以 Q 函數會立刻結束,也就是
程序 Q(Q)沒有發生死循環。然而若是假設 Q(Q)不發生死循環,那麼 P(Q,Q)應該返回 no,
這樣根據 Q 函數的定義,把 X=Q 代入 Q(Q)之中會獲得 m=no,這樣程序就會進入 do while
循環,而這個循環顯然是一個死循環。於是 Q(Q)發生了死循環!這又致使了矛盾。
不管 Q(Q)會不會發生死循環,都會產生矛盾,然而哪裏錯了呢?答案只能是最開始的
前提就錯了,也就是說咱們最開始的假設 P(X,Y)可以判斷任意程序 X 在輸入 Y 的時候是否
死循環是錯誤的!也就是說這樣的程序 P(X,Y)不存在!
二、如何理解
也許你會感受整個論證過程有些怪異,爲何不存在這種 P(X,Y)程序呢?而上面的論
證過程當中僅僅說 P(X,Y)看成用到 P(Q,Q)上時會產生矛盾。彷佛並不能說明 P 做用到其餘程
序上不能判斷是否死循環。好比你能夠考慮編寫這樣一段程序,當一發現某個程序 do
while(T),這裏 T 老是爲真,這樣的語句出現的時候就判斷這個程序有死循環。這顯然是可
能的。但問題的關鍵是,你假設了 P(X,Y)可以判斷任意的一個程序是否死循環!最關鍵的
就是這「任意程序」上了。由於假如你已經按照剛纔提到的判斷是否有 do while(T)語句的方
法寫出了一個程序 P 來判斷某程序是否死循環,那麼我就會根據你這個程序 P 再構造出一
個程序 Q,就是利用上面提到的論證方法,咱們不妨寫成 QP(這裏下標 P 的含義表示根據你
的程序 P 而構造的 Q)。這樣你的 P 在遇到了 P(Q,Q)這樣的怪東西的時候無能爲力了!
可能你還不服輸,因而你又改進了你的程序變成了 P’,這個時候 P’可以判斷包含了 QP
這個程序時候的全部程序狀況了。那麼我又會根據你的新程序 P’來構造出一個更新的 QP’,
你的程序 P’仍然不能判斷,固然你還能夠構造 P’’,P’’’,……,我也會跟着構造 QP’’,QP’’’,……,
總而言之這個過程是無窮的!由於我總在你以後構造程序,因此你是水我是船,水漲船高,
我總能比你高一級別!
這很像剛開始敘述的那個猜硬幣的遊戲。你想猜對個人硬幣,就必須告訴我一個答案是
左手仍是右手,然而關鍵問題是我總能根據你作出的答案動態調整,使得你永遠也猜不對!
停機問題也是如此,我總能根據你的程序 P 來構造你的 P 斷定不出來的問題 Q,我總會贏!
很簡單,由於你總要在我以前構造好 P 呀,就至關於你總要先說出硬幣在哪一個手!
三、對角線刪除方法 我在開始的時候就提到了圖靈停機問題、哥德爾定理等等都來源於康托爾的對角線刪除
法則。那麼,下面咱們就來看看,若是運用對角線刪除法則如何證實圖靈停機問題呢?採用
這種全新的證實思路,也許你會更加清楚地認識到停機問題的本質。
問題沒有變,是否存在一個程序 P(X,Y)判斷出來任意一個程序 X 當輸入 Y 的時候是否
有死循環,或者說是否停機。
咱們仍然用反證法,假設這樣的 P(X,Y)是存在的。而咱們知道程序 X 自己是能夠被編
碼的。也就是能夠爲全部的程序進行編號:1,2,3,……,而數據 Y 自己也是這樣的編號
1,2,3,……,於是咱們就能夠把每一對 X 和 Y 的組合排列在一張表上。好比列表示的是
數據 Y,而行表示的是程序 X,這樣 P(X,Y)的值也就是 yes 或 no 就能夠寫在第 X 行第 Y 列
的對應位置上,表示 P(X,Y)判斷出的 X 做用在輸入 Y 上是否會死循環的結果。好比下面的
表就是一個示例:
1 2 3 4 5 6 …… Y ……
1 yes no no yes yes no …… yes ……
2 no no yes yes no yes …… no ……
… ……………………………………………………
X no yes no yes yes no …… yes ……
… ……………………………………………………
到這裏沒有發生什麼毛病。咱們知道上表中的每個行都表示一個肯定的程序做用到不
同的數據上所獲得的結果。好比程序 X 做用在 1,2,3,4,……,Y,……上給出的結果就是一個
序列:
no,yes,no,yes,yes,no,……,yes,……
下面咱們把上表對角線上的元素挑出來。也就是專門找那些第 1 行第 1 列,第 2 行第 2
列,……這樣的元素就能夠獲得一個序列:
yes,no,no,yes, ……
而根據這個序列咱們徹底能夠構造這樣一個反序列:
no,yes,yes,no, ……
也就是說這個序列在每個位上都與前一個對角線序列不一樣!這個序列就稱爲對角線刪
除序列。那麼我問,這個對角線刪除序列是否在咱們表中的某一行上呢?答案是否認的!這
個序列必然不在表中。由於它的第一個元素與 1,1 不一樣,第二個元素與 2,2 不一樣,……。換
一種方式解釋就是:假設對角線刪除序列的確在表上列出來了,那麼這個序列必然在某個固
定的行,好比說就在第 1001 行。那麼咱們就要考慮這第 1001 行,第 1001 列的元素,咱們
知道根據序列的構造方法(1001,1001)對應表中的元素是與序列上的這個元素不一樣的!於是產
生了矛盾,也就是說這個構造出來的對角線刪除序列不在表中!
咱們徹底能夠設計出一段程序 Q 使得 Q 做用在 1,2,……,X,……上產生的序列就是對角
線刪除序列,而對角線刪除序列不在表中就意味着程序 P 並不能判斷出程序 Q 做用在任意
輸入上是否停機。其實這裏的程序 Q 就是前一節論證停機問題的程序 Q。
用對角線刪除的證實方法來看究竟哪裏出錯了呢?錯誤就出在咱們假設程序 P 可以得
到這樣一張完整的表,這張表對全部的程序計算獲得是否停機的答案。
四、意味着什麼?
咱們已經看到了,的確存在着一類問題咱們人類能構造出來,而圖靈機是不能解的,。
咱們知道圖靈機不能解的問題也就是一切計算機不能解的問題,於是這類問題也叫作不可計
算的。所以,必然存在着計算機的極限。實際上,運用咱們前面敘述的計算等價性原理,有
不少問題均可以被歸結爲圖靈停機問題,也就是說圖靈停機問題揭示了宇宙中某種共性的東西,全部那些計算機不能解決的問題從本質上講都和圖靈停機問題是計算等價的。好比在最
開始咱們就提到的希爾伯特第 10 問題就是一個典型的不可計算問題!還有不少問題是不可
計算的,尤爲是那些涉及到計算全部程序的程序。好比是否存在一個程序可以檢查全部的計
算機程序會不會出錯?這是一個很是實際的問題。咱們都知道計算機程序特別容易犯錯誤,
爲了檢查出某段計算機程序的錯誤,咱們人類就必須對這個程序進行人工的檢查。那麼能不
能發明一種聰明的計算機軟件,輸進去任何一段計算機程序,這個軟件就會自動幫你檢查輸
入的程序是否有錯誤?答案仍然是不存在的,其實這個問題能夠被證實和圖靈停機問題實質
上是同樣的!因而咱們的夢想又破滅了!
圖靈停機問題也和複雜系統的不可預測性有關。咱們總但願可以預測出複雜系統的運行
結果。那麼能不能發明一種聰明的程序,輸入進去某個複雜系統的規則,輸出的是這些規則
運行的結果呢?從原則上講,這種事情是不可能的。它也是和圖靈停機問題等價的。於是,
咱們得出來的結論就是:要想弄清楚某個複雜系統運行的結果,惟一的辦法就是讓這樣的系
統實際運做,沒有任何一種計算機算法可以事先給出這個系統的運行結果。你頗有可能不一樣
意個人觀點,由於畢竟咱們可以發明不少預測複雜系統的方法,而不須要必定要讓複雜系統
去真實的運做。可是,你仍是沒有理解我這裏的問題。咱們強調的是不存在一個通用的程序
可以預測全部複雜系統的運行結果,但並無說不存在一個特定的程序可以預測某個或者某
類複雜系統的結果。那麼這種特定的程序怎麼獲得呢?顯然須要咱們人爲地編程獲得!也就
是說存在着某些機器作不了的事情,而人能作。這彷佛爲人工智能的崇拜者給以了沉重的打
擊!
人工智能真的是不可能的麼?彭羅斯曾經寫過一本科學明著:《皇帝新腦》來論證人工
智能的不可能性。它所運用的方法就是咱們上面的邏輯。由於對於任何一我的工智能程序來
說,總存在着它解決不了的問題!可是彷佛咱們人類卻不受這種限制,咱們老是可以發現一
個程序是否有死循環,老是可以找到對某類複雜系統預測的方法,而且咱們還能構造出來圖
靈停機問題這樣的問題。然而事實並無那麼簡單,反對者立刻就會論證到,其實針對某一
個具體的人,好比說就是彭羅斯,咱們也可以運用前面的方法構造出一個彭羅斯本身不能解
的問題!然而事實狀況下要構造彭羅斯不可解的問題太麻煩了,而咱們只是說原則上講這種
問題是存在的!於是計算機超越不了的問題,人本身也超越不了,因此說人工智能是可能的!
看看上面提到的兩方面論證彷佛都頗有道理,究竟哪一個正確呢?真的會存在某我的不可
解的相似圖靈停機的問題麼?其實要想完全回答這個問題就至關於問超越圖靈計算的限制
是否可能?如何超越圖靈機停機問題呢?下面咱們將詳細討論一下這個問題。
五、超越圖靈計算*
咱們仍然用那個猜硬幣的遊戲爲例來講明。
在進行了幾輪猜硬幣的遊戲以後,你已經很惱火了,認爲這樣的遊戲不公平。因而你想
了一個妙招來對付我:每當我讓你說硬幣在哪一個手中時,你先胡亂的說一個答案,好比左手。
這個時候我會根據你的答案動態調整把硬幣放到了右手中。這個時候你趕忙搶着說,不對,
我猜你的硬幣在右手!我沒辦法只能再次調整策略把硬幣放到了左手。你又趕快說:是在左
手!……。就是這樣,你也學會了個人方法,根據個人策略不斷調整你的策略從而讓我不可
能贏你。能不能把這種方法用到超越圖靈停機問題呢?
前面咱們已經看到了相似這樣的過程。假如你寫出了一個程序 P 可以判斷全部程序是
否停機,那麼我就可以構造一個程序 Q 是你的程序判斷不了的。這個時候尚未結束,你
又根據個人 Q 構造了新的程序 P’,然而我又能構造一個程序 Q’仍然讓你的程序 P’解決不了。
可是你沒有結束,又構造了新的程序 P’’,我因而又構造 Q’’……。
乍一看,彷佛這個過程並不能說明任何問題。緣由很簡單,我要求的是構造一個固定的程序 P 判斷出全部程序是否停機。而你給個人並非一個具體的實實在在的程序,而是一
個不斷變化的捉摸不定而虛無飄渺的程序序列!而且你的這些總在變化的程序序列老是要根
據我構造的程序纔會肯定改變!
首先一點值得確定的是,運用這種方法,咱們的確可以超越圖靈計算了,只要反覆不停
的變換咱們的程序就不可能找出它不能解的問題。然而,另外一方面又會讓咱們很失望:這樣
的變換過程並不能給出一個實實在在的程序來!咱們擁有的僅僅是不斷改變的程序序列,而
不是一個實際存在的程序!
這正是問題的關鍵所在:要想完全超越圖靈計算的限制,咱們必需要放棄程序的實在性。
也就是說程序在每時每刻都要變化成不是它本身了。那麼這樣的一個不斷變化得不是它本身
的怪東西存在麼?
幾千年的人類科學一直在研究實實在在的東西。不管是原子、分子仍是計算機程序,它
們必須是一個實實在在存在的個體,在這種前提下科學纔可以對它進行研究!若是當咱們研
究它的時候,它已經變得不是它本身了,那麼科學就對它無能爲力了。然而,我不由要提出
這樣的問題:真的一切都是固定不變的存在着麼,有沒有某種東西在每一時刻都在變得不是
它本身了呢?
這個問題彷佛是一個古老的哲學問題了記得赫拉克里特就曾經提到過:一我的不能兩次
踏入同一條河流。我想他說的正是這樣的問題:由於河流在每時每刻都再也不是它本身了。河
流是一大羣流動的水滴構成的總體,在每時每刻這些水滴都在不停的運動、流逝,於是當你
兩次踏入這條河的時候,全部的水滴可能都不同了,那麼咱們怎麼能說這些水滴構成的整
體仍是同一條河呢?
再考慮咱們人本身。你極可能拿着一個你 3 歲時候的照片興奮的對你的朋友說:「看,
我 3 歲的時候多可愛呀!」。然而你這句話意味着什麼呢?意味着照片反映的 3 歲時的你和現
在的你是同一個個體!然而,3 歲的你和如今的你是多麼不一樣呀!咱們知道,你無疑就是一
大堆細胞構成的一個總體。而基本生理學知識告訴咱們,實際上人體的全部細胞每隔大約 4
年就會由於新陳代謝的做用所有更新一遍。也就是說,你的細胞全被掉了包了,更況且 3
歲時候的你和如今的你差了多少個4年呀?那憑什麼說那個3歲時候的你就是如今的你呢?
這個問題看似玄學,不過我認爲如今咱們的確應該認真對待該問題了。儘管從分析的角
度來講 3 歲的你和如今的你的確不是一個個體,然而常識告訴咱們,這兩個你的確都是同一
我的!那就意味着,你這個個體並非一成不變的一些固定的細胞,而是一個每時每刻都在
變化,都在更新的一個一大堆細胞組成的構形。這個構形在每時每刻都要利用更新的一大堆
細胞去維持本身的存在!咱們獲得了什麼?和咱們前面敘述的超越圖靈機的討論結合起來,
就發現,原來人還有赫拉克里特的河流這種東西恰好就知足那種超越圖靈計算的要求。也就
是說人還有赫拉克里特的河流在每時每刻都在不停的更新它本身從而變得不是它本身了。那
麼頗有可能,某一種作相似變化的個體的變化規律就是不停超越它本身的圖靈停機程序,這
樣的虛幻的個體就真的可以超越圖靈計算了!
總結前面的討論,咱們不難給出結論,一個固死的可以被寫出就再也不變化的程序不可能
超越圖靈計算的限制,然而若是一個程序每時每刻都已經變化得不是它本身了,這個程序就
可以超越圖靈計算。聯繫到人這個個體,咱們能獲得:由於每時每刻的人都已經因爲細胞的
變化而變得再也不是它本身了,因此人是超越圖靈計算的!還記得在前面我提到的一個問題麼:
「人腦的信息處理過程能不能被表示成固定的程序呢?」。我這裏的答案就是否認的!也就
是說人腦信息處理的過程並非一個固定的程序!如何製造真正的人工智能呢?很顯然,我
們不能用一個簡單的程序來構造,而必須是利用其它的方法,這個方法是什麼呢?如今還沒
有結論!
7、懸而未決
到此,我已經把所有的有關圖靈機、可計算理論、停機問題的一些重要概念介紹完了。
然而在計算理論這個領域裏還有不少重要的問題沒有介紹。但我不得不根據個人興趣進行取
舍。在整個介紹過程當中,一方面我介紹了人們已經得出來的結論,另外一方面,我儘可能把一些
沒有解決的問題展示給你們。回憶起來,這些懸而未決的問題包括下面幾個:
一、 是否一切的信息處理過程都具備固定的程序呢?人腦有固定的程序麼?
二、 如何用計算機程序進行概括?能對全部事物進行一勞永逸的概括算法是否存在?
三、 什麼是意義,更確切的,什麼是語義?
四、 圖靈停機問題是不可超越的麼?
五、 人工智能是否可能?
還有不少問題在本文中沒有提出來,然而我認爲也是至關重要的。例如,咱們如何用圖
靈機模型表示通常的學習過程?若干小的圖靈機是如何自動的構造出更大的圖靈機的(這就
是萬事萬物自組織的過程)?生命的目的性如何用圖靈機模型表示?
另外最近的計算主義已經把宇宙中一切的過程都歸結爲計算過程了,也就是說處處都是
圖靈機正在作運算。那麼咱們能不能從圖靈機的角度探討時間和空間的本質呢?咱們知道,
計算理論另一大類問題就是探討計算的時間和空間複雜度,那麼這種計算的時間和空間與
咱們這個宇宙的時間和空間有什麼關係呢?
我但願,在新世紀的今天,人們會最終解答這些問題!