16. 1969 — Dana Scott 的 D∞ 模型#
案件摘要#
1969 年,Dana Scott 在牛津與 Strachey 合作期間,發現無型別 λ 演算的語義有一個致命的邏輯問題:若要讓 \(D \cong D \to D\) ,則 \(|D| = |D|^{|D|}\) ,對任何非平凡集合這是不可能的(Cantor 對角線)。Scott 用「domain theory」繞過了這個矛盾,建立了 D∞ 模型——史上第一個無型別 λ 演算的數學語義,也是遞迴程式語義的基石。
前因 -- 為什麼會有這個案子#
線索來自兩個困擾:
- 無型別 λ 演算的悖論:λ 演算中有不動點組合子 \(Y = \lambda f.\, (\lambda x.\, f\ (x\ x))\ (\lambda x.\, f\ (x\ x))\) ,滿足 \(Y\ f = f\ (Y\ f)\) 。這在語法上沒問題,但在集合論語義中,若 \(D\) 是一個集合且 \(D \cong D \to D\) ,那麼:
由 Cantor 定理,對任何集合 \(|D| < |D|^{|D|}\) (當 \(|D| \geq 2\) ),矛盾!這意味著無型別 λ 演算在集合論中沒有非平凡的模型。
- 遞迴程式的語義問題:1960 年代,程式中的遞迴(如
while迴圈、遞迴函數)在數學上如何解釋?若 \(\text{fact} = \lambda n.\, \ldots \text{fact} (n-1) \ldots\) ,這是一個自我指涉的方程,需要「解方程」的數學工具。
Scott 的推理:讓函數空間不再是所有函數的集合,而是「連續函數」的子集合——這樣函數空間可以「不比原集合大」,自我指涉就有了容身之處。
線索與推理 -- 數學式、程式、理論#
1. Domain Theory:完全偏序(cpo)#
Scott 引入 complete partial order(cpo,完全偏序):
定義(cpo):一個偏序集 \((D, \sqsubseteq)\) 是 cpo,若: 1. 有最小元素 \(\bot \in D\) (讀作 bottom,代表「未定義」或「無窮迴圈」); 2. 對每個 \(\omega\) -鏈 \(d_0 \sqsubseteq d_1 \sqsubseteq d_2 \sqsubseteq \cdots\) ,存在上確界 \(\bigsqcup_{n=0}^{\infty} d_n \in D\) 。
定義(連續函數): \(f : D \to E\) 是連續的,若: 1. 單調: \(d \sqsubseteq d' \Rightarrow f(d) \sqsubseteq f(d')\) ; 2. 保上確界: \(f(\bigsqcup_n d_n) = \bigsqcup_n f(d_n)\) 。
關鍵性質:連續函數的函數空間 \([D \to E]\) 本身也是一個 cpo(點序 \(f \sqsubseteq g \iff \forall d.\, f(d) \sqsubseteq g(d)\) )。
2. 最小不動點#
Kleene 不動點定理:若 \(f : D \to D\) 是連續函數,則 \(f\) 有最小不動點:
證明思路: \(\bot \sqsubseteq f(\bot)\) ( \(\bot\) 最小),由單調性得 \(f(\bot) \sqsubseteq f^2(\bot) \sqsubseteq \cdots\) 是 \(\omega\) -鏈,故有上確界 \(d^* = \bigsqcup_n f^n(\bot)\) 。由連續性:
即 \(d^*\) 是不動點;且因為鏈從 \(\bot\) 開始, \(d^*\) 是最小的那個。
3. 遞迴程式的語義#
遞迴函數定義 \(\text{fact} = F(\text{fact})\) 的語義就是 \(F\) 的最小不動點:
-- fact 的定義方程
fact = λn. if n == 0 then 1 else n * fact (n-1)
-- 語義:fact = fix F,其中
F = λf. λn. if n == 0 then 1 else n * f (n-1)
-- 展開 fix F:
-- f^0(⊥) = λn. ⊥ (全體無定義)
-- f^1(⊥) = λn. if n==0 then 1 else ⊥ (只能算 0)
-- f^2(⊥) = λn. if n==0 then 1 else if n-1==0 then 1 else ⊥ (只能算 0,1)
-- ...
-- ⨆ f^n(⊥) = 真正的階乘函數(對所有自然數定義)
這就是「遞迴 = 極限」的直覺:每一步近似多算一點,極限就是完整語義。
4. D∞:繞過 Cantor 對角線#
Scott 的 D∞ 構造:找一個 cpo \(D\) 滿足 \(D \cong [D \to D]\) (注意:同構而非相等,且 \([D\to D]\) 只是連續函數空間)。構造方法:
每個 \(D_{n+1}\) 是 \(D_n\) 的「函數空間」,透過嵌入-投影對 \((\phi_n, \psi_n)\) 一層層嵌入,取極限:
在此 \(D_\infty \cong [D_\infty \to D_\infty]\) ——因為連續函數空間可以「裝進」原域,Cantor 的反論被繞開了。應用 \(D_\infty\) 的元素即可解釋 λ 演算:
5. 與操作語義的區別#
| 操作語義(Operational) | 指稱語義(Denotational,Scott) |
|---|---|
| 描述「如何算」(reduction steps) | 描述「算出什麼」(數學物件) |
| 結構歸納式定義 \(\to_\beta\) 步驟 | 環境語義函數 \(\mathcal{E}\llbracket e \rrbracket \rho\) |
| 對應 SECD 機器 | 對應 domain theory |
| 無法直接解釋 \(Y\) 的無窮行為 | \(\text{fix}(f) = \bigsqcup_n f^n(\bot)\) 直接解釋 |
兩者的一致性(adequacy / full abstraction)成為後續數十年的核心研究問題。
結案 -- 後果與影響#
- Domain Theory 成為一門獨立學科:cpo、連續函數、不動點定理、代數域、雙域(domain 的分類學)成為理論計算機科學的標準工具;
- 遞迴程式的語義:所有惰性/嚴格函數式語言(Haskell、ML)的語義都建立在最小不動點上;
- Wadler 等人的惰性求值理論、Henderson/Launchbury 的 lazy semantics,都是 D∞ 思想的延伸;
- 完全抽象問題(Full Abstraction,Plotkin 1977、Milner 1977 提出,由 Abramsky、Ong、Hyland 等人於 1990 年代解決)成為語義學的中央山峰;
- 類型論語義:依賴型別語言(Agda、Coq)的語義也大量使用 domain-theoretic 工具。
關鍵人物與文獻#
- Dana Scott(1932–):美國邏輯學家、計算機科學家,图靈獎呼聲極高的人物,曾與 Strachey 在牛津合作。
- D. Scott, "Outline of a Mathematical Theory of Computation" (1970, Oxford PRG 技術報告)。
- D. Scott, "Data Types as Lattices" (1976, SIAM J. Computing)。
- D. Scott, "Domains for Denotational Semantics" (1982)。
- C. Strachey & C. Wadsworth, "Continuations: A Mathematical Semantics for Handling Full Jumps" (1974)。