日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

自指機器的奧秘

 kantuoga 2018-09-16

眾里尋她千百度,那人卻在燈火闌珊處。我們耗資了數(shù)千億美元、花費了將近百年的時間去尋求構(gòu)建智能機器的奧秘,卻不知它早已存在于數(shù)理邏輯、計算機科學(xué)之中,這個奧秘就是自指(Self-reference)。早在20世紀(jì)初計算機科學(xué)誕生的年代,羅素(Russell)、哥德爾(Godel)、圖靈(Turing)、克林尼(Kleene)、蒯恩(美國哲學(xué)家,Quine)等人就已經(jīng)將大量自指的技巧引入了數(shù)學(xué)和基礎(chǔ)邏輯之中,證明了一大批定理。然而,馮·諾伊曼的敏銳洞察力卻超越了所有這些人。他不僅指出現(xiàn)實的生命之所以可以自繁殖就是因為它是一臺自指的機器,他甚至還指出是自指+熱力學(xué)創(chuàng)造達(dá)爾文式生物進(jìn)化的原始動力。因此,馮·諾伊曼所說的復(fù)雜度閾值就是這個自指,一個系統(tǒng)實現(xiàn)了自指,它就可能在自指動力學(xué)指引下不斷鉆概率論中的漏洞,完成自我復(fù)制、進(jìn)化和升級;而如果沒有實現(xiàn)自指,則它就必然會在熱力學(xué)作用下逐漸降級、退化。如何實現(xiàn)一臺自演化的自指機器?也許這將是引發(fā)下一場AI革命的核心問題。

馮·諾依曼的手稿《自復(fù)制自動機理論》,由人工智能先驅(qū) Arthur Burks 整理成書。集智俱樂部資深粉絲“東方和尚”將全書第一部分翻譯成中文,張江做了詳細(xì)點評。我們將其整理成“馮·諾依曼自動機器理論”系列文章,以饗讀者。本文是第六篇(下半部分)。


全書綱要:

馮·諾依曼的遺產(chǎn):尋找人工生命的理論根源

探尋計算的“原力”

神經(jīng)網(wǎng)絡(luò)與圖靈機的復(fù)雜度博弈

  人工智能如何擲骰子——三種概率理論

  大數(shù)之道——人腦與電腦的對比

  復(fù)雜度閾值與概率論中“漏洞”

       自指機器的奧秘

在翻譯過程中,做了以下的添加和修改:

1、為了方便閱讀,為原文進(jìn)行了分段,并加上了段標(biāo)題;

2、為了讓讀者感覺更親切,加上了若干副插圖。

3、為原文添加了大量的評論,東方和尚的評論和張江老師的評論都會標(biāo)注出來,另外,因為這本書是馮·諾依曼的助手 Arthur W. Burks(遺傳算法之父 John Holland 的博士生導(dǎo)師),所以在框中的文字是編者加的注解。大家要注意分辨。


自動機的構(gòu)建


 Arthur W. Burks:

馮·諾伊曼只是簡單地提了一下他打算使用的原件的種類。這些零件McCulloch-Pitts 的神經(jīng)模型很像。有些零件是“除了在兩端之間建立剛性的幾何連接以外沒有任何功能的”;另一種零件被稱為“運動組件”,起到“類似肌肉的作用”,這種零件在受到刺激時長度會收縮為零;還有一種零件遇到脈沖就“建立或者斷開一個連接”;他說至多只需要十幾種這樣的零件就足夠了。由這些零件所組成的自動機能夠自動地捕捉偶然撞上來的零件:“我們可以發(fā)明一種裝置”使它能夠識別出捉住的零件類型。

在 1948 年 6 月,可能是為了準(zhǔn)備 9 月份的??松瓡h,馮·諾伊曼在普林斯頓的高等研究院(IAS)給他的一些朋友講了三堂有關(guān)自動機的課。據(jù)我所知,這幾堂課包括了馮·諾伊曼對于自復(fù)制自動機的最詳細(xì)的分析。因此,編者做了一番努力,盡量從聽課的筆記和與會者的記憶中拼湊出關(guān)于零件以及它們的功能的細(xì)節(jié),茲敘述如下:

馮·諾伊曼描述了八種不同的零件,并用直線來代表它們,且標(biāo)出了位于中間或者兩頭的輸入和輸出端子。自動機在離散的時間下運行,每個零件都要用一個單位的時間做出反應(yīng)。我們不知道由八種零件構(gòu)成的這個列表是否完成了馮·諾伊曼的意圖,但編者猜想,就此問題,他還沒有最后得出結(jié)論。


有四種零件是用于處理邏輯和信息的:應(yīng)激零件(Stimulus organ)是用于接收和發(fā)出刺激信號的,并且接收這些信號是相分離的,也就是該零件的真值函數(shù)相當(dāng)于“p 或 q”。合并零件(Coincidence organ)則實現(xiàn)“p 與 q”這個布爾函數(shù)。抑制零件(inhibitory organ)則實現(xiàn)“p 與 非 q”布爾函數(shù)。激發(fā)信號產(chǎn)生器(stimuli producer)則起到刺激信號源的功能。第五種零件是剛體零件(rigid member),這是一種剛性的組件,被用來當(dāng)作自動機實體的結(jié)構(gòu)骨架。剛體零件不接收任何刺激,它對于信號是絕緣的。剛體零件可以同其它的剛體零件組合起來,也可以用來架設(shè)其他的零件。另有一種連接零件(fusing organ),當(dāng)它受到刺激的時候會把兩個零件“焊接”在一起。編者認(rèn)為連接零件的工作方式如下,假設(shè)一個結(jié)構(gòu)上的 A 點將要和另一個結(jié)構(gòu)上的 B 點焊接在一起,這時候連接零件上面活動的輸出端子就會同時與 A 和 B 接觸,在 t 時刻向連接零件發(fā)送一個刺激信號,于是導(dǎo)致 t 1 時刻 A 和 B 兩點就會被焊接在一起。然后連接零件就可以離開現(xiàn)場。此外還有切割零件(cutting organ),受到刺激的時候,切割零件就會把連接切開。


第八種零件稱為肌肉零件(muscle),可以用來產(chǎn)生運動。肌肉零件一般是剛性的,可以連接到其它的零件之上。如果在 t 時刻肌肉零件受到刺激,在 t 1 時刻它就會收縮到零長度,并保持之上的所有連接。只要刺激信號不消失,肌肉零件就一直保持收縮。編者認(rèn)為肌肉零件這樣工作:比如肌肉零件 1 把一個結(jié)構(gòu)上的 A 點和另一個結(jié)構(gòu)上的 B 點連在一塊,肌肉零件 2 又把 A 點和一個連接零件的輸出端子 C 連在一起。然后一旦肌肉 1 和 2 都受激發(fā),它們就會收縮,從而把 A、B、C 三點湊在一起,這時候激發(fā)連接零件,A 和 B 點就會被焊接起來。最后,當(dāng)肌肉上的刺激消失之后,它們就會恢復(fù)到原有的長度,肌肉1上至少有一個端子也會同 A、B 點分開。至于一開始肌肉和其他零件的連接是怎樣實現(xiàn)的,后來又是怎樣斷開的問題,馮·諾伊曼似乎沒有提到。

漂浮著機器零件的池塘(譯者加)

摘自 Gene Pool 人工生命軟件

按照馮·諾伊曼的設(shè)想,自動機按照以下的方式制造其它的自動機:在一個平面上漂著母自動機,周圍是無窮無盡的零件海。母自動機在存儲器中包含有將要制造的子自動機的描述。并按照描述,撿起所需的零件裝到正確的位置上去。要做到這點,母自動機必得包含一個能夠抓住并且辨認(rèn)零件的裝置。在 1948 年 6 月的課上,馮·諾伊曼對這個問題只是稍微提了幾句話:兩個激發(fā)零件從母自動機上像觸角一樣伸出來,當(dāng)它們碰到其它零件的時候,就可以通過激發(fā)一個信號去測試所遇零件的性質(zhì),如激發(fā)零件能夠傳送信號,而結(jié)構(gòu)零件就不能;肌肉零件受到刺激則會收縮等等。


馮·諾伊曼在他首次的設(shè)計嘗試中,忽略了能源和能量的問題。他打算之后再考慮這個問題,比如把電池作為一種新的基本零件引入進(jìn)來。除此以外,馮·諾伊曼的這個早期自復(fù)制模型處理了以下的幾何動力學(xué)問題:包括運動、接觸、定位、連接、切斷;但是沒有考慮真正機械和化學(xué)意義上的能量和力的問題。因此把這個模型叫做自復(fù)制的動力學(xué)模型(kinetic model);本書的第二部分介紹的是馮·諾伊曼之后提出的自復(fù)制元胞模型(cellular model),讀者可以對比此兩者。


在 1948 年 6 月的課上,馮·諾伊曼提出了動力學(xué)自復(fù)制模型是否需要三維空間才能實現(xiàn)的問題。他懷疑只有在三維空間或者黎曼曲面(多連接的復(fù)數(shù)平面)上才能實現(xiàn)該模型。但在本書的第二部分中,二維平面已經(jīng)足以實現(xiàn)自復(fù)制的元胞模型了。這似乎說明,二維平面也足以實現(xiàn)動力學(xué)自復(fù)制了。


讓我們繼續(xù)回到伊利諾斯的講座中:馮·諾伊曼討論了自復(fù)制自動機的一般設(shè)計方法。他說,在理論上只要有足夠的時間和原材料,就可以建立一個能夠復(fù)制任何機器的車間。這個車間中有一臺具備如下能力的機器 B:對于任何一個結(jié)構(gòu)或者機器 X,則機器 B 會自動掃描 X,并把 X 上面的所有零件,以及這些零件的相互連接方式都列成表格,從而得到 X 的完全描述。再根據(jù)以上的描述,機器 B 就可以把 X 同樣地復(fù)制出來。“這同自復(fù)制已經(jīng)非常接近了,因為我們可以把 B 喂給它自己從而得到自己的一個復(fù)制品”


但是,相對說來比較簡單的,而且同樣可以實現(xiàn)最終目的的做法是,不去直接建立能夠復(fù)制任何給定結(jié)構(gòu)或者樣本的自動機,而是去做一個能夠根據(jù)邏輯描述來組裝目標(biāo)的自動機。因為,按照任何可設(shè)想的方式,復(fù)制一個對象都必定分成兩步,先是從具體實物抽象出描述,然后再從這個描述到具體實物。因此,先做后面這步會比較簡單一些。


要做到這件事,我們必先得有一個自動機的公理化描述。如我們所見,我的做法和圖靈的通用自動機很像,都是從一個理想機器的通用描述開始。我之前比較含糊地提到過,我們一共有大約十幾種基本零件,如果把它們的細(xì)節(jié)都具體寫出來的話(估計兩頁紙就夠了),我們就可以得到一套刻畫自動機的無歧義的形式語言?,F(xiàn)在,我們可以把這些形式記號轉(zhuǎn)變?yōu)槎M(jìn)制,并記錄在打孔紙帶上面。因此,任何自動機的描述都可以記錄在打孔紙帶上。我們可以不描述對自動機每一個零件以及這些零件之間的連接方式;而是直接描述這個自動機是如何被一步一步組裝出來的,后者會比較方便一些。

 Arthur W. Burks:

馮·諾伊曼接下來說明了怎樣把剛體零件轉(zhuǎn)換成二進(jìn)制的打孔紙帶的過程。見下圖,其中每一個基本鏈的交匯處都可以用一個二進(jìn)制字符編碼。1 表示對應(yīng)位置有零件連接,0 表示沒有。如果對這個數(shù)字串進(jìn)行讀寫,那么對應(yīng)位置上的零件也相應(yīng)地被修改。



由于我有一種純數(shù)學(xué)上的習(xí)慣,喜歡把一切東西用最簡單的記號表示出來,所以這里的表示可能有些過于簡化了。因為我現(xiàn)在用的是二進(jìn)制表示,所以在上圖中,我們不考慮支鏈的問題,或者說每個位置只能連接一個零件?,F(xiàn)有的描述語言和符號系統(tǒng)所用的符號要比二進(jìn)制更多,但是這里只要用二進(jìn)制符號就足夠了,我們可以毫無困難地表示出更多的符號,只需把支鏈也分別表示出來,并接上去就行了。其實,我們并不一定要用線性的符號系統(tǒng)。我們也可以用復(fù)雜得多的,包括循環(huán)的環(huán)狀結(jié)構(gòu)來表示自動機,但那個時候非線性的代碼就不靈了。有理由懷疑我們對于看似簡單的串行編碼的偏好,只不過是一種來自語言的習(xí)慣;很可能存在著非串行的,效率卻高很多的自動機描述方式,由于我們對于這類組合卻缺乏直覺。


自復(fù)制自動機的核心


馮·諾伊曼自復(fù)制自動機模型的形象展示(譯者加)

圖片來源:http://informatics./rocha/ss504_5.html


要給出一個完全的公理化描述體系并不太困難,由此我們可以把任何可設(shè)想的自動機用二進(jìn)制代碼表示出來。任何這樣的描述都可以用類似上圖的一串零件來代表。假設(shè)自動機 X的符號串是Φ (X)。接下來,我們可以設(shè)計一臺通用構(gòu)造器(Universal constructer)A,當(dāng)我們把Φ (X)喂給 A 的時候,它就能夠逐步地利用懸浮在周圍的零件,把 X 一點點的組合出來。實際設(shè)計工作當(dāng)然是很麻煩的,但是理論上卻是可以辦到的。因為這個過程可以歸納為形式邏輯的分步推理,從性質(zhì)上說,這和通用圖靈機并無區(qū)別。


還有一件事要說,我之前提到過,要制造一臺能夠直接復(fù)制任何自動機的機器是比較復(fù)雜的。所以最好是從要復(fù)制的機器的描述而不是從機器的實體來進(jìn)行復(fù)制。但是我想補充一點,存在著某復(fù)制機器可以直接拷貝線性的剛體零件鏈,這是很簡單的。因為導(dǎo)致實體復(fù)制困難的真正原因是,實體自動機的結(jié)構(gòu)同我們串行的思考習(xí)慣完全不同,各種各樣的零件朝著各個方向相互連接。僅僅是把已經(jīng)掃描過的零件排除在列表外,便是很麻煩的事情。但是拷貝一根長鏈并無這種困難。所以,我可以假設(shè)存在一臺通用拷貝機器  B(copy automaton),當(dāng)我們把任何描述輸入 B 的時候,B 就會制造出同樣的兩份描述出來。


在完成以上兩步之后,可能給人一種錯覺,在此過程中復(fù)雜度衰退的原理似乎仍然沒被打破。在表面上看,似乎在復(fù)制過程中,既沒有產(chǎn)生更微妙的東西,也沒有建立更多的聯(lián)系。A 只能按照描述來制造 X。而按照對于復(fù)雜度的一般認(rèn)識,X 的復(fù)雜度是和 X 的描述相等的。另一方面,B 拷貝得到了兩份Φ (X),但是兩個同樣的事物放在一起,沒有理由說它們作為整體的復(fù)雜度要高于其中一個的復(fù)雜度,并且,我們還需要額外的機器 B 來完成復(fù)制。但實際上并不是這樣的。


現(xiàn)在我們可以做下面這件事,我們可以把機器 A 和 B 組合在一起,并給 A B 添加一個控制器 C。C 按照下列方式對 A 和 B 施加控制:C 先命令 B 拷貝兩份描述Φ (X);然后再命令A(yù) 按照Φ (X)來實際制造 X,并把其中的 1 份Φ (X)拷貝去掉;最后,C 會把 X 和剩下的那份Φ(X)捆在一起,并把它們從機器 A B C 的組合中間分離出去,這樣一來,我們就制造出了 X Φ (X)這樣的組合。


按照以上原理,如果我們用(A B C)來代替X,并進(jìn)行上述同樣的操作的話,那么(A B C) Φ (A B C)的自動機組合,就可以制造出自動機組合(A B C) Φ (A B C)出來。因此,自動機自復(fù)制得到了實現(xiàn)!

 Arthur W. Burks:

這個過程的細(xì)節(jié)如下:


1、 現(xiàn)有自動機(A B C),并附有它的描述Φ (A B C)。

2、 從(A B C) Φ (A B C)開始復(fù)制流程。

3、 C 控制 B 拷貝兩份描述,得到:(A B C) Φ (A B C) Φ (A B C)。

4、 C 命令 A 按照Φ (A B C))來實際制造出 A B C,

得到(A B C) ( A B C) Φ (A B C) Φ (A B C)。

5、 最后 C 把新得到的自動機 A B C 和它的描述Φ (A B C)捆在一塊,并把自己和新自動機分開,這就得到 2 個(A B C) Φ (A B C);復(fù)制完成。

這個過程并不是循環(huán)論證:我首先把 A 和 B 做了清楚的定義。在我提到 X 之前,我已經(jīng)說明,C 可以適用于任何形式的自動機 X。接下來定義了一個變量 X,它描述了 C 將要怎么做,然后,我再讓這個變量 X 和 C 產(chǎn)生聯(lián)系。所以,A、B 和 C 的定義是完全獨立于 X 的,在此之后,我再讓這個 X 指代 A、B 或者 C。因此,整個過程并非循環(huán)。


以上的通用構(gòu)造器(general constructive automaton)A 具有一定意義上的創(chuàng)造力,也就是說,A 可以從抽象的描述來“制造”出實體的機器來。同樣的,通用拷貝機 B 也有一種能夠把一份描述變成兩份的“創(chuàng)造能力”。但 A 和 B 都不具備自復(fù)制能力,此外,控制器 C 也遠(yuǎn)遠(yuǎn)沒有具備任何形式的創(chuàng)造或復(fù)制能力,它唯一能做的就是刺激其它的兩個組件去做一些事情,把一些東西連接在一起,或者把一些東西從原來的系統(tǒng)中分割出去。然而,一旦 A、B 和 C 組合在一起,它們作為一個整體卻能夠復(fù)制自身。故而我們可以把一個自復(fù)制系統(tǒng)分割成不同的部分,每一個部分雖然都不能夠復(fù)制自身,但對于自復(fù)制機器整體卻又都是必不少的。


自復(fù)制自動機的進(jìn)化


我們還可以做另外一件事,讓 X 代表 A B C D,這里 D 代表任何自動機。那么(A B C) Φ (A B C D)就可以制造出(A B C D) Φ (A B C D)。換句話說,我們的自復(fù)制機器不僅僅有復(fù)制自己的能力,還可以順便生產(chǎn)出其他的組件 D 的能力。這就是任何自復(fù)制生命都具備的功能:在復(fù)制自身的時候,它還會創(chuàng)造出副產(chǎn)品。


作為一個系統(tǒng),(A B C D)可以發(fā)生類似變異的過程。在定義“自復(fù)制”究竟是什么意思的時候,我們會遇到這樣的困難:有些結(jié)構(gòu),比如晶體的生長的確也是在復(fù)制自己。但是我們都覺得把晶體稱為自復(fù)制,顯然是名不副實的。有一個辦法可以繞過這個困難,就是把發(fā)生變異的能力,以及制造類似卻不等同于母體的生命的能力包括在“自復(fù)制”的定義中間。


現(xiàn)在考慮(A B C D) Φ (A B C D)這個自動機?!白儺悺笔侵钢虚g有一個零件發(fā)生隨機的變化。如果是 A、B 或者 C 的一個零件發(fā)生了變化,那么系統(tǒng)通常就會失去自復(fù)制的能力。比如 C 的一個零件被修改以后,C 很可能就不能在正確的時間上給 A 和 B 發(fā)射刺激信號,或者無法在需要的時候進(jìn)行連接和分割,這樣的變異就是致命的。


但是如果變異發(fā)生在描述Φ (A B C D)上面,那么系統(tǒng)制造出的就不再是它自己,而是修改后的自己,下一代自動機能否繼續(xù)復(fù)制取決于變異發(fā)生的具體位置。如果 A、B 或者 C發(fā)生了變化,那么子代自動機就會“絕后”。但是如果變異發(fā)生在 D 的描述上,那么除了 D變成了 D’之外,變異的子代同母體系統(tǒng)完全相同。之后的子代會把這個變異 D’繼承下去。這就是可遺傳變異的基本過程。


總之,雖然這套系統(tǒng)還非常原始,但它已經(jīng)具備了可遺傳變異的基本特性。大多數(shù)隨機變異都是致命的,但是也可能偶爾會發(fā)生非致命乃至是可遺傳的變異。這是遺傳所特有的性質(zhì),這套系統(tǒng)也同樣具備了。



Jake點評:


1、自指——一條永恒的金帶


自指是一個非常古老的話題,它通常與古代奧義以及各種神秘哲學(xué)有關(guān)。例如佛教中所提倡的“觀身無常、觀心無我”,以及古希臘的“認(rèn)識你自己”,都在勸解人們能夠?qū)⑿闹堑挠^察箭頭指向自己。中國道家所倡導(dǎo)的“無”,正是一個最簡單的一字悖論。

自噬的蛇


一幅最能體現(xiàn)自指深邃含義的圖畫莫過于這條正在吞噬自己的蛇。此蛇作為一種圖騰曾廣泛出現(xiàn)在北歐神話、基督教神學(xué)、印度教和非洲宗教之中。這條蛇將自指那種深刻的自我毀滅性體現(xiàn)得淋漓盡致——我們可以想象一下當(dāng)它把自己吞噬完畢會產(chǎn)生怎樣怪異的情景。


將這種自我毀滅性的古代奧義應(yīng)用到現(xiàn)代科學(xué)中已經(jīng)產(chǎn)生了一系列深刻的結(jié)論。首先,在19世紀(jì)末,著名數(shù)學(xué)家康托爾(George Cantor)將“對角線刪除”法則應(yīng)用到集合論中,從而證明了實數(shù)的個數(shù)比自然數(shù)多。緊接著,羅素(Bertrand Russell)提出了著名的“羅素悖論”而摧毀了弗雷格(Gottlob Frege)的數(shù)學(xué)大廈。年僅25歲的哥德爾(Kurt G?del)巧妙地應(yīng)用同樣的破壞性自指一舉摧毀了數(shù)學(xué)大師希爾伯特(David Hilbert)的完備一致性的數(shù)學(xué)體系夢想。圖靈(Alan Turing)則利用同樣的技巧進(jìn)一步發(fā)現(xiàn)任何超級計算機都不可能求解的圖靈停機問題。


紐約時報曾將哥德爾不完備定理評價為20世紀(jì)最偉大的數(shù)學(xué)定理。自指可以用來構(gòu)造破壞性的悖論已經(jīng)是眾人皆知、司空見慣了。然而,這種認(rèn)識其實很片面。自指包含了比自指悖論更寬泛的內(nèi)容,因為在自指大家庭中,還包括另外一類構(gòu)建性的成員。


1953年,正當(dāng)人們舉杯歡慶沃森和克里克發(fā)現(xiàn)了DNA雙螺旋結(jié)構(gòu),并從分子層面上解釋了生命的自我復(fù)制之謎的時候,另外一名偉大的美國匈牙利裔數(shù)學(xué)家:約翰.馮諾依曼(John von Neumann)正在獨立地思考著生命自我復(fù)制的邏輯基礎(chǔ)。然而,令人遺憾的是,那時的馮諾依曼已經(jīng)患上了癌癥,并于1957年的2月去世。于是,他的助手阿瑟.伯克斯Arthur Burks將他關(guān)于自復(fù)制自動機理論的整理成書《Theory of Self-reproducing Automata》,并于1966年出版。


與沃森.克里克不同的是,馮諾依曼要尋找的是生命自我復(fù)制的邏輯基礎(chǔ)而非物質(zhì)基礎(chǔ)。雖然馮諾依曼沒有明確指出,但是已經(jīng)暗含了這個自復(fù)制的邏輯基礎(chǔ)不是別的,正是一種自指結(jié)構(gòu)。也就是說,自指恰恰是生命實現(xiàn)自我復(fù)制的邏輯內(nèi)核。這也許會讓讀者感到困惑。不是說,自指都是用來構(gòu)造諸如哥德爾定理、羅素悖論之類的破壞性武器嗎?實際上,還存在著另外一大類自指,筆者稱之為“建構(gòu)性的自指”,它不但不會引起破壞,反而能夠創(chuàng)造很多令人意想不到的驚奇結(jié)構(gòu)。至于自我繁殖的系統(tǒng)是如何令人意想不到的,請參考第4節(jié)的討論。


實際上,早在1938年,與哥德爾共同奠定遞歸函數(shù)論基礎(chǔ)的數(shù)學(xué)家克林尼(Stephen Kleene)就證明了遞歸函數(shù)論中的一個著名定理:遞歸定理(更精確地說,應(yīng)該叫Kleene第二遞歸定理)。根據(jù)它,人們可以很輕松地得到一個數(shù)學(xué)推論,系統(tǒng)的自我復(fù)制是可能的。證明遞歸定理的核心技巧,是一個被稱為“蒯(kuai3)恩”的特別技術(shù)。蒯恩(Willard.V. Quine)是美國的哲學(xué)家,終身致力于哲學(xué)、數(shù)理邏輯、集合論的研究。他創(chuàng)造了一種稱之為蒯恩的方法,使得人們可以不通過使用“我”或者“這句話”等詞語就能創(chuàng)造出可以談?wù)撟陨淼木渥觼怼?/span>


有趣的是,蒯恩構(gòu)造恰恰就是那條“黃金對角線”(這一方法正是當(dāng)年康托爾最早提出證明實數(shù)比自然數(shù)多的方法,也是哥德爾定理構(gòu)造哥德爾句子的關(guān)鍵技術(shù))。只不過,康托爾、哥德爾等人的對角線與蒯恩的對角線方法稍有不同。我們會在第6節(jié)中詳細(xì)地討論這些技術(shù)。    


總而言之,從宗教到科學(xué),從悖論到自復(fù)制,自指是貫穿始終的主題。正如《哥德爾、艾舍爾、巴赫》這本書指出的那樣,自指是一條永恒的金帶。

畫手,艾舍爾(Maurits Cornelis Escher),荷蘭著名版畫藝術(shù)家
圖片來源:《魔鏡——艾舍爾的不可能世界》


2、蒯恩程序


于是,一切的矛頭都指向了這個神奇的復(fù)雜度閾值,它到底是多少?雖然馮·諾伊曼到死也沒有給出任何關(guān)于復(fù)雜度的計算,但是他用一名數(shù)學(xué)家和哲學(xué)家敏銳的頭腦,深刻地指出了其實這個復(fù)雜度閾值與數(shù)學(xué)、邏輯學(xué)以及哲學(xué)上的一個重要概念“自指”有關(guān)。


馮·諾伊曼在本章最末部分所討論的能夠自復(fù)制的自動機的抽象描述:(A B C) Φ (A B C)其實就是一個哲學(xué)家們稱之為“蒯恩”的程序。蒯恩(Willard.V. Quine)是一位美國的哲學(xué)家,他創(chuàng)造了一種稱之為蒯恩的方法,使得人們可以不使用“我”或者“這句話”等詞語就能創(chuàng)造出可以談?wù)撟陨淼木渥觼怼@缦旅孢@句話就是一句不使用“這句話”的自指悖論:

把“把中的第一個字放到左引號前面,其余的字放到右引號后面,并保持引號及其中的字不變得到的句子是假的”中的第一個字放到左引號前面,其余的字放到右引號后面,并保持引號及其中的字不變得到的句子是假的

當(dāng)你按照這句話的指示將引號中的文字放到引號后面的時候,你就得到了一句自我否定的句子,所以上面那句話與下面的話等價:

這句話是錯的

之后,數(shù)學(xué)家 Kleene 將蒯恩這種語言上的操作進(jìn)行數(shù)學(xué)化就得到了一種更加普適的Kleene 遞歸定理。有了這個遞歸定理以后,數(shù)學(xué)家就可以在嚴(yán)格的數(shù)學(xué)公理體系中玩各種各樣的自指游戲。之后,哥德爾利用這種技術(shù)構(gòu)造了公理系統(tǒng)中著名的哥德爾句子“本命題不可證明”,從而推出了哥德爾定理這個被紐約時代雜志評選為 20 世紀(jì)最偉大的數(shù)學(xué)定理。


那么,究竟這個蒯恩程序是什么呢?其實,它非常容易理解,它就是一個能夠把自己的源代碼打印出來的程序。

S (x){

q=’S(x){\\n q=\\\’\’ q \’\\\’;\\n Print(\\\’\’ p(q) \’\\\’);\\n}’;

Print (‘S(x){\n q=\’’ q ’ \’;\n Print(\’’ p(q) ’\’);\n}’);

}


這里面的“\n”表示換行符,即如果執(zhí)行 Print(‘A\nB’),則程序會輸出下面的字符串:

A 

B

“ ”表示將兩個字符串進(jìn)行串聯(lián)形成一個新的字符串,例如 A=’123’,B=’456’,則A B=’123456’。

這個自打印程序調(diào)用了一個簡單的解碼函數(shù) p(q),p 的作用是將字符串 q 變換成更淺一層次的字符串。例如,如果 q 是“\\\’\’\\n\\”,那么 p 這個函數(shù)就會計算輸出“\’’\n\”。也就是說 p 完成了一組映射:它把“\\”映射成“\”,把“\’”映射成“’”,而把“\n”映射成回車符。顯然 p 是可以寫出來的。大家可以利用 java 或者 VB 來實現(xiàn)這個程序,運行它就會發(fā)現(xiàn)它能夠自我復(fù)制。


讓我們來分析一下這個程序是如何運作的。首先,看程序的最后一行,即

Print (‘S(x){\nq=\’’ q ’ \’;\n Print(\’’ p(q) ’\’);\n}’);

這句話的作用是讓程序在屏幕上打印出一個字符串。注意觀察,這個被打印出的字符串其實是由“ ”號被分割成了 5 個部分,第一部分是“S(x){\nq=\’”,第二個部分是 q 這個字符串的原封不動的拷貝,第三部分是字符串:“\’;\n Print(\’”,第四部分是函數(shù) p 作用到 q 上面的結(jié)果即 p(q);第五部分還是一個字符串:“\’);\n}”。然后當(dāng)我們把 q 字符串的數(shù)值代入第二部分和第四部分,并進(jìn)行運算 p 之后,就得到了和源程序一模一樣的結(jié)果。你不妨在計算機上運行這段程序,就會發(fā)現(xiàn)這段程序會在屏幕上赤裸裸地把自己的源代碼打印出來。


我們不妨把這段程序的 5 個部分進(jìn)行歸并,寫成由下面的三部分構(gòu)成的Copy。Popup。Control,其中 Copy 就是 5 部分中的第二部分,即相當(dāng)于一個拷貝字符串的程序,你輸入給 Copy 什么字符串,Copy 就會把那個字符串再原封不動地吐出來;Popup 這部分就是原來的 5 部分中的第四部分,即函數(shù) p,它的作用相當(dāng)于一個彈出操作,也就是為輸入的字符串脫去一層引號。如果輸入的字符串原來是在第 n 層虛擬世界,則 Popup 的作用就是讓字符串跳到第 n-1 層;最后 Control 這部分就相當(dāng)于原來的第 1、3、5 這三部分以及最一開始的語句 Print 的總合,它的作用就相當(dāng)于是為 Copy 和 Popup 制造出來的字符添加適當(dāng)?shù)倪B接詞,使得最后的字符串能夠拼接成與原來的程序一模一樣的源程序,并將其打印到屏幕上。所以這句“Print (‘S(x){\n q=\’’ q ’ \’;\n Print(\’’ p(q) ’\’);\n}’);”就可以改寫成(Copy 。 Popup 。Control)(q)。其中“ 。”表示將不同的程序連接為一體。


如果我們把一個計算機程序 X 的描述(或者稱源代碼)寫為Φ (X),則自打印程序的第一條賦值語句就相當(dāng)于給 q 賦予了Φ ((Copy。 Popup。 Control)),即(Copy。 Popup。 Control)這三個程序連在一起的源代碼。最后我們可以將自打印程序簡寫為:

S(x){

q=Φ (Copy。Popup。Control)(Copy。 Popup。Control) (q);

}

那么,觀察這個程序,就會發(fā)現(xiàn)實際上它就是馮·諾伊曼所說的那個自復(fù)制程序:(A B C) Φ (A B C)了。在這里 Copy 就相當(dāng)于馮·諾伊曼程序中的拷貝器 B,它能將輸給它的數(shù)據(jù)原封不斷地再打印出來;Popup 就相當(dāng)于馮·諾伊曼說的通用構(gòu)造器,它能夠根據(jù)一段數(shù)據(jù)而把數(shù)據(jù)對應(yīng)的自動機的源代碼打印出來(這相當(dāng)于從描述中構(gòu)造出自動機)。Control 這部份就對應(yīng)了C。而 q=Φ (Copy。 Popup。 Control)就對應(yīng)了描述:Φ (A B C)。因此,我們實際上可以很容易地用我們的個人電腦實現(xiàn)自復(fù)制的計算機程序。


你也許會提出這樣一個質(zhì)疑,即使是這個蒯恩程序也沒有實現(xiàn)真正的自復(fù)制。因為這個程序仍然需要調(diào)用一些字符串處理程序例如函數(shù) p,以及字符串運算符“ ”等等,而這些功能并不是這個程序自己完成的,而必須借助比它更高一層的編譯器才能完成。于是,這個蒯恩程序?qū)嶋H上已經(jīng)與一個平庸的自復(fù)制程序(例如就包含了一個平凡的高層次語句”Copy me”)沒有任何區(qū)別了,只不過對于平庸的自復(fù)制程序來說,我們?yōu)樽詮?fù)制的環(huán)境賦予了過高的能力,而自復(fù)制程序本身只起到一個觸發(fā)器的作用。而對于蒯恩程序來說,翻譯蒯恩程序的環(huán)境變得相對簡單一些,但是實現(xiàn)自復(fù)制的代碼就要承擔(dān)更大的責(zé)任。原則上講,我們的確不能做出來一個完全不借助于環(huán)境,而憑空實現(xiàn)自復(fù)制的機器。但是,我們總可以降低對環(huán)境的要求,把編譯器的復(fù)雜度變小,從而凸現(xiàn)出自復(fù)制程序的能力來。


由此我們可以看出,在不同的情況下,編譯環(huán)境和在此環(huán)境下實現(xiàn)的程序會呈現(xiàn)出連續(xù)的復(fù)雜度變化。而自復(fù)制程序?qū)嶋H上是對環(huán)境的復(fù)雜性和程序本身的復(fù)雜性的一種折衷。因為如果環(huán)境的復(fù)雜性越高(編譯環(huán)境可以支持很復(fù)雜的指令集合),要實現(xiàn)一個可以打印自身源代碼或者復(fù)制自身的程序就變得很簡單(程序自身的復(fù)雜度下降);反過來,如果環(huán)境的復(fù)雜度越低,那么你要實現(xiàn)一個自復(fù)制的程序也會變得越困難。于是,我們可以得到下面這張圖:

如圖所示,如果我們把一切程序按照它所運行的編譯環(huán)境以及它自身的復(fù)雜程度列出這樣一個連續(xù)的空間,那么在不同的編譯環(huán)境下的自復(fù)制程序就會近似地形成一條如圖的直線。我們可以肯定地知道,它是一條單調(diào)下降的曲線,因為隨著環(huán)境復(fù)雜度的升高,要實現(xiàn)自復(fù)制的程序的編寫也會變得越來越輕松。所以,我們大概可以估計出來這樣一個自復(fù)制程序所滿足的復(fù)雜度方程:

上述公式表示了實現(xiàn)自復(fù)制程序的復(fù)雜度的允許條件,當(dāng)?shù)忍柍闪r,它就對應(yīng)了圖中的向下的直線。不等式對應(yīng)了直線右上角的半平面。這個式子讓我們聯(lián)想到了第二章提到的不確定性原理。因此,自復(fù)制程序的復(fù)雜度討論也許的確存在著類似量子理論中的不確定性原理。這種從不同層次來考慮程序復(fù)雜度的概念也許真的蘊藏著我們尚不知道的真理。


總之,我認(rèn)為自復(fù)制自動機才真正抓住了人們常說的“涌現(xiàn)”這個關(guān)鍵概念的本質(zhì)。因為從單個組成單元來看,無論是通用構(gòu)造器 A,還是拷貝器 B 還是控制器 C,以及它們的數(shù)據(jù)Φ (A B C)都不具備自復(fù)制的功能,而當(dāng)把它們恰當(dāng)?shù)睾显谝黄鸬臅r候,它們的確可以實現(xiàn)自復(fù)制,從而實現(xiàn)了自復(fù)制功能的涌現(xiàn)。與其它對涌現(xiàn)的機制討論的不同之處在于,自復(fù)制自動機具有相應(yīng)的數(shù)學(xué)對應(yīng)物:遞歸定理,因此我認(rèn)為如果要從數(shù)學(xué)上理解涌現(xiàn),自復(fù)制自動機是繞不開的。只可惜,馮·諾伊曼的最終夢想:從熱力學(xué)和信息論的角度來理解自復(fù)制自動機的自發(fā)涌現(xiàn)仍然沒有實現(xiàn)。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多