形式语言与自动机总结笔记

形式语言与自动机

教学大纲

  • 正则语言
    • 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

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