有限自动机与正则语言学习卡片

1/15
语言基础术语
符号 (Symbol)
语言的基本构建块
字母表 (Alphabet) 🔤
符号的有限集合,记为 Σ
字符串 (String)
符号的有限序列,记为 w
字符串长度
记为 |w|,空字符串记为 ε
字符串操作
连接(concatenation) w₁w₂、指数运算(exponentiation) wⁱ、反转(reversal) wᴿ
语言 (Language)
字符串的集合,L ⊆ Σ∗
2/15
确定有限自动机 (DFA)

DFA 是一个五元组:M = (K, Σ, δ, s, F)

  • K: 状态集合
  • Σ: 字母表
  • δ: 转移函数,δ: K × Σ → K
  • s: 初始状态
  • F: 终止状态集合

配置 (q, w) ∈ K × Σ∗

M 在一步内产生: ⊢ᴍ

M 产生: ⊢ᴍ∗

3/15
非确定有限自动机 (NFA)

NFA 是一个五元组:M = (K, Σ, Δ, s, F)

  • K: 状态集合
  • Σ: 字母表
  • Δ: 转移关系,Δ ⊆ K × (Σ ∪ {ε}) × K
  • s: 初始状态
  • F: 终止状态集合

配置 (q, w) ∈ K × Σ∗

M 在一步内产生: ⊢ᴍ

M 产生: ⊢ᴍ∗

4/15
NFA 转 DFA

定理: 任何 NFA M 都可以找到一个 DFA M′ 使得 L(M) = L(M′)

构造思路:

  • M′ 的状态集合 K′ 是 M 中状态集合 K 的幂集
  • s′ 是 s 的 ε-闭包
  • 从 s′ 开始向外引边

⚠️ 注意: 画 DFA 时,任何状态都要包含所有可能 symbol 的对应关系

∀p ∈ K, ∀c ∈ Σ, ∃q ∈ K 使得 δ(p, c) = q

5/15
正则语言

如果一个语言可以被某个 DFA 或 NFA 接受,则它是正则语言

正则语言的封闭性:

  • 并运算 (∪): ✅
  • 交运算 (∩): ✅
  • 连接运算 (∘): ✅
  • 补运算 (Ā): ✅
  • 星闭包 (∗): ✅

注意: A - B = A ∩ B̄,因此如果 ∩ 和 Ā 都封闭,则差运算也封闭

6/15
正则表达式

用于描述正则语言

  • L(∅) = ∅
  • L(a) = {a}
  • L(R₁ ∪ R₂) = L(R₁) ∪ L(R₂)
  • L(R₁R₂) = L(R₁) ∘ L(R₂)
  • L(R∗) = L(R)∗

优先级: ∗ > ∘ > ∪

定理: 任何 NFA M 都能找到一个正则表达式 R 使得 L(M) = L(R),反之亦然

7/15
泵引理

定理: 若 L 是一个正则语言,则存在泵长度 p ∈ ℤ∗ 使得 ∀w ∈ L 且 |w| ≥ p,w 可被分为三部分 w = xyz,满足:

  1. ∀i ≥ 0, xyⁱz ∈ L
  2. |y| > 0
  3. |xy| ≤ p

泵引理是 RL 的一个必要不充分条件

应用示例: 证明 {0ⁿ1ⁿ : n ≥ 0} 不是正则的

8/15
非正则语言证明技巧

证明思路:假设 L 是 RL,设泵长度为 p,构造一个含 p 且属于 L 的字符串,证明它不符合泵引理

常见非正则语言及证明思路:

  • L = {0ⁿ1ⁿ}: 选 0ᵖ1ᵖ,则 xy⁰z ∉ L
  • L = {ww}: 选 abᵖabᵖ,则 xy⁰z ∉ L
  • L = {0ᵐ1ⁿ} 其中 m > n: 选 0ᵖ⁺¹1ᵖ,则 xy⁰z ∉ L
  • L = {1ⁿ} 其中 n 是质数: 选 1ᵏ (k > p 且为质数),取 n = k+1 得矛盾
9/15
正则表达式示例

问题: 写出表示 {w ∈ {a,b}∗: w 中 b 的数量可被 3 整除} 的正则表达式

答案: a∗ ∪ (a∗ba∗ba∗ba∗)∗

解释:

  • a∗: 不含 b 的字符串 (0 个 b,可被 3 整除)
  • (a∗ba∗ba∗ba∗)∗: 每段包含恰好 3 个 b,重复任意次
10/15
NFA 转正则表达式

转换思路:

  1. 简化 M 使得不存在 s 的入边
  2. 确保最终状态仅有一个且无出边
  3. 每次删除一个状态,对于它的每一对入边和出边进行转换

转换模式:

如果状态 q 有从 p 到 q 的边标记为 A,从 q 到 r 的边标记为 B,q 的自环标记为 C,则删除 q 后添加从 p 到 r 的边标记为 AC∗B

11/15
集合运算等价关系

以下关系等价:

  • A ⊆ B
  • A - B = ∅
  • A ∪ B = B
  • A ∩ B = A

这些等价关系在证明语言属性时非常有用

12/15
正则语言的判定问题

每个判定问题都对应一个语言

重要概念:

  • Σᴺ: 无限长度字符串集合
  • Σ∗: 所有有限长度字符串集合
  • Σ⁺: 所有非空有限长度字符串集合

空字符串 ε 是任何字母表 Σ 上的字符串,但不在 Σ⁺ 中

13/15
语言运算的特殊情况

RL 和 Non-RL、Non-RL 和 Non-RL 的连接都可能是 RL

例子:

  • RL 为 ∅,则与任何语言的连接也是 ∅ (RL)
  • Non-RL 与 Non-RL 的连接可能是 RL

关键点:正则语言类在适当运算下封闭,但非正则语言类的运算结果不确定

14/15
使用泵引理的注意事项

泵引理只能用于证明语言不是正则的

如果一个语言满足泵引理条件,不能断定它是正则的

反例:存在非正则语言满足泵引理条件

因此,泵引理是正则语言的必要不充分条件

15/15
解决正则语言问题的策略

策略:

  1. 先尝试构造 DFA/NFA
  2. 如果困难,尝试使用正则表达式
  3. 如果认为不是正则语言,使用泵引理证明
  4. 善用德摩根律等集合运算性质

记忆提示:多思考 {0ⁿ1ⁿ} 不是正则的例子

常见技巧:通过已知非正则语言构造矛盾