形式语言与自动机

绪论

字母表

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

集合:常用Σ\Sigma表示

字符串

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

空串:常用ε\varepsilon表示

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

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

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

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

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

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

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

语言

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

语言的连接:LM={w1w2w1Lw2M}LM=\{w_1w_2|w_1\in L\wedge w_2\in M\}

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

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

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

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

图灵机及其语言

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

归纳证明法

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

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

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

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

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

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

则接受该语言的文法为S01S\rightarrow01S0S1S\rightarrow 0S1

四个基本要素:终结符集合TT,非终结符集合VV,开始符号SS,产生式集合PP

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

对于文法:EEOEE\rightarrow EOEE(E)E\rightarrow (E)EvE\rightarrow vEdE\rightarrow dO+O\rightarrow +OO\rightarrow *

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

缩记方式:EEOE(E)vdE\rightarrow EOE|(E)|v|d

归约与推导

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

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

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

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

最右推导:

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

SlmαS\xrightarrow[lm]{*}\alpha,称α\alpha是一个左句型

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

上下文无关语言

CFG    G=(V,T,P,S)CFG\;\;G=(V,T,P,S),定义GG的语言为L(G)={wwTSGw}L(G)=\{w|w\in T^*\wedge S\xrightarrow[G]{*} w\}

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

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

一般步骤:if  wG  then  wL(G)if \;w\in G\;then\;w\in L(G)if  wL(G)  then  wLif\;w\in L(G)\;then\;w\in L

文法与语言的Chomsky分类方法

文法: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不得出现在任何产生式右侧,上下文有关文法,相当于线性有界自动机

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

3型文法:产生式形如AaBA\rightarrow aBAaA\rightarrow a,正规文法,有限状态自动机

语法分析树

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

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

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

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

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

文法和语言中的二义性

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

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

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

消除二义性的方式:

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

左结合(左算符优先)

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

正规表达式与正规语言

正规表达式

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

LM={wwLwM}L\cup M=\{w|w\in L\vee w\in M\}

LM={w1w2w1Lw2M}L\cdot M=\{w_1w_2|w_1\in L\wedge w_2\in M\}

L=i0LiL^*=\cup_{i\geq 0}L^i

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

基础:ε,R\varepsilon,\varnothing \in R aΣaRa\in \Sigma\Rightarrow a\in R LR\forall 变量 L \in R

归纳:ERFRE+FRE\in R\wedge F\in R\Rightarrow E+F\in RERFREFRE\in R\wedge F\in R\Rightarrow EF\in RERERE\in R\Rightarrow E^*\in RER(E)RE\in R\Rightarrow (E)\in R

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

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

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

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

派生运算符:L+=LLL^+=LL^*L?=ε+LL?=\varepsilon+LLn=LLn1L^n=LL^{n-1}

正规语言

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

代数定律:

交换律和结合律

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

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

分配律

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

与闭包相关的定律

代数定律具体化

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

有限状态自动机

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

确定有限状态自动机

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

其中,δ:Q×ΣQ\delta:Q\times \Sigma\rightarrow Qq0Qq_0\in QFQF\subseteq Q

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

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

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

非确定有限自动机

形式语言与自动机

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

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

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

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

NFA的语言:L(A)={wwΣ(δ(q0,w)F)}L(A)=\{w|w \in \Sigma^*\wedge(\delta'(q_0,w)\cap F\not=\varnothing)\}

DFA和NFA的等价性

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

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

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

QD={SSQN}Q_D=\{S|S\subseteq Q_N\}

SQD  aΣ\forall S\in Q_D\;a\in \SigmaδD(S,a)=qSδN(q,a)\delta_D(S,a)=\cup_{q\in S}\delta_N(q,a)

FD={SSQN(SFN)}F_D=\{S|S\subseteq Q_N\wedge (S\cap F_N\not=\varnothing)\}

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

形式语言与自动机

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

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

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

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

扩展转移函数:δ(q,w)=i=1kECLOSE(ri)\delta(q,w)=\cup_{i=1}^kECLOSE(r_i)

ε\varepsilon-NFA等价于DFA

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

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

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

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

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

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

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

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

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

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

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

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

形式语言与自动机

归纳:

​ 对E+F,构造为
形式语言与自动机

​ 对EF,构造为

形式语言与自动机

​ 对E*,构造为

形式语言与自动机

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

证明:

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

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

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

基础:

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

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

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

2.状态消去法

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

形式语言与自动机

步骤:

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

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

形式语言与自动机

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

形式语言与自动机

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

转换算法的复杂度

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

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

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

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

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

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

正规语言的性质与运算

Pumping引理

DFA    D=(Q,Σ,δ,q0,F)DFA\;\;D=(Q,\Sigma,\delta,q_0,F)Q=n|Q|=n,对于任一长度不小于n的字符串w=a1a2...amw=a_1a_2...a_m 其中mnm\geq n ,考察如下状态序列
p0=qQp1=δ(q,a1)...pm=δ(q,a1...am) \\p_0=q \in Q \\p_1=\delta'(q,a_1) \\... \\p_m=\delta'(q,a_1...a_m)
则Pigeonhole原理,存在i,ji,j0i<jn0\leq i<j\leq ns.t.pi=pjs.t.p_i=p_j

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

w=xyzw=xyz,其中x=a1...aix=a_1...a_iy=ai+1...ajy=a_{i+1}...a_{j}z=aj+1...amz=a_{j+1}...a_m,则对于任意的k,都有xykzL(D)xy^kz\in L(D)

pumping特性:设L是正规语言, 则存在常数n>0,使得任一长度不小于n的字符串wLw\in Lwn|w|\geq n, 都可以分成三个部分,即w=xyzw=xyz,且满足yεy\not=\varepsilonxyn|xy|\leq nk0,xykzL\forall k\geq 0,xy^kz\in L

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

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

考虑任意的n1n\geq 1,取w=0n1nw = 0^n1^n,任选满足条件w=xyzyεxynw=xyz\wedge y\not=\varepsilon\wedge|xy|\leq nxyzxyz
若取k=0k=0, 则有xykz=xz∉L01xy^kz = xz\not \in L_{01} (xzxz中0比1少)

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

a, b, c 串构成的语言L={aibjcki,j,k0,if  i=1  then  j=k}L = \{a^i b^j c^k |i,j,k \geq 0,if \;i=1 \;then \;j=k\}

正规语言的判定性质

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

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

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

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

​ 设R=R1R2R=R_1 R_2L(R)L(R)为空 iff L(R1)L(R_1)L(R2)L(R_2) 都为空

​ 设R=R1R=R_1^*L(R)L(R)非空

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

判定正规语言是否相等:

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

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

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

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

正规语言的封闭运算

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

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

正规语言的交:若LLMM为正规语言,则LML \cap M也是正规语言

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

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

证明:LM=LML-M=L\cap\overline{M}

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

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

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

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

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

正规语言的同态:

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

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

正规语言的反同态:

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

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

应用:

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

​ a, b, c 串构成的语言L={aibjcki,j,k0,if  i=1  then  j=k}L = \{a^i b^j c^k |i,j,k \geq 0,if \;i=1 \;then \;j=k\}

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

下推自动机

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

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

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

其中,q0Qq_0\in Q Z0ΓZ_0\in \Gamma FQF\subseteq Q δ:Q×(Σ{ε})×Γ2Q×Γ\delta:Q\times(\Sigma\cup\{\varepsilon\})\times \Gamma\rightarrow 2^{Q\times \Gamma^*}

两种定义

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

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

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

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

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

等价性证明:

PDA    PNPDA \;\;P_NL=N(PN)L=N(P_N),则存在PDA    PFPDA\;\;P_F,满足L=L(PF)L=L(P_F)

形式语言与自动机

PDA    PFPDA \;\;P_FL=L(PF)L=L(P_F),则存在PDA    PNPDA\;\;P_N,满足L=N(PN)L=N(P_N)

形式语言与自动机

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

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

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

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

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

证明:

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

归纳最左推导的步数n

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

归纳,设第一步使用产生式AX1X2...XmA\rightarrow X_1X_2...X_m,必有w=w1...wmw=w_1...w_m,因此
(q,w,A)(q,w1...wm,X1...Xm)(q,w2...wm,X2...Xm)...(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)
2.如果(q,w,A)(q,ε,ε)(q,w,A)\vdash^*(q,\varepsilon,\varepsilon),那么A能够最左推导出w

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

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

归纳,设第一步使用产生式AX1...XmA\rightarrow X_1...X_m,可将ww分为w=w1...wmw=w_1...w_m,满足(q,wi,Xi)(q,ε,ε)(q,w_i,X_i)\vdash^*(q,\varepsilon,\varepsilon),对于任意的XiX_i,都有XilmwiX_i\xrightarrow[*]{lm} w_i,因此,AX1...Xmw1...wm=wA\Rightarrow X_1...X_m\Rightarrow^* w_1...w_m=w

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

PDA    E=(Q,Σ,Γ,δ,q0,Z0)PDA \;\;E=(Q,\Sigma,\Gamma,\delta,q_0,Z_0),构造CFG    G=(V,Σ,P,S)CFG\;\;G=(V,\Sigma,P,S),其中V={S}{[pXq]p,qQXΓ}V=\{S\}\cup\{[pXq]|p,q\in Q\wedge X\in \Gamma\}

产生式集合P定义如下:

(1)对每一个pQp\in Q,G包含产生式S[q0Z0p]S\rightarrow [q_0Z_0p]

(2)若(q,X1...Xk)δ(p,a,X)(q,X_1...X_k)\in \delta(p,a,X),则包含产生式[pXpk]a[qX1p1]...[pk1Xkpk][pXp_k]\rightarrow a[qX_1p_1]...[p_{k-1}X_kp_k],其中aΣ  or  a=εa\in \Sigma \;or\;a=\varepsilonp0=qp_0=q

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

证明对q,pQq,p\in Q(q,w,X)(p,ε,ε)    iff    [qXp]w(q,w,X)\vdash^*(p,\varepsilon,\varepsilon)\;\;iff\;\;[qXp]\Rightarrow^*w

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

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

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

由归纳假设,得证

(2)归纳[qXp]w[qXp]\Rightarrow^* w的步数为n

确定下推自动机

定义:一个PDA    PPDA \;\;P是确定的PDAPDA,或称为DPDADPDA,当且仅当满足

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

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

结论:若LL为正规语言,则存在DPDA    PDPDA\;\; PL(P)=LL(P) = L

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

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

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

前缀性质:一个语言LL具有前缀性质,当且仅当不存在x,yLx,y\in Lxyx\not =y,且xprefix(y)x\in prefix(y)

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

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

定义:若上下文无关语言LL是某个DPDADPDA的语言,则称LL为一个确定的上下文无关语言

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

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

结论:固有二义的语言不是任何DPDADPDA的语言

结论:存在非固有二义的语言LL,不是任何DPDA    PDPDA \;\;P的语言

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

#CFG的简化与Chomsky范式

##消去空产生式

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

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

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

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

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

##消去UNIT产生式

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

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

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

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

归纳:如果(A,B)是一个 UNIT 偶对,及 BCB\rightarrow C是产生式(CVC\in V),则 (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,其中BαB\rightarrow \alpha为一个非 UNIT 产生式;

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

##消去无用符号

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

无用符号:非有用符号

生成符号:X是生成符号,当且仅当存在wTw\in T^*,满足XwX\Rightarrow^* w

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

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

例如,SABaS\rightarrow AB|a BbB\rightarrow b

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

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

##Chomsky范式

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

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

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

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

如何获得Chomsky范式

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

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

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

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

Pumping引理

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

pumping定理:设L是上下文无关语言,则存在正常数n,使得任何长度大于等于n的字符串zLz\in L,都可以分成五部分z=uvxyzz=uvxyz,满足vxεvx\not=\varepsilonvwxn|vwx|\leq nk0    uvkxykzL\forall k\geq 0 \;\;uv^kxy^kz\in L

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

反例:L={aibjckdli,j,k,l0,if  i0  then  j=k=l}L=\{a^ib^jc^kd^l|i,j,k,l\geq 0,if\; i\not=0\; then\; j=k=l\}

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

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

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

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

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

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

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

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

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

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

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

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

图灵机

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

当前格局(ID):使用字符串X1...Xi1qXi...XnX_1...X_{i-1}qX_i...X_n表示当前格局,qq表示当前状态,当前带头正在扫描XiX_i,转移方式如下

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

D1=LD_1=LD2=RD_2=R,转移函数δ(qi,Xj)=(qk,Xl,Dm)\delta(q_i,X_j)=(q_k,X_l,D_m)编码为0i10j10k10l10m0^i10^j10^k10^l10^m,规则之间使用1111分割

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

在通用语言的定义中,将图灵机与输入串的偶对(M,w)(M,w)编码为C111CC111C'CCMM的编码,CC'ww的编码

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

结论:LdL_d不是递归可枚举语言

证明:若存在某个图灵机M,满足L(M)=LdL(M)=L_d,设M是第k个图灵机,则对于wkw_k,是否有wkLdw_k\in L_d,这是悖论

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

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

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

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

定理:通用语言LuL_u为递归可枚举,但非递归

推论:通用语言LuL_u的补不是递归可枚举的

#问题与语言

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

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

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

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

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

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

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

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

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

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

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

NP问题:对应一个时间复杂度为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,独立集,顶点覆盖,有向哈密顿回路问题,无向哈密顿回路问题,旅行商问题