I . 四個等價概念
1 . 正則語言 : 給定一個語言 , 可以自動設計一個識別該語言的 自動機 ; 該語言必須是一個 正則表達式 表達的語言 ;
2 . 正則表達式可以轉成自動機 : 先構造 接受單字符自動機 , 然後通過串聯 並聯 或 星計算 , 拼裝成自動機 ; 這個轉化成的自動機是非確定性有限自動機 ( NFA ) , NFA 可以轉成 確定性有限自動機 ( DFA ) ;
3 . 自動機可以轉成正則表達式 : 給定一個自動機 , 逐個刪除自動機的狀態 , 最後刪除到只剩下開始狀態 與 接受狀態 兩個狀態 , 開始狀態 讀取 正則表達式 跳轉到接受狀態 , 這個正則表達式就是自動機轉成的 ;
確定性有限自動機 ( DFA ) 與 非確定性有限自動機 ( NFA ) 等價 , NFA 與 擴展型的非確定性有限自動機 ( GNFA ) 是等價的 , GNFA 可以寫成正則表達式語言 ( 正則語言 ) ;
上述 DFA , NFA , GNFA , 正則語言 概念是等價的 ;
II . 自動機界限
1 . 自動機界限 : 自動機 不是萬能的 , 它有一個界限 , 有的語言自動機可以識別 , 有的語言自動機無法識別 , 這樣就需要給有限自動機確定一個界限 ;
2 . 判斷語言是否能被自動機識別 : 如何判定一個語言是否是自動機能識別的語言 , 只需要判定該語言是否是正則語言即可 ;
① 語言是正則語言 : 如果該語言是正則語言 , 那麼該語言就可以被自動機識別 ;
② 語言不是正則語言 : 如果該語言不是正則語言 , 那麼該語言不能被自動機識別 ;
3 . 引入 Pumping 引理 : 如何判定語言是否是正則語言 , 這裏使用 Pumping 引理 , 可以判定一個語言是否是正則語言 ;
III . Pumping 引理
Pumping 引理 :
① 正則語言 : 是正則語言 ;
② 數字 : 存在數字 , 這個 叫做 Pumping 長度 ;
③ 字符串 : 是 語言中的字符串 , 其長度大於等於 ; ( 字符串兩個要求 )
④ 字符串分組及要求 : 可以分爲三個部分 , , 滿足如下要求 :
- : 表示中間的 的重複次數 ;
- : 是中間重複的部分 , 星計算部分 ;
IV . Pumping 引理 示例
1 . 正則語言 與 自動機 等價 : 如果語言 是正則語言 , 該語言可以被有限自動機識別 ;
2 . 已知的語言 : 語言的字符串 , 字符串的長度爲 ;
3 . Pumping 引理中的字符串有兩個要求 :
① 長度要求 : 長度 大於等於 Pumping 長度 ;
② 語言要求 : 字符串屬於語言 ;
4 . 假設 : 上述字符串可以被下面的自動機接受 ;
5 . 將上述字符串 輸入到自動機中進行計算 :
是自動機的開始狀態 , 讀取 字符 , 就會跳轉到 狀態 ;
狀態下 , 讀取 字符 , 就會跳轉到 狀態 ;
狀態下 , 讀取 字符 , 就會跳轉到 狀態 ;
狀態下 , 讀取 字符 , 就會跳轉到 狀態 ;
狀態下 , 讀取 字符 , 就會跳轉到 狀態 ;
狀態下 , 讀取 字符 , 就會跳轉到 狀態 ;
6 . 重複狀態說明 : 字符串 的長度是大於 字符串輸入 自動機 過程中經過的狀態個數的 , 中間肯定有重複的狀態 ;
① 這個重複的狀態是 ;
② 將兩個 中間的部分 再重複幾遍 , 該字符串仍然可以被接受 ;
上圖就是 字符串中的 三部分 , 其中的 部分可以無限重複 ;
V . 證明 語言 不是正則語言 步驟
證明步驟 : 使用 反正法 進行證明 ;
① 提出假設 : 首先假設該語言是正則的 ;
② Pumping 引理證明 : 存在長度至少爲 的任何字符串 , 都滿足 Pumping 引理 的三個性質 ;
③ 矛盾 假設不成立 : 如果不滿足 Pumping 引理 , 說明上面假設該語言是正則語言 是不成立的 , 該語言不是正則語言 ;
VI . 證明 語言 不是正則語言 示例
證明 : 語言 不是正則語言 ;
提出假設 : 假設 語言是正則語言 ;
引用 Pumping 引理 , 看上述語言是否符合該 Pumping 引理 ;
Pumping 長度 : 存在一個數字 ( Pumping 長度 ) , 使得任何長度至少爲 的字符串 , 並且該字符串屬於 語言 ;
滿足 Pumping 引理 的三個條件 :
如果所有的字符串都滿足上述上個條件 , 說明該語言是正則語言 , 如果找出了一個字符串不滿足上述條件 , 該語言就不是正則語言 ;
按照上述提出的證明步驟 , 證明該字符串不是正則表達式 ;
1 . 選擇反例字符串 : 目的是證明 正則表達式不成立 , 選擇的是反例 ;
① 反例選擇 : 選擇字符串 , 該字符串有 個 和 個 字符組成 ;
② Pumping 引理條件 : 將上述字符串分成 三個部分 , 看是否滿足 Pumping 引理的三個條件 ;
2 . 出現三種情況 :
- 全部由 組成
- 全部由 組成
- 全部由 組成 ;
如果上述每種情況都出現矛盾 , 說明假設不成立 ;
3 . 全部由 組成 情況分析 :
① 假設 : 假設 全部由 組成 , 其不停的重複 , 得到的新字符串 , 仍然屬於 語言 ;
② 重複後不符合要求 : 但是 重複若干次之後 , 的個數就大於 的個數了 , 此時不符合 要求了 , 因此這種情況不成立 ;
4 . 全部由 組成 情況分析 :
① 假設 : 假設 全部由 組成 , 其不停的重複 , 得到的新字符串 , 仍然屬於 語言 ;
② 重複後不符合要求 : 但是 重複若干次之後 , 的個數就大於 的個數了 , 此時不符合 要求了 , 因此這種情況不成立 ;
5 . 全部由 組成 情況分析 :
① 假設 : 假設 全部由 組成 , 其不停的重複 , 得到的新字符串 , 仍然屬於 語言 ;
② 重複後不符合要求 : 但是 重複若干次之後 , 就會打亂 字符串中 的相互順序 , 其中 不能存在交叉 , 因此這種情況不成立 ;
經過上述討論 , 的三種情況都不符合 Pumping 引理 , 因此 語言不是正則語言 ;