【計算理論】Pumping 引理 ( 四個等價概念 | 自動機界限 | Pumping 引理簡介 | Pumping 引理證明正則表達式 | Pumping 引理示例分析 )





I . 四個等價概念



1 . 正則語言 : 給定一個語言 , 可以自動設計一個識別該語言的 自動機 ; 該語言必須是一個 正則表達式 表達的語言 ;


2 . 正則表達式可以轉成自動機 : 先構造 接受單字符自動機 , 然後通過串聯 並聯 或 星計算 , 拼裝成自動機 ; 這個轉化成的自動機是非確定性有限自動機 ( NFA ) , NFA 可以轉成 確定性有限自動機 ( DFA ) ;


3 . 自動機可以轉成正則表達式 : 給定一個自動機 , 逐個刪除自動機的狀態 , 最後刪除到只剩下開始狀態 與 接受狀態 兩個狀態 , 開始狀態 讀取 正則表達式 跳轉到接受狀態 , 這個正則表達式就是自動機轉成的 ;


確定性有限自動機 ( DFA ) 與 非確定性有限自動機 ( NFA ) 等價 , NFA 與 擴展型的非確定性有限自動機 ( GNFA ) 是等價的 , GNFA 可以寫成正則表達式語言 ( 正則語言 ) ;

上述 DFA , NFA , GNFA , 正則語言 概念是等價的 ;





II . 自動機界限



1 . 自動機界限 : 自動機 不是萬能的 , 它有一個界限 , 有的語言自動機可以識別 , 有的語言自動機無法識別 , 這樣就需要給有限自動機確定一個界限 ;

2 . 判斷語言是否能被自動機識別 : 如何判定一個語言是否是自動機能識別的語言 , 只需要判定該語言是否是正則語言即可 ;

① 語言是正則語言 : 如果該語言是正則語言 , 那麼該語言就可以被自動機識別 ;

② 語言不是正則語言 : 如果該語言不是正則語言 , 那麼該語言不能被自動機識別 ;


3 . 引入 Pumping 引理 : 如何判定語言是否是正則語言 , 這裏使用 Pumping 引理 , 可以判定一個語言是否是正則語言 ;





III . Pumping 引理




Pumping 引理 :


① 正則語言 : AA 是正則語言 ;

② 數字 : 存在數字 pp , 這個 pp 叫做 Pumping 長度 ;

③ 字符串 : ssAA 語言中的字符串 , 其長度大於等於 pp ; ( 字符串兩個要求 )

④ 字符串分組及要求 : ss 可以分爲三個部分 , s=xyzs = xyz , 滿足如下要求 :

  • xyizA(i0)xy^iz \in A \quad ( i \geq 0 ) : ii 表示中間的 yy 的重複次數 ;
  • y>0|y| > 0 : yy 是中間重複的部分 , 星計算部分 ;
  • xyp|xy| \leq p




IV . Pumping 引理 示例



1 . 正則語言 與 自動機 等價 : 如果語言 AA 是正則語言 , 該語言可以被有限自動機識別 ;


2 . 已知的語言 : AA 語言的字符串 s=s1  s2  s3  s4  s5  s6    sn  s = s_1 \; s_2 \; s_3 \; s_4 \; s_5 \; s_6 \; \cdots \; s_n \; , 字符串的長度爲 nn ;


3 . Pumping 引理中的字符串有兩個要求 :


① 長度要求 : 長度 nn 大於等於 Pumping 長度 pp ;

② 語言要求 : 字符串屬於語言 AA ;


4 . 假設 : 上述字符串可以被下面的自動機接受 ;


5 . 將上述字符串 ss 輸入到自動機中進行計算 :

在這裏插入圖片描述


q1q_1 是自動機的開始狀態 , 讀取 s1s_1 字符 , 就會跳轉到 q3q_3 狀態 ;

q3q_3 狀態下 , 讀取 s2s_2 字符 , 就會跳轉到 q20q_{20} 狀態 ;

q20q_{20} 狀態下 , 讀取 s3s_3 字符 , 就會跳轉到 q9q_{9} 狀態 ;

q9q_{9} 狀態下 , 讀取 s4s_4 字符 , 就會跳轉到 q17q_{17} 狀態 ;

q17q_{17} 狀態下 , 讀取 s5s_5 字符 , 就會跳轉到 q9q_{9} 狀態 ;

\vdots

q..q_{..} 狀態下 , 讀取 sns_n 字符 , 就會跳轉到 q13q_{13} 狀態 ;


6 . 重複狀態說明 : 字符串 ss 的長度是大於 字符串輸入 自動機 過程中經過的狀態個數的 , 中間肯定有重複的狀態 ;


① 這個重複的狀態是 q9q_9 ;

② 將兩個 q9q_9 中間的部分 s4s5s_4 s_5 再重複幾遍 , 該字符串仍然可以被接受 ;

在這裏插入圖片描述

上圖就是 ss 字符串中的 xyzxyz 三部分 , 其中的 yy 部分可以無限重複 ;





V . 證明 語言 不是正則語言 步驟



證明步驟 : 使用 反正法 進行證明 ;


① 提出假設 : 首先假設該語言是正則的 ;

② Pumping 引理證明 : 存在長度至少爲 pp 的任何字符串 , 都滿足 Pumping 引理 的三個性質 ;

③ 矛盾 假設不成立 : 如果不滿足 Pumping 引理 , 說明上面假設該語言是正則語言 是不成立的 , 該語言不是正則語言 ;





VI . 證明 語言 不是正則語言 示例



證明 : {0n1n:n0}\{ 0^n 1^n : n \geq 0 \} 語言 不是正則語言 ;


提出假設 : 假設 {0n1n:n0}\{ 0^n 1^n : n \geq 0 \} 語言是正則語言 ;


引用 Pumping 引理 , 看上述語言是否符合該 Pumping 引理 ;


Pumping 長度 : 存在一個數字 pp ( Pumping 長度 ) , 使得任何長度至少爲 pp 的字符串 , 並且該字符串屬於 {0n1n:n0}\{ 0^n 1^n : n \geq 0 \} 語言 ;


滿足 Pumping 引理 的三個條件 :

  • xyizA(i0)xy^iz \in A \quad ( i \geq 0 )
  • y>0|y| > 0
  • xyp|xy| \leq p

如果所有的字符串都滿足上述上個條件 , 說明該語言是正則語言 , 如果找出了一個字符串不滿足上述條件 , 該語言就不是正則語言 ;


按照上述提出的證明步驟 , 證明該字符串不是正則表達式 ;


1 . 選擇反例字符串 : 目的是證明 正則表達式不成立 , 選擇的是反例 ;


① 反例選擇 : 選擇字符串 s=0p1ps = 0^p 1^p , 該字符串有 pp00pp11 字符組成 ;

② Pumping 引理條件 : 將上述字符串分成 s=xyzs = xyz 三個部分 , 看是否滿足 Pumping 引理的三個條件 ;


2 . yy 出現三種情況 :

  • yy 全部由 00 組成
  • yy 全部由 11 組成
  • yy 全部由 0,10,1 組成 ;

如果上述每種情況都出現矛盾 , 說明假設不成立 ;


3 . yy 全部由 00 組成 情況分析 :

① 假設 : 假設 yy 全部由 00 組成 , 其不停的重複 , 得到的新字符串 , 仍然屬於 AA 語言 ;

yy 重複後不符合要求 : 但是 00 重複若干次之後 , 00 的個數就大於 11 的個數了 , 此時不符合 s=0p1ps = 0^p 1^p 要求了 , 因此這種情況不成立 ;


4 . yy 全部由 11 組成 情況分析 :

① 假設 : 假設 yy 全部由 11 組成 , 其不停的重複 , 得到的新字符串 , 仍然屬於 AA 語言 ;

yy 重複後不符合要求 : 但是 11 重複若干次之後 , 11 的個數就大於 00 的個數了 , 此時不符合 s=0p1ps = 0^p 1^p 要求了 , 因此這種情況不成立 ;


5 . yy 全部由 0,10,1 組成 情況分析 :

① 假設 : 假設 yy 全部由 0,10,1 組成 , 其不停的重複 , 得到的新字符串 , 仍然屬於 AA 語言 ;

yy 重複後不符合要求 : 但是 0,10,1 重複若干次之後 , 就會打亂 s=0p1ps = 0^p 1^p 字符串中 0,10,1 的相互順序 , 其中 0,10,1 不能存在交叉 , 因此這種情況不成立 ;


經過上述討論 , yy 的三種情況都不符合 Pumping 引理 , 因此 {0n1n:n0}\{ 0^n 1^n : n \geq 0 \} 語言不是正則語言 ;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章