1956-Chomsky 階層#
案件摘要#
1956 年,Noam Chomsky 發表《Syntactic Structures》並在同年論文《Three models for the description of language》中提出文法階層:將所有形式文法按「產生規則的自由度」分成四層,每一層恰好對應一種自動機。語言的複雜度,從此有了精確的階梯。
前因 -- 為什麼會有這個案子#
- 1950 年代,通訊工程需要描述語言(Shannon 的資訊論、有限狀態機用於編碼)。
- 結構語言學(Bloomfield 學派)對自然語言只有鬆散的描述工具,無法處理巢狀結構(如 "the man who ... left")。
- Chomsky 的偵探手法:不問「語言是什麼」,而問「描述語言的文法有幾種能力等級」——用數學對文法分類,再找出每類對應的機器。這是「文法 ↔ 自動機」對應(Chomsky–Schützenberger)的開端。
線索與推理 -- 數學式、程式、理論#
四類文法與對應自動機#
形式文法 \(G = (V, \Sigma, P, S)\) :非終結符 \(V\) 、終結符 \(\Sigma\) 、產生規則 \(P\) 、起始符 \(S\) 。依規則形式限制分四層:
| 層級 | 文法名稱 | 規則形式限制 | 對應自動機 | 識別的語言 |
|---|---|---|---|---|
| Type-3 | 正則文法 | \(A \to aB\) 或 \(A \to a\) (右線性) | 有限狀態機 FSM | 正則語言 |
| Type-2 | 上下文無關文法 CFG | \(A \to \alpha\) (左邊必為單一非終結符) | 下推自動機 PDA | CFL |
| Type-1 | 上下文有關文法 CSG | \(\alpha A \beta \to \alpha \gamma \beta\) ( $ | \gamma | \geq |
| Type-0 | 無限制文法 | \(\alpha \to \beta\) (任意) | 圖靈機 TM | 遞迴可枚舉語言 |
產生規則形式範例#
Type-3: S -> aS | bA (正則:右邊至多一個非終結符在末端)
A -> bA | b
Type-2: S -> aSb | ε (CFG:a^n b^n,需配對計數)
S -> SS | (S) | ε (括號配對文法)
Type-1: S -> aSBC | aBC (CSG:a^n b^n c^n)
CB -> BC
aB -> ab, bB -> bb, bC -> bc, cC -> cc
Type-0: 任意重寫規則,可模擬圖靈機的計算過程
包含關係#
四層語言族形成嚴格的包含鏈:
\[ \text{Type-3} \subsetneq \text{Type-2} \subsetneq \text{Type-1} \subsetneq \text{Type-0} \]
經典見證: - \(a^n b^n \in\) Type-2 但 \(\notin\) Type-3(有限狀態機無法無限計數——泵引理可證)。 - \(a^n b^n c^n \in\) Type-1 但 \(\notin\) Type-2(PDA 只有一個堆疊,無法同時比對三段——CFL 泵引理可證)。 - 存在 Type-0 但 \(\notin\) Type-1 的語言(如某些不可判定的編碼)——LBA 的接受問題可判定,但圖靈機的不行。
自動機對應的計算本質#
每一層的計算能力由「記憶體結構」決定: - FSM:無輔助記憶(只有有限狀態)。 - PDA:一個堆疊(LIFO),只能後進先出。 - LBA:長度受限的 tape(輸入長度的線性函數)。 - TM:無限 tape,完全自由。
Python 實作:下推自動機檢查括號配對#
括號配對語言 \(\{ w : \text{括號平衡} \}\) 是典型 CFL,用 PDA(以 list 模擬堆疊)識別:
def pda_paren(s: str) -> bool:
"""下推自動機:狀態 q,堆疊 Z,規則:
q, '(' -> push;q, ')' -> pop;輸入盡且堆疊空 -> 接受"""
stack = ['Z'] # 底部標記
for ch in s:
if ch == '(':
stack.append('(') # 轉移: (, Z -> (, (Z
elif ch == ')':
if stack[-1] == 'Z':
return False # 多餘的右括號:無法 pop
stack.pop() # 轉移: ), ( -> ε, Z
else:
return False # 非法字元
return stack == ['Z'] # 接受條件:堆疊回到底部
# 測試
assert pda_paren("(()())") is True
assert pda_paren("(()") is False
assert pda_paren("())(") is False
assert pda_paren("") is True
print("PDA 括號配對:全部通過")
# 對照:FSM 無法識別此語言(需無限狀態記錄巢狀深度)
# 這正是 Type-3 ⊊ Type-2 的實例證明
結案 -- 後果與影響#
- 結案:文法分層成功,且每層都找到對應的自動機——「文法 ↔ 機器」的對偶成為計算理論的核心範式。
- Chomsky–Schützenberger 定理(1963):CFL 恰為「正則語言與 Dyck 語言的交集之同態像」,將 CFL 帶入代數視角。
- 編譯器理論直接受惠:詞法分析用正則文法(Type-3)、語法分析用 CFG(Type-2,如 LALR、LL 解析器)、語義分析需要更多(屬性文法)。
- 自然語言研究革命:《Syntactic Structures》引發語言學的認知科學轉向,Chomsky 階層成為衡量自然語言「在哪一層」的標準問題(自然語言微妙地超越 Type-2 的證據至今仍有爭論)。
- 深遠影響:階層概念滲透到複雜度理論(時間/空間階層定理)、描述複雜度,成為「分層看計算能力」的普適方法論。
關鍵人物與文獻#
- Noam Chomsky(1928–):MIT 語言學家,《Syntactic Structures》, Mouton, 1957;《Three models for the description of language》, IRE Trans. IT, 1956。
- Morris Halle:與 Chomsky 合作音韻理論,鞏固生成文法學派。
- Joseph Schützenberger:Chomsky–Schützenberger 定理,CFL 的代數刻劃。
- Stephen Kleene / Michael Rabin & Dana Scott:正則語言與 FSM 的等價性(1956),Type-3 層的機器對應。
- Donald Knuth:1965 年 LR(k) 文法,將 CFG 理論推向編譯器實務。