1936-Church-Turing 論題與不可判定性#
案件摘要#
1936 年是計算理論史上最不可思議的一年:Church 在 4 月號《Annals of Mathematics》發表 "A note on the Entscheidungsproblem",Turing 在《Proc. London Math. Soc.》發表 "On Computable Numbers, with an Application to the Entscheidungsproblem"——兩人使用完全不同的工具(λ-Calculus 與圖靈機),在同一年獨立證明了同一個結果:Hilbert 的判定問題無解。更戲劇性的是,Turing 在論文附錄中證明了兩個模型互相模擬、完全等價。這起「雙偵探同時破案」事件,誕生了「什麼是可計算」的正式定義。
前因 -- 為什麼會有這個案子#
- Hilbert 在 1928 年國際數學家大會(Bologna)正式提出 Entscheidungsproblem(判定問題):是否存在一個機械程序,能對任意一階邏輯命題判定其是否可證?
- 這是 Hilbert 計畫的最後堡壘:若判定問題可解,則一切數學問題原則上都能被機械回答。
- Gödel 1931 年的不完備定理已經打了 Hilbert 計畫一記重拳:任何足夠強的一致系統必有不可證的真命題。但「機械程序是否存在」仍需正式定義「機械程序」本身。
- 案件的偵探難題:要證明「不存在這樣的程序」,必須先精確定義「程序」——這是人類史上第一次需要定義「計算」。
- Church 選擇 λ-可定義性作為「可有效計算」的形式化;Turing 選擇了他設想的單一紙帶機器。兩條完全獨立的偵查路線,指向同一個兇手。
線索與推理 -- 數學式、程式、理論#
線索一:Church 的路線——λ-可定義性#
Church 的論證結構(用現代語言重述):
- Church 與 Kleene 已證明: Gödel 的原始遞迴函數都是 λ-可定義的;Kleene 1936 年更證明所有一般遞迴函數都是 λ-可定義的。
- 既然一階邏輯的可證性可被編碼為自然數上的關係,而 λ-Calculus 中可以證明「判定可證性的函數」不是 λ-可定義的(透過對角化/Richard 式論證),因此判定問題無解。
- Church 在論文中明確承認這個定義的選擇需要辯護——這個辯護後來被稱為 Church 論題。
線索二:Turing 的路線——停機問題與對角化#
Turing 定義了圖靈機:紙帶、讀寫頭、有限狀態。停機問題:是否存在機器 \(H\) ,對任意 \((M, w)\) 判定 \(M\) 是否在輸入 \(w\) 上停機?
假設 \(H\) 存在,構造「唱反調者」 \(D\) :
則 \(D(D)\) 導致矛盾: \(D(D)\) 停機若且唯若 \(D(D)\) 不停機。因此 \(H\) 不存在——這就是破案時刻。
Python 對角化模擬:
# 停機問題對角化(符號模擬)
# 假設「所有程式」構成完整清單,且存在停機判定器 H
HALTS = {f"P{i}": (i % 2 == 0) for i in range(4)} # 每個程式對自己的行為
def H_(p):
return HALTS[p]
def D(p):
"D(x): 若 x 對自己停機,則 D 不停機;否則 D 停機"
if H_(p):
return "loops forever"
return "halts"
# 對每個 i:D(Pi) 的行為與 Pi 對自己的行為必然「相反」
for i in range(4):
pi = f"P{i}"
pi_self = H_(pi)
d_on_pi = (D(pi) == "halts")
assert d_on_pi != pi_self, "D 與清單中的程式相同?矛盾!"
# 所以 D 與清單中每一個程式的行為都相異
# -> D 不在「所有程式」清單中 -> H 不存在
print("對角線論證驗證:D 與清單中所有程式相異 => H 不存在")
線索三:Turing 的附錄——兩個模型互相模擬#
Turing 在 1936 年論文的附錄(1937 年刊出)中證明:任何 λ-可定義函數都可以由圖靈機計算,反之亦然。他建構了一個在圖靈機上模擬 λ 歸約的編碼方案(λ 項編碼為紙帶上的字串,歸約步驟編碼為機器狀態轉移):
這個等價性使兩條獨立偵查路線合流:Church 論題與 Turing 論題合併為 Church-Turing 論題。
線索四:Church-Turing 論題#
一切「可有效計算」的函數,恰好就是:
- 這是一個「論題」而非定理:它的「可有效計算」一側是非形式概念,無法被形式證明。
- 但所有被提出的計算模型(無限多種)最後都被證明等價於圖靈機——強力的經驗證據。
- 推論:存在不可計算的函數(如停機問題),也存在不可判定的數學命題。
線索五:通用圖靈機#
Turing 論文中最深遠的發現:存在一台「通用圖靈機」 \(U\) ,讀入任意機器 \(M\) 的編碼 \(\langle M \rangle\) 與輸入 \(w\) ,即可模擬 \(M(w)\) :
這是「軟體」概念的誕生:程式可以作為資料被另一支程式處理——現代電腦、直譯器、虛擬機器全部由此而來。λ-Calculus 中的自應用( \(x\,x\) )與 Y 組合子,正是這個自我指涉能力的函數式版本。
結案 -- 後果與影響#
- 案件偵破:判定問題無解;「可有效計算」獲得精確定義,計算理論(computability theory)正式誕生。
- λ-Calculus 從邏輯工具升格為計算模型,與圖靈機平起平坐。
- Gödel 起初對 Church 的 λ 定義存疑(1935 年左右曾表示不滿意),但在讀到 Turing 的分析後完全信服——他認為 Turing 的證明才是決定性的。
- 1936-38 年:Kleene 發展遞迴函數論、Post 提出郵機(Post machine);所有模型等價。
- 1956 年 Dartmouth 會議(AI 誕生)的參與者(McCarthy、Minsky、Shannon)都直接繼承這條血脈;McCarthy 的 LISP 選擇 λ-Calculus 而非圖靈機作為哲學根基。
- 可計算性理論成為理論電腦科的基礎:P vs NP、不可判定性、歸約(reduction)全部源自本案。
- 哲學餘波:Church-Turing 論題的擴充版本(物理 Church-Turing 論題、hypercomputation 爭論)至今仍在辯論。
關鍵人物與文獻#
- Alonzo Church(1903-1995):λ-Calculus 之父,以 λ-可定義性破解判定問題。
- A. Church, "A note on the Entscheidungsproblem", Journal of Symbolic Logic, 1(1):40-41, 1936; 修正與附註:1(3):101-102, 1936.(另見 American Journal of Mathematics, 58:345-363, 1936)
- Alan M. Turing(1912-1954):圖靈機與停機問題的發明者。
- A. M. Turing, "On Computable Numbers, with an Application to the Entscheidungsproblem", Proceedings of the London Mathematical Society, s2-42:230-265, 1936(1937 年刊出); 修正:s2-43:544-546, 1937.
- David Hilbert(1862-1943):判定問題的提出者,Hilbert 計畫的核心。
- Kurt Gödel(1906-1978):不完備定理的發現者,使「機械程序」的定義成為必要。
- Stephen Kleene(1909-1994):遞迴函數論與 λ-可定義性的系統化。
- S. C. Kleene, "General recursive functions of natural numbers", Mathematische Annalen, 112:727-742, 1936.
- Emil Post(1897-1954):獨立發展等價的計算模型。
- E. L. Post, "Finite combinatory processes - formulation 1", Journal of Symbolic Logic, 1(3):103-105, 1936.
- 參考:Martin Davis, "Computability and Unsolvability", McGraw-Hill, 1958; "The Universal Computer: The Road from Leibniz to Turing", W. W. Norton, 2000.