
第8章
不可能的程式
我認為,世界上最仁慈的事情是人類的心智無法將其所有內容相互聯繫。
—
H.P.
洛奎夫
(
H. P. Lovecraft
)
我們在本書探討了不同類型的電腦和程式設計語言,包括幾種抽象機。這些機器當中有
一些的能力比其他機器更為強大,尤其有兩種更是具有明顯的限制:有限自動機無法
解決無限制計數的相關問題,例如要決定一串括號是否對稱;而下推自動機則無法處理
任何需要在多處重複使用資訊的問題,例如要決定字串是否包含相同數量的
a
、
b
、
c
字
元。
但是我們看見最先進的設備,也就是圖靈機,似乎擁有我們需要的一切:它可以任何
順序、任意的循環、條件式、副常式來存取沒有限制的儲存空間。第 6 章極小的程式
語言,也就是 lambda 演算,也獲得證明具有驚人的能力:利用一些創造力,它允許我
們將簡單的值和複雜的資料結構表示成純粹的程式碼,並且也能實作操縱這些表示的運
算。而在第 7 章,我們看到了許多其他簡單的系統,例如 lambda 演算,都具有和圖靈
機一樣的通用能力。
這種日益強大的系統,我們還能往前推動到什麼地步?也許並非模糊不清:我們藉著增
加沒有進展的功能,而試著讓圖靈機更具運算能力,這樣的作法可能會對運算能力造成
嚴重的限制。那麼,電腦和程式語言的基本能力究竟為何,有什麼是它們做不到的嗎?
有任何不可能的程式嗎?