正規語言的性質、幫浦引理與最小化

正規語言的幫浦引理(pumping lemma for regular languages)

幫浦引理是「鴿籠原理」的喬裝。DFA 只有有限多個狀態,所以當它讀夠長的字串時,必定造訪某個狀態「兩次」——就像走一條門比步數還少的走廊,你注定會再經過同一扇門。這兩次造訪之間的路徑是一個迴圈,而迴圈可以走零次、一次、甚至一百次。因此每個正規語言都必須容忍這種迴圈:語言中夠長的字串,有一段中間區塊可以自由重複(「幫浦」)並仍留在語言內。

精確的敘述:對每個正規語言 L,都存在一個數 p(幫浦長度),使得 L 中長度至少為 p 的每個字串 w 都能切成三段 w = xyz,滿足三個條件:(1) |y| ≥ 1(中段 y 非空);(2) |xy| ≤ p(x 與 y 合起來落在前 p 個符號內);(3) 對每個 i ≥ 0,幫浦後的字串 x y^i z 也屬於 L(所以 xz、xyz、xyyz、xyyyz、… 全都屬於 L)。這裡 y 是自動機被迫進入的那個迴圈,把 y 重複 i 次對應於繞那個迴圈走 i 圈。

請仔細讀這條引理:它是「關於正規語言」的一個保證,而我們用它的「逆否命題」(contrapositive)來證明某語言「不是」正規。它對「如何辨識」一個語言隻字未提,而且是一道單向門——通過幫浦條件並不會讓語言變成正規。它誠實的職責雖窄卻有力:它證實了有限記憶所「強迫」出現的、無可避免的重複。

在一台有 3 個狀態的 DFA 讀 aaaa 時,依鴿籠原理,造訪過的狀態中有兩個重合;這兩次造訪之間讀到的符號構成迴圈 y。於是 aaaa = x y z,而 x y^i z(…aa…、aaaa、多繞幾圈 y 的 aaaaa…)全都停在同一個狀態——要麼全被接受、要麼全被拒絕。

夠長的執行會重訪某狀態;其間的符號就是一段可幫浦的迴圈。

本引理是「必要」但「不充分」的:每個正規語言都滿足它,但某些「非」正規語言也滿足它。因此你能藉「違反它」來證明非正規性,卻「永遠」不能藉「驗證它成立」來證明正規性。

又称
pumping lemma幫浦引理泵引理抽取引理