【計算理論】下推自動機 PDA ( 上下文無關語言 CFL 的 泵引理 | 泵引理反證示例 | 自動機擴展 )





I . 上下文無關語言 ( CFL ) 的 泵引理 ( Pumping Lemma )



有些語言 在 上下文無關語法 與 下推自動機 計算能力之外 ;

通過 上下文無關語言 ( CFL ) 的 Pumping Lemma ( 泵引理 ) 可以證明上述命題 ;

( 證明的不是充要條件 , 只證明必要條件 )



上下文無關語言 ( CFL ) 的 泵引理 ( Pumping Lemma ) :

假設 AA 是 上下文無關的語言 ( CFL ) , 一定會存在一個 泵長度 ( Pumping Length ) pp , 使得 AA 語言中的字符串長度都大於等於 pp , AA 語言中的每個字符串都可以被分爲 S=uvxyzS = uvxyz 五個部分 , 滿足下面 33 個條件 :

  • i0i \geq 0 , uvixyizAuv^i xy ^iz \in A ; 其中 viv^i 表示 iivv 串聯在一起 , 如 v3v^3 就是 vvvvvv ;
  • vy0|vy| \geq 0 ;
  • vxyp|vxy| \leq p ;


這是一個必要條件 , 如果某語言是 上下文無關語言 , 那麼符合上述要求 ; 反過來 , 如果不符合上述要求 , 什麼都不能代表 , 該語言可能是 CFL , 也可能不是 CFL ;


如果證明 某 語言不是 上下文無關語言 ( CFL ) , 先假設該語言是 CFL , 假如不符合上述 33 條件 , 說明假設不成立 , 該語言不是 CFL ;


正則表達式 也有一個 泵引理 , 注意區分 ;





II . 上下文無關語言 ( CFL ) 的 泵引理 ( Pumping Lemma ) 示例



使用 上下文無關語言 ( CFL ) 的 泵引理 ( Pumping Lemma ) 證明

C={www{0,1}}C = \{ ww | w \in \{0,1\}^* \}

不是 上下文無關語言 ( CFL ) ;



1 . 假設 : 假設 CC 是 上下文無關語言 ( CFL ) ;


2 . 泵長度 : 根據 泵引理 , 存在一個 泵長度 pp ;


3 . SS 是 語言 CC 的字符串 : S=0p1p0p1pS = 0^p 1^p 0^p 1^p ;


4 . 泵引理 :

  • i0i \geq 0 , uvixyizAuv^i xy ^iz \in A ; 其中 viv^i 表示 iivv 串聯在一起 , 如 v3v^3 就是 vvvvvv ;
  • vy0|vy| \geq 0 ;
  • vxyp|vxy| \leq p ;

5 . 根據泵引理 , 將其分爲 55 部分 :

S=0p1p0p1p=uvxyzS = 0^p 1^p 0^p 1^p = uvxyz

其中 vxyp|vxy| \leq p ;


6 . vvyy 相等的情況討論 :

其中 vvyy 不能同時是 0011 , 如果 vyvy 同時是一個數 ( 0011 ) , 如果重複 vvyy 部分 , 該重複的數字會增多 , 如 00 增多 , 11 沒有增多 , 導致字符串不符合語言的要求 ;

因此 vvyy 必須是不同的 字符 , 一個是 00 一個是 11 ;


7 . vvyy 取值不等 並處於 中間的 1010 之間的情況討論 :

如果 vvyy 處於中間的 1100 之間 , 那麼 vvyy 同時增加後 , 第一個 00 與 第三個 00 個數不再相等 , 第二個 11 與 第四個 11 個數不再相等 , 不符合語言要求 ;


8 . vvyy 取值不等 並處於 左側的 0101 之間的情況討論 :

如果 vvyy 處於左側的 0011 之間 , 那麼 vvyy 同時增加後 , 第一個 00 與 第三個 00 個數不再相等 , 第二個 11 與 第四個 11 個數不再相等 , 不符合語言要求 ;


9 . vvyy 取值不等 並處於 右側的 0101 之間的情況討論 :

如果 vvyy 處於右側的 0011 之間 , 那麼 vvyy 同時增加後 , 第一個 00 與 第三個 00 個數不再相等 , 第二個 11 與 第四個 11 個數不再相等 , 不符合語言要求 ;


10 . 結論 :


因此該字符串 不滿足 上下文無關語言 ( CFL ) 的泵引理 ;

假設不成立 , 因此該語言 CC 不是上下文無關語言 ;


引申 : 下推自動機 之所以無法識別 CC 這個語言 , 是因爲下推自動機的 棧是後進先出的 , 先入棧的字符 , 後出來 , 這樣就使得 前後相等 的字符串無法識別 , 鏡面反射的字符串可以被識別 , 如果將棧替換成 先進先出的隊列 , 那麼就可以識別 語言 CC 了 ;





III . 自動機擴展



1 . 確定性優先自動機 ( DFA ) 最小化 : 確定性有限自動機 ( DFA ) 有算法可以將其最小化 , 可以找到一個最小的確定性優先自動機 與 原來的 確定性有限自動機 ( CFG ) 等價 ;

( 等價的 確定性有限自動機 DFA 所識別的語言是相同的 )


2 . 下推自動機 ( PDA ) 無法最小化 , 也無法做等價判定 ;

給定一個下推自動機 ( PDA ) , 無法優化該下推自動機 ( PDA ) , 也無法得到一個最小的下推自動機 ;

兩個 下推自動機 ( PDA ) 是否等價 也無法進行判定 ;


3 . 語言 與 計算模型 :


① 正則語言 : 對應的計算模型是 有限自動機 ( FA ) , 包括 確定性有限自動機 ( DFA ) , 非確定性有限自動機 ( NFA ) ;

② 上下文無關語言 : 對應的計算模型是 上下文無關語法 ( CFG ) , 下推自動機 ( PDA ) ;


4 . 自動機演化


① 下推自動機 ( PDA ) : 下推自動機 ( PDA ) 比 確定性有限自動機 ( DFA ) 多了一個棧結構 ;

② 圖靈機 : 圖靈機 比 下推自動機 多了一個棧 , 圖靈機 有 22 個棧結構 ;

③ 自動機擴張 : 再加一個棧 , 33 個棧的效果與 22 個棧的效果基本相同 , 大於等於 22 個棧的效果都是相同的 , 還是圖靈機 ;

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