形式语言与自动机

绪论

字母表

概念:形式符号的非空有限集合

集合:常用 Σ \Sigma Σ表示

字符串

概念:字母表 Σ \Sigma Σ上的一个字符串,为 Σ \Sigma Σ中字符构成的有限序列

空串:常用 ε \varepsilon ε表示

幂运算:设 Σ \Sigma Σ为字母表, n n n为任意自然数,定义

​ (1) Σ 0 = { ε } \Sigma^0=\{\varepsilon\} Σ0={ε}

​ (2)设 x ∈ Σ n − 1 , a ∈ Σ x\in \Sigma^{n-1},a\in \Sigma xΣn1,aΣ,则 a x ∈ Σ n ax\in \Sigma^{n} axΣn

​ (3) Σ n \Sigma^{n} Σn中元素只能由(1)(2)生成

字母表中可以包含空字符,所以 Σ i \Sigma^i Σi的元素的长度不一定为 i i i

*闭包: Σ ∗ = Σ 0 ∪ Σ 1 ∪ . . . \Sigma^{*}=\Sigma^0\cup\Sigma^1\cup... Σ=Σ0Σ1...

+闭包: Σ + = Σ 1 ∪ Σ 2 ∪ . . . \Sigma^{+}=\Sigma^1\cup\Sigma^2\cup... Σ+=Σ1Σ2...

语言

概念:设 Σ \Sigma Σ为字母表,则任何集合 L ⊆ Σ ∗ L\subseteq\Sigma^* LΣ是字母表 Σ \Sigma Σ上的一个语言

语言的连接: L M = { w 1 w 2 ∣ w 1 ∈ L ∧ w 2 ∈ M } LM=\{w_1w_2|w_1\in L\wedge w_2\in M\} LM={w1w2w1Lw2M}

语言的闭包: L ∗ = L 0 ∪ L 1 ∪ L 2 . . . L^*=L^0\cup L^1\cup L^2... L=L0L1L2...

上下文无关语言与下推自动机

Σ = { 0 , 1 } , L = { 0 n 1 n ∣ n ≥ 1 } \Sigma=\{0,1\},L=\{0^n1^n|n\geq 1\} Σ={0,1},L={0n1nn1}

下推自动机识别:维护一个栈,转移方向由栈顶和字符共同确定,每次转移识别一个字符并对栈进行修改

图灵机及其语言

Σ = { 0 , 1 , 2 } , L = { 0 n 1 n 2 n ∣ n ≥ 1 } \Sigma=\{0,1,2\},L=\{0^n1^n2^n|n\geq 1\} Σ={0,1,2},L={0n1n2nn1},则不存在任何自动机和下推自动机可以识别该语言,但是总存在一个图灵机可以识别

归纳证明法

1.基础:至少包含集合中一个元素

2.归纳:由已知元素生成新元素

3.极小性限制:集合中的元素只能由1、2生成

上下文无关文法与上下文无关语言

##上下文无关文法的基本概念

∑ = { 0 , 1 } , L = { 0 n 1 n ∣ n ≥ 1 } \sum=\{0,1\},L=\{0^n1^n|n\geq 1\} ={0,1}L={0n1nn1}

则接受该语言的文法为 S → 01 S\rightarrow01 S01 S → 0 S 1 S\rightarrow 0S1 S0S1

四个基本要素:终结符集合 T T T,非终结符集合 V V V,开始符号 S S S,产生式集合 P P P

一个上下文无关文法是一个四元组 G = ( V , T , P , S ) G=(V,T,P,S) G=(V,T,P,S),其中 V ∩ T = ∅ V\cap T=\varnothing VT= S ∈ V S\in V SV,产生式规则形如 A → α A\rightarrow \alpha Aα α ∈ ( V ∪ T ) ∗ \alpha \in(V\cup T)^{*} α(VT)

对于文法: E → E O E E\rightarrow EOE EEOE E → ( E ) E\rightarrow (E) E(E) E → v E\rightarrow v Ev E → d E\rightarrow d Ed O → + O\rightarrow + O+ O → ∗ O\rightarrow * O

G = ( { E , O } , { ( , ) , + , ∗ , v , d } , P , E ) G=(\{E,O\},\{(,),+,*,v,d\},P,E) G=({E,O},{(,),+,,v,d},P,E)

缩记方式: E → E O E ∣ ( E ) ∣ v ∣ d E\rightarrow EOE|(E)|v|d EEOE(E)vd

归约与推导

推理字符串是否符合文法定义语言,归约是由字符串推出开始符号,推导是由初始符号推出字符串

计算机实现归约(CKY算法):动态规划,全枚举,由于 E → ( E ) E\rightarrow (E) E(E)是三叉,时间复杂度较高

计算机实现推导(EARLY算法):维护两个栈,将规则推入栈中进行探索

最左推导:每一步替换最左边的非终结符

最右推导:

句型:设 C F G      G = ( V , T , P , S ) CFG\;\;G=(V,T,P,S) CFGG=(V,T,P,S),称 α ∈ ( V ∪ T ) ∗ \alpha\in (V\cup T)^* α(VT) G G G的一个句型,当且仅当 S → ∗ α S\overset{*}{\rightarrow}\alpha Sα

S → l m ∗ α S\xrightarrow[lm]{*}\alpha S lmα,称 α \alpha α是一个左句型

若句型 α ∈ T ∗ \alpha\in T^* αT,则称 α \alpha α为一个句子

上下文无关语言

C F G      G = ( V , T , P , S ) CFG\;\;G=(V,T,P,S) CFGG=(V,T,P,S),定义 G G G的语言为 L ( G ) = { w ∣ w ∈ T ∗ ∧ S → G ∗ w } L(G)=\{w|w\in T^*\wedge S\xrightarrow[G]{*} w\} L(G)={wwTS Gw}

上下文无关语言:由CFG生成的语言

证明给定语言L是某个文法G的语言

一般步骤: i f    w ∈ G    t h e n    w ∈ L ( G ) if \;w\in G\;then\;w\in L(G) ifwGthenwL(G) i f    w ∈ L ( G )    t h e n    w ∈ L if\;w\in L(G)\;then\;w\in L ifwL(G)thenwL

文法与语言的Chomsky分类方法

文法: G = ( V , T , P , S ) G=(V,T,P,S) G=(V,T,P,S)

0型文法:产生式形如 α → β \alpha \rightarrow \beta αβ ,其中 α \alpha α中至少包含一个非终结符,相当于图灵机

1型文法:产生式形如 α → β \alpha \rightarrow \beta αβ ∣ α ∣ ≤ ∣ β ∣ |\alpha|\leq |\beta| αβ ,当 S → ε S\rightarrow \varepsilon Sε例外,且S不得出现在任何产生式右侧,上下文有关文法,相当于线性有界自动机

2型文法:产生式形如 A → β A\rightarrow \beta Aβ ,其中 A ∈ V A\in V AV,上下文无关文法,下推自动机

3型文法:产生式形如 A → a B A\rightarrow aB AaB A → a A\rightarrow a Aa,正规文法,有限状态自动机

语法分析树

语法分析树:推导过程自上而下构成一棵树,满足以下条件

(1)每个内部节点由一个非终结符标记

(2)每个叶节点或由一个非终结符,或由一个终结符,或由 ε \varepsilon ε标记,但是当为 ε \varepsilon ε标记,为父节点唯一孩子

(3)若一个内部节点标记为A,孩子从左到右为 X 1 . . . X k X_1...X_k X1...Xk,则 A → X 1 . . . X k A\rightarrow X_1...X_k AX1...Xk为产生式

语法树的果实:叶节点从左到右连接起来

文法和语言中的二义性

存在句子对应至少两个语法分析树/最左推导的文法是有二义性的

上下文无关语言L的所有文法都是二义性的,则称L为固有二义性

例: L = { a n b n c m d m ∣ n ≥ 1 , m ≥ 1 } ∪ { a n b m c m d n ∣ n ≥ 1 , m ≥ 1 } L=\{a^nb^nc^md^m|n\geq1,m\geq 1\}\cup\{a^nb^mc^md^n|n\geq1,m\geq 1\} L={anbncmdmn1,m1}{anbmcmdnn1,m1}

消除二义性的方式:

算符优先级联(将一种算符处理完再处理别的算符)

左结合(左算符优先)

最近嵌套匹配(消除悬垂else二义性)

正规表达式与正规语言

正规表达式

作用于正规表达式的三种运算:

L ∪ M = { w ∣ w ∈ L ∨ w ∈ M } L\cup M=\{w|w\in L\vee w\in M\} LM={wwLwM}

L ⋅ M = { w 1 w 2 ∣ w 1 ∈ L ∧ w 2 ∈ M } L\cdot M=\{w_1w_2|w_1\in L\wedge w_2\in M\} LM={w1w2w1Lw2M}

L ∗ = ∪ i ≥ 0 L i L^*=\cup_{i\geq 0}L^i L=i0Li

语法:设字母表 Σ \Sigma Σ,正规表达式集合 R R R

基础: ε , ∅ ∈ R \varepsilon,\varnothing \in R ε,R a ∈ Σ ⇒ a ∈ R a\in \Sigma\Rightarrow a\in R aΣaR ∀ 变 量 L ∈ R \forall 变量 L \in R LR

归纳: E ∈ R ∧ F ∈ R ⇒ E + F ∈ R E\in R\wedge F\in R\Rightarrow E+F\in R ERFRE+FR E ∈ R ∧ F ∈ R ⇒ E F ∈ R E\in R\wedge F\in R\Rightarrow EF\in R ERFREFR E ∈ R ⇒ E ∗ ∈ R E\in R\Rightarrow E^*\in R ERER E ∈ R ⇒ ( E ) ∈ R E\in R\Rightarrow (E)\in R ER(E)R

语义:对每个不含变量的 E ∈ R E\in R ER E E E的语言 L ( E ) L(E) L(E) 递归定义如下

基础: L ( ε ) = { ε } L(\varepsilon)=\{\varepsilon\} L(ε)={ε} L ( ∅ ) = ∅ L(\varnothing)=\varnothing L()= a ∈ Σ ⇒ L ( a ) = { a } a\in \Sigma \Rightarrow L(a)=\{a\} aΣL(a)={a}

归纳: E ∈ R ∧ F ∈ R ⇒ L ( E + F ) = L ( E ) ∪ L ( F ) E\in R\wedge F\in R\Rightarrow L(E+F)=L(E)\cup L(F) ERFRL(E+F)=L(E)L(F) E ∈ R ∧ F ∈ R ⇒ L ( E F ) = L ( E ) L ( F ) E\in R\wedge F\in R\Rightarrow L(EF)=L(E)L(F) ERFRL(EF)=L(E)L(F) E ∈ R ⇒ L ( E ∗ ) = ( L ( E ) ) ∗ E\in R \Rightarrow L(E^*)=(L(E))^* ERL(E)=(L(E)) L ( ( E ) ) = L ( E ) L((E))=L(E) L((E))=L(E)

算符优先级:()>*>·>+

派生运算符: L + = L L ∗ L^+=LL^* L+=LL L ? = ε + L L?=\varepsilon+L L?=ε+L L n = L L n − 1 L^n=LL^{n-1} Ln=LLn1

正规语言

对于字母表 Σ \Sigma Σ上的语言 R R R,若存在 Σ \Sigma Σ上的正规表达式 E E E,满足 L ( E ) = R L(E)=R L(E)=R,则 R R R是正规语言

代数定律:

交换律和结合律

零元: ∅ + L = L + ∅ = L          ∅ L = L ∅ = ∅ \varnothing+L=L+\varnothing =L\;\;\;\;\varnothing L=L\varnothing=\varnothing +L=L+=LL=L=

幺元: ε L = L ε = L \varepsilon L=L\varepsilon=L εL=Lε=L

分配律

等幂律: L + L = L L+L=L L+L=L

与闭包相关的定律

代数定律具体化

例:验证 L + M L = ( L + M ) L L+ML=(L+M)L L+ML=(L+M)L是否成立,只需验证对于具体符号 a + b a = ( a + b ) a a+ba=(a+b)a a+ba=(a+b)a是否成立,显然 a a aa aa属于后者不属于前者

有限状态自动机

有限状态自动机:有限状态集,有限输入符号集,转移函数,一个开始状态,终态集合

确定有限状态自动机

确定有限状态自动机DFA是一个五元组 A = ( Q , Σ , δ , q 0 , F ) A=(Q,\Sigma,\delta,q_0,F) A=(Q,Σ,δ,q0,F)

其中, δ : Q × Σ → Q \delta:Q\times \Sigma\rightarrow Q δ:Q×ΣQ q 0 ∈ Q q_0\in Q q0Q F ⊆ Q F\subseteq Q FQ

扩展转移函数,适合输入字符串: δ ′ : Q × Σ ∗ → Q \delta':Q\times \Sigma^*\rightarrow Q δ:Q×ΣQ

∀ q ∈ Q \forall q \in Q qQ,有 δ ′ ( q , ε ) = q \delta'(q,\varepsilon)=q δ(q,ε)=q,若 w = x a      ( x ∈ Σ ∗ , a ∈ Σ ) w=xa\;\;(x\in \Sigma^*,a\in \Sigma) w=xa(xΣ,aΣ),则 δ ′ ( q , w ) = δ ( δ ′ ( q , x ) , a ) \delta'(q,w)=\delta(\delta'(q,x),a) δ(q,w)=δ(δ(q,x),a)

DFA的语言: L ( A ) = { w ∣ w ∈ Σ ∗ ∧ δ ′ ( q 0 , w ) ∈ F } L(A)=\{w|w \in \Sigma^*\wedge\delta'(q_0,w)\in F\} L(A)={wwΣδ(q0,w)F}

非确定有限自动机

在这里插入图片描述

其中, δ : Q × Σ → 2 Q \delta:Q\times \Sigma\rightarrow 2^Q δ:Q×Σ2Q

NFA接受输入的字符串:只要可以转移到结束节点就接受

扩展转移函数,适合输入字符串: δ ′ : Q × Σ ∗ → 2 Q \delta':Q\times \Sigma^*\rightarrow 2^Q δ:Q×Σ2Q

∀ q ∈ Q \forall q \in Q qQ,有 δ ′ ( q , ε ) = q \delta'(q,\varepsilon)=q δ(q,ε)=q,若 w = x a      ( x ∈ Σ ∗ , a ∈ Σ ) w=xa\;\;(x\in \Sigma^*,a\in \Sigma) w=xa(xΣ,aΣ),假设 δ ′ ( q , x ) = { p 1 , . . . p k } \delta'(q,x)=\{p_1,...p_k\} δ(q,x)={p1,...pk},则有 δ ′ ( q , w ) = ∪ i = 1 k δ ( p i , a ) \delta'(q,w)=\cup_{i=1}^k\delta(p_i,a) δ(q,w)=i=1kδ(pi,a)

NFA的语言: L ( A ) = { w ∣ w ∈ Σ ∗ ∧ ( δ ′ ( q 0 , w ) ∩ F ≠ ∅ ) } L(A)=\{w|w \in \Sigma^*\wedge(\delta'(q_0,w)\cap F\not=\varnothing)\} L(A)={wwΣ(δ(q0,w)F=)}

DFA和NFA的等价性

定理:L是某个DFA的语言 ⇔ \Leftrightarrow L是某个NFA的语言

充分性:DFA是一种特殊的NFA

必要性:考虑 D F A = ( Q D , Σ , δ D , { q 0 } , F D ) DFA=(Q_D,\Sigma,\delta_D,\{q_0\},F_D) DFA=(QD,Σ,δD,{q0},FD),其中

Q D = { S ∣ S ⊆ Q N } Q_D=\{S|S\subseteq Q_N\} QD={SSQN}

∀ S ∈ Q D    a ∈ Σ \forall S\in Q_D\;a\in \Sigma SQDaΣ δ D ( S , a ) = ∪ q ∈ S δ N ( q , a ) \delta_D(S,a)=\cup_{q\in S}\delta_N(q,a) δD(S,a)=qSδN(q,a)

F D = { S ∣ S ⊆ Q N ∧ ( S ∩ F N ≠ ∅ ) } F_D=\{S|S\subseteq Q_N\wedge (S\cap F_N\not=\varnothing)\} FD={SSQN(SFN=)}

大多数情况,子集构造法得到的DFA状态数与NFA状态数规模相同,最坏时状态数为指数规模

在这里插入图片描述

反证法,假定图中NFA构造DFA状态数少于 2 n 2^n 2n,考虑长度为n的01串

带空转移的非确定有限自动机

与非确定有限自动机的区别: δ : Q × Σ ∪ { ε } → 2 Q \delta:Q\times \Sigma\cup\{\varepsilon\}\rightarrow 2^Q δ:Q×Σ{ε}2Q

ε \varepsilon ε-闭包:状态q的 ε \varepsilon ε-闭包,记为ECLOSE(q),定义为从q经过所有的 ε \varepsilon ε路径可以到达的所有状态

扩展转移函数: δ ( q , w ) = ∪ i = 1 k E C L O S E ( r i ) \delta(q,w)=\cup_{i=1}^kECLOSE(r_i) δ(q,w)=i=1kECLOSE(ri)

ε \varepsilon ε-NFA等价于DFA

##确定有限自动机的最小化

DFA上等价关系:对于 ∀ p , q ∈ Q \forall p,q\in Q p,qQ,有 p R q ⇔ ( ∀ w ∈ Σ ∗ ) δ ′ ( p , w ) ∈ F ↔ δ ′ ( q , w ) ∈ F pRq\Leftrightarrow (\forall w \in \Sigma^*)\delta'(p,w)\in F\leftrightarrow \delta'(q,w)\in F pRq(wΣ)δ(p,w)Fδ(q,w)F

定理:$\delta(r,a)=p ;;\delta(s,a)=q , 则 ,则 p,q 可 区 别 可区别 \Rightarrow$ r , s r,s r,s可区别

填表法:递归标记可区别状态偶对的过程

基础: p p p终态, q q q非终态,则 p , q p,q p,q可区分

归纳:设 p , q p,q p,q已标记为可区分,若 δ ( r , a ) = p      δ ( s , a ) = q \delta(r,a)=p\;\;\delta(s,a)=q δ(r,a)=pδ(s,a)=q,则将 r , s r,s r,s标记为可区分

有限状态自动机最小化:删除所有从开始状态不可到达的状态及与其相关的边,使用填表法找到所有等价的状态偶对,根据等价块进行合并

有限状态自动机与正规表达式的关系

结论:有限自动机所表示的语言是正规语言

定理:若L是一个正规表达式R表示的语言,则存在一个 ε \varepsilon ε-NFA E,满足L(E)=L®=L

证明:归纳构造过程(Thompson构造法)

基础:对 ε      ϕ      a \varepsilon\;\;\phi\;\;a εϕa,构造为

在这里插入图片描述

归纳:

​ 对E+F,构造为
在这里插入图片描述

​ 对EF,构造为

在这里插入图片描述

​ 对E*,构造为

在这里插入图片描述

定理:L是某个DFA D的语言,则存在一个正规表达式R,满足L®=L(D)=L

证明:

1.路径迭代法(Kleene构造法)

设DFA D的状态集为{1,…n},初态为1,对所有 1 ≤ i , j ≤ n 1\leq i,j\leq n 1i,jn 0 ≤ k ≤ n 0\leq k\leq n 0kn ,迭代计算正规表达式 R i j ( k ) R_{ij}^{(k)} Rij(k),其中 w ∈ R i j ( k ) ⇔ w\in R_{ij}^{(k)}\Leftrightarrow wRij(k) 从 i 到 j 存在一条标记为w的路径,且路径上除 i , j 外所有状态的编号均不大于 k

最后,将 R 1 e ( n ) R_{1e}^{(n)} R1e(n)用加号相连,e为终态节点

基础:

​ **i != j:若不存在从 i 到 j的弧,则 R i j ( 0 ) = ϕ R_{ij}^{(0)}=\phi Rij(0)=ϕ;若仅存在一条从 i 到 j 的弧,且标记为 a ,则 R i j ( 0 ) = a R_{ij}^{(0)}=a Rij(0)=a ;若存在多条从 i 到 j 的弧,且标记为 a 1 , a 2 , … , a m a_1 , a_2 , … , a_m a1,a2,,am R i j ( 0 ) = a 1 + a 2 + … + a m R_{ij}^{(0)}= a 1+a_2+… +a_m Rij(0)=a1+a2++am **

i = j:若不存在从 i 到自身的圈,则 R i j ( 0 ) = ε R_{ij}^{(0)}= \varepsilon Rij(0)=ε;若存在一个从 i 到自身的圈且标记为a , R i j ( 0 ) = ε + a R_{ij}^{(0)}= \varepsilon+a Rij(0)=ε+a;存在多个从 i 到自身的圈,且标记为 a 1 , a 2 , … , a m a_1,a_2 , … , a_m a1,a2,,am ,则 R i j ( 0 ) = ε + a 1 + . . . + a m R_{ij}^{(0)}= \varepsilon+a_1+...+a_m Rij(0)=ε+a1+...+am

归纳: R i j ( k ) = R i j ( k − 1 ) + R i k ( k − 1 ) ( R k k ( k − 1 ) ) ∗ R k j ( k − 1 ) R_{ij}^{(k)}=R_{ij}^{(k-1)}+R_{ik}^{(k-1)}(R_{kk}^{(k-1)})^*R_{kj}^{(k-1)} Rij(k)=Rij(k1)+Rik(k1)(Rkk(k1))Rkj(k1)

2.状态消去法

思路:扩展自动机的概念,允许正规表达式作为转移弧的标记,这样,就有可能在消去某一中间状态时,保证自动机能够接受的字符串集合保持不变。在消去某一中间状态时,与其相关的转移弧也将同时消去,所造成的影响将通过修改从每一个前趋状态到每一个后继状态的转移弧标记来弥补

在这里插入图片描述

步骤:

(1)对每一终态q ,依次消去除 q 和初态 q0 之外的其它状态

(2)若q != q0,最终可得到一般形式如下状态自动机,该自动机对应的正规表达式可表示为$ ( R+SU^T )*SU$

在这里插入图片描述

(3)若 q = q0 ,最终可得到如下的自动机,它对应的正规为表达式可以表示为R*

在这里插入图片描述

(4)最终的正规表达式为每一终态对应的正规表达式之和

转换算法的复杂度

从DFA构造NFA: O ( ∣ Q ∣ ) O(|Q|) O(Q)

从NFA构造DFA: O ( ∣ Q ∣ 2 2 ∣ Q ∣ ) O(|Q|^22^{|Q|}) O(Q22Q) ,实际上界为 O ( ∣ Q ∣ 2 s ) O(|Q|^2 s) O(Q2s) s为DFA实际状态数

从DFA构造 ε \varepsilon ε-NFA: O ( ∣ Q ∣ ) O(|Q|) O(Q)

ε \varepsilon ε-NFA构造DFA: O ( ∣ Q ∣ 3 2 ∣ Q ∣ ) O(|Q|^32^{|Q|}) O(Q32Q),实际上界为 O ( ∣ Q ∣ 3 s ) O(|Q|^3 s) O(Q3s) s为DFA实际状态数

路径迭代法/状态消去法: O ( ∣ Q ∣ 3 4 ∣ Q ∣ ) O(|Q|^34^{|Q|}) O(Q34Q)

正规表达式构造 ε \varepsilon ε-NFA: O ( n ) O(n) O(n)

正规语言的性质与运算

Pumping引理

D F A      D = ( Q , Σ , δ , q 0 , F ) DFA\;\;D=(Q,\Sigma,\delta,q_0,F) DFAD=(Q,Σ,δ,q0,F) ∣ Q ∣ = n |Q|=n Q=n,对于任一长度不小于n的字符串 w = a 1 a 2 . . . a m w=a_1a_2...a_m w=a1a2...am 其中 m ≥ n m\geq n mn ,考察如下状态序列
p 0 = q ∈ Q p 1 = δ ′ ( q , a 1 ) . . . p m = δ ′ ( q , a 1 . . . a m ) \\p_0=q \in Q \\p_1=\delta'(q,a_1) \\... \\p_m=\delta'(q,a_1...a_m) p0=qQp1=δ(q,a1)...pm=δ(q,a1...am)
则Pigeonhole原理,存在 i , j i,j i,j 0 ≤ i < j ≤ n 0\leq i<j\leq n 0i<jn s . t . p i = p j s.t.p_i=p_j s.t.pi=pj

pumping特性:任一长度不小于状态数目的字符串所标记的路径上,必然出现重复的状态

w = x y z w=xyz w=xyz,其中 x = a 1 . . . a i x=a_1...a_i x=a1...ai y = a i + 1 . . . a j y=a_{i+1}...a_{j} y=ai+1...aj z = a j + 1 . . . a m z=a_{j+1}...a_m z=aj+1...am,则对于任意的k,都有 x y k z ∈ L ( D ) xy^kz\in L(D) xykzL(D)

pumping特性:设L是正规语言, 则存在常数n>0,使得任一长度不小于n的字符串 w ∈ L w\in L wL ∣ w ∣ ≥ n |w|\geq n wn, 都可以分成三个部分,即 w = x y z w=xyz w=xyz,且满足 y ≠ ε y\not=\varepsilon y=ε ∣ x y ∣ ≤ n |xy|\leq n xyn ∀ k ≥ 0 , x y k z ∈ L \forall k\geq 0,xy^kz\in L k0,xykzL

应用:证明某个语言L不是正规语言

例:证明语言 L = { 0 k 1 k ∣ k ≥ 0 } L=\{0^k1^k|k\geq 0\} L={0k1kk0}不是正规语言

考虑任意的 n ≥ 1 n\geq 1 n1,取 w = 0 n 1 n w = 0^n1^n w=0n1n,任选满足条件 w = x y z ∧ y ≠ ε ∧ ∣ x y ∣ ≤ n w=xyz\wedge y\not=\varepsilon\wedge|xy|\leq n w=xyzy=εxyn x y z xyz xyz
若取 k = 0 k=0 k=0, 则有 x y k z = x z ∉ L 01 xy^kz = xz\not \in L_{01} xykz=xzL01 ( x z xz xz中0比1少)

注意:Pumping引理不是正规语言的充分条件,考虑如下非正规语言

a, b, c 串构成的语言 L = { a i b j c k ∣ i , j , k ≥ 0 , i f    i = 1    t h e n    j = k } L = \{a^i b^j c^k |i,j,k \geq 0,if \;i=1 \;then \;j=k\} L={aibjcki,j,k0,ifi=1thenj=k}

正规语言的判定性质

判定DFA是否为空:测试从初态是否可达某一终态,先求所有可达状态的集合,若其中包含终态,则该正规语言非空,否则为空语言

判定正规表达式是否为空:

基础: L ( ∅ ) L(\varnothing) L()为空语言,而 L ( ε ) L(\varepsilon) L(ε) L ( a ) L(a) L(a)不是
归纳:

​ 设 R = R 1 + R 2 R=R_1 +R_2 R=R1+R2 L ( R ) L(R) L(R)为空 iff L ( R 1 ) L(R_1) L(R1) L ( R 2 ) L(R_2) L(R2) 都为空

​ 设 R = R 1 R 2 R=R_1 R_2 R=R1R2 L ( R ) L(R) L(R)为空 iff L ( R 1 ) L(R_1) L(R1) L ( R 2 ) L(R_2) L(R2) 都为空

​ 设 R = R 1 ∗ R=R_1^* R=R1 L ( R ) L(R) L(R)非空

​ 设 R = ( R 1 ) R=(R_1 ) R=(R1) L ( R ) L(R) L(R)为空 iff L ( R 1 ) L(R_1 ) L(R1)

判定正规语言是否相等:

​ 先将两个正规语言的表达形式都转化为 DFA ,问题转化为两个DFA 是否是等价的

​ 适当重命名,使两个DFA没有重名的状态

​ 将两个DFA 相并,构造一个新的DFA,原来的终态仍是终态,转移边不发生任何变化,取任何一个状态为初态

​ 对新构造的DFA 运用填表算法,如果原来DFA的两个初态不可区别,则这两个正规语言相等,否则不相等

正规语言的封闭运算

正规语言的补:若 L L L Σ \Sigma Σ上的正规语言,则 L ‾ = Σ ∗ – L \overline{L} = \Sigma^*–L L=ΣL也是正规语言

证明:设$DFA ;;A = (Q, \Sigma, \delta, q_0 , F ) $,使得 L ( A ) = L L(A)=L L(A)=L ,构造 D F A      B = ( Q , Σ , δ , q 0 , Q – F ) DFA \;\;B = (Q, \Sigma, \delta , q_0 , Q – F ) DFAB=(Q,Σ,δ,q0,QF)

正规语言的交:若 L L L M M M为正规语言,则 L ∩ M L \cap M LM也是正规语言

证明:设 D F A      A L = ( Q L , Σ , δ L , q L , F L ) DFA \;\;A_L = (Q_L ,\Sigma,\delta_L , q_L , F_L ) DFAAL=(QL,Σ,δL,qL,FL) D F A      A M = ( Q M , Σ , δ M , q M , F M ) DFA\;\;A_M = (Q_M , \Sigma, \delta_M , q_M , F_M ) DFAAM=(QM,Σ,δM,qM,FM) 的语言分别为L和M,构造 D F A      A = ( Q L × Q M , Σ , δ , < q L , q M > , F L × F M ) DFA \;\;A = (Q_L \times Q_M ,\Sigma,\delta , <q_L , q_M > , F_L \times F_M ) DFAA=(QL×QM,Σ,δ,<qL,qM>,FL×FM),其中 δ ( < p , q > , a ) = < δ L ( p , a ) , δ M ( q , a ) > \delta (<p, q> , a)= <\delta_L(p, a),\delta_M (q, a) > δ(<p,q>,a)=<δL(p,a),δM(q,a)>

正规语言的差:若L和M为正规语言,则L–M也是正规语言

证明: L − M = L ∩ M ‾ L-M=L\cap\overline{M} LM=LM

正规语言的反向:若L为正规语言,则 L R = { w R ∣ w ∈ L } L^R=\{w^R|w\in L\} LR={wRwL}也是正规语言

证明:设有限自动机 A 的语言为L,即L(A)=L,通过以下步骤修改A的转移图,得到有限自动机B

​ 将A的转移图中所有的弧反向

​ 将A的初态作为B的唯一终态

​ 增加一个新的状态 p 0 p_0 p0作为B的初态,并从 p 0 p_0 p0到A的所有终态增加一条 ε \varepsilon ε-转移弧

正规语言的同态:

设映射 h : Σ → T ∗ h:\Sigma \rightarrow T^* h:ΣT,则对 w = a 1 a 2 … a n ∈ Σ ∗ w=a_1 a_2 …a_n\in \Sigma^* w=a1a2anΣ,定义 h ( w ) = h ( a 1 ) h ( a 2 ) … h ( a n ) h(w) = h(a_1 ) h(a_2 ) … h(a_n ) h(w)=h(a1)h(a2)h(an),称为串 w 的一个同态,对语言 L ⊆ Σ ∗ L\subseteq\Sigma^* LΣ,定义 L 的同态 h ( L ) = { h ( w ) ∣ w ∈ L } h(L) = \{ h(w) | w\in L \} h(L)={h(w)wL}

若 L 为正规语言, h : Σ → T ∗ h:\Sigma \rightarrow T^* h:ΣT,则 h ( L ) h(L) h(L)也是正规语言

正规语言的反同态:

对语言 L ⊆ Σ ∗ L\subseteq\Sigma^* LΣ,定义 L 的反同态 h − 1 ( L ) = { w ∣ w ∈ Σ ∗ ∧ h ( w ) ∈ S } h^{-1}(L) = \{ w | w\in \Sigma^*\wedge h(w)\in S \} h1(L)={wwΣh(w)S}

若 L 为正规语言, h : Σ → T ∗ h:\Sigma \rightarrow T^* h:ΣT,则 h − 1 ( L ) h^{-1}(L) h1(L)也是正规语言

应用:

​ 证明如下语言不是正则语言

​ a, b, c 串构成的语言 L = { a i b j c k ∣ i , j , k ≥ 0 , i f    i = 1    t h e n    j = k } L = \{a^i b^j c^k |i,j,k \geq 0,if \;i=1 \;then \;j=k\} L={aibjcki,j,k0,ifi=1thenj=k}

​ 设 h ( a ) = ε h(a)=\varepsilon h(a)=ε h ( b ) = 0 h(b)=0 h(b)=0 h ( c ) = 1 h(c)=1 h(c)=1,则 h ( L ’ ) = { 0 n 1 n ∣ n ≥ 0 } h(L’)=\{0^n 1^n | n \geq 0\} h(L)={0n1nn0}是正规语言,矛盾

下推自动机

下推自动机:带有一个堆栈的有限状态自动机

一个下推自动机PDA是一个七元组 P = ( Q , Σ , Γ , δ , q 0 , Z 0 , F ) P=(Q,\Sigma,\Gamma,\delta,q_0,Z_0,F) P=(Q,Σ,Γ,δ,q0,Z0,F)

分别为:有限状态集,有限输入符号集,有限堆栈符号集,转移函数,开始状态,开始堆栈符号,终态集合

其中, q 0 ∈ Q q_0\in Q q0Q Z 0 ∈ Γ Z_0\in \Gamma Z0Γ F ⊆ Q F\subseteq Q FQ δ : Q × ( Σ ∪ { ε } ) × Γ → 2 Q × Γ ∗ \delta:Q\times(\Sigma\cup\{\varepsilon\})\times \Gamma\rightarrow 2^{Q\times \Gamma^*} δ:Q×(Σ{ε})×Γ2Q×Γ

两种定义

用ID表示当前格局,PDA的当前格局用三元组 ( q , w , γ ) (q,w,\gamma) (q,w,γ)表示,其中 q q q为当前状态, w w w为剩余的输入串, γ \gamma γ为当前栈中的内容

ID推导关系 ⊢ \vdash ( q , a w , X β ) ⊢ ( p , w , α β )        i f f        ( p , α ) ∈ δ ( q , a , X ) (q,aw,X\beta)\vdash(p,w,\alpha\beta) \;\;\;iff\;\;\;(p,\alpha)\in\delta(q,a,X) (q,aw,Xβ)(p,w,αβ)iff(p,α)δ(q,a,X)

类似定义ID推导关系的自反传递闭包 ⊢ ∗ \vdash^*

空栈接受定义: N ( P ) = { w ∣ ( q 0 , w , Z 0 ) ⊢ ∗ ( q , ε , ε ) } N(P)=\{w|(q_0,w,Z_0)\vdash^*(q,\varepsilon,\varepsilon)\} N(P)={w(q0,w,Z0)(q,ε,ε)}

终态接受定义: L ( P ) = { w ∣ ( q 0 , w , Z 0 ) ⊢ ∗ ( q , ε , α ) } L(P)=\{w|(q_0,w,Z_0)\vdash^*(q,\varepsilon,\alpha)\} L(P)={w(q0,w,Z0)(q,ε,α)}

等价性证明:

P D A      P N PDA \;\;P_N PDAPN L = N ( P N ) L=N(P_N) L=N(PN),则存在 P D A      P F PDA\;\;P_F PDAPF,满足 L = L ( P F ) L=L(P_F) L=L(PF)

在这里插入图片描述

P D A      P F PDA \;\;P_F PDAPF L = L ( P F ) L=L(P_F) L=L(PF),则存在 P D A      P N PDA\;\;P_N PDAPN,满足 L = N ( P N ) L=N(P_N) L=N(PN)

在这里插入图片描述

##从上下文无关文法构造等价的下推自动机

C F G      G = { V , T , P , S } CFG \;\;G=\{V,T,P,S\} CFGG={V,T,P,S},构造空栈接受方式 P D A      E = ( { q } , T , V ∪ T , δ , q , S ) PDA \;\;E=(\{q\},T,V\cup T,\delta,q,S) PDAE=({q},T,VT,δ,q,S),转移函数定义为

(1)对每一个 A ∈ V A\in V AV δ ( q , ε , A ) = { ( q , β ) ∣ A → β      ∈ P } \delta(q,\varepsilon,A)=\{(q,\beta)|A\rightarrow \beta\;\;\in P\} δ(q,ε,A)={(q,β)AβP}

(2)对每一个 a ∈ T a\in T aT δ ( q , a , a ) = { ( q , ε ) } \delta(q,a,a)=\{(q,\varepsilon)\} δ(q,a,a)={(q,ε)}

结论:依据如上构造方法,有 N ( E ) = L ( G ) N(E)=L(G) N(E)=L(G)

证明:

1.如果A的最左推导可以推出w,那么 ( q , w , A ) ⊢ ∗ ( q , ε , ε ) (q,w,A)\vdash^*(q,\varepsilon,\varepsilon) (q,w,A)(q,ε,ε)

归纳最左推导的步数n

n=1时, A → w A\rightarrow w Aw必为产生式, ( q , w , A ) ⊢ ( q , w , w ) ⊢ ∗ ( q , ε , ε ) (q,w,A)\vdash (q,w,w)\vdash^*(q,\varepsilon,\varepsilon) (q,w,A)(q,w,w)(q,ε,ε)

归纳,设第一步使用产生式 A → X 1 X 2 . . . X m A\rightarrow X_1X_2...X_m AX1X2...Xm,必有 w = w 1 . . . w m w=w_1...w_m w=w1...wm,因此
( q , w , A ) ⊢ ( q , w 1 . . . w m , X 1 . . . X m ) ⊢ ∗ ( q , w 2 . . . w m , X 2 . . . X m ) ⊢ ∗ . . . ⊢ ∗ ( q , ε , ε ) (q,w,A)\vdash (q,w_1...w_m,X_1...X_m)\vdash^*(q,w_2...w_m,X_2...X_m)\vdash^*...\vdash^*(q,\varepsilon,\varepsilon) (q,w,A)(q,w1...wm,X1...Xm)(q,w2...wm,X2...Xm)...(q,ε,ε)
2.如果 ( q , w , A ) ⊢ ∗ ( q , ε , ε ) (q,w,A)\vdash^*(q,\varepsilon,\varepsilon) (q,w,A)(q,ε,ε),那么A能够最左推导出w

归纳 ( q , w , A ) ⊢ ∗ ( q , ε , ε ) (q,w,A)\vdash^*(q,\varepsilon,\varepsilon) (q,w,A)(q,ε,ε)的步数n

n=1时,必有 w = ε w=\varepsilon w=ε,且 A → ε A\rightarrow \varepsilon Aε为G的产生式,得证

归纳,设第一步使用产生式 A → X 1 . . . X m A\rightarrow X_1...X_m AX1...Xm,可将 w w w分为 w = w 1 . . . w m w=w_1...w_m w=w1...wm,满足 ( q , w i , X i ) ⊢ ∗ ( q , ε , ε ) (q,w_i,X_i)\vdash^*(q,\varepsilon,\varepsilon) (q,wi,Xi)(q,ε,ε),对于任意的 X i X_i Xi,都有 X i → ∗ l m w i X_i\xrightarrow[*]{lm} w_i Xilm wi,因此, A ⇒ X 1 . . . X m ⇒ ∗ w 1 . . . w m = w A\Rightarrow X_1...X_m\Rightarrow^* w_1...w_m=w AX1...Xmw1...wm=w

从下推自动机构造等价的上下文无关文法

P D A      E = ( Q , Σ , Γ , δ , q 0 , Z 0 ) PDA \;\;E=(Q,\Sigma,\Gamma,\delta,q_0,Z_0) PDAE=(Q,Σ,Γ,δ,q0,Z0),构造 C F G      G = ( V , Σ , P , S ) CFG\;\;G=(V,\Sigma,P,S) CFGG=(V,Σ,P,S),其中 V = { S } ∪ { [ p X q ] ∣ p , q ∈ Q ∧ X ∈ Γ } V=\{S\}\cup\{[pXq]|p,q\in Q\wedge X\in \Gamma\} V={S}{[pXq]p,qQXΓ}

产生式集合P定义如下:

(1)对每一个 p ∈ Q p\in Q pQ,G包含产生式 S → [ q 0 Z 0 p ] S\rightarrow [q_0Z_0p] S[q0Z0p]

(2)若 ( q , X 1 . . . X k ) ∈ δ ( p , a , X ) (q,X_1...X_k)\in \delta(p,a,X) (q,X1...Xk)δ(p,a,X),则包含产生式 [ p X p k ] → a [ q X 1 p 1 ] . . . [ p k − 1 X k p k ] [pXp_k]\rightarrow a[qX_1p_1]...[p_{k-1}X_kp_k] [pXpk]a[qX1p1]...[pk1Xkpk],其中 a ∈ Σ    o r    a = ε a\in \Sigma \;or\;a=\varepsilon aΣora=ε p 0 = q p_0=q p0=q

结论:依据上述构造方法,有 N ( E ) = L ( G ) N(E)=L(G) N(E)=L(G)

证明对 q , p ∈ Q q,p\in Q q,pQ ( q , w , X ) ⊢ ∗ ( p , ε , ε )      i f f      [ q X p ] ⇒ ∗ w (q,w,X)\vdash^*(p,\varepsilon,\varepsilon)\;\;iff\;\;[qXp]\Rightarrow^*w (q,w,X)(p,ε,ε)iff[qXp]w

(1)归纳 ( q , w , X ) ⊢ ∗ ( p , ε , ε ) (q,w,X)\vdash^*(p,\varepsilon,\varepsilon) (q,w,X)(p,ε,ε)的步数为n

n=1时, w = ε w=\varepsilon w=ε或单个符号,且 ( p , ε ) ∈ δ ( q , w , X ) (p,\varepsilon)\in \delta(q,w,X) (p,ε)δ(q,w,X),由构造过程, [ q X p ] → w [qXp]\rightarrow w [qXp]w为一个产生式

归纳,设第一步推导为 ( q , w , X ) ⊢ ( p 0 , x , X 1 . . . X k ) (q,w,X)\vdash(p_0,x,X_1...X_k) (q,w,X)(p0,x,X1...Xk),其中 w = a x w=ax w=ax a = ε a=\varepsilon a=ε或单个符号,且 ( p 0 , X 1 . . . X k ) ∈ δ ( q , a , X ) (p_0,X_1...X_k)\in \delta(q,a,X) (p0,X1...Xk)δ(q,a,X),可以将x分为 x = x 1 . . . x k x=x_1...x_k x=x1...xk,存在 p 1 . . p k − 1 p_1..p_{k-1} p1..pk1,满足 ( p i − 1 , x i , X i ) ⊢ ∗ ( p i , ε , ε ) (p_{i-1},x_i,X_i)\vdash^*(p_i,\varepsilon,\varepsilon) (pi1,xi,Xi)(pi,ε,ε) ( p k − 1 , x k , X k ) ⊢ ∗ ( p , ε , ε ) (p_{k-1},x_k,X_k)\vdash^*(p,\varepsilon,\varepsilon) (pk1,xk,Xk)(p,ε,ε)

由归纳假设,得证

(2)归纳 [ q X p ] ⇒ ∗ w [qXp]\Rightarrow^* w [qXp]w的步数为n

确定下推自动机

定义:一个 P D A      P PDA \;\;P PDAP是确定的 P D A PDA PDA,或称为 D P D A DPDA DPDA,当且仅当满足

·对于 a ∈ Σ a\in \Sigma aΣ a = ε a=\varepsilon a=ε X ∈ Γ X\in \Gamma XΓ δ ( q , a , X ) \delta(q,a,X) δ(q,a,X)最多包含一个元素

·对于 a ∈ Σ a\in \Sigma aΣ,若 δ ( q , a , X ) ≠ ∅ \delta(q,a,X)\not=\varnothing δ(q,a,X)=,则 δ ( q , ε , X ) = ∅ \delta(q,\varepsilon,X)=\varnothing δ(q,ε,X)=

结论:若 L L L为正规语言,则存在 D P D A      P DPDA\;\; P DPDAP L ( P ) = L L(P) = L L(P)=L

思路:转化为一个栈不变的DFA,即 δ P ( q , a , Z 0 ) = { ( p , Z 0 ) }    i f f    δ A ( q , a ) = p \delta_P(q,a,Z_0)=\{(p,Z_0)\}\; iff\; \delta_A(q,a)=p δP(q,a,Z0)={(p,Z0)}iffδA(q,a)=p

结论:DPDA的计算能力强于有限自动机

例如语言 L = { w c w R ∣ w ∈ ( 0 + 1 ) ∗ } L=\{wcw^R|w\in(0+1)^*\} L={wcwRw(0+1)}

前缀性质:一个语言 L L L具有前缀性质,当且仅当不存在 x , y ∈ L x,y\in L x,yL x ≠ y x\not =y x=y,且 x ∈ p r e f i x ( y ) x\in prefix(y) xprefix(y)

结论:一个语言 L L L是某个空栈接受的 D P D A      P DPDA\;\;P DPDAP的语言,当且仅当 L L L具有前缀性质,且 L L L是某个 D P D A      P ′ DPDA\;\;P' DPDAP的语言

结论:某些上下文无关语言不是任何 D P D A DPDA DPDA的语言,例如 L = { w w R ∣ w ∈ ( 0 , 1 ) ∗ } L=\{ww^R|w\in(0,1)^*\} L={wwRw(0,1)}

定义:若上下文无关语言 L L L是某个 D P D A DPDA DPDA的语言,则称 L L L为一个确定的上下文无关语言

结论:一个语言 L L L是某个空栈接受的 D P D A      P DPDA \;\;P DPDAP的语言,即 L = N ( P ) L=N(P) L=N(P),则 L L L存在无二义文法

结论:一个语言 L L L是某个 D P D A      P DPDA \;\;P DPDAP的语言,即 L = L ( P ) L=L(P) L=L(P),则 L L L存在一个无二义文法

结论:固有二义的语言不是任何 D P D A DPDA DPDA的语言

结论:存在非固有二义的语言 L L L,不是任何 D P D A      P DPDA \;\;P DPDAP的语言

例如, L = { w w R ∣ w ∈ ( 0 + 1 ) ∗ } L=\{ww^R|w\in(0+1)^*\} L={wwRw(0+1)}

#CFG的简化与Chomsky范式

##消去空产生式

可致空符号:对于 CFG G =(V,T,P,S),称符号 A ∈ V A\in V AV是可致空的,当且仅当 A ⇒ ∗ ε A\Rightarrow^* \varepsilon Aε

设 CFG G =(V,T,P,S), 通过下列步骤可以得到消去 G中 ε \varepsilon ε产生式及其影响,由此得到 CFG G’ =(V,T,P’,S)

(1) 计算 G 的可致空符号集合;

(2) 对每一产生式 A → A 1 A 2 . . . A k A\rightarrow A_1 A_2 ...A_k AA1A2...Ak,在G’中对应有一组产生式,每一个可致空符号都可能出现或不出现;若包含m<k个可致空符号,则该产生式能够对应G’中的 2 m 2^m 2m个产生式;若包含 k 个可致空符号,则该产生式能够对应 G’ 中的 2 k − 1 2^k -1 2k1个产生式;

(3) G’ 中不包含 G 的所有 ε \varepsilon ε 产生式 A → ε A\rightarrow \varepsilon Aε

##消去UNIT产生式

UNIT产生式:形如 A → B A\rightarrow B AB的产生式,其中A,B均为非终结符

UNIT偶对:对于 CFG G =(V,T,P,S), A , B ∈ V A,B \in V A,BV,称(A,B)是UNIT偶对,当且仅当 A ⇒ ∗ B A\Rightarrow^* B AB,且该推导过程仅使用过 UNIT 产生式

对于 CFG G =(V,T,P,S),可通过下列归纳步骤计算所有 UNIT 偶对的集合

基础:对于任何 A ∈ V A\in V AV,(A,A) 是一个 UNIT 偶对;

归纳:如果(A,B)是一个 UNIT 偶对,及 B → C B\rightarrow C BC是产生式( C ∈ V C\in V CV),则 (A,C) 是一个 UNIT 偶对

设 CFG G = (V,T,P,S),通过下列步骤消去 G 中的 UNIT 产生式,由此得到 CFG G’ =(V,T,P’,S)

(1)计算 G 的 UNIT 偶对集合;

(2)对每个 UNIT 偶对 (A,B),在 G’ 中加入产生式 A → α A\rightarrow \alpha Aα,其中 B → α B\rightarrow \alpha Bα为一个非 UNIT 产生式;

(3)G’ 中包含 G 的所有非 UNIT 产生式

##消去无用符号

有用符号:对于CFG G=(V,T,P,S),称符号 X ∈ V ∪ T X\in V\cup T XVT是有用的,当且仅当 $S\Rightarrow^* \alpha X\beta\Rightarrow^w , 其 中 ,其中 w\in T^ , , \alpha,\beta\in (V\cup T)^*$

无用符号:非有用符号

生成符号:X是生成符号,当且仅当存在 w ∈ T ∗ w\in T^* wT,满足 X ⇒ ∗ w X\Rightarrow^* w Xw

可达符号:称符号X是可达符号,当且仅当存在 α , β ∈ ( V ∪ T ) ∗ \alpha,\beta \in(V\cup T)^* α,β(VT),满足 S ⇒ ∗ α X β S\Rightarrow^* \alpha X\beta SαXβ

有用符号一定是生成符号和可达符号,但是反之不然

例如, S → A B ∣ a S\rightarrow AB|a SABa B → b B\rightarrow b Bb

定理:消去所有非生成符号,在新的CFG基础上再消去所有非可达符号,剩余符号都是有用符号,次序是敏感的

结论:设CFG G的语言至少包含一个非 ε \varepsilon ε 的字符串,通过上述步骤从 G 构造 G’,则有 L ( G ′ ) = L ( G ) − { ε } L(G')= L(G) - \{\varepsilon\} L(G)=L(G){ε}

##Chomsky范式

Chomsky 范式 CNF(Chomsky Normal Form):任何不含 ε \varepsilon ε 的非空 CFL(上下文无关语言) 都存在一个 CFG G,其产生式具有如下两种简单形式之一,并且 G 中不包含无用符号

(1) A → B C A\rightarrow BC ABC,其中 A,B,C 都是非终结符;

(2) A → a A \rightarrow a Aa ,其中 A 是非终结符,a 是终结符;

这样的文法形式称为Chomsky 范式

如何获得Chomsky范式

(1)首先消去 ε \varepsilon ε产生式,UNIT产生式,无用符号

(2)如果某一终结符 a 出现于某些右部长度大于 1 的产生式中,则引入一个新的非终结符,如A,将这些产生式中的 a 替换为 A,并增加新的产生式 A → a A\rightarrow a Aa

(3)将右部长度大于2的产生式采用级连 (cascade)的方法转变为只包含两个非终结符,如对于产生式 A → B 1 B 2 . . . B k A\rightarrow B_1 B_2 ...B_k AB1B2...Bk,其中k>2,引入k-2个新的非终结符 C 1 , C 2 , . . . , C k − 2 C_1,C_2,...,C_{k-2} C1,C2,...,Ck2,则将原产生式替换为以下一组产生式 A → B 1 C 1 A\rightarrow B_1 C_1 AB1C1 C 1 → B 2 C 2 C_1\rightarrow B_2 C_2 C1B2C2,…, C k − 2 → B k − 1 B k C_{k-2}\rightarrow B_{k-1} B_k Ck2Bk1Bk

上下文无关语言的性质与运算

Pumping引理

pumping特性:考虑不包含 ε \varepsilon ε的非空上下文无关文法,设 C F G      G ( V , T , P , S ) CFG\;\;G(V,T,P,S) CFGG(V,T,P,S)满足 C N F CNF CNF的文法,设 ∣ V ∣ = m |V|=m V=m,以及 n = 2 m n=2^m n=2m,对于 ∣ z ∣ ≥ n |z|\geq n zn,考虑语法分析树上的最长链,该最长链的长度大于m(语法分析树为二叉树),则一定存在重复非终结符,则设 z = u v x y z z=uvxyz z=uvxyz,其中 v x y vxy vxy表示上面的非终结符的子树, x x x为下面的非终结符的子树,则有 u v k x y k z ∈ L ( G ) uv^kxy^kz\in L(G) uvkxykzL(G) $k\geq 0 $ ∣ v y ∣ ≥ 1 |vy|\geq 1 vy1

pumping定理:设L是上下文无关语言,则存在正常数n,使得任何长度大于等于n的字符串 z ∈ L z\in L zL,都可以分成五部分 z = u v x y z z=uvxyz z=uvxyz,满足 v x ≠ ε vx\not=\varepsilon vx=ε ∣ v w x ∣ ≤ n |vwx|\leq n vwxn ∀ k ≥ 0      u v k x y k z ∈ L \forall k\geq 0 \;\;uv^kxy^kz\in L k0uvkxykzL

pumping引理不是上下文无关语言的充分条件

反例: L = { a i b j c k d l ∣ i , j , k , l ≥ 0 , i f    i ≠ 0    t h e n    j = k = l } L=\{a^ib^jc^kd^l|i,j,k,l\geq 0,if\; i\not=0\; then\; j=k=l\} L={aibjckdli,j,k,l0,ifi=0thenj=k=l}

CYK算法判定上下文无关文法是否包含特定字符串 O ( n 3 ) O(n^3) O(n3)

上下文无关语言的封闭运算

上下文无关语言的替换:设 Σ \Sigma Σ为字母表, L ′ L' L为上下文无关语言集合,映射 s : Σ → L ′ s:\Sigma\rightarrow L' s:ΣL称为 Σ \Sigma Σ上的一个替换,设 L L L Σ \Sigma Σ上的上下文无关语言,则 s ( L ) s(L) s(L)也为上下文无关语言

上下文无关语言的并:若L和M是CFL,则 L ∪ M L\cup M LM也是CFL

上下文无关语言的闭包:若L是CFL,则 L ∗ L^* L L + L^+ L+也是CFL

上下文无关语言的连接:若L和M为CFL,则LM也是CFL

上下文无关语言的同态:设映射 h : Σ → T ∗ h:\Sigma \rightarrow T^* h:ΣT,则对 w = a 1 a 2 … a n ∈ Σ ∗ w=a_1 a_2 …a_n\in \Sigma^* w=a1a2anΣ,定义 h ( w ) = h ( a 1 ) h ( a 2 ) … h ( a n ) h(w) = h(a_1 ) h(a_2 ) … h(a_n ) h(w)=h(a1)h(a2)h(an),称为串 w 的一个同态,对语言 L ⊆ Σ ∗ L\subseteq\Sigma^* LΣ,定义 L 的同态 h ( L ) = { h ( w ) ∣ w ∈ L } h(L) = \{ h(w) | w\in L \} h(L)={h(w)wL},若 L 为上下文无关语言, h : Σ → T ∗ h:\Sigma \rightarrow T^* h:ΣT,则 h ( L ) h(L) h(L)也是上下文无关语言

上下文无关语言的反向:若L为CFL,则 L R L^R LR也是CFL

上下文无关语言的交、补不一定是上下文无关语言

反例: L = { 0 n 1 n 2 i ∣ n , i > 0 } L=\{0^n1^n2^i|n,i>0\} L={0n1n2in,i>0} M = { 0 i 1 n 2 n ∣ n , i > 0 } M=\{0^i1^n2^n|n,i>0\} M={0i1n2nn,i>0}

上下文无关语言与正规语言的交:若L是CFL,R是正规语言,则 L ∩ R L\cap R LR是CFL

上下文无关语言的反同态也为上下文无关语言

图灵机

图灵机:一个图灵机TM是一个七元组 M = ( Q , Σ , Γ , δ , q 0 , B , F ) M=(Q,\Sigma,\Gamma,\delta,q_0,B,F) M=(Q,Σ,Γ,δ,q0,B,F),分别表示有限状态集,有限输入符号集,有限带符号集,转移函数,开始状态,特殊带符(空白符),终态集合,转移函数为偏函数 δ : Q × Γ → Q × Γ × { L , R } \delta:Q\times\Gamma\rightarrow Q\times\Gamma\times\{L,R\} δ:Q×ΓQ×Γ×{L,R}

当前格局(ID):使用字符串 X 1 . . . X i − 1 q X i . . . X n X_1...X_{i-1}qX_i...X_n X1...Xi1qXi...Xn表示当前格局, q q q表示当前状态,当前带头正在扫描 X i X_i Xi,转移方式如下

1.设 δ ( q , X i ) = ( p , Y , L ) \delta(q,X_i)=(p,Y,L) δ(q,Xi)=(p,Y,L),则有 X 1 . . . X i − 1 q X i . . . X n ⊢ M X 1 . . . X i − 2 p X i − 1 Y X i + 1 . . . X n X_1...X_{i-1}qX_i...X_n\vdash_M X_1...X_{i-2}pX_{i-1}YX_{i+1}...X_n X1...Xi1qXi...XnMX1...Xi2pXi1YXi+1...Xn

2.设 δ ( q , X i ) = ( p , Y , R ) \delta(q,X_i)=(p,Y,R) δ(q,Xi)=(p,Y,R),则有 X 1 . . . X i − 1 q X i . . . X n ⊢ M X 1 . . . X i − 1 Y p X i + 1 . . . X n X_1...X_{i-1}qX_i...X_n\vdash_M X_1...X_{i-1}YpX_{i+1}...X_n X1...Xi1qXi...XnMX1...Xi1YpXi+1...Xn

递归可枚举语言:如果待判定的字符串属于该语言,不停地枚举总有一天能枚举到,图灵机可以接受的语言

递归语言:无论待判定的字符串是否属于该语言,不停地枚举总有一天能枚举判定出来,L语言可递归当且仅当存在图灵机M,使得L=L(M),且无论w是否属于L,M均可停机

语言L是递归语言当且仅当L和L的补集都是递归可枚举的

图灵机的停机:停机是指图灵机不存在下一个移动

可以被图灵机接受的字符串一定能停机,反之不然

Church-Turing论题:递归语言的问题是可判定的

k个带的图灵机可以用2k个道的图灵机来模拟

非确定图灵机语言接受能力与确定图灵机等价

双道的半无穷带图灵机模拟具有双向无穷带的基本图灵机

利用双栈pda模拟基本图灵机

具有一个计数器的计数器机语言接受能力相当于确定下推自动机,具有两个以上的相当于图灵机

对角语言:不是递归可枚举语言

通用语言:递归可枚举语言,但不是递归语言

图灵机的编码:图灵机 T = ( { q 1 , . . . q k } , { 0 , 1 } , { X 1 = 0 , X 2 = 1 , X 3 = B } , δ , q 1 , B , { q 2 } ) T=(\{q_1,...q_k\},\{0,1\},\{X_1=0,X_2=1,X_3=B\},\delta,q_1,B,\{q_2\}) T=({q1,...qk},{0,1},{X1=0,X2=1,X3=B},δ,q1,B,{q2})

D 1 = L D_1=L D1=L D 2 = R D_2=R D2=R,转移函数 δ ( q i , X j ) = ( q k , X l , D m ) \delta(q_i,X_j)=(q_k,X_l,D_m) δ(qi,Xj)=(qk,Xl,Dm)编码为 0 i 1 0 j 1 0 k 1 0 l 1 0 m 0^i10^j10^k10^l10^m 0i10j10k10l10m,规则之间使用 11 11 11分割

任意01字符串w编码为 1 w 1w 1w

在通用语言的定义中,将图灵机与输入串的偶对 ( M , w ) (M,w) (M,w)编码为 C 111 C ′ C111C' C111C C C C M M M的编码, C ′ C' C w w w的编码

对角语言:按照上述编码方法,每个图灵机对应一个整数i,即该图灵机的二进制编码 w i w_i wi是第i个01字符串,然而,不是每个整数j都能对应一个图灵机,不妨设第j个图灵机为不接受任何字符串的图灵机,定义对角语言 L d = { w i ∣ w i ∉ L ( M i ) } L_d=\{w_i|w_i\not\in L(M_i)\} Ld={wiwiL(Mi)}

结论: L d L_d Ld不是递归可枚举语言

证明:若存在某个图灵机M,满足 L ( M ) = L d L(M)=L_d L(M)=Ld,设M是第k个图灵机,则对于 w k w_k wk,是否有 w k ∈ L d w_k\in L_d wkLd,这是悖论

定理:递归语言的补集也是递归语言

定理:递归可枚举语言的补集不一定是递归可枚举语言,若是,则为递归语言

通用语言:用于编码(M,w)的所有01字符串集合,记为 L u L_u Lu,其中 ( M , w ) (M,w) (M,w)满足 w ∈ L ( M ) w\in L(M) wL(M)

通用图灵机:构造图灵机U,使得 L u = L ( U ) L_u=L(U) Lu=L(U),称U为通用图灵机

定理:通用语言 L u L_u Lu为递归可枚举,但非递归

推论:通用语言 L u L_u Lu的补不是递归可枚举的

#问题与语言

问题与语言:设L是字母表上一个语言,则与L对应的问题为“任给一个串w,判断 w ∈ L w\in L wL是否成立”

通用语言对应问题:任给图灵机M和输入串w,判定w是否被M接受

图灵机停机问题对应语言: L H { C 111 C ′ ∣ 对 于 输 入 串 C ′ , 图 灵 机 C 将 停 机 } L_H\{C111C'|对于输入串C',图灵机C将停机\} LH{C111CCC}

问题的判定:如果一个问题对应的语言是递归的,则称该问题是可判定的,否则是不可判定的,若为递归可枚举,则是部分可判定的

问题的归约:如果可以找到一个算法将P1的实例转化为P2的实例,并且两种解答相同,则称两问题可以互相归约,两问题可判定性相同

图灵机停机可以归约到通用语言,部分可判定;图灵机是否非空问题部分可判定;图灵机是否为空对应语言不是递归可枚举的

Rice定理:有关递归可枚举语言的任何非平凡性质都是不可判定的

设L为所有递归可枚举语言的集合,关于递归可枚举语言的性质表示为 P ⊆ L P\subseteq L PL,若 P P P不为$\varnothing 或 或 L$,则P是非平凡的性质

图灵机的时间复杂度:如果对于任何长度为n的输入串w,图灵机M可以在最多 T ( n ) T(n) T(n)个移动步停机,则称图灵机M的时间复杂度是 T ( n ) T(n) T(n)

非确定图灵机:任何一个转移序列都是 T ( n ) T(n) T(n)步停机

P问题:对应一个时间复杂度为 T ( n ) T(n) T(n)的图灵机

NP问题:对应一个时间复杂度为 T ( n ) T(n) T(n)的非确定图灵机

NPC问题:P是NP问题,且对于任一NP问题P’,P’可以多项式时间归约到P,则P是NPC问题

结论:若P是NPC问题,则P’也是;对于某个NPC问题可以证明是P,则NP=P

NPH问题:可以证明问题P满足NPC问题的条件2,但不能证明满足条件1

NPC问题举例:布尔表达式可满足性(SAT),CSAT,3SAT,独立集,顶点覆盖,有向哈密顿回路问题,无向哈密顿回路问题,旅行商问题

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值