[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (2)

本系列文章

  • 有穷自动机
  • 正则表达式
  • 上下文无关文法和下推自动机
  • 图灵机

文章目录:正则表达式

  • 1. 正则表达式
  • 2. 正则表达式和FA的等价性
    • 1. 等价性
    • 2. 正则表达式-->FA
    • 3. FA-->正则表达式
  • 3. 正则语言的性质
    • 1. 泵引理 (Pumping lemma)
    • 2. 封闭性

1. 正则表达式

正则表达式的递归定义:

  • ε \varepsilon ε 是一个正则表达式,表示语言 { ε } \{\varepsilon\} {ε} ;
  • ϕ \phi ϕ 是一个正则表达式,表示空语言 ϕ \phi ϕ ;
  • ∀ a ∈ Σ \forall a \in \Sigma aΣ a a a 是一个正则表达式, 表示语言 { a } \{a\} {a} ;
  • 如果 E E E F F F 是正则表达式,表示的语言分别是 L ( E ) L(E) L(E) L ( F ) L(F) L(F),则 E + F ,    E F ,    E ∗ E+F,\;EF,\;E^* E+F,EF,E 都是正则表达式,分别表示的语言是 L ( E ) ∪ L ( F ) ,    L ( E ) L ( F ) ,    ( L ( E ) ) ∗ L(E)\cup L(F),\; L(E)L(F),\;(L(E))^* L(E)L(F),L(E)L(F),(L(E)) ;
  • 如果 E E E 是正则表达式,则 ( E ) (E) (E) 也是。
  • 运算符优先级:括号 > 星 > 连接 > 加

  • 每一个正则表达式都对应一个正则语言。

例: L = { w    ∣    w ∈ 0 , 1 ∗    a n d    w    h a s    n o    p a i r    o f    c o n s e c u t i v e    0 ’ s } L=\{w\; |\; w \in { 0, 1 }^* \;and \;w \;has \;no \;pair \;of \;consecutive \;0’s \} L={ww0,1andwhasnopairofconsecutive0s}

解: 1 ∗ ( 01 1 ∗ ) ∗ ( 0 + ε ) 1^* ( 0 1 1^* )^* ( 0 + \varepsilon) 1(011)(0+ε) ( 1 + 01 ) ∗ ( 0 + ε ) (1+01)^*(0 + \varepsilon) (1+01)(0+ε)

练习:RegExp for ( Σ = { 0 , 1 } \Sigma=\{0,1\} Σ={0,1})

  1. {w | w has exactly a single 1 }
  2. {w | w contains 001 }
  3. {w | length(w) ≥ 3 and the third symbol is 0 }
  4. What language does the RegExp ϕ ∗ \phi^* ϕ represent ?

2. 正则表达式和FA的等价性

1. 等价性

  • 有穷自动机可以识别正则语言
  • 正则表达式可以生成正则语言
  • 故 有穷自动机和正则表达式等价

[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (2)_第1张图片

2. 正则表达式–>FA

正则表达式三种运算的转换:通过空转移

  • 加:R+S
    [HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (2)_第2张图片

  • 连接:RS
    在这里插入图片描述

  • 星:R*
    [HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (2)_第3张图片

例:将 (0+1)*1(0+1) 转化为FA
[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (2)_第4张图片

3. FA–>正则表达式

一些题目可以直接“看“出来,像这样:
[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (2)_第5张图片

状态消去法

但是题目太复杂了,容易丢三落四,于是使用状态消去法。过程如下:
在这里插入图片描述

然后每次消去一个状态,并将该状态表示的表达式添加在弧上
[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (2)_第6张图片
最后弧上得到的表达式就是该FA对应的正则表达式。

归纳法

将状态标记为 Q={1, 2, 3, …, n}

R i j ( k )    其 中 0 ≤ k ≤ n R_{ij}^{(k)}\;其中0 \le k \le n Rij(k)0kn:i 到 j 路径的正则表达式,且路径上没有标记超过 k 的状态

过程:按照k=0,i=j 的公式算出不经过中间状态的正则表达式,然后递推套k≥1的公式就行。
[HIT-FLAA]哈工大2020春形式语言与自动机复习笔记 (2)_第7张图片

3. 正则语言的性质

1. 泵引理 (Pumping lemma)

泵引理用于证明某个语言不是正则的,它是正则语言应满足的必要条件

要证明是正则的可以使用构造DFA、NFA、ε-NFA、正则表达式的方法

正则语言的泵引理:假设 L 的是正则的,则 ∃ n \exists n n,对 ∀ w ∈ L \forall w \in L wL,若 ∣ w ∣ ≥ n |w|\ge n wn,则可将 w 划分为 w = x y z w=xyz w=xyz,其中

  • ∣ x y ∣ ≤ n |xy|\le n xyn
  • y ≠ ε ( ∣ y ∣ ≥ 1 ) y \ne \varepsilon (|y|\ge 1) y=ε(y1)
  • ∀ k ≥ 0 ,   x y k z ∈ L \forall k\ge 0,\, xy^kz \in L k0,xykzL

例:证明 L = { 0 n 1 n   ∣   n ≥ 0 } L=\{0^n1^n \, | \, n\ge 0\} L={0n1nn0} 不是正则的

解:假设它是正则的。由泵引理可知,一定存在一个常数n,对每个长度不小于n的 w ∈ L w\in L wL,可以被分成3的子串 w = x y z w=xyz w=xyz,且 ∣ x y ∣ ≤ n |xy|\le n xyn y ≠ ε y \ne \varepsilon y=ε x y k z ∈ L xy^kz \in L xykzL

w = 0 n 1 n ∈ L w=0^n1^n \in L w=0n1nL,则 w = 0 n 1 n = x y z w=0^n1^n=xyz w=0n1n=xyz,由于 ∣ x y ∣ ≤ n |xy|\le n xyn,故只能有 y = 0 m y=0^m y=0m,所以有 x z = 0 n − ∣ y ∣ 1 n ∈ L xz=0^{n-|y|}1^n \in L xz=0ny1nL

显然xz不是L中的字符串,所以矛盾,所以L不是正则的。

解题方法:上手先假设L是正则的,根据泵引理,选一个字符串w (最好是在开始的某个字符上重复了n次,即最开始是一个 a n a^n an),然后就可以泵掉 |y| 个 a,然后就不属于L了,就推出矛盾

2. 封闭性

正则语言经某些运算后得到的新语言仍是正则语言,称正则语言在这些运算下封闭。

  • 并: L ∪ M L \cup M LM
  • 交: L ∩ M L\cap M LM
  • 补: L ‾ \overline L L
  • 差: L − M L - M LM
  • 反: L R L^R LR
  • 闭包(星): L ∗ L^* L
  • 连接: L M LM LM
  • 同态: h :    Σ ∗ → Γ ∗ h ( L ) = { h ( w )   ∣   w ∈ L } h:\; \Sigma^* \rightarrow \Gamma^*\qquad h(L)=\{ h(w)\, |\, w \in L \} h:ΣΓh(L)={h(w)wL}
  • 逆同态

你可能感兴趣的:(形式语言与自动机)