绪论
字母表
概念:形式符号的非空有限集合
集合:常用Σ表示
字符串
概念:字母表Σ上的一个字符串,为Σ中字符构成的有限序列
空串:常用ε表示
幂运算:设Σ为字母表,n为任意自然数,定义
(1)Σ0={ε}
(2)设x∈Σn−1,a∈Σ,则ax∈Σn
(3)Σn中元素只能由(1)(2)生成
字母表中可以包含空字符,所以Σi的元素的长度不一定为i
*
闭包:Σ∗=Σ0∪Σ1∪...
+
闭包:Σ+=Σ1∪Σ2∪...
语言
概念:设Σ为字母表,则任何集合L⊆Σ∗是字母表Σ上的一个语言
语言的连接:LM={w1w2∣w1∈L∧w2∈M}
语言的闭包:L∗=L0∪L1∪L2...
上下文无关语言与下推自动机
设Σ={0,1},L={0n1n∣n≥1}
下推自动机识别:维护一个栈,转移方向由栈顶和字符共同确定,每次转移识别一个字符并对栈进行修改
图灵机及其语言
设Σ={0,1,2},L={0n1n2n∣n≥1},则不存在任何自动机和下推自动机可以识别该语言,但是总存在一个图灵机可以识别
归纳证明法
1.基础:至少包含集合中一个元素
2.归纳:由已知元素生成新元素
3.极小性限制:集合中的元素只能由1、2生成
上下文无关文法与上下文无关语言
##上下文无关文法的基本概念
设∑={0,1},L={0n1n∣n≥1}
则接受该语言的文法为S→01,S→0S1
四个基本要素:终结符集合T,非终结符集合V,开始符号S,产生式集合P
一个上下文无关文法是一个四元组G=(V,T,P,S),其中V∩T=∅,S∈V,产生式规则形如A→α,α∈(V∪T)∗
对于文法:E→EOE ,E→(E) ,E→v ,E→d ,O→+ ,O→∗
G=({E,O},{(,),+,∗,v,d},P,E)
缩记方式:E→EOE∣(E)∣v∣d
归约与推导
推理字符串是否符合文法定义语言,归约是由字符串推出开始符号,推导是由初始符号推出字符串
计算机实现归约(CKY算法):动态规划,全枚举,由于E→(E)是三叉,时间复杂度较高
计算机实现推导(EARLY算法):维护两个栈,将规则推入栈中进行探索
最左推导:每一步替换最左边的非终结符
最右推导:
句型:设CFGG=(V,T,P,S),称α∈(V∪T)∗为G的一个句型,当且仅当S→∗α
若S∗lmα,称α是一个左句型
若句型α∈T∗,则称α为一个句子
上下文无关语言
设CFGG=(V,T,P,S),定义G的语言为L(G)={w∣w∈T∗∧S∗Gw}
上下文无关语言:由CFG生成的语言
证明给定语言L是某个文法G的语言
一般步骤:ifw∈Gthenw∈L(G);ifw∈L(G)thenw∈L
文法与语言的Chomsky分类方法
文法:G=(V,T,P,S)
0型文法:产生式形如α→β ,其中α中至少包含一个非终结符,相当于图灵机
1型文法:产生式形如α→β ,∣α∣≤∣β∣ ,当S→ε例外,且S不得出现在任何产生式右侧,上下文有关文法,相当于线性有界自动机
2型文法:产生式形如A→β ,其中A∈V,上下文无关文法,下推自动机
3型文法:产生式形如A→aB或A→a,正规文法,有限状态自动机
语法分析树
语法分析树:推导过程自上而下构成一棵树,满足以下条件
(1)每个内部节点由一个非终结符标记
(2)每个叶节点或由一个非终结符,或由一个终结符,或由ε标记,但是当为ε标记,为父节点唯一孩子
(3)若一个内部节点标记为A,孩子从左到右为X1...Xk,则A→X1...Xk为产生式
语法树的果实:叶节点从左到右连接起来
文法和语言中的二义性
存在句子对应至少两个语法分析树/最左推导的文法是有二义性的
上下文无关语言L的所有文法都是二义性的,则称L为固有二义性
例:L={anbncmdm∣n≥1,m≥1}∪{anbmcmdn∣n≥1,m≥1}
消除二义性的方式:
算符优先级联(将一种算符处理完再处理别的算符)
左结合(左算符优先)
最近嵌套匹配(消除悬垂else二义性)
正规表达式与正规语言
正规表达式
作用于正规表达式的三种运算:
L∪M={w∣w∈L∨w∈M}
L⋅M={w1w2∣w1∈L∧w2∈M}
L∗=∪i≥0Li
语法:设字母表Σ,正规表达式集合R
基础:ε,∅∈R a∈Σ⇒a∈R ∀变量L∈R
归纳:E∈R∧F∈R⇒E+F∈R;E∈R∧F∈R⇒EF∈R;E∈R⇒E∗∈R;E∈R⇒(E)∈R
语义:对每个不含变量的E∈R ,E的语言L(E) 递归定义如下
基础:L(ε)={ε};L(∅)=∅;a∈Σ⇒L(a)={a}
归纳:E∈R∧F∈R⇒L(E+F)=L(E)∪L(F) ;E∈R∧F∈R⇒L(EF)=L(E)L(F) ;E∈R⇒L(E∗)=(L(E))∗ ;L((E))=L(E)
算符优先级:()
>*
>·
>+
派生运算符:L+=LL∗;L?=ε+L;Ln=LLn−1
正规语言
对于字母表Σ上的语言R,若存在Σ上的正规表达式E,满足L(E)=R,则R是正规语言
代数定律:
交换律和结合律
零元:∅+L=L+∅=L∅L=L∅=∅
幺元:εL=Lε=L
分配律
等幂律:L+L=L
与闭包相关的定律
代数定律具体化
例:验证L+ML=(L+M)L是否成立,只需验证对于具体符号a+ba=(a+b)a是否成立,显然aa属于后者不属于前者
有限状态自动机
有限状态自动机:有限状态集,有限输入符号集,转移函数,一个开始状态,终态集合
确定有限状态自动机
确定有限状态自动机DFA是一个五元组A=(Q,Σ,δ,q0,F)
其中,δ:Q×Σ→Q,q0∈Q,F⊆Q
扩展转移函数,适合输入字符串:δ′:Q×Σ∗→Q
∀q∈Q,有δ′(q,ε)=q,若w=xa(x∈Σ∗,a∈Σ),则δ′(q,w)=δ(δ′(q,x),a)
DFA的语言:L(A)={w∣w∈Σ∗∧δ′(q0,w)∈F}
非确定有限自动机

其中,δ:Q×Σ→2Q
NFA接受输入的字符串:只要可以转移到结束节点就接受
扩展转移函数,适合输入字符串:δ′:Q×Σ∗→2Q
∀q∈Q,有δ′(q,ε)=q,若w=xa(x∈Σ∗,a∈Σ),假设δ′(q,x)={p1,...pk},则有δ′(q,w)=∪i=1kδ(pi,a)
NFA的语言:L(A)={w∣w∈Σ∗∧(δ′(q0,w)∩F=∅)}
DFA和NFA的等价性
定理:L是某个DFA的语言⇔L是某个NFA的语言
充分性:DFA是一种特殊的NFA
必要性:考虑DFA=(QD,Σ,δD,{q0},FD),其中
QD={S∣S⊆QN}
∀S∈QDa∈Σ,δD(S,a)=∪q∈SδN(q,a)
FD={S∣S⊆QN∧(S∩FN=∅)}
大多数情况,子集构造法得到的DFA状态数与NFA状态数规模相同,最坏时状态数为指数规模

反证法,假定图中NFA构造DFA状态数少于2n,考虑长度为n的01串
带空转移的非确定有限自动机
与非确定有限自动机的区别:δ:Q×Σ∪{ε}→2Q
ε-闭包:状态q的ε-闭包,记为ECLOSE(q),定义为从q经过所有的ε路径可以到达的所有状态
扩展转移函数:δ(q,w)=∪i=1kECLOSE(ri)
ε-NFA等价于DFA
##确定有限自动机的最小化
DFA上等价关系:对于∀p,q∈Q,有pRq⇔(∀w∈Σ∗)δ′(p,w)∈F↔δ′(q,w)∈F
定理:$\delta(r,a)=p ;;\delta(s,a)=q ,则p,q可区别\Rightarrow$r,s可区别
填表法:递归标记可区别状态偶对的过程
基础:p终态,q非终态,则p,q可区分
归纳:设p,q已标记为可区分,若δ(r,a)=pδ(s,a)=q,则将r,s标记为可区分
有限状态自动机最小化:删除所有从开始状态不可到达的状态及与其相关的边,使用填表法找到所有等价的状态偶对,根据等价块进行合并
有限状态自动机与正规表达式的关系
结论:有限自动机所表示的语言是正规语言
定理:若L是一个正规表达式R表示的语言,则存在一个ε-NFA E,满足L(E)=L®=L
证明:归纳构造过程(Thompson构造法)
基础:对εϕa,构造为

归纳:
对E+F,构造为

对EF,构造为

对E*,构造为

定理:L是某个DFA D的语言,则存在一个正规表达式R,满足L®=L(D)=L
证明:
1.路径迭代法(Kleene构造法)
设DFA D的状态集为{1,…n},初态为1,对所有1≤i,j≤n, 0≤k≤n ,迭代计算正规表达式Rij(k),其中w∈Rij(k)⇔ 从 i 到 j 存在一条标记为w的路径,且路径上除 i , j 外所有状态的编号均不大于 k
最后,将R1e(n)用加号相连,e为终态节点
基础:
**i != j:若不存在从 i 到 j的弧,则Rij(0)=ϕ;若仅存在一条从 i 到 j 的弧,且标记为 a ,则Rij(0)=a ;若存在多条从 i 到 j 的弧,且标记为a1,a2,…,am,Rij(0)=a1+a2+…+am **
i = j:若不存在从 i 到自身的圈,则Rij(0)=ε;若存在一个从 i 到自身的圈且标记为a ,Rij(0)=ε+a;存在多个从 i 到自身的圈,且标记为a1,a2,…,am ,则Rij(0)=ε+a1+...+am
归纳:Rij(k)=Rij(k−1)+Rik(k−1)(Rkk(k−1))∗Rkj(k−1)
2.状态消去法
思路:扩展自动机的概念,允许正规表达式作为转移弧的标记,这样,就有可能在消去某一中间状态时,保证自动机能够接受的字符串集合保持不变。在消去某一中间状态时,与其相关的转移弧也将同时消去,所造成的影响将通过修改从每一个前趋状态到每一个后继状态的转移弧标记来弥补

步骤:
(1)对每一终态q ,依次消去除 q 和初态 q0 之外的其它状态
(2)若q != q0,最终可得到一般形式如下状态自动机,该自动机对应的正规表达式可表示为$ ( R+SU^T )*SU$

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

(4)最终的正规表达式为每一终态对应的正规表达式之和
转换算法的复杂度
从DFA构造NFA:O(∣Q∣)
从NFA构造DFA:O(∣Q∣22∣Q∣) ,实际上界为O(∣Q∣2s) s为DFA实际状态数
从DFA构造ε-NFA:O(∣Q∣)
从ε-NFA构造DFA:O(∣Q∣32∣Q∣),实际上界为O(∣Q∣3s) s为DFA实际状态数
路径迭代法/状态消去法:O(∣Q∣34∣Q∣)
正规表达式构造ε-NFA:O(n)
正规语言的性质与运算
Pumping引理
设DFAD=(Q,Σ,δ,q0,F),∣Q∣=n,对于任一长度不小于n的字符串w=a1a2...am 其中m≥n ,考察如下状态序列
p0=q∈Qp1=δ′(q,a1)...pm=δ′(q,a1...am)
则Pigeonhole原理,存在i,j,0≤i<j≤n,s.t.pi=pj
pumping特性:任一长度不小于状态数目的字符串所标记的路径上,必然出现重复的状态
令w=xyz,其中x=a1...ai,y=ai+1...aj,z=aj+1...am,则对于任意的k,都有xykz∈L(D)
pumping特性:设L是正规语言, 则存在常数n>0,使得任一长度不小于n的字符串w∈L,∣w∣≥n, 都可以分成三个部分,即w=xyz,且满足y=ε,∣xy∣≤n,∀k≥0,xykz∈L
应用:证明某个语言L不是正规语言
例:证明语言L={0k1k∣k≥0}不是正规语言
考虑任意的n≥1,取w=0n1n,任选满足条件w=xyz∧y=ε∧∣xy∣≤n的xyz
若取k=0, 则有xykz=xz∈L01 (xz中0比1少)
注意:Pumping引理不是正规语言的充分条件,考虑如下非正规语言
a, b, c 串构成的语言L={aibjck∣i,j,k≥0,ifi=1thenj=k}
正规语言的判定性质
判定DFA是否为空:测试从初态是否可达某一终态,先求所有可达状态的集合,若其中包含终态,则该正规语言非空,否则为空语言
判定正规表达式是否为空:
基础:L(∅)为空语言,而L(ε)和L(a)不是
归纳:
设R=R1+R2,L(R)为空 iff L(R1) 和 L(R2) 都为空
设R=R1R2,L(R)为空 iff L(R1) 或 L(R2) 都为空
设R=R1∗,L(R)非空
设R=(R1),L(R)为空 iff L(R1)
判定正规语言是否相等:
先将两个正规语言的表达形式都转化为 DFA ,问题转化为两个DFA 是否是等价的
适当重命名,使两个DFA没有重名的状态
将两个DFA 相并,构造一个新的DFA,原来的终态仍是终态,转移边不发生任何变化,取任何一个状态为初态
对新构造的DFA 运用填表算法,如果原来DFA的两个初态不可区别,则这两个正规语言相等,否则不相等
正规语言的封闭运算
正规语言的补:若 L 为Σ上的正规语言,则L=Σ∗–L也是正规语言
证明:设$DFA ;;A = (Q, \Sigma, \delta, q_0 , F ) $,使得 L(A)=L ,构造 DFAB=(Q,Σ,δ,q0,Q–F)
正规语言的交:若L和M为正规语言,则L∩M也是正规语言
证明:设DFAAL=(QL,Σ,δL,qL,FL)和DFAAM=(QM,Σ,δM,qM,FM) 的语言分别为L和M,构造DFAA=(QL×QM,Σ,δ,<qL,qM>,FL×FM),其中δ(<p,q>,a)=<δL(p,a),δM(q,a)>
正规语言的差:若L和M为正规语言,则L–M也是正规语言
证明:L−M=L∩M
正规语言的反向:若L为正规语言,则LR={wR∣w∈L}也是正规语言
证明:设有限自动机 A 的语言为L,即L(A)=L,通过以下步骤修改A的转移图,得到有限自动机B
将A的转移图中所有的弧反向
将A的初态作为B的唯一终态
增加一个新的状态p0作为B的初态,并从p0到A的所有终态增加一条ε-转移弧
正规语言的同态:
设映射h:Σ→T∗,则对w=a1a2…an∈Σ∗,定义h(w)=h(a1)h(a2)…h(an),称为串 w 的一个同态,对语言 L⊆Σ∗,定义 L 的同态 h(L)={h(w)∣w∈L}
若 L 为正规语言,h:Σ→T∗,则h(L)也是正规语言
正规语言的反同态:
对语言 L⊆Σ∗,定义 L 的反同态 h−1(L)={w∣w∈Σ∗∧h(w)∈S}
若 L 为正规语言,h:Σ→T∗,则h−1(L)也是正规语言
应用:
证明如下语言不是正则语言
a, b, c 串构成的语言L={aibjck∣i,j,k≥0,ifi=1thenj=k}
设h(a)=ε,h(b)=0,h(c)=1,则h(L’)={0n1n∣n≥0}是正规语言,矛盾
下推自动机
下推自动机:带有一个堆栈的有限状态自动机
一个下推自动机PDA是一个七元组P=(Q,Σ,Γ,δ,q0,Z0,F)
分别为:有限状态集,有限输入符号集,有限堆栈符号集,转移函数,开始状态,开始堆栈符号,终态集合
其中,q0∈Q Z0∈Γ F⊆Q δ:Q×(Σ∪{ε})×Γ→2Q×Γ∗
两种定义
用ID表示当前格局,PDA的当前格局用三元组(q,w,γ)表示,其中q为当前状态,w为剩余的输入串,γ为当前栈中的内容
ID推导关系⊢:(q,aw,Xβ)⊢(p,w,αβ)iff(p,α)∈δ(q,a,X)
类似定义ID推导关系的自反传递闭包⊢∗
空栈接受定义:N(P)={w∣(q0,w,Z0)⊢∗(q,ε,ε)}
终态接受定义:L(P)={w∣(q0,w,Z0)⊢∗(q,ε,α)}
等价性证明:
设PDAPN,L=N(PN),则存在PDAPF,满足L=L(PF)

设PDAPF,L=L(PF),则存在PDAPN,满足L=N(PN)

##从上下文无关文法构造等价的下推自动机
设CFGG={V,T,P,S},构造空栈接受方式PDAE=({q},T,V∪T,δ,q,S),转移函数定义为
(1)对每一个A∈V,δ(q,ε,A)={(q,β)∣A→β∈P}
(2)对每一个a∈T,δ(q,a,a)={(q,ε)}
结论:依据如上构造方法,有N(E)=L(G)
证明:
1.如果A的最左推导可以推出w,那么(q,w,A)⊢∗(q,ε,ε)
归纳最左推导的步数n
n=1时,A→w必为产生式,(q,w,A)⊢(q,w,w)⊢∗(q,ε,ε)
归纳,设第一步使用产生式A→X1X2...Xm,必有w=w1...wm,因此
(q,w,A)⊢(q,w1...wm,X1...Xm)⊢∗(q,w2...wm,X2...Xm)⊢∗...⊢∗(q,ε,ε)
2.如果(q,w,A)⊢∗(q,ε,ε),那么A能够最左推导出w
归纳(q,w,A)⊢∗(q,ε,ε)的步数n
n=1时,必有w=ε,且A→ε为G的产生式,得证
归纳,设第一步使用产生式A→X1...Xm,可将w分为w=w1...wm,满足(q,wi,Xi)⊢∗(q,ε,ε),对于任意的Xi,都有Xilm∗wi,因此,A⇒X1...Xm⇒∗w1...wm=w
从下推自动机构造等价的上下文无关文法
设PDAE=(Q,Σ,Γ,δ,q0,Z0),构造CFGG=(V,Σ,P,S),其中V={S}∪{[pXq]∣p,q∈Q∧X∈Γ}
产生式集合P定义如下:
(1)对每一个p∈Q,G包含产生式S→[q0Z0p]
(2)若(q,X1...Xk)∈δ(p,a,X),则包含产生式[pXpk]→a[qX1p1]...[pk−1Xkpk],其中a∈Σora=ε,p0=q
结论:依据上述构造方法,有N(E)=L(G)
证明对q,p∈Q,(q,w,X)⊢∗(p,ε,ε)iff[qXp]⇒∗w
(1)归纳(q,w,X)⊢∗(p,ε,ε)的步数为n
n=1时,w=ε或单个符号,且(p,ε)∈δ(q,w,X),由构造过程,[qXp]→w为一个产生式
归纳,设第一步推导为(q,w,X)⊢(p0,x,X1...Xk),其中w=ax,a=ε或单个符号,且(p0,X1...Xk)∈δ(q,a,X),可以将x分为x=x1...xk,存在p1..pk−1,满足(pi−1,xi,Xi)⊢∗(pi,ε,ε),(pk−1,xk,Xk)⊢∗(p,ε,ε)
由归纳假设,得证
(2)归纳[qXp]⇒∗w的步数为n
确定下推自动机
定义:一个PDAP是确定的PDA,或称为DPDA,当且仅当满足
·对于a∈Σ或a=ε,X∈Γ,δ(q,a,X)最多包含一个元素
·对于a∈Σ,若δ(q,a,X)=∅,则δ(q,ε,X)=∅
结论:若L为正规语言,则存在DPDAP,L(P)=L
思路:转化为一个栈不变的DFA,即δP(q,a,Z0)={(p,Z0)}iffδA(q,a)=p
结论:DPDA的计算能力强于有限自动机
例如语言L={wcwR∣w∈(0+1)∗}
前缀性质:一个语言L具有前缀性质,当且仅当不存在x,y∈L,x=y,且x∈prefix(y)
结论:一个语言L是某个空栈接受的DPDAP的语言,当且仅当L具有前缀性质,且L是某个DPDAP′的语言
结论:某些上下文无关语言不是任何DPDA的语言,例如L={wwR∣w∈(0,1)∗}
定义:若上下文无关语言L是某个DPDA的语言,则称L为一个确定的上下文无关语言
结论:一个语言L是某个空栈接受的DPDAP的语言,即L=N(P),则L存在无二义文法
结论:一个语言L是某个DPDAP的语言,即L=L(P),则L存在一个无二义文法
结论:固有二义的语言不是任何DPDA的语言
结论:存在非固有二义的语言L,不是任何DPDAP的语言
例如,L={wwR∣w∈(0+1)∗}
#CFG的简化与Chomsky范式
##消去空产生式
可致空符号:对于 CFG G =(V,T,P,S),称符号A∈V是可致空的,当且仅当A⇒∗ε
设 CFG G =(V,T,P,S), 通过下列步骤可以得到消去 G中ε产生式及其影响,由此得到 CFG G’ =(V,T,P’,S)
(1) 计算 G 的可致空符号集合;
(2) 对每一产生式A→A1A2...Ak,在G’中对应有一组产生式,每一个可致空符号都可能出现或不出现;若包含m<k个可致空符号,则该产生式能够对应G’中的2m个产生式;若包含 k 个可致空符号,则该产生式能够对应 G’ 中的 2k−1个产生式;
(3) G’ 中不包含 G 的所有ε 产生式A→ε
##消去UNIT产生式
UNIT产生式:形如A→B的产生式,其中A,B均为非终结符
UNIT偶对:对于 CFG G =(V,T,P,S),A,B∈V,称(A,B)是UNIT偶对,当且仅当A⇒∗B,且该推导过程仅使用过 UNIT 产生式
对于 CFG G =(V,T,P,S),可通过下列归纳步骤计算所有 UNIT 偶对的集合
基础:对于任何A∈V,(A,A) 是一个 UNIT 偶对;
归纳:如果(A,B)是一个 UNIT 偶对,及 B→C是产生式(C∈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→α,其中B→α为一个非 UNIT 产生式;
(3)G’ 中包含 G 的所有非 UNIT 产生式
##消去无用符号
有用符号:对于CFG G=(V,T,P,S),称符号X∈V∪T是有用的,当且仅当 $S\Rightarrow^* \alpha X\beta\Rightarrow^w ,其中w\in T^,\alpha,\beta\in (V\cup T)^*$
无用符号:非有用符号
生成符号:X是生成符号,当且仅当存在w∈T∗,满足X⇒∗w
可达符号:称符号X是可达符号,当且仅当存在α,β∈(V∪T)∗,满足S⇒∗αXβ
有用符号一定是生成符号和可达符号,但是反之不然
例如,S→AB∣a B→b
定理:消去所有非生成符号,在新的CFG基础上再消去所有非可达符号,剩余符号都是有用符号,次序是敏感的
结论:设CFG G的语言至少包含一个非 ε 的字符串,通过上述步骤从 G 构造 G’,则有L(G′)=L(G)−{ε}
##Chomsky范式
Chomsky 范式 CNF(Chomsky Normal Form):任何不含ε 的非空 CFL(上下文无关语言) 都存在一个 CFG G,其产生式具有如下两种简单形式之一,并且 G 中不包含无用符号
(1) A→BC,其中 A,B,C 都是非终结符;
(2) A→a ,其中 A 是非终结符,a 是终结符;
这样的文法形式称为Chomsky 范式
如何获得Chomsky范式
(1)首先消去ε产生式,UNIT产生式,无用符号
(2)如果某一终结符 a 出现于某些右部长度大于 1 的产生式中,则引入一个新的非终结符,如A,将这些产生式中的 a 替换为 A,并增加新的产生式 A→a
(3)将右部长度大于2的产生式采用级连 (cascade)的方法转变为只包含两个非终结符,如对于产生式A→B1B2...Bk,其中k>2,引入k-2个新的非终结符C1,C2,...,Ck−2,则将原产生式替换为以下一组产生式A→B1C1,C1→B2C2,…,Ck−2→Bk−1Bk
上下文无关语言的性质与运算
Pumping引理
pumping特性:考虑不包含ε的非空上下文无关文法,设CFGG(V,T,P,S)满足CNF的文法,设∣V∣=m,以及n=2m,对于∣z∣≥n,考虑语法分析树上的最长链,该最长链的长度大于m(语法分析树为二叉树),则一定存在重复非终结符,则设z=uvxyz,其中vxy表示上面的非终结符的子树,x为下面的非终结符的子树,则有uvkxykz∈L(G) $k\geq 0 $ ∣vy∣≥1
pumping定理:设L是上下文无关语言,则存在正常数n,使得任何长度大于等于n的字符串z∈L,都可以分成五部分z=uvxyz,满足vx=ε ,∣vwx∣≤n,∀k≥0uvkxykz∈L
pumping引理不是上下文无关语言的充分条件
反例:L={aibjckdl∣i,j,k,l≥0,ifi=0thenj=k=l}
CYK算法判定上下文无关文法是否包含特定字符串 O(n3)
上下文无关语言的封闭运算
上下文无关语言的替换:设Σ为字母表,L′为上下文无关语言集合,映射s:Σ→L′称为Σ上的一个替换,设L为Σ上的上下文无关语言,则s(L)也为上下文无关语言
上下文无关语言的并:若L和M是CFL,则L∪M也是CFL
上下文无关语言的闭包:若L是CFL,则L∗和L+也是CFL
上下文无关语言的连接:若L和M为CFL,则LM也是CFL
上下文无关语言的同态:设映射h:Σ→T∗,则对w=a1a2…an∈Σ∗,定义h(w)=h(a1)h(a2)…h(an),称为串 w 的一个同态,对语言 L⊆Σ∗,定义 L 的同态 h(L)={h(w)∣w∈L},若 L 为上下文无关语言,h:Σ→T∗,则h(L)也是上下文无关语言
上下文无关语言的反向:若L为CFL,则LR也是CFL
上下文无关语言的交、补不一定是上下文无关语言
反例:L={0n1n2i∣n,i>0} M={0i1n2n∣n,i>0}
上下文无关语言与正规语言的交:若L是CFL,R是正规语言,则L∩R是CFL
上下文无关语言的反同态也为上下文无关语言
图灵机
图灵机:一个图灵机TM是一个七元组M=(Q,Σ,Γ,δ,q0,B,F),分别表示有限状态集,有限输入符号集,有限带符号集,转移函数,开始状态,特殊带符(空白符),终态集合,转移函数为偏函数δ:Q×Γ→Q×Γ×{L,R}
当前格局(ID):使用字符串X1...Xi−1qXi...Xn表示当前格局,q表示当前状态,当前带头正在扫描Xi,转移方式如下
1.设δ(q,Xi)=(p,Y,L),则有X1...Xi−1qXi...Xn⊢MX1...Xi−2pXi−1YXi+1...Xn
2.设δ(q,Xi)=(p,Y,R),则有X1...Xi−1qXi...Xn⊢MX1...Xi−1YpXi+1...Xn
递归可枚举语言:如果待判定的字符串属于该语言,不停地枚举总有一天能枚举到,图灵机可以接受的语言
递归语言:无论待判定的字符串是否属于该语言,不停地枚举总有一天能枚举判定出来,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})
设D1=L,D2=R,转移函数δ(qi,Xj)=(qk,Xl,Dm)编码为0i10j10k10l10m,规则之间使用11分割
任意01字符串w编码为1w
在通用语言的定义中,将图灵机与输入串的偶对(M,w)编码为C111C′,C为M的编码,C′为w的编码
对角语言:按照上述编码方法,每个图灵机对应一个整数i,即该图灵机的二进制编码wi是第i个01字符串,然而,不是每个整数j都能对应一个图灵机,不妨设第j个图灵机为不接受任何字符串的图灵机,定义对角语言Ld={wi∣wi∈L(Mi)}
结论:Ld不是递归可枚举语言
证明:若存在某个图灵机M,满足L(M)=Ld,设M是第k个图灵机,则对于wk,是否有wk∈Ld,这是悖论
定理:递归语言的补集也是递归语言
定理:递归可枚举语言的补集不一定是递归可枚举语言,若是,则为递归语言
通用语言:用于编码(M,w)的所有01字符串集合,记为Lu,其中(M,w)满足w∈L(M)
通用图灵机:构造图灵机U,使得Lu=L(U),称U为通用图灵机
定理:通用语言Lu为递归可枚举,但非递归
推论:通用语言Lu的补不是递归可枚举的
#问题与语言
问题与语言:设L是字母表上一个语言,则与L对应的问题为“任给一个串w,判断w∈L是否成立”
通用语言对应问题:任给图灵机M和输入串w,判定w是否被M接受
图灵机停机问题对应语言:LH{C111C′∣对于输入串C′,图灵机C将停机}
问题的判定:如果一个问题对应的语言是递归的,则称该问题是可判定的,否则是不可判定的,若为递归可枚举,则是部分可判定的
问题的归约:如果可以找到一个算法将P1的实例转化为P2的实例,并且两种解答相同,则称两问题可以互相归约,两问题可判定性相同
图灵机停机可以归约到通用语言,部分可判定;图灵机是否非空问题部分可判定;图灵机是否为空对应语言不是递归可枚举的
Rice定理:有关递归可枚举语言的任何非平凡性质都是不可判定的
设L为所有递归可枚举语言的集合,关于递归可枚举语言的性质表示为P⊆L,若P不为$\varnothing 或L$,则P是非平凡的性质
图灵机的时间复杂度:如果对于任何长度为n的输入串w,图灵机M可以在最多T(n)个移动步停机,则称图灵机M的时间复杂度是T(n)
非确定图灵机:任何一个转移序列都是T(n)步停机
P问题:对应一个时间复杂度为T(n)的图灵机
NP问题:对应一个时间复杂度为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,独立集,顶点覆盖,有向哈密顿回路问题,无向哈密顿回路问题,旅行商问题