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

    技术2024-03-28  11

    本系列文章

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

    文章目录:正则表达式

    1. 正则表达式2. 正则表达式和FA的等价性1. 等价性2. 正则表达式-->FA3. 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})

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

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

    1. 等价性

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

    2. 正则表达式–>FA

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

    加:R+S

    连接:RS

    星:R*

    例:将 (0+1)*1(0+1) 转化为FA

    3. FA–>正则表达式

    一些题目可以直接“看“出来,像这样:

    状态消去法

    但是题目太复杂了,容易丢三落四,于是使用状态消去法。过程如下:

    然后每次消去一个状态,并将该状态表示的表达式添加在弧上 最后弧上得到的表达式就是该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的公式就行。

    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}逆同态
    Processed: 0.012, SQL: 8