形式語言與自動機總結筆記

形式語言與自動機

教學大綱

  • 正則語言
    • 2 有窮自動機
      2.1 確定的有窮自動機
      2.2 非確定有窮自動機
      2.3 帶有空轉移的非確定有窮自動機
    • 3 正則表達式
      3.1 正則表達式
      3.2 自動機和正則表達式
      3.3 正則表達式的代數定律
    • 4 正則語言的性質
      4.1 正則語言的泵引理
      4.2 正則語言的封閉性
      4.3 正則語言的判定性質
      4.4 自動機最小化
  • 上下文無關語言
    • 5 上下文無關文法
      5.1 上下文無關文法
      5.2 語法分析樹
      5.3 文法和語言的歧義性
      5.4 文法的化簡和範式
    • 6 下推自動機
      6.1 下推自動機
      6.2 下推自動機的語言
      6.3 下推自動機與文法的等價性
      6.4 確定性下推自動機
    • 7 上下文無關語言的性質
      7.1 上下文無關語言的泵引理
      7.2 上下文無關語言的封閉性
      7.3 上下文無關語言的判定性質
  • 計算導論
    • 8.1 圖靈機及其擴展
    • 8.2 不可判定性

主要考點

  • 構造自動機:DFA、NFA、ε-NFA、PDA、DPDA、TM
  • 設計正則表達式/正則文法、上下文無關文法
  • 泵引理+封閉性證明不是正則語言
  • 等價性轉換
    • NFA和DFA
    • FA和正則表達式
    • PDA和CFG
  • CNF和GNF
  • 語言的接受和設計

文章目錄

1. 確定的有窮自動機(DFA)

確定的有窮自動機(DFA, Deterministic Finite Automaton) A 爲五元組
A=(Q,Σ,δ,q0,F)A = (Q, Σ, δ, q0, F)

  1. QQ : 有窮狀態集;
  2. ΣΣ : 有窮輸入符號集或字母表;
  3. δδ : Q×ΣQQ × Σ → Q, 狀態轉移函數;
  4. q0q^0 ∈ Q : 初始狀態;
  5. FQF ⊆ Q : 終結狀態集或接受狀態集.

例:請設計 DFA, 在任何由 0 和 1 構成的串中, 接受含有 01 子串的全部串.

  1. 未發現 01, 即使 0 都還沒出現過;
  2. 未發現 01, 但剛剛讀入字符是 0;
  3. 已經發現了 01

因此 DFA A 的可定義爲:
A = ({q1, q2, q3}, {0, 1}, δ, q1, {q3}) A\ = \ (\{ q1,\ q2,\ q3\},\ \{ 0,\ 1\},\ \delta,\ q1,\ \{ q3\})

  • 其中 δ 爲:
    δ(q1,1)=q1δ(q1, 1) = q1
    δ(q2,1)=q3δ(q2, 1) = q3
    δ(q3,1)=q3δ(q3, 1) = q3
    δ(q1,0)=q2δ(q1, 0) = q2
    δ(q2,0)=q2δ(q2, 0) = q2
    δ(q3,0)=q3δ(q3, 0) = q3

  • 狀態轉移圖

    • 每個狀態 q 對應一個節點, 用圓圈表示;
    • 狀態轉移 δ(q, a) = p 爲一條從 q 到 p 且標記爲字符 a 的有向邊;
    • 開始狀態 q0 用一個標有 start 的箭頭表示;
    • 接受狀態的節點, 用雙圓圈表示.
  • 狀態轉移表

2. 非確定的有窮自動機(NFA)

非確定有窮自動機(NFA, Nondeterministic Finite Automaton) A 爲五元組
A=(Q,Σ,δ,q0,F)A = (Q, Σ, δ, q0, F)

  1. QQ : 有窮狀態集;
  2. ΣΣ : 有窮輸入符號集或字母表;
  3. δδ : Q×Σ=2QQ \times \Sigma = 2^{Q}, 狀態轉移函數;
  4. q0q^0 ∈ Q : 初始狀態;
  5. FQF ⊆ Q : 終結狀態集或接受狀態集.

與DFA區別

  • δδ : Q×Σ=2QQ \times \Sigma = 2^{Q}
  • 轉移後爲一個狀態集合
  • 同一個狀態在相同的輸入下,可以有多個轉移狀態
  • 自動機可以處在多個當前狀態

例:接受全部以 01 結尾的串的 NFA.

解:五元組爲 A = ({q0, q1, q2}, {0, 1}, δ, q0, {q2})A\ = \ (\{ q0,\ q1,\ q2\},\ \{ 0,\ 1\},\ \delta,\ q0,\ \{ q2\})
轉移函數 δ:

  • δ(q0, 0) = {q0, q1}\delta(q0,\ 0)\ = \ \{ q0,\ q1\}
  • δ(q1, 0) = \delta(q1,\ 0)\ = \ \varnothing
  • δ(q2, 0) = \delta(q2,\ 0)\ = \ \varnothing
  • δ(q0, 1) = {q0}\delta(q0,\ 1)\ = \ \{ q0\}
  • δ(q1, 1) = {q2}\delta(q1,\ 1)\ = \ \{ q2\}
  • δ(q2, 1) = \delta(q2,\ 1)\ = \ \varnothing

3. 帶有空轉移的非確定有窮自動機(ε-NFA)

DFA、NFA和ε-NFA性質:

  • 自動機在某狀態, 讀入某個字符時, 可能有多個轉移
  • 自動機在某狀態, 讀入某個字符時, 可能沒有轉移
  • 自動機在某狀態, 可能不讀入字符, 就進行轉移

ε-NFA與NFA

  • 不讀入字符,就進行轉移的NFA
  • Q×(Σ{ε})=2QQ \times (\Sigma \cup \left\{ \varepsilon \right\}) = 2^{Q}

例:語言 L=w0,1w31L = {w ∈ {0, 1}∗ | w 倒數 3 個字符至少有一個是 1} 的ε-NFA.

  • 狀態轉移圖
  • 狀態轉移表

此後, 不再明確區分 ε-NFA 和 NFA, 而認爲它們都是 NFA.

4. DFA和NFA的等價性與轉換

εq0q0ε-閉包: {q_0} → {所有q_0能到達的狀態的集合}
記爲Eclose(q)Eclose(q)

例:求以下狀態的 εclosureε - closure

解:

  • E(1)={1,2,4,3,6}E(1) = \{ 1, 2, 4, 3, 6 \}
  • E(2)={2,3,6}E(2) = \{ 2, 3, 6 \}
  • E(3)={3,6}E(3) = \{ 3, 6 \}
  • E(4)={4}E(4) = \{ 4 \}
  • E(5)={5,7}E(5) = \{ 5, 7 \}
  • E(6)={6}E(6) = \{ 6 \}
  • E(7)={7}E(7) = \{ 7 \}

擴展轉移函數

例:將以下NFA轉換爲DFA

解:

  • 狀態轉移表和ε-閉包爲
  • 設置初狀態{q0}\{q_0 \}
    • 當輸入0時,{q0}{q0}\{q_0\} → \{q_0\},不變,則{q0}\{q_0\}的ε-閉包還是爲{q0}\{q_0\}
    • 當輸入1時,{q0}{q0,q1}\{q_0\} → \{q_0, q_1\},則{q0,q1}\{q_0, q_1\}的ε-閉包爲{q0,q1,q2,q3}\{q_0, q_1,q_2, q_3\}
  • 因此狀態轉移函數如下
00 11
{q0}\{q_0\} {q0}\{q_0\} {q0,q1,q2,q3}\{q_0, q_1,q_2, q_3\}
  • 出現新狀態{q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}
    • 當輸入0時,{q0,q1,q2,q3}{q0,q2,q3}\{q_0, q_1,q_2, q_3\} → \{q_0, q_2, q_3\},則{q0,q2,q3}\{q_0, q_2, q_3\}的ε-閉包爲{q0,q2,q3}\{q_0, q_2, q_3\}
    • 當輸入1時,{q0,q1,q2,q3}{q0,q1,q2,q3}\{q_0, q_1,q_2, q_3\} → \{q_0, q_1,q_2, q_3\},則{q0,q1,q2,q3}\{q_0, q_1,q_2, q_3\}的ε-閉包爲{q0,q1,q2,q3}\{q_0, q_1,q_2, q_3\}
  • 因此狀態轉移函數如下
00 11
{q0}\{q_0\} {q0}\{q_0\} {q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}
{q0,q1,q2,q3}\{q_0, q_1,q_2, q_3\} {q0,q2,q3}\{q_0, q_2, q_3\} {q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}
  • 出現新狀態{q0,q2,q3}\{q_0, q_2, q_3\}
    • 當輸入0時,{q0,q2,q3}{q0,q3}\{q_0, q_2, q_3\} → \{q_0, q_3\},則{q0,q3}\{q_0, q_3\}的ε-閉包爲{q0,q3}\{q_0, q_3\}(紅色爲原轉移,綠色爲轉移後的閉包)
    • 當輸入1時,{q0,q2,q3}{q0,q1,q2,q3}\{q_0, q_2, q_3\} → \{q_0, q_1, q_2, q_3\},則{q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}的ε-閉包爲{q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}
  • 因此狀態轉移函數如下
00 11
{q0}\{q_0\} {q0}\{q_0\} {q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}
{q0,q1,q2,q3}\{q_0, q_1,q_2, q_3\} {q0,q2,q3}\{q_0, q_2, q_3\} {q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}
{q0,q2,q3}\{q_0, q_2, q_3\} {q0,q3}\{q_0, q_3\} {q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}
  • 出現新狀態{q0,q3}\{q_0, q_3\}
  • 同理,因此狀態轉移函數如下
00 11
{q0}\{q_0\} {q0}\{q_0\} {q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}
{q0,q1,q2,q3}\{q_0, q_1,q_2, q_3\} {q0,q2,q3}\{q_0, q_2, q_3\} {q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}
{q0,q2,q3}\{q_0, q_2, q_3\} {q0,q3}\{q_0, q_3\} {q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}
{q0,q3}\{q_0, q_3\} {q0}\{q_0\} {q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}
  • 最後,將q0q_0設爲初始狀態,且將含有原轉移終止符(q3q_3)的狀態設置爲終止狀態,即{q0,q1,q2,q3}\{q_0, q_1,q_2, q_3\}{q0,q2,q3}\{q_0, q_2, q_3\}{q0,q3}\{q_0, q_3\}均爲終止狀態
00 11
{q0}→\{q_0\} {q0}\{q_0\} {q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}
{q0,q1,q2,q3}* \{q_0, q_1,q_2, q_3\} {q0,q2,q3}\{q_0, q_2, q_3\} {q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}
{q0,q2,q3}* \{q_0, q_2, q_3\} {q0,q3}\{q_0, q_3\} {q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}
{q0,q3}* \{q_0, q_3\} {q0}\{q_0\} {q0,q1,q2,q3}\{q_0, q_1, q_2, q_3\}

5. DFA化簡:狀態等價性和填表算法

5.1 等價和可區分

對於任意兩個狀態,一定是

  • 等價
  • 可區分

二者之一

  • 等價

    • 即:當兩個狀態爲等價時,對於任意一個輸入符,轉移狀態同時爲終止狀態或同時不是
      • 注:不一定相同
      • 因此:不提及兩個狀態的轉移狀態是否相同
  • 可區分

    • 即:當兩個狀態爲可區分時(不等價),存在至少一個輸入符,轉移狀態不同時爲終止(不同時爲非終止)

例:化簡以下DFA

5.2 填表算法 Table-Filling Algorithm

  1. 直接標記終態和非終態之間的狀態對
  2. 標記所有經過字符 0 到達終態和非終態的狀態對
    - {D, F }×{A, B, C, E, G, H}
  3. 標記所有經過字符 1 到達終態和非終態的狀態對
    - {B, H }×{A, C, D, E, F, G}
  4. 此時還有 [A,E], [A,G], [B,H], [D,F], [E,G] 未標記, 只需逐個檢查.
    - [A,G] 是可區分的, 因爲經串 01 到可區分的 [C,E];
    - [E,G] 是可區分的, 因爲經串 10 到可區分的 [C,H].
  5. [A,E], [B,H] 和 [D,F] 在經過很短的字符串後, 都會到達相同狀態,因此都是等價的.
  • 填表完成後如下圖
  • 合併等價狀態(最小化)

6. 正則表達式(Regular Express)

語言是字符串集合。
語言的運算:並、連接、冪、克林閉包

遞歸定義:
如果E爲字母表,則2上的正則表達式遞歸定義爲:

  • 0是一個正則表達式,表示空語言;
  • εε是一個正則表達式,表示語言{e};
  • 任意aEa∈E,a是一個正則表達式,表示語言{a};
  • 如果正則表達式 r 和 s 分別表示語言RRSS,那麼r+srs,r(r)r+s,rs, r^*和 ( r )都是正則表達式
  • 分別表示語言RSRSRRR∪S,R·S,R*和R

優先級:括號>星(*)>連接(×)>加(+)

例:L = {w | w ∈ {0, 1}∗ and w has no pair of consecutive 0’s.}

  • 解:1∗(011∗)∗(0 + ε) 或 (1 + 01)∗(0 + ε)

7. 正則表達式和有窮自動機的等價關係與轉換

  • 正則表達式與有窮自動機等價
  • 有窮自動機可以識別正則語言
  • 正則表達式生成正則語言

7.1 正則表達式–>自動機

正則表達式到自動機的轉換分爲以下4種

  • 連接(乘法)
  • 並(加法)
  • 冪(星)
  • 閉包

例:正則表達式(0+1)1(0+1)(0+1)^*1(0+1)轉換爲εNFAε-NFA

7.1.1 並(加號)的轉換

例:0+10+1

7.1.2 冪(星號)的轉換

例:(0+1)(0+1)^*

  • 藍色圈內爲一個整體,表示冪運算的底
  • 上方的紅箭頭是遞歸,即循環出現
  • 下方的紅箭頭是藍色圈內內容一個都不出現的情況,對應該題εε,即空串情況

7.2 自動機–>正則表達式

若干例題

  • 通過7.1的逆向推導得出


2.

3.

7.2.1 刪除狀態法

  1. 添加首尾兩個狀態;
  2. 從最小的單元開始化簡爲正則表達式,去掉這個單元,新增一條邊,寫上轉換的表達式;
  3. 最後一條表達式即爲結果;

7.2.2 歸納法

  • Pick every label on the path from q0q_0 to q2q_2 ---- one by one
  • Form every RegExpRegExp on the path from q0q_0 to q2q_2 ---- one by one

Rij(k):0<=k<=nR_{ij}^{(k)}: 0<=k<=niijj路徑上的正則表達式

  • no inner node is greater than k


當k≥1時進行歸納法
公式

例:

解:
在這裏插入圖片描述

8. 正則語言的性質

8.1 泵引理

  • 確定一個語言是正則語言?
      • DFA
      • NFA
      • ε-NFA
      • 正則表達式
      • 泵引理,反證法

即:前NN的字符中存在一段可以在該位置循環出現
泵引理只是正則語言的必要條件,只能用來證明某個語言不是正則的

證明



8.2 封閉性

正則語言經某些運算後得到的新語言仍保持正則,稱正則語言在這些運算下封閉

正則語言 L 和 M, 在這些運算下封閉

  • 並:LML \cup M
  • 連接:LMLM
  • 閉包:LL^*
  • 補:L\overline{L}
  • 差:LML-M
  • 交:LML \cap M
  • 反轉:LR={wRwϵL}L^{R} = \left\{ w^{R}|w\epsilon L \right\}
  • 同態
  • 逆同態

考點:能夠運用這些性質,結合泵引理證明一個語言是否是正則語言

自動機的轉換

  • 並:使用εNFAε-NFA,新建初始狀態節點,空轉移到原來的初始狀態;
  • 連接:前者終止狀態空轉移到後者初始狀態;
  • 閉包:增加新終止狀態,原終止狀態空轉移到新終止狀態以及初始狀態;
  • 補:終止狀態取補
  • 反轉:新增終止狀態,原終止狀態空轉移到新終止狀態,然後所有邊逆向,是(非)終止狀態改爲非(是)終止狀態;

證明思路

9. 上下文無關文法(CFG)

定義:上下文無關文法(CFG, 簡稱文法) G 是一個四元組 G=(V,T,P,S)G = (V, T, P, S)

  • VV : 變元的有窮集, 變元也稱爲非終結符或語法範疇;
  • TT: 終結符的有窮集, 且 V ∩ T = ∅;
  • PP: 產生式的有窮集, 每個產生式包括:
    • 一個變元, 稱爲“產生式的頭或左部”;
    • 一個產生式符號 →, 讀作“定義爲”;
    • 一個(VT)(V ∪ T)^*中的符號串, 稱爲“體或右部”;
  • SVS ∈V:初始符號, 文法開始的地方.

產生

  • 產生式AαA → α,讀作 A 定義爲 α
  • 如果有多個 A 的產生式 Aα1,Aα2,,AαnA → α_1, A → α_2, · · · , A → α_n
  • 可簡寫爲 Aα1α2αnA → α_1 | α_2 | · · · | α_n
  • 文法中變元 A 的全體產生式, 稱爲 A 產生式

符號

  • 終結符: 0, 1, . . . , a, b, . . .
  • 終結符串: . . . , w, x, y, z
  • 非終結符: S, A, B, . . .
  • 終結符或非終結符: . . . , X, Y, Z
  • 終結符或非終結符組成的串: α, β, γ, . . .

例:

  • 迴文
    G=(A,0,1,Aε010A01A1,A)G = ({A}, {0, 1}, {A → ε | 0 | 1 | 0A0 | 1A1}, A)
  • L={ w∈{0,1}* | w contains same number of 0’s and 1’s }
    R=(S,0,1,P,S)R = ({S }, {0,1}, P, S )
    PSε0S11S0SSP:S → ε | 0S1 | 1S0 | SS
  • 從字符串到文法變元的分析過程, 稱爲遞歸推理或歸約;
    歸約: 自底向上, 由產生式的體向頭的分析
  • 從文法變元到字符串的分析過程, 稱爲推導或派生.
    派生: 自頂向下, 由產生式的頭向體分析

9.1 規約

例:用算數表達式文法 GexpG_{exp}, 將 a(a+b00)a ∗ (a + b00) 歸約的過程

  1. E → I
  2. E → E + E
  3. E → E ∗ E
  4. E → (E)
  5. I → a
  6. I → b
  7. I → Ia
  8. I → Ib
  9. I → I0
  10. I → I1

目標:從a(a+b00)a ∗ (a + b00)規約到EE

解:

  • a(a+b00)a ∗ (a + b00)
  • I(I+b00)I ∗ (I + b00)
  • I(I+I00)I ∗ (I + I00)
  • I(I+I0)I ∗ (I + I0)
  • I(I+I)I ∗ (I + I)
  • E(E+E)E ∗ (E + E)
  • EEE ∗ E
  • EE

即:

9.2 派生

  • 最左派生
  • 最右派生

爲限制派生的隨意性, 要求只替換符號串中最左邊變元的派生過程, 稱爲
左派生
, 記爲
lmlm\underset{lm}{\Longrightarrow} 或 \overset{*}{\underset{\text{lm}}{\Longrightarrow}}
只替換最右的, 稱爲最右派生, 記爲
rmrm\underset{rm}{\Longrightarrow} 或 \overset{*}{\underset{\text{rm}}{\Longrightarrow}}
任何派生都有等價的最左派生和最右派生

  • AwA\overset{*}{\Longrightarrow}w 當且僅當 AlmwA\overset{*}{\underset{\text{lm}}{\Longrightarrow}}w 當且僅當 ArmwA\overset{*}{\underset{\text{rm}}{\Longrightarrow}}w
  • 即:最左和最右派生同時存在或不存在

wwL(G)L(G)中時滿足:

  • ww僅由終結符組成
  • 初始符號SS能派生出ww

即:
L(G)={w  wϵT, SGw} L\left( G \right) = \left\{ w\ |\ w\epsilon T^{*},\ S\overset{*}{\underset{G}{\Longrightarrow}}w \right\}

語言 L 是某個 CFG G 定義的語言, 即 L=L(G)L = L(G), 則稱 L 爲上下文無關語言(CFL, Context-Free Language).

  • 上下文無關是指在文法派生的每一步αAβαγβαAβ ⇒ αγβ,符號串 γ 僅根據 A 的產生式派生, 而無需依賴 A 的上下文 α 和 β.
  • 如果有兩個文法 CFG G1 和 CFG G2,滿足L(G1) = L(G2),則稱 G1 和 G2 是等價的.
  • 句型
    • CFGG=(V,T,P,S)CFG G = (V, T, P, S), 初始符號 S 派生出來的符號串, 稱爲 G 的句型, 即
    • α(VT)\alpha \in \left( V \cup T \right)^{*}SaS\overset{*}{\Longrightarrow}a
    • 如果SlmαS\overset{*}{\underset{\text{lm}}{\Longrightarrow}}\alpha,稱α\alpha爲左句型
    • 如果SrmαS\overset{*}{\underset{\text{rm}}{\Longrightarrow}}\alpha,稱α\alpha爲右句型
    • 只含有終結符的句型, 也稱爲 G 的句子
    • 而 L(G) 就是文法 G 全部的句子

9.3 解析樹

CFG G = (V, T, P, S) 的語法分析樹(語法樹或派生樹) 爲:

  • 每個內節點標記爲 V 中的變元符號;
  • 每個葉節點標記爲 V ∪ T ∪ {ε} 中的符號;
  • 如果某內節點標記是 A, 其子節點從左至右分別爲X1, X2, · · · , Xn
    • 那麼AX1X2XnPA → X1X2 · · · Xn ∈ P
    • 若有 Xi = ε, 則 ε 是 A 唯一子節點, 且 A → ε ∈ P
  • 語法樹的全部葉節點從左到右連接起來, 稱爲該樹的產物或結果. 如果樹根節點是初始符號 S, 葉節點是終結符或 ε, 那麼該樹的產物屬於 L(G).
  • 語法樹中標記爲 A 的內節點及其全部子孫節點構成的子樹, 稱爲 A 子樹.

例:

CFG G = (V, T, P, S) 且 A ∈ V , 那麼文法 G 中

  • AαA\overset{*}{\Longrightarrow}\alpha 當且僅當 G 中存在以 A 爲根節點產物爲 α 的語法樹
  • 每棵語法分析樹都有唯一的最左 (右) 派生
  • 給定 CFG G = (V, T, P, S), A ∈ V , 以下命題等價:
    1. 通過遞歸推理, 確定串 w 在變元 A 的語言中
    2. 存在以 A 爲根節點, 產物爲 w 的語法分析樹
    3. AwA\overset{*}{\Longrightarrow}w
    4. AlmwA\overset{*}{\underset{\text{lm}}{\Longrightarrow}}w
    5. ArmwA\overset{*}{\underset{\text{rm}}{\Longrightarrow}}w

9.4 歧義

有些文法的歧義性, 可以通過重新設計文法來消除

  • 定義同樣的語言可以有多個文法, 如果 CFL L 的所有文法都是歧義的,那麼稱語言 L 是固有歧義的
  • 定義同樣的語言可以有多個文法, 如果 CFL L 的所有文法都是歧義的, 那麼稱語言 L 是固有歧義的.
  • “判定任何給定 CFG G 是否歧義”是一個不可判定問題

10. 上下文無關文法的化簡

文法化簡的可靠順序

  1. 消除ε-產生式;
  2. 消除單元產生式;
  3. 消除非產生的無用符號;
  4. 消除非可達的無用符號.

10.1 消除無用符號

  • 無用符號:對文法定義語言沒有貢獻的符號

  • 初始符號在派生過程中能派生的語言,前後爲若干終止符、中間的單一符號爲可達的
  • 某一符號和前後的若干終止符能夠最終派生爲均爲終止符的語言,則其是產生的
  • 可達 + 產生 = 有用
  • 非(有用)= 無用 = 非(可達) 或 非(產生)

步驟:

  1. 計算“產生的”符號集
    • 每個 T 中的符號都是產生的
    • A → α ∈ P 且 α 中符號都是產生的, 則 A 是產生的
  2. 計算“可達的”符號集
    • 符號 S 是可達的
    • A → α ∈ P 且 A 是可達的, 則 α 中符號都是可達的
  3. 刪除全部含有 “非產生的” 和 “非可達的” 符號的產生式

注:先尋找並消除全部非“產生的”符號,再尋找並消除全部非“可達的”符號,否則可能消除不完整。

  • 例:消除如下文法無用符號
    S → AB | a
    A → b
  • 解:S → bB | a

10.2 消除ε產生式

步驟:

  • 確定“可空變元”
    • 如果 A → ε, 則 A 是可空的
    • 如果 B → α 且 α 中的每個符號都是可空的,則 B 是可空的
  • 確定“可空變元”
    • 將含有可空變元的一條產生式AX1X2XnA → X_1X_2 · · · X_n用一組產生式AY1Y2YnA → Y_1Y_2 · · · Y_n代替,其中
      • 若 Xi 不是可空的, Yi 爲 Xi
      • 若 Xi 是可空的, Yi 爲 Xi 或 ε
      • 但 Yi 不能全爲 ε (否則A爲可空變元)

例:

  • 消除 CFG G = ({S, A, B}, {a, b}, P, S) 的 ε-產生式.
    S → AB
    A → AaA | ε
    B → BbB | ε

解:

  • CFG G′ 爲
    S → AB | A | B
    A → AaA | Aa | aA | a
    B → BbB | Bb | bB | b

10.3 消除單元產生式

單元產生式:例如 A → B

步驟:

  • 確定“單元對”
    • 如果有 ABA\overset{*}{\Longrightarrow}B, 則稱 [A,B][A, B] 爲單元對
    • A → B ∈ P, 則 [A, B] 是單元對
    • 若 [A, B] 和 [B, C] 都是單元對, 則 [A, C] 是單元對
  • 消除單元產生式
    • 刪除全部形爲 A → B 的單元產生式
    • 對每個單元對 [A, B], 將 B 的產生式複製給 A

例:

  • 消除文法的單元產生式
    S → A | B | 0S1
    A → 0A | 0
    B → 1B | 1

解:

  • 單位對爲 [S, A] 和 [S, B], 帶入得:
    S → 0S1
    S → 0A | 0
    S → 1B | 1
    A → 0A | 0
    B → 1B | 1

11. 上下文無關文法的範式

11.1 喬姆斯基範式(CNF)

  • 每個不帶 ε 的 CFL 都可以由這樣的 CFG G 定義, G 中每個產生式的形式都爲 ABCA → BCAaA → a
  • 這裏的 A, B 和 C 是變元, a 是終結符.
  • 利用 CNF 派生長度爲 n 的串, 剛好需要 2n − 1 步

方法:

例:

  • CFG G=(S,A,B,a,b,P,S)G = ({S, A, B}, {a, b}, P, S), 產生式集合 P 爲:
    SbAaBS → bA | aB
    AbAAaSaA → bAA | aS | a
    BaBBbSbB → aBB | bS | b
  • 請設計等價的 CNF 文法.

解:

  • CNF 爲:
    SCbACaBS → CbA | CaB
    ACaSCbD1aA → C_aS | C_bD_1 | a
    D1AAD1 → AA
    CaaC_a → a
    BCbSCaD2bB → C_bS | C_aD_2 | b
    D2BBD2 → BB
    CbbC_b → b

11.2 格雷巴赫範式(GNF)

  • 每個不帶 ε 的 CFL 都可以由這樣的 CFG G 定義, G 中每個產生式的形式都爲AaαA → aα
    其中 A 是變元, a 是終結符, α 是零或多個變元的串.
  • GNF 每個產生式都會引入一個終結符
  • 長度爲 n 的串的派生恰好是 n 步

例:

  • 將以下文法轉換爲 GNF.
    S → AB
    A → aA | bB | b
    B → b

解:

  • GNF 爲
    S → aAB | bBB | bB
    A → aA | bB | b
    B → b

特殊情況:

  • 直接左遞歸
  • 間接左遞歸

12. 下推自動機(PDA)

下推自動機(PDA, Pushdown Automata) P 爲七元組
P=(Q,Σ,Γ,δ,q0,Z0,F)P = (Q, Σ, Γ, δ, q_0, Z_0, F)

  1. QQ, 有窮狀態集;
  2. ΣΣ, 有窮輸入符號集;
  3. ΓΓ, 有窮棧符號集;
  4. δ:Q×(Σε)×Γ2Q×Γδ : Q × (Σ ∪ {ε}) × Γ → 2^{Q×Γ^∗}, 狀態轉移函數;
  5. q0Qq0 ∈ Q, 初始狀態;
  6. Z0ΓΣZ_0 ∈ Γ − Σ, 棧底符號;
  7. FQF ⊆ Q, 接收狀態集或終態集.

例:設計識別 L01={0n1nn1}L_{01} = \{0^n1^n | n ≥ 1\} 的 PDA

例:設計識別 Lwwr={wwRw(0+1)}L_{ww^r} = \{ww^R | w ∈ (0 + 1)^∗\} 的 PDA

12.1 瞬時描述(ID)

爲描述 PDA 瞬間的格局, 定義 Q×Σ×ΓQ × Σ^∗ × Γ^∗ 中三元組
(q,w,γ)(q, w, γ)
爲瞬時描述(ID, Instantaneous Description), 表示此時 PDA 處於狀態 qq,
餘輸入串
ww, γγ.

12.1.1 轉移

在 PDA PP 中如果 (p,β)δ(q,a,Z)(p, β) ∈ δ(q, a, Z), 由 (q,aw,Zα)(q, aw, Zα)(p,w,βα)(p, w, βα) 的變化, 稱爲瞬時描述(ID)的轉移 P⊢_P, 記爲
(q,aw,Zα)P(p,w,βα)(q, aw, Zα) ⊢_P (p, w, βα)
其中 wΣ,αΓw ∈ Σ^∗, α ∈ Γ^∗.
若有瞬時描述(ID) II, JJKK, 遞歸定義 P⊢^*_P 爲:

  1. IPII ⊢^*_P I
  2. IPJI ⊢^*_P J, JPKJ ⊢^*_P K,則 IPKI ⊢^*_P K

PP 已知, 可省略, 記爲 ⊢^* .

例:語言 L01={0n1nn1}L_{01} = \{0^n1^n | n ≥ 1\} 的 PDA, 識別 0011 時的 ID 序列.

解:
(q0,0011,Z0)(q0,011,0Z0)(q0,11,00Z0)(q1,1,0Z0)(q1,ε,Z0)(q2,ε,Z0)(q_0, 0011, Z_0) ⊢ (q_0, 011, 0Z_0) ⊢ (q_0, 11, 00Z_0) ⊢ (q_1, 1, 0Z_0) ⊢ (q_1, ε, Z_0) ⊢ (q_2, ε, Z_0)

定理:

  1. wΣ,γΓ∀w ∈ Σ^∗, ∀γ ∈ Γ^∗, 如果
    (q,x,α)P(p,y,β),(q, x, α) ⊢^*_P (p, y, β),
    那麼
    (q,xw,αγ)P(p,yw,βγ)(q, xw, αγ) ⊢^*_P (p, yw, βγ)
    即:在可以轉移的兩個瞬時描述的剩餘輸入串後加入相同的剩餘輸入串、棧後加入相同的棧,仍然可以轉移;

  2. wΣ∀w ∈ Σ^∗, 如果
    (q,xw,α)P(p,yw,β),(q, xw, α) ⊢^*_P (p, yw, β),
    那麼
    (q,x,α)P(p,y,β)(q, x, α) ⊢^*_P (p, y, β)
    即:在可以轉移的兩個瞬時描述的剩餘輸入串後刪除相同的輸入串,仍然可以轉移;

12.2 下推自動機接受的語言(終態/空棧)

PDA P=(Q,Σ,Γ,δ,q0,Z0,F)P = (Q, Σ, Γ, δ, q_0, Z_0, F), 以兩種方式接受語言:

  • P 以終態方式接受的語言, 記爲L(P)L(P), 定義爲 L(P)=w(q0,w,Z0)(p,ε,γ),pF.L(P) = {w | (q_0, w, Z_0) ⊢^*(p, ε, γ), p ∈ F}.
  • P 以空棧方式接受的語言, 記爲N(P)N(P), 定義爲 N(P)=w(q0,w,Z0)(p,ε,ε).N(P) = {w | (q_0, w, Z_0) ⊢^*(p, ε, ε)}.

定理及證明(構造)方法

  • 如果 PDA PFP_F 以終態方式接受語言 L,那麼一定存在 PDA PNP_N 以空棧方式接受 L: PF=(Q,Σ,Γ,δF,q0,Z0,F)P_F = (Q, Σ, Γ, δ_F, q_0, Z_0, F) 構造PN=(Q{p0,p},Σ,Γ{X0},δN,p0,X0,)P_N = (Q ∪ \{p_0, p\}, Σ, Γ ∪ \{X0\}, δ_N, p_0, X_0, ∅)
    終止狀態時,空轉移到pp、彈棧棧底符號
  • 反之亦然: PN=(Q,Σ,Γ,δN,q0,Z0,)P_N = (Q, Σ, Γ, δ_N, q_0, Z_0, ∅) 構造 PF=(Q{p0,pf},Σ,Γ{X0},δF,p0,X0,{pf})P_F = (Q ∪ \{p_0, p_f\}, Σ, Γ ∪ \{X_0\}, δ_F, p_0, X_0, \{p_f\})
    空棧時,空轉移到新建的終止狀態pfp_f

例1:識別 LwwrL_{ww^r} 的 PDA PP , 從終態方式接受, 改爲空棧方式接受.

  • 解:
    δ(q1,ε,Z0)={(q1,ε)}δ(q_1, ε, Z_0) = \{(q_1, ε)\} 代替 δ(q1,ε,Z0)={(q2,Z0)}δ(q_1, ε, Z_0) = \{(q_2, Z_0)\} 即可

例2:接受 L={w{0,1}w01}L = \{w ∈ \{0, 1\}^∗ | w 中字符 0 和 1 的數量相同\} 的 PDA

  • 棧空時,壓棧;
  • 棧不空時:
    • 若輸入符與棧頂相同,壓棧;
    • 若輸入符與棧頂不同,彈棧;
  • 棧空爲接受狀態。

例3:接受 L={0n1m0nm2n}L = \{0^n1^m | 0 ≤ n ≤ m ≤ 2n\} 的 PDA

  • 定義:左、中、右、下4個狀態
  • 左狀態:讀入0(自身遞歸轉移)
    • 轉移到中狀態:空轉移(棧中有0或無0都可)
  • 中狀態:讀入1
    • 轉移到下狀態:(棧中有至少一個0,至少連續2個1)讀入一個1,不彈棧
    • 下狀態轉移回來:再讀入一個1,彈棧
    • 和下狀態的一個來回讀入2個1
    • 自身轉移:當1的個數是奇數
  • 右狀態:空棧,結束

13. CFG\LongleftrightarrowPDA(等價性)

13.1 CFG\LongrightarrowPDA

例:設計語言 L={0n1m1mn}L = \{0^n1^m | 1 ≤ m ≤ n\} 的 PDA,並轉換爲CFG
解:

  • PDA:
  • CFG G:
    SABS → AB
    A0AεA → 0A | ε
    B0B101B → 0B1 | 01

  • 字符串 00011 的最左派生:
    SlmABlm0ABlm0Blm00B1lm00011S \underset{lm}{\Longrightarrow} AB \underset{lm}{\Longrightarrow} 0AB \underset{lm}{\Longrightarrow} 0B \underset{lm}{\Longrightarrow} 00B1 \underset{lm}{\Longrightarrow} 00011

用 PDA 棧頂符號的替換, 模擬文法的最左派生

  • 棧頂爲變元:輸入εε,變元派生(如:ε,S0S1ε, S → 0S1
  • 棧頂爲終結符:輸入非空字符,輸入串減少,棧頂彈出
  • 例解:

13.2 PDA\LongrightarrowCFG

如果 PDA P=(Q,Σ,Γ,δ,q0,Z0,)P = (Q, Σ, Γ, δ, q_0, Z_0, ∅), 那麼構造 CFG G=(V,Σ,P,S)G = (V, Σ, P^′, S), 其中
VVPP^′

  1. V={[qXp]p,qQ,XΓ}{S}V = \{[qXp] | p,q ∈Q, X ∈ Γ\} ∪ \{S\};
  2. pQ∀p ∈ Q, 構造產生式 S[q0Z0p]S → [q_0Z_0p];
  3. (p,Y1Y2Yn)δ(q,a,X)∀(p, Y_1Y_2 · · · Y_n) ∈ δ(q, a, X), 構造 Qn|Q|n 個產生式
    [qXrn]a[pY1r1][r1Y2r2][rn1Ynrn][qXr_n] → a[pY_1r_1][r_1Y_2r_2] · · · [r_{n−1}Y_nr_n]
    其中 aΣ{ε}a ∈ Σ ∪ \{ε\}, X,YiΓX,Y_i ∈ Γ, 而 riQr_i ∈ QnnQ|Q| 種狀態的組合; 若i=0i = 0, 爲 [qXp]a[qXp] → a.

例:將 PDA P = ({p, q}, (0, 1), {X, Z}, δ, q, Z) 轉爲 CFG, 其中 δ 如下:

解:

化簡:

14. GNF\LongrightarrowPDA

如果 GNF 格式的 CFG G=(V,T,P,S)G = (V, T, P^′, S), 那麼構造 PDA
P=({q},T,V,δ,q,S,)P = (\{q\}, T, V, δ, q, S, ∅)
爲每個產生式, 定義 δ 爲:
δ(q,a,A)={(q,β)AaβP}δ(q, a, A) = \{(q, β) | A → aβ ∈ P^′\}

即:每次讀入終結符,將棧中變元進行派生(彈棧+壓棧),直到棧中均爲終結符。

例:文法 SaAA,AaSbSaS → aAA, A → aS | bS | a 爲 GNF 格式, 構造等價的 PDA

15. 確定性下推自動機(DPDA)

如果 PDA P=(Q,Σ,Γ,δ,q0,Z0,F)P = (Q, Σ, Γ, δ, q_0, Z_0, F) 滿足

  1. aΣ{ε}∀a ∈ Σ ∪ \{ε\}, δ(q,a,X)δ(q, a, X) 至多有一個動作;
  2. aΣ∀a ∈ Σ, 如果 δ(q,a,X)δ(q, a, X) \neq ∅, 那麼 δ(q,ε,X)=.δ(q, ε, X) = ∅.

(q,a,Z)Q×Σ×Γ∀(q, a, Z) ∈ Q × Σ × Γ 滿足 δ(q,a,Z)+δ(q,ε,Z)1|δ(q, a, Z)| + |δ(q, ε, Z)| ≤ 1
即:每一個瞬時描述下至多有一個轉移狀態(可以無動作)

則稱 PP 爲確定型下推自動機(DPDA)

  • DPDA PP終態方式接受的語言 L(P)L(P) 稱爲確定性上下文無關語言(DCFL)

  • 注:DPDA 與 PDA 不等價

例:任何 DPDA 都無法接受LwwrL_{ww^r}, 但是可以接受
Lwcwr={wcwRw(0+1)}L_{wcw^r} = \{wcw^R | w ∈ (0 + 1)^∗\}
設計DPDA

DCFL 的重要應用

  • 非固有歧義語言的真子集
  • 程序設計語言的語法分析器
  • LR(k) 文法, Yacc 的基礎, 解析時間複雜度爲 O(n)
  • 如果 LL 是正則語言, 那麼存在 DPDA PP 以終態方式接受 LL, 即 L=L(P)L = L(P)
  • 證明: 顯然,DPDA PP 可以不用棧而模擬任何 DFA。
  • 結論:DCFLCFL正則語言 ⊆ DCFL ⊆ CFL

  • 前綴性質:如果語言 L 中不存在字符串 x 和 y, 使 x 是 y 的前綴, 稱語言 L 滿足前綴性質.
  • DPDA PPL=N(P)L = N(P), 當且僅當 LL 有前綴性質, 且存在 DPDA PP^′ 使L=L(P)L = L(P ′).
  • DPDA PPN(P)N(P) 更有限, 即使正則語言 00^∗ 也無法接受
  • 但卻可以被某個 DPDA 以終態方式接受

DPDA 與歧義文法

DPDA PP, 語言 L=L(P)L = L(P), 那麼 LL 有無歧義的 CFG

  • 因此 DPDA 在語法分析中佔重要地位
  • 但是並非所有非固有歧義 CFL 都會被 DPDA 識別
    LwwrL_{ww^r}有無歧義文法 S0S01S1εS → 0S0 | 1S1 | ε

16 上下文無關語言的泵引理

如果語言 LL 是 CFL, 那麼存在正整數 NN, 對 zL∀z ∈ L,
只要 zN|z| ≥ N, 就可以將 zz 分爲五部分 z=uvwxyz = uvwxy 滿足:

  1. vxεvx \neq ε (或vx>0|vx| > 0);
  2. vwxN|vwx| ≤ N;
  3. i0,uviwxiyL∀i ≥ 0, uv^iwx^iy ∈ L.

例:證明 L={0n1n2nn1}L = \{0^{n}1^{n}2^{n} | n ≥ 1\} 不是上下文無關語言

解:

  1. 假設 LL 是 CFL, 那麼存在整數 N, 對 zL(zN)∀z ∈ L (|z| ≥ N) 滿足泵引理.
  2. LL 中取 z=0N1N2Nz = 0N1N2N, 則顯然 zLz ∈ Lz=3NN|z| = 3N ≥ N.
  3. 由泵引理, zz 可被分爲 z=uvwxyz = uvwxy, 且有 vwxN|vwx| ≤ Nvxεvx \neq ε.
  4. 那麼 vwxvwx 可能
    • 只包含 0, 1 或 2, 那麼 uwyLuwy \notin L;
    • 只包含 0 和 1, 或只包含 1 和 2, 那麼也有 uwyLuwy \notin L;
  5. 與泵引理 uwy=uv0wx0yLuwy = uv_0wx_0y ∈ L 矛盾, 假設不成立.
  6. LL 不是上下文無關的

例:證明 L={www0,1}L = \{ww | w ∈ {0, 1}^∗\} 不是上下文無關的

(錯誤的) 證明: 假設 LL 是 CFL. 取 z=0N10N1z = 0^N10^N1, 那麼 z=uvwxyz = uvwxy

則對任意 i0i ≥ 0, 有 uviwxiyLuv^iwx^iy ∈ L, 滿足泵引理.

(正確的) 證明: 假設 LL 是 CFL. 取 z=0N1N0N1Nz = 0^N1^N0^N1^N, 將 zz 分爲 z=uvwxyz = uvwxy

  1. vwxvwxzz 中點的一側, uv0wx0yuv_0wx_0y 顯然不可能屬於 LL;
  2. vwxvwx 包括 zz 中點, 那麼 uv0wx0yuv_0wx_0y0N1i0j1N0^N1^i0^j1^N, 也不可能屬於 LL.
    所以假設不成立, LL 不是 CFL

17 上下文無關語言的封閉性

封閉

  • 連接
  • 閉包
  • 同態
  • 逆同態
  • 反轉

不封閉

  • 補運算

17.1 代換

兩個字母表 Σ\SigmaΓ\Gamma 的函數 s : Σ 2Γs\ :\ \Sigma\ \rightarrow 2^{\Gamma^{*}} 稱爲代換. Σ\Sigma 中的一個字符 aass 的作用下爲
Γ\Gamma 上的一個語言 LaL_{a}, 即

s(a) = La s(a)\ = \ La

擴展 ss 的定義到字符串,

s(ε) = ε s(\varepsilon)\ = \ \varepsilon

s(xa) = s(x)s(a) s(xa)\ = \ s(x)s(a)

再擴展 hh 到語言, 對  Σ\forall\text{L\ } \subseteq \ \Sigma^{*}

s(L) = xLs(x) s(L)\ = \ \bigcup_{x \in L}^{}{s(x)}

  • 定理:如果有 ΣΣ 上的 CFL LL 和代換 ss, 且每個 aΣa ∈ Σs(a)s(a) 都是 CFL, 那麼 s(L)s(L) 也是 CFL

  • 即:可以把CFL的每個終結符擴展爲一個CFL,生成的語言還是CFL

具體構造方法:

設 CFL LL 的文法 G = (V, T, P, S)G\ = \ (V,\ T,\ P,\ S), 每個 s(a)s(a) 的文法 KaTeX parse error: Undefined control sequence: \ at position 6: G_{a}\̲ ̲= \ (V_{a},\ T_….

那麼 s(L)s(L) 的文法可以構造爲

G = (V , T , P , S)  G'\ = \ (V\ ',\ T\ ',\ P\ ',\ S)\

  1. V=V(aTVa )V^{'}=V \cup (\bigcup_{a \in T}^{}V_{a}\ )

  2. T=aTTaT^{'}=\bigcup_{a \in T}^{}T_{a}

  3. PP^{'}包括每個 PaP_{a}PP 中產生式,但是要將PP的產生式中每個終結符aa均替換爲文法 GaG_{a} 的開始符號SaS_{a}.

17.2 封閉性應用

例: 請證明語言 LL 不是 CFL L={w{a,b,c}na(w)=nb(w)=nc(w)}L = \{w ∈ {\{a, b, c\}}^∗ | n_a(w) = n_b(w) = n_c(w)\},其中 na(w)n_a(w) 表示 wwaa 的個數.

證明:

  1. 因爲 abca^∗b^∗c^∗ 是正則語言,
  2. Labc={anbncnn0}L ∩ a^∗b^∗c^∗ = \{a^nb^nc^n | n ≥ 0\} 不是 CFL,
  3. 由 CFL 與正則語言的交還是 CFL, 所以 LL 不可能是 CFL

18 上下文無關語言的判定性質

18.1 可判定的 CFL 問題

空性: 只需判斷文法的開始符號 S 是否爲非產生的
有窮性和無窮性:

  1. 用不帶無用符號的 CNF 的產生式畫有向圖;
  2. 變元爲頂點, 若有 A → BC, 則 A 到 B 和 C 各畫一條有向邊;
  3. 檢查圖中是否有循環.

成員性: 利用 CNF 範式, 有CYK算法檢查串 w 是否屬於 L

18.2 CYK算法

例:CNF GG 如下, 用 CYK 算法判斷 bbabaaL(G)bbabaa ∈ L(G)?

解:

SABBCS → AB | BC
ABAaA → BA | a
BCCbB → CC | b
CABaC → AB | a

  • 填寫最下層(單個終結符是否有可達)

  • 計算上面若干行


  • 結果

  • 因爲 SX16={S,A}S ∈ X_{16} = \{S, A\}, 所以 bbabaaL(G)bbabaa ∈ L(G)

18.3 不可判定的 CFL 問題

  1. 判斷 CFG GG 是否歧義的?
  2. 判斷 CFL 是否固有歧義的?
  3. 兩個 CFL 的交是否爲空?
  4. 兩個 CFL 是否相同?
  5. 判斷 CFL 的補是否爲空? 儘管有算法判斷 CFL 是否爲空
  6. 判斷 CFL 是否等於 ΣΣ^∗?

19. 圖靈機

FA PDA TM
(QQ, Σ\Sigma, δ\delta, q0q_0, FF) (QQ,Σ\Sigma,Γ\Gamma,δ\delta,q0q_0,z0z_0,FF) (QQ,Σ\Sigma,Γ\Gamma,δ\delta,q0q_0,BB,FF)
  • 圖靈機(TM, Turing Machine) MM 爲七元組
    M=(Q,Σ,Γ,δ,q0,B,F)M = (Q,\Sigma,\Gamma,\delta,q_0,B,F)
  1. QQ: 有窮狀態集;
  2. ΣΣ: 有窮輸入符號集;
  3. ΓΓ: 有窮帶符號集, 且總有 ΣΓΣ ⊂ Γ;
  4. δ:Q×ΓQ×Γ×{L,R}δ: Q × Γ → Q × Γ × \{L, R\} 轉移函數;
  5. q0Qq_0 ∈ Q: 初始狀態;
  6. BΓΣB ∈ Γ − Σ: 空格符號;
  7. FQF ⊆ Q: 終態集或接受狀態集.

與有窮自動機區別:

  • 可修改(必須修改,但可以相同)
  • 可向左或向右移動輸入帶
  • 有空格符號

例:設計識別 {0n1nn1}\{0^n1^n | n ≥ 1\} 的圖靈機

解:

  • 每次標記一個0和一個1
  • 標記0爲X(X=“0已標記”)之後,越過所有未標記的0和已標記的1,將1標記爲Y(Y=“1已標記”)
  • 無未標記1後向右找到空格B,結束

M=({q0,q1,q2,q3,q4},{0,1},{0,1,X,Y,B},δ,q0,B,{q4})M = (\{q0, q1, q2, q3, q4\}, \{0, 1\}, \{0, 1, X, Y, B\}, δ, q_0, B, \{q4\})

19.1 瞬時描述(ID)

圖靈機雖有無窮長的帶, 但經過有限步, 帶上非空內容總是有限的. 因此用全部非空符號、當前狀態及帶頭位置, 定義圖靈機的瞬時描述(ID)爲
X1X2Xi1qXiXi+1XnX_1X_2 · · · X_{i−1}qX_iX_{i+1} · · · X_n

  1. 圖靈機的當前狀態 qq
  2. 帶頭在左起第 ii 個非空格符 XiX_i
  3. X1X2XnX_1X_2 · · · X_n是最左到最右非空格內容

如果 δ(q,Xi)=(p,Y,L)δ(q, Xi) = (p, Y, L), 定義 ID 轉移爲
X1Xi1qXiXnX1Xi2pXi1YXi+1XnX_1 · · · X_{i−1}qX_i · · · X_n ⊢ X_1 · · · X_{i−2}pX_{i−1}YX_{i+1} · · · X_n

續例:設計識別 {0n1nn1}\{0^n1^n | n ≥ 1\} 的圖靈機, 接受 0011 的 ID 序列

解:
q00011Xq1011X0q111Xq20Y1q2X0Y1Xq00Y1XXq1Y1XXYq11XXq2YYXq2XYYXXq0YYXXYq3YXXYYq3BXXYYBq4Bq00011 ⊢ Xq1011 ⊢ X0q111 ⊢ Xq20Y1 ⊢ q2X0Y1 ⊢ Xq00Y1 ⊢ XXq1Y1 ⊢ XXYq11 ⊢ XXq2Y Y ⊢ Xq2XYY ⊢ XXq0YY ⊢ XXYq3Y ⊢ XXYYq3B ⊢ XXYYBq4B

19.2 遞歸可枚舉語言

如果 M 是一個圖靈機,則 M 接受的語言爲
L(M)={wwΣ,q0wαpβ,pF,α,βΓ}L(M) = \{w | w ∈ Σ^∗, q_0w ⊢*αpβ, p ∈ F, α, β ∈ Γ^∗\}

如果 LL 是圖靈機 $M $的語言, 即 L=L(M)L = L(M), 則稱 LL遞歸可枚舉語言.

一般假定, 當輸入串被接受時, 圖靈機總會停機
然而, 對於不接受的輸入, 圖靈機可能永遠不停止

對接受和不接受的輸入, 都保證停機的圖靈機, 所接受的語言稱爲遞歸語言

19.3 真減法

例:Compute the function nomus (m, n)=max(m-n,0)

解:

  • put 1m01n into tape as input
  • delete a 1 from 1m and a 1 from 1n

19.4 乘法

例:Construct a TM to compute m×n

3 × 2 = 2 + 2 + 2

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